You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

833 lines
34 KiB

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gaotao.modules.boxManage.dao.BoxForNotificationMapper">
<select id="searchSoReceiveBoxesData" resultType="SoReceiveBoxesData">
SELECT
s.id,
s.site,
s.WareHouseID as wareHouseID,
s.box_no as boxNo,
s.order_no as orderNo,
s.status,
s.rolls_qty as rollsQty,
s.box_type as boxType,
s.c_in_stock_flag as cInStockFlag,
s.created_date as createdDate,
s.created_by as createdBy,
s.update_date as updateDate,
s.update_by as updateBy,
s.version,
w.WareHouseName as wareHouseName,
s.bu_no,
T.box_count as boxCount,
T.roll_count as rollCount,
T.rollsCount as rollsCount
from so_receive_boxes s with(nolock)
left join warehouse w with(nolock) on s.WareHouseID = w.WareHouseID and s.site = w.site and s.bu_no = w.bu_no
left JOIN (
select
a.site,
a.bu_no,
a.order_no,
A.box_no,
COUNT(DISTINCT a.box_no) AS box_count, --箱标签张数
COUNT(DISTINCT b.final_roll_no) AS roll_count, --卷标签张数
ISNULL(SUM(roll_qty),0) AS rollsCount --物料总数
from so_receive_boxes a with(nolock)
LEFT join so_receive_box_rolls b with(nolock) on a.site = b.site and a.bu_no = b.bu_no and a.box_no = b.box_no
WHERE a.SITE = #{site} AND a.bu_no = #{buNo} and a.order_no = #{orderNo}
group by a.site, a.bu_no, a.order_no,A.box_no) T ON S.site = T.site AND S.bu_no = T.bu_no AND S.order_no = T.order_no AND T.box_no = S.box_no
<where>
s.site = #{site} and s.bu_no = #{buNo}
<if test="orderNo != null and orderNo != ''">
and s.order_no = #{orderNo}
</if>
<if test="boxType != null and boxType != ''">
and s.box_type = #{boxType}
</if>
</where>
</select>
<insert id="newSoReceiveBoxesData" >
insert into so_receive_boxes
(site,box_no,order_no,[status],rolls_qty,box_type,c_in_stock_flag,created_date,created_by,
version,WareHouseID,bu_no) values
(#{site},#{boxNo},#{orderNo},#{status},#{rollsQty},#{boxType},'Y',GetDate(),#{createdBy},
0,#{wareHouseID},#{buNo})
</insert>
<!-- 查询指定订单号下已有的所有箱号,用于断号取号 -->
<select id="getExistingBoxNosByOrderNo" resultType="java.lang.String">
SELECT box_no
FROM so_receive_boxes
WHERE site = #{site}
AND bu_no = #{buNo}
AND order_no = #{orderNo}
ORDER BY box_no
</select>
<!-- 查询以指定销售订单号为前缀的所有箱号,用于断号取号 -->
<select id="getExistingBoxNosBySaleOrderNo" resultType="java.lang.String">
SELECT box_no
FROM so_receive_boxes
WHERE site = #{site}
AND bu_no = #{buNo}
AND box_no LIKE #{saleOrderNo} + '%'
ORDER BY box_no
</select>
<select id="searchBoxRollDetail" resultType="SoReceiveBoxRollsData">
select ROW_NUMBER() OVER (ORDER BY a.received_date) orderId, a.id,a.site,a.bu_no,a.box_no,a.final_roll_no,a.roll_qty,a.received_by,a.received_date,a.WareHouseID,a.part_no
from so_receive_box_rolls a
where a.site=#{site} and a.box_no=#{boxNo} and a.bu_no= #{buNo}
order by a.received_date desc
</select>
<select id="searchBoxData" resultType="SoReceiveBoxesData">
select
a.id,
a.site,
a.bu_no,
a.box_no,
a.order_no,
a.status,
a.rolls_qty,
a.box_type,
a.c_in_stock_flag,
a.created_date,
a.created_by,
a.version,
a.WareHouseID,
b.std_packing_qty as stdPackingQty
from so_receive_boxes a
left join outbound_notification_detail b on a.site = b.site and a.bu_no = b.bu_no and a.order_no = b.order_no
where a.site= #{site} and a.box_no= #{boxNo} and a.bu_no= #{buNo}
</select>
<delete id="deleteSoReceiveBoxesData">
delete from so_receive_boxes
where id=#{id}
</delete>
<update id="updateBoxStatus">
update so_receive_boxes
set [status]=#{status}
where id=#{id}
</update>
<select id="selectByRollNo" resultType="com.gaotao.modules.inventoryStock.entity.InventoryStock">
SELECT
site,
bu_no,
roll_no,
parent_roll_no,
parent_roll_type,
part_no,
warehouse_id,
location_id,
batch_no,
status,
qty_on_hand
FROM inventory_stock
WHERE roll_no = #{rollNo}
AND site = #{site}
AND bu_no = #{buNo}
</select>
<select id="selectByRollNo2" resultType="com.gaotao.modules.inventoryStock.entity.InventoryStock">
SELECT
site,
bu_no,
roll_no,
parent_roll_no,
parent_roll_type,
part_no,
warehouse_id,
location_id,
batch_no,
status,
qty_on_hand
FROM inventory_stock
WHERE parent_roll_no = #{rollNo}
AND site = #{site}
AND bu_no = #{buNo}
and status='在库' AND COALESCE(parent_roll_type, '*') NOT IN ('箱标签')
</select>
<update id="updateStockParentRollNo">
UPDATE inventory_stock
SET ori_parent_roll_no = parent_roll_no,
ori_parent_roll_type = parent_roll_type,
parent_roll_no = #{parentRollNo},
parent_roll_type = '箱标签'
WHERE roll_no = #{rollNo}
AND site = #{site}
AND bu_no = #{buNo}
</update>
<insert id="addBoxRoll">
insert into so_receive_box_rolls
(site,box_no,final_roll_no,roll_qty,received_by,received_date,WareHouseID,part_no,bu_no)
values
(#{site},#{boxNo},#{finalRollNo},#{rollQty},#{receivedBy},GetDate(),#{wareHouseID},#{partNo},#{buNo})
</insert>
<update id="updateBoxRollQty">
update so_receive_boxes
set rolls_qty =isnull((select count(1) from so_receive_box_rolls where box_no = #{boxNo} and site=#{site} and bu_no= #{buNo}),0)
where site = #{site}
and box_no = #{boxNo}
and bu_no = #{buNo}
</update>
<select id="searchOutboundNotificationDetail" resultType="com.gaotao.modules.outboundNotification.entity.OutboundNotificationDetailEntity">
SELECT
site,
bu_no,
order_no,
part_no,
part_desc,
unit,
required_qty,
out_warehouse,
out_batch_no,
created_by,
created_date,
updated_by,
updated_date,
order_qty,
related_order_no,
related_order_line_no,
inspection_flag
FROM outbound_notification_detail
where site = #{site} and bu_no = #{buNo} and order_no = #{orderNo}
</select>
<select id="getOutboundNotificationDetailByKey" resultType="com.gaotao.modules.outboundNotification.entity.OutboundNotificationDetailEntity">
select site,bu_no,order_no,part_no,part_desc,unit,required_qty,out_warehouse,out_batch_no,created_by,created_date,updated_by,
updated_date,order_qty,related_order_no,related_order_line_no,inspection_flag
from outbound_notification_detail
where site = #{site} and bu_no = #{buNo} and order_no = #{orderNo} and part_no = #{partNo}
</select>
<update id="updateBoxWareHouse">
update so_receive_boxes
set WareHouseID = #{warehouseId}
where site = #{site}
and box_no = #{boxNo}
and bu_no = #{buNo}
</update>
<delete id="deleteBoxRoll">
delete from so_receive_box_rolls
where site = #{site}
and box_no = #{boxNo}
and bu_no = #{buNo}
and final_roll_no = #{finalRollNo}
</delete>
<select id="searchRollForOrderNo" resultType="SoReceiveBoxRollsData">
select
ROW_NUMBER() OVER (ORDER BY b.received_date) orderId,
b.id,
b.site,
b.bu_no,
b.box_no,
b.final_roll_no,
b.roll_qty,
b.received_by,
b.received_date,
b.WareHouseID,
b.part_no,
c.warehouse_id,
c.batch_no,
c.location_id
from so_receive_boxes a
INNER join so_receive_box_rolls b on a.site = b.site and a.box_no = b.box_no and a.bu_no = b.bu_no
left join inventory_stock c on b.site = c.site and b.final_roll_no = c.roll_no and b.bu_no = c.bu_no
where a.site = #{site} and a.order_no = #{orderNo} and a.bu_no = #{buNo}
</select>
<!-- 盒清单相关SQL -->
<select id="searchSoReceiveCasesData" resultType="SoReceiveCasesData">
SELECT
s.Id as id,
s.NotifyNo as notifyNo,
s.cases_no as casesNo,
s.roll_no as rollNo,
s.roll_qty as rollQty,
s.part_no as partNo,
s.part_desc as partDesc,
s.create_date as createDate,
s.create_by as createBy,
s.Remark as remark,
s.site,
s.bu_no as buNo,
agg.box_count_cases as boxCountCases,
agg.box_count_rolls as boxCountRolls,
agg.total_qty as totalQty
FROM so_receive_cases s WITH(NOLOCK)
LEFT JOIN (
SELECT
site,
NotifyNo,
COUNT(DISTINCT cases_no) AS box_count_cases, --盒标签张数
COUNT(DISTINCT roll_no) AS box_count_rolls, --卷标签张数
SUM(roll_qty) AS total_qty --物料总数
FROM so_receive_cases WITH(NOLOCK)
WHERE site = #{site} and NotifyNo = #{notifyNo}
GROUP BY site, NotifyNo
) as agg ON s.site = agg.site AND s.NotifyNo = agg.NotifyNo
<where>
s.site = #{site} AND s.bu_no = #{buNo}
<if test="notifyNo != null and notifyNo != ''">
AND s.NotifyNo = #{notifyNo}
</if>
<if test="casesNo != null and casesNo != ''">
AND s.cases_no = #{casesNo}
</if>
</where>
ORDER BY s.create_date DESC
</select>
<delete id="deleteSoReceiveCasesData">
DELETE FROM so_receive_cases
WHERE Id = #{id}
AND site = #{site}
AND bu_no = #{buNo}
</delete>
<select id="validateCaseRoll" resultType="SoReceiveCasesData">
SELECT
#{casesNo} as casesNo,
a.roll_no as rollNo,
a.qty_on_hand as rollQty,
a.part_no as partNo,
b.PartDescription as partDesc,
a.batch_no as batchNo,
a.status,
a.parent_roll_type as parentRollType
FROM
inventory_stock a
INNER JOIN part b ON a.site = b.site
AND a.part_no = b.PartNo
WHERE
a.site = #{site}
AND a.parent_roll_no = #{rollNo}
AND a.part_no = #{partNo}
</select>
<insert id="saveSoReceiveCases">
INSERT INTO so_receive_cases (
NotifyNo,
cases_no,
roll_no,
roll_qty,
part_no,
part_desc,
create_date,
create_by,
Remark,
site,
bu_no
) VALUES (
#{notifyNo},
#{casesNo},
#{rollNo},
#{rollQty},
#{partNo},
#{partDesc},
GETDATE(),
#{createBy},
#{remark},
#{site},
#{buNo}
)
</insert>
<update id="updateStockParentRollType">
UPDATE inventory_stock
SET ori_parent_roll_no = parent_roll_no,
ori_parent_roll_type = parent_roll_type,
parent_roll_no = #{parentRollNo},
parent_roll_type = #{parentRollType}
WHERE roll_no = #{rollNo}
AND site = #{site}
AND bu_no = #{buNo}
</update>
<!-- 恢复库存的原始上级标签 -->
<update id="restoreStockParentRollType">
UPDATE inventory_stock
SET parent_roll_no = ori_parent_roll_no,
parent_roll_type = ori_parent_roll_type
WHERE roll_no = #{rollNo}
AND site = #{site}
AND bu_no = #{buNo}
</update>
<!-- 查询出库通知单主记录(关联明细) -->
<select id="searchOutboundNotificationWithDetail" resultType="com.gaotao.modules.outboundNotification.entity.vo.OutboundNotificationHeadVo">
SELECT
a.site,
a.bu_no as buNo,
dbo.get_bu_desc(a.site, a.bu_no) as buDesc,
a.order_no as orderNo,
a.order_type as orderType,
a.order_status as orderStatus,
a.customer_id as customerId,
c.customerName,
c.CustomerAbb as customerAbb,
<!-- a.related_order_no as relatedOrderNo,-->
<!-- a.related_order_line_no as relatedOrderLineNo,-->
a.required_outbound_date as requiredOutboundDate,
a.remarks,
a.erp_order_no as erpOrderNo,
a.erp_order_line_no as erpOrderLineNo,
a.erp_order_date as erpOrderDate,
a.created_by as createdBy,
a.created_date as createdDate,
a.updated_by as updatedBy,
a.updated_date as updatedDate,
a.assigned_by as assignedBy,
a.assigned_date as assignedDate,
a.closed_by as closedBy,
a.closed_date as closedDate,
a.archived_by as archivedBy,
a.archived_date as archivedDate,
a.orderref1,
a.orderref2,
a.orderref3,
a.orderref4,
a.orderref5,
a.order_date as orderDate,
a.close_flag as closeFlag,
a.out_warehouse as outWarehouse,
a.customer_order_no as customerOrderNo,
a.show_in_query_flag as showInQueryFlag,
<!-- 关联明细信息 -->
b.part_no as partNo,
b.part_desc as partDesc,
b.unit,
b.required_qty as requiredQty,
b.out_warehouse as detailOutWarehouse,
b.out_batch_no as outBatchNo,
b.order_qty as orderQty,
b.related_order_no as relatedOrderNo,
b.related_order_line_no as relatedOrderLineNo,
<!-- 已扫描数量和未扫描数量 -->
ISNULL(SUM(e.roll_qty), 0) as rollQty,
CASE WHEN b.required_qty - ISNULL(SUM(e.roll_qty), 0) > 0
THEN ROUND(b.required_qty - ISNULL(SUM(e.roll_qty), 0), 3)
ELSE 0
END as unScanQty ,
ISNULL(SUM(i.qty_on_hand), 0) as availableStock,
b.std_packing_qty,
ISNULL(b.inspection_flag,'N') as inspectionFlag
FROM outbound_notification_head a
LEFT JOIN Customer c ON a.site = c.site AND a.customer_id = c.CustomerID
LEFT JOIN outbound_notification_detail b ON a.site = b.site AND a.bu_no = b.bu_no AND a.order_no = b.order_no
LEFT JOIN inventory_stock I ON B.site = I.site AND B.part_no = I.part_no AND I.status = '在库' and i.batch_no = b.out_batch_no
LEFT JOIN so_receive_boxes d ON b.site = d.site AND b.bu_no = d.bu_no AND b.order_no = d.order_no
LEFT JOIN so_receive_box_rolls e ON b.site = e.site AND b.bu_no = e.bu_no AND d.box_no = e.box_no AND b.part_no = e.part_no
<where>
<if test="site != null and site != ''">
AND a.site = #{site}
</if>
<if test="buNo != null and buNo != ''">
AND a.bu_no = #{buNo}
</if>
<if test="orderNo != null and orderNo != ''">
AND a.order_no LIKE '%' + #{orderNo} + '%'
</if>
<if test="orderType != null and orderType != ''">
AND a.order_type = #{orderType}
</if>
<if test="orderStatus != null and orderStatus != ''">
AND a.order_status in
<foreach collection="statusArr" close=")" open="(" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="orderStatus == null or orderStatus == ''">
AND a.order_status not in ('待出库', '草稿')
</if>
<if test="customerId != null and customerId != ''">
AND a.customer_id LIKE '%' + #{customerId} + '%'
</if>
<if test="customerName != null and customerName != ''">
AND c.customerName LIKE '%' + #{customerName} + '%'
</if>
<if test="inspectionFlag != null and inspectionFlag != ''">
AND ISNULL(b.inspection_flag,'N') = #{inspectionFlag}
</if>
<if test="startDate != null">
AND a.required_outbound_date >= #{startDate}
</if>
<if test="endDate != null">
AND #{endDate} >= a.required_outbound_date
</if>
</where>
GROUP BY
a.site, a.bu_no, a.order_no, a.order_type, a.order_status, a.customer_id, c.customerName,
a.related_order_no, a.related_order_line_no, a.required_outbound_date, a.remarks,
a.erp_order_no, a.erp_order_line_no, a.erp_order_date, a.created_by, a.created_date,
a.updated_by, a.updated_date, a.assigned_by, a.assigned_date, a.closed_by, a.closed_date,
a.archived_by, a.archived_date, a.orderref1, a.orderref2, a.orderref3, a.orderref4, a.orderref5,
a.order_date, a.close_flag, a.out_warehouse, a.customer_order_no, a.show_in_query_flag,
b.part_no, b.part_desc, b.unit, b.required_qty, b.out_warehouse, b.out_batch_no, b.order_qty,
b.related_order_no, b.related_order_line_no, b.std_packing_qty, b.inspection_flag, c.CustomerAbb
ORDER BY a.created_date DESC, b.part_no
</select>
<!-- 分页查询出库通知单主记录(关联明细) -->
<select id="searchOutboundNotificationWithDetailByPage" resultType="com.gaotao.modules.outboundNotification.entity.vo.OutboundNotificationHeadVo">
SELECT
a.site,
a.bu_no as buNo,
dbo.get_bu_desc(a.site, a.bu_no) as buDesc,
a.order_no as orderNo,
a.order_type as orderType,
a.order_status as orderStatus,
a.customer_id as customerId,
c.customerName,
c.CustomerAbb as customerAbb,
a.required_outbound_date as requiredOutboundDate,
a.remarks,
a.erp_order_no as erpOrderNo,
a.erp_order_line_no as erpOrderLineNo,
a.erp_order_date as erpOrderDate,
a.created_by as createdBy,
a.created_date as createdDate,
a.updated_by as updatedBy,
a.updated_date as updatedDate,
a.assigned_by as assignedBy,
a.assigned_date as assignedDate,
a.closed_by as closedBy,
a.closed_date as closedDate,
a.archived_by as archivedBy,
a.archived_date as archivedDate,
a.orderref1,
a.orderref2,
a.orderref3,
a.orderref4,
a.orderref5,
a.order_date as orderDate,
a.close_flag as closeFlag,
a.out_warehouse as outWarehouse,
a.customer_order_no as customerOrderNo,
a.show_in_query_flag as showInQueryFlag,
b.part_no as partNo,
b.part_desc as partDesc,
b.unit,
b.required_qty as requiredQty,
b.out_warehouse as detailOutWarehouse,
b.out_batch_no as outBatchNo,
b.order_qty as orderQty,
b.related_order_no as relatedOrderNo,
b.related_order_line_no as relatedOrderLineNo,
ISNULL(SUM(e.roll_qty), 0) as rollQty,
CASE WHEN b.required_qty - ISNULL(SUM(e.roll_qty), 0) > 0
THEN ROUND(b.required_qty - ISNULL(SUM(e.roll_qty), 0), 3)
ELSE 0
END as unScanQty,
ISNULL(SUM(i.qty_on_hand), 0) as availableStock,
b.std_packing_qty,
ISNULL(b.inspection_flag,'N') as inspectionFlag
FROM outbound_notification_head a
LEFT JOIN Customer c ON a.site = c.site AND a.customer_id = c.CustomerID
LEFT JOIN outbound_notification_detail b ON a.site = b.site AND a.bu_no = b.bu_no AND a.order_no = b.order_no
LEFT JOIN inventory_stock I ON B.site = I.site AND B.part_no = I.part_no AND I.status = '在库' and i.batch_no = b.out_batch_no
LEFT JOIN so_receive_boxes d ON b.site = d.site AND b.bu_no = d.bu_no AND b.order_no = d.order_no
LEFT JOIN so_receive_box_rolls e ON b.site = e.site AND b.bu_no = e.bu_no AND d.box_no = e.box_no AND b.part_no = e.part_no
<where>
<if test="query.site != null and query.site != ''">
AND a.site = #{query.site}
</if>
<if test="query.buNo != null and query.buNo != ''">
AND a.bu_no = #{query.buNo}
</if>
<if test="query.orderNo != null and query.orderNo != ''">
AND a.order_no LIKE '%' + #{query.orderNo} + '%'
</if>
<if test="query.orderType != null and query.orderType != ''">
AND a.order_type = #{query.orderType}
</if>
<if test="query.orderStatus != null and query.orderStatus != ''">
AND a.order_status in
<foreach collection="query.statusArr" close=")" open="(" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="query.orderStatus == null or query.orderStatus == ''">
AND a.order_status not in ('待出库', '草稿')
</if>
<if test="query.customerId != null and query.customerId != ''">
AND a.customer_id LIKE '%' + #{query.customerId} + '%'
</if>
<if test="query.customerName != null and query.customerName != ''">
AND c.customerName LIKE '%' + #{query.customerName} + '%'
</if>
<if test="query.inspectionFlag != null and query.inspectionFlag != ''">
AND ISNULL(b.inspection_flag,'N') = #{query.inspectionFlag}
</if>
<if test="query.startDate != null">
AND a.required_outbound_date >= #{query.startDate}
</if>
<if test="query.endDate != null">
AND #{query.endDate} >= a.required_outbound_date
</if>
</where>
GROUP BY
a.site, a.bu_no, a.order_no, a.order_type, a.order_status, a.customer_id, c.customerName,
a.related_order_no, a.related_order_line_no, a.required_outbound_date, a.remarks,
a.erp_order_no, a.erp_order_line_no, a.erp_order_date, a.created_by, a.created_date,
a.updated_by, a.updated_date, a.assigned_by, a.assigned_date, a.closed_by, a.closed_date,
a.archived_by, a.archived_date, a.orderref1, a.orderref2, a.orderref3, a.orderref4, a.orderref5,
a.order_date, a.close_flag, a.out_warehouse, a.customer_order_no, a.show_in_query_flag,
b.part_no, b.part_desc, b.unit, b.required_qty, b.out_warehouse, b.out_batch_no, b.order_qty,
b.related_order_no, b.related_order_line_no, b.std_packing_qty, b.inspection_flag, c.CustomerAbb
ORDER BY a.required_outbound_date DESC, b.part_no
OFFSET #{query.offset} ROWS FETCH NEXT #{query.limit} ROWS ONLY
</select>
<!-- 分页查询出库通知单主记录(关联明细)- 总数查询 -->
<select id="searchOutboundNotificationWithDetailCount" resultType="int">
SELECT COUNT(1) FROM (
SELECT
a.order_no,
b.part_no
FROM outbound_notification_head a
LEFT JOIN Customer c ON a.site = c.site AND a.customer_id = c.CustomerID
LEFT JOIN outbound_notification_detail b ON a.site = b.site AND a.bu_no = b.bu_no AND a.order_no = b.order_no
LEFT JOIN inventory_stock I ON B.site = I.site AND B.part_no = I.part_no AND I.status = '在库' and i.batch_no = b.out_batch_no
LEFT JOIN so_receive_boxes d ON b.site = d.site AND b.bu_no = d.bu_no AND b.order_no = d.order_no
LEFT JOIN so_receive_box_rolls e ON b.site = e.site AND b.bu_no = e.bu_no AND d.box_no = e.box_no AND b.part_no = e.part_no
<where>
<if test="query.site != null and query.site != ''">
AND a.site = #{query.site}
</if>
<if test="query.buNo != null and query.buNo != ''">
AND a.bu_no = #{query.buNo}
</if>
<if test="query.orderNo != null and query.orderNo != ''">
AND a.order_no LIKE '%' + #{query.orderNo} + '%'
</if>
<if test="query.orderType != null and query.orderType != ''">
AND a.order_type = #{query.orderType}
</if>
<if test="query.orderStatus != null and query.orderStatus != ''">
AND a.order_status in
<foreach collection="query.statusArr" close=")" open="(" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="query.orderStatus == null or query.orderStatus == ''">
AND a.order_status not in ('待出库', '草稿')
</if>
<if test="query.customerId != null and query.customerId != ''">
AND a.customer_id LIKE '%' + #{query.customerId} + '%'
</if>
<if test="query.customerName != null and query.customerName != ''">
AND c.customerName LIKE '%' + #{query.customerName} + '%'
</if>
<if test="query.inspectionFlag != null and query.inspectionFlag != ''">
AND ISNULL(b.inspection_flag,'N') = #{query.inspectionFlag}
</if>
<if test="query.startDate != null">
AND a.required_outbound_date >= #{query.startDate}
</if>
<if test="query.endDate != null">
AND #{query.endDate} >= a.required_outbound_date
</if>
</where>
GROUP BY
a.site, a.bu_no, a.order_no, a.order_type, a.order_status, a.customer_id, c.customerName,
a.related_order_no, a.related_order_line_no, a.required_outbound_date, a.remarks,
a.erp_order_no, a.erp_order_line_no, a.erp_order_date, a.created_by, a.created_date,
a.updated_by, a.updated_date, a.assigned_by, a.assigned_date, a.closed_by, a.closed_date,
a.archived_by, a.archived_date, a.orderref1, a.orderref2, a.orderref3, a.orderref4, a.orderref5,
a.order_date, a.close_flag, a.out_warehouse, a.customer_order_no, a.show_in_query_flag,
b.part_no, b.part_desc, b.unit, b.required_qty, b.out_warehouse, b.out_batch_no, b.order_qty,
b.related_order_no, b.related_order_line_no, b.std_packing_qty, b.inspection_flag, c.CustomerAbb
) T
</select>
<!-- 更新出库通知单状态 -->
<update id="updateOrderStatus">
UPDATE outbound_notification_head
SET order_status = #{orderStatus}
WHERE site = #{site}
AND bu_no = #{buNo}
AND order_no = #{orderNo}
</update>
<!-- ==================== 托清单相关SQL ==================== -->
<!-- 查询托清单列表 -->
<select id="searchSoReceivePalletsData" resultType="SoReceivePalletsData">
SELECT
s.id,
s.site,
s.bu_no as buNo,
s.pallet_no as palletNo,
s.order_no as orderNo,
s.status,
s.boxes_qty as boxesQty,
s.pallet_type as palletType,
s.c_in_stock_flag as cInStockFlag,
s.created_date as createdDate,
s.created_by as createdBy,
s.update_date as updateDate,
s.update_by as updateBy,
s.version,
ISNULL(pallet_count, 0) as palletCount,
ISNULL(boxesCount, 0) as boxesCount,
ISNULL(rollCount, 0) as rollCount,
ISNULL(rollsQty, 0) as rollsQty
FROM so_receive_pallets s with(nolock)
LEFT JOIN (
select
a.site,
a.bu_no,
a.order_no,
COUNT(DISTINCT a.pallet_no) AS pallet_count, -- 托数量
COUNT(DISTINCT B.box_no) AS boxesCount, -- 箱标签张数
COUNT(DISTINCT c.final_roll_no) AS rollCount, -- 卷标签张数
ISNULL(SUM(c.roll_qty), 0) AS rollsQty -- 物料总数
from so_receive_pallets A with(nolock)
INNER JOIN so_receive_pallet_boxes B with(nolock) ON A.site = B.site AND A.pallet_no = B.pallet_no
INNER JOIN so_receive_box_rolls C with(nolock) ON C.site = B.site AND B.box_no = C.box_no
WHERE a.SITE = #{site} AND a.bu_no = #{buNo} and a.order_no = #{orderNo} group by a.site, a.bu_no, a.order_no
) T ON S.site = T.site AND S.bu_no = T.bu_no AND S.order_no = T.order_no
WHERE s.site = #{site}
AND s.bu_no = #{buNo}
AND s.order_no = #{orderNo}
ORDER BY s.created_date DESC
</select>
<!-- 新增托 -->
<insert id="newSoReceivePalletsData">
INSERT INTO so_receive_pallets
(site, pallet_no, order_no, [status], boxes_qty, pallet_type, c_in_stock_flag, created_date, created_by,
version, bu_no)
VALUES
(#{site}, #{palletNo}, #{orderNo}, #{status}, #{boxesQty}, #{palletType}, 'Y', GETDATE(), #{createdBy},
0, #{buNo})
</insert>
<!-- 查询托明细列表 -->
<select id="searchPalletBoxDetail" resultType="SoReceivePalletBoxesData">
SELECT ROW_NUMBER() OVER (ORDER BY a.received_date) orderId,
a.id, a.site, a.bu_no, a.pallet_no, a.box_no, a.boxes_qty, a.received_by, a.received_date
FROM so_receive_pallet_boxes a
WHERE a.site = #{site}
AND a.pallet_no = #{palletNo}
AND a.bu_no = #{buNo}
ORDER BY a.received_date DESC
</select>
<!-- 查询托数据 -->
<select id="searchPalletData" resultType="SoReceivePalletsData">
SELECT a.id, a.site, a.bu_no, a.pallet_no, a.order_no, [status], boxes_qty, pallet_type, c_in_stock_flag,
created_date, created_by, version
FROM so_receive_pallets a
WHERE a.site = #{site}
AND a.pallet_no = #{palletNo}
AND a.bu_no = #{buNo}
</select>
<!-- 删除托 -->
<delete id="deleteSoReceivePalletsData">
DELETE FROM so_receive_pallets
WHERE id = #{id}
</delete>
<!-- 更新托状态 -->
<update id="updatePalletStatus">
UPDATE so_receive_pallets
SET [status] = #{status}
WHERE id = #{id}
</update>
<!-- 根据箱号查询箱信息(用于装托扫描) -->
<select id="selectBoxByBoxNo" resultType="SoReceiveBoxesData">
SELECT a.id, a.site, a.bu_no, a.box_no as boxNo, a.order_no as orderNo, a.[status], a.rolls_qty as rollsQty,
a.box_type as boxType, a.WareHouseID as wareHouseID
FROM so_receive_boxes a
WHERE a.site = #{site}
AND a.box_no = #{boxNo}
AND a.bu_no = #{buNo}
</select>
<!-- 装托:添加箱到托 -->
<insert id="addBoxToPallet">
INSERT INTO so_receive_pallet_boxes
(site, bu_no, pallet_no, box_no, boxes_qty, received_by, received_date)
VALUES
(#{site}, #{buNo}, #{palletNo}, #{boxNo}, #{boxesQty}, #{receivedBy}, GETDATE())
</insert>
<!-- 拆托:从托中删除箱 -->
<delete id="deleteBoxFromPallet">
DELETE FROM so_receive_pallet_boxes
WHERE site = #{site}
AND bu_no = #{buNo}
AND pallet_no = #{palletNo}
<if test="boxNo != null and boxNo != ''">
AND box_no = #{boxNo}
</if>
</delete>
<!-- 更新托的箱数量 -->
<update id="updatePalletBoxesQty">
UPDATE so_receive_pallets
SET boxes_qty = (
SELECT COUNT(*)
FROM so_receive_pallet_boxes
WHERE site = #{site}
AND bu_no = #{buNo}
AND pallet_no = #{palletNo}
)
WHERE site = #{site}
AND bu_no = #{buNo}
AND pallet_no = #{palletNo}
</update>
<!-- 检查箱是否在托中 -->
<select id="checkBoxInPallet" resultType="SoReceivePalletBoxesData">
SELECT id, site, bu_no, pallet_no, box_no, boxes_qty, received_by, received_date
FROM so_receive_pallet_boxes
WHERE site = #{site}
AND bu_no = #{buNo}
AND box_no = #{boxNo}
</select>
<!-- 检查卷是否已装箱 -->
<select id="checkRollInBox" resultType="SoReceiveBoxRollsData">
SELECT id, site, bu_no, box_no, final_roll_no, roll_qty, received_by, received_date, WareHouseID, part_no
FROM so_receive_box_rolls
WHERE site = #{site}
AND bu_no = #{buNo}
AND final_roll_no = #{rollNo}
</select>
<!-- 查询装箱明细列表(关联仓库和物料信息) -->
<select id="searchBoxRollDetailList" resultType="map">
SELECT
br.box_no AS boxNo,
br.final_roll_no AS finalRollNo,
br.roll_qty AS rollQty,
br.received_by AS receivedBy,
br.received_date AS receivedDate,
br.WareHouseID AS wareHouseId,
wh.WareHouseName AS wareHouseName,
br.part_no AS partNo,
p.PartDescription AS partDesc
FROM so_receive_box_rolls br
LEFT JOIN WareHouse wh ON br.site = wh.site and br.WareHouseID = wh.WareHouseID
LEFT JOIN Part p ON br.site = p.site and br.part_no = p.partNo
WHERE br.site = #{site}
AND br.bu_no = #{buNo}
AND br.box_no = #{boxNo}
ORDER BY br.received_date DESC
</select>
</mapper>