<?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.ruoyi.quality.mapper.QualityTraceMapper">
|
|
<!-- 报工节点公共列:报工单→工单→生产订单→成品 -->
|
<sql id="reportColumns">
|
ppm.id as productMainId,
|
pot.production_order_id as productionOrderId,
|
po.nps_no as npsNo,
|
concat(ifnull(p.product_name, ''), '/', ifnull(pmf.model, '')) as finishedProduct,
|
pmf.unit as unit,
|
ifnull(po.quantity, 0) as planQty,
|
ifnull(po.complete_quantity, 0) as completeQty,
|
po.status as orderStatus,
|
coalesce(po.create_time, po.start_time) as orderCreateTime,
|
pot.work_order_no as workOrderNo,
|
poro.operation_name as operationName,
|
ppm.user_name as userName,
|
ppm.device_name as deviceName,
|
ifnull(ppo.quantity, 0) as outputQty,
|
ifnull(ppo.scrap_qty, 0) as scrapQty,
|
ppm.product_no as productNo,
|
ppm.create_time as reportTime
|
</sql>
|
|
<sql id="reportJoins">
|
from production_product_main ppm
|
join production_operation_task pot on pot.id = ppm.production_operation_task_id
|
join production_order po on po.id = pot.production_order_id
|
left join production_order_routing_operation poro on poro.id = pot.production_order_routing_operation_id
|
left join product_model pmf on pmf.id = po.product_model_id
|
left join product p on p.id = pmf.product_id
|
left join production_product_output ppo on ppo.production_product_main_id = ppm.id
|
</sql>
|
|
<select id="listInboundByFinishedBatch" resultType="com.ruoyi.quality.dto.QualityTraceFinishedBatchVo">
|
select x.productionOrderId, x.productMainId, x.batchNo, x.productModelId, x.qty, x.inTime, x.recordType
|
from (
|
select pot.production_order_id as productionOrderId,
|
sir.record_id as productMainId,
|
sir.batch_no as batchNo,
|
sir.product_model_id as productModelId,
|
ifnull(sir.stock_in_num, 0) as qty,
|
sir.create_time as inTime,
|
sir.record_type as recordType
|
from stock_in_record sir
|
join production_product_main ppm on ppm.id = sir.record_id
|
join production_operation_task pot on pot.id = ppm.production_operation_task_id
|
where sir.batch_no = #{batchNo} and sir.record_type = '2'
|
union all
|
select pot.production_order_id,
|
qi.product_main_id,
|
sir.batch_no,
|
sir.product_model_id,
|
ifnull(sir.stock_in_num, 0),
|
sir.create_time,
|
sir.record_type
|
from stock_in_record sir
|
join quality_inspect qi on qi.id = sir.record_id
|
join production_product_main ppm on ppm.id = qi.product_main_id
|
join production_operation_task pot on pot.id = ppm.production_operation_task_id
|
where sir.batch_no = #{batchNo} and sir.record_type = '6'
|
) x
|
order by x.productionOrderId, x.inTime
|
</select>
|
|
<select id="listReportsByMainIds" resultType="com.ruoyi.quality.dto.QualityTraceReportVo">
|
select <include refid="reportColumns"/>
|
<include refid="reportJoins"/>
|
where ppm.id in
|
<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
|
order by pot.production_order_id, poro.drag_sort, ppm.id
|
</select>
|
|
<select id="listReportsByOrderIds" resultType="com.ruoyi.quality.dto.QualityTraceReportVo">
|
select <include refid="reportColumns"/>
|
<include refid="reportJoins"/>
|
where pot.production_order_id in
|
<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
|
order by pot.production_order_id, poro.drag_sort, ppm.id
|
</select>
|
|
<select id="listInputsByMainIds" resultType="com.ruoyi.quality.dto.QualityTraceInputVo">
|
select ppi.production_product_main_id as productMainId,
|
ppi.product_model_id as productModelId,
|
ifnull(p.product_name, '') as materialName,
|
ifnull(pm.model, '') as materialModel,
|
pm.unit as unit,
|
ifnull(ppi.input_quantity, 0) as inputQty,
|
pot.work_order_no as workOrderNo,
|
poro.operation_name as operationName
|
from production_product_input ppi
|
join production_product_main ppm on ppm.id = ppi.production_product_main_id
|
join production_operation_task pot on pot.id = ppm.production_operation_task_id
|
left join production_order_routing_operation poro on poro.id = pot.production_order_routing_operation_id
|
join product_model pm on pm.id = ppi.product_model_id
|
left join product p on p.id = pm.product_id
|
where ppi.production_product_main_id in
|
<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
|
order by ppi.production_product_main_id, ppi.id
|
</select>
|
|
<sql id="pickColumns">
|
pop.production_order_id as productionOrderId,
|
pop.product_model_id as productModelId,
|
ifnull(p.product_name, '') as materialName,
|
ifnull(pm.model, '') as materialModel,
|
pm.unit as unit,
|
pop.batch_no as batchNo,
|
ifnull(pop.quantity, 0) as quantity,
|
pop.operation_name as operationName,
|
pop.create_time as pickTime
|
</sql>
|
|
<select id="listPicksByOrderIds" resultType="com.ruoyi.quality.dto.QualityTracePickVo">
|
select <include refid="pickColumns"/>
|
from production_order_pick pop
|
join product_model pm on pm.id = pop.product_model_id
|
left join product p on p.id = pm.product_id
|
where pop.production_order_id in
|
<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
|
and pop.batch_no is not null and pop.batch_no <> ''
|
order by pop.production_order_id, pop.id
|
</select>
|
|
<select id="listPicksByBatchNo" resultType="com.ruoyi.quality.dto.QualityTracePickVo">
|
select <include refid="pickColumns"/>
|
from production_order_pick pop
|
join product_model pm on pm.id = pop.product_model_id
|
left join product p on p.id = pm.product_id
|
where pop.batch_no = #{batchNo}
|
order by pop.production_order_id, pop.id
|
</select>
|
|
<select id="listInspectsByMainIds" resultType="com.ruoyi.quality.dto.QualityTraceInspectVo">
|
select qi.id as inspectId,
|
qi.product_main_id as productMainId,
|
qi.inspect_type as inspectType,
|
case qi.inspect_type when 0 then '原料检验' when 1 then '过程检验' when 2 then '出厂检验'
|
else '其他' end as inspectTypeName,
|
qi.process as process,
|
qi.check_name as checkName,
|
qi.product_name as productName,
|
qi.model as model,
|
qi.unit as unit,
|
ifnull(qi.quantity, 0) as quantity,
|
ifnull(qi.qualified_quantity, 0) as qualifiedQuantity,
|
ifnull(qi.unqualified_quantity, 0) as unqualifiedQuantity,
|
qi.check_result as checkResult,
|
qi.check_time as checkTime,
|
qi.inspect_state as inspectState,
|
qi.defective_phenomena as defectivePhenomena
|
from quality_inspect qi
|
where qi.product_main_id in
|
<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
|
order by qi.id
|
</select>
|
|
<select id="listUnqualifiedByInspectIds" resultType="com.ruoyi.quality.dto.QualityTraceUnqualifiedVo">
|
select qu.id as id,
|
qu.inspect_id as inspectId,
|
qu.product_name as productName,
|
qu.model as model,
|
qu.unit as unit,
|
ifnull(qu.quantity, 0) as quantity,
|
qu.defective_phenomena as defectivePhenomena,
|
qu.deal_result as dealResult,
|
qu.deal_name as dealName,
|
qu.deal_time as dealTime,
|
qu.inspect_state as inspectState,
|
qu.check_time as checkTime
|
from quality_unqualified qu
|
where qu.inspect_id in
|
<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
|
order by qu.id
|
</select>
|
|
<select id="listOutboundByBatch" resultType="com.ruoyi.quality.dto.QualityTraceOutboundVo">
|
select sor.id as id,
|
sor.batch_no as batchNo,
|
ifnull(p.product_name, '') as productName,
|
ifnull(pm.model, '') as productModel,
|
pm.unit as unit,
|
ifnull(sor.stock_out_num, 0) as qty,
|
sor.record_type as recordType,
|
sor.create_time as outTime,
|
sor.remark as remark
|
from stock_out_record sor
|
join product_model pm on pm.id = sor.product_model_id
|
left join product p on p.id = pm.product_id
|
where sor.batch_no = #{batchNo}
|
order by sor.id
|
</select>
|
|
<select id="listFinishedBatchesByOrderIds" resultType="com.ruoyi.quality.dto.QualityTraceFinishedBatchVo">
|
select x.productionOrderId, x.productMainId, x.batchNo, x.productModelId, x.qty, x.inTime, x.recordType
|
from (
|
select pot.production_order_id as productionOrderId,
|
sir.record_id as productMainId,
|
sir.batch_no as batchNo,
|
sir.product_model_id as productModelId,
|
ifnull(sir.stock_in_num, 0) as qty,
|
sir.create_time as inTime,
|
sir.record_type as recordType
|
from stock_in_record sir
|
join production_product_main ppm on ppm.id = sir.record_id
|
join production_operation_task pot on pot.id = ppm.production_operation_task_id
|
join production_order po on po.id = pot.production_order_id
|
where sir.record_type = '2' and sir.batch_no is not null and sir.batch_no <> ''
|
and sir.product_model_id = po.product_model_id
|
and pot.production_order_id in
|
<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
|
union all
|
select pot.production_order_id,
|
qi.product_main_id,
|
sir.batch_no,
|
sir.product_model_id,
|
ifnull(sir.stock_in_num, 0),
|
sir.create_time,
|
sir.record_type
|
from stock_in_record sir
|
join quality_inspect qi on qi.id = sir.record_id
|
join production_product_main ppm on ppm.id = qi.product_main_id
|
join production_operation_task pot on pot.id = ppm.production_operation_task_id
|
join production_order po on po.id = pot.production_order_id
|
where sir.record_type = '6' and sir.batch_no is not null and sir.batch_no <> ''
|
and sir.product_model_id = po.product_model_id
|
and pot.production_order_id in
|
<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
|
) x
|
order by x.productionOrderId, x.inTime
|
</select>
|
|
<select id="listMaterialBatchInfoByBatches" resultType="com.ruoyi.quality.dto.QualityTraceMaterialBatchVo">
|
select sir.id as inRecordId,
|
sir.batch_no as batchNo,
|
sir.product_model_id as productModelId,
|
ifnull(p.product_name, '') as materialName,
|
ifnull(pm.model, '') as materialModel,
|
pm.unit as unit,
|
ifnull(sir.stock_in_num, 0) as qty,
|
sir.create_time as inTime,
|
sir.record_type as recordType,
|
qi.id as inspectId,
|
ifnull(qi.quantity, 0) as inspectQty,
|
ifnull(qi.qualified_quantity, 0) as qualifiedQty,
|
ifnull(qi.unqualified_quantity, 0) as unqualifiedQty,
|
qi.check_result as checkResult,
|
qi.check_time as checkTime,
|
coalesce(pl.supplier_name, pl_direct.supplier_name, qi.supplier) as supplierName,
|
coalesce(pl.purchase_contract_number, pl_direct.purchase_contract_number) as contractNo,
|
coalesce(pl.entry_date, pl_direct.entry_date) as entryDate
|
from stock_in_record sir
|
join product_model pm on pm.id = sir.product_model_id
|
left join product p on p.id = pm.product_id
|
left join quality_inspect qi on qi.id = sir.record_id and sir.record_type in ('6', '10')
|
left join purchase_ledger pl on pl.id = qi.purchase_ledger_id
|
left join purchase_ledger pl_direct on pl_direct.id = sir.record_id and sir.record_type = '7'
|
where sir.batch_no in
|
<foreach collection="batchNos" item="bn" open="(" separator="," close=")">#{bn}</foreach>
|
order by sir.id
|
</select>
|
|
<select id="listBatchOptions" resultType="com.ruoyi.quality.dto.QualityTraceBatchOptionVo">
|
<choose>
|
<when test="type == 'material'">
|
select pop.batch_no as batchNo,
|
ifnull(p.product_name, '') as productName,
|
ifnull(pm.model, '') as productModel,
|
pm.unit as unit,
|
ifnull(pop.quantity, 0) as qty,
|
pop.create_time as inTime,
|
po.nps_no as npsNo
|
from production_order_pick pop
|
join product_model pm on pm.id = pop.product_model_id
|
left join product p on p.id = pm.product_id
|
left join production_order po on po.id = pop.production_order_id
|
where pop.batch_no is not null and pop.batch_no <> ''
|
</when>
|
<otherwise>
|
select sir.batch_no as batchNo,
|
ifnull(p.product_name, '') as productName,
|
ifnull(pm.model, '') as productModel,
|
pm.unit as unit,
|
ifnull(sir.stock_in_num, 0) as qty,
|
sir.create_time as inTime,
|
po.nps_no as npsNo
|
from stock_in_record sir
|
join product_model pm on pm.id = sir.product_model_id
|
left join product p on p.id = pm.product_id
|
left join quality_inspect qi on qi.id = sir.record_id and sir.record_type = '6'
|
left join production_product_main ppm
|
on ppm.id = case when sir.record_type = '2' then sir.record_id else qi.product_main_id end
|
left join production_operation_task pot on pot.id = ppm.production_operation_task_id
|
left join production_order po on po.id = pot.production_order_id
|
where sir.record_type in ('2', '6') and sir.batch_no is not null and sir.batch_no <> ''
|
</otherwise>
|
</choose>
|
<if test="keyword != null and keyword != ''">
|
and (
|
<choose>
|
<when test="type == 'material'">pop</when>
|
<otherwise>sir</otherwise>
|
</choose>
|
.batch_no like concat('%', #{keyword}, '%')
|
or p.product_name like concat('%', #{keyword}, '%')
|
or pm.model like concat('%', #{keyword}, '%')
|
)
|
</if>
|
order by inTime desc
|
limit #{limit}
|
</select>
|
</mapper>
|