🎉 Initial commit

This commit is contained in:
2026-07-27 14:26:14 +08:00
commit fd54f07889
6935 changed files with 617410 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
<?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="cn.iocoder.yudao.module.mes.dal.mysql.home.MesHomeStatisticsMapper">
<!-- 按状态统计工单数量 -->
<select id="selectWorkOrderCountGroupByStatus" resultType="java.util.Map">
SELECT status, COUNT(*) AS count
FROM mes_pro_work_order
WHERE deleted = 0
GROUP BY status
</select>
<!-- 统计报工产量合计 -->
<select id="selectFeedbackSummary" resultType="java.util.Map">
SELECT IFNULL(SUM(feedback_quantity), 0) AS feedbackQuantity,
IFNULL(SUM(qualified_quantity), 0) AS qualifiedQuantity,
IFNULL(SUM(unqualified_quantity), 0) AS unqualifiedQuantity
FROM mes_pro_feedback
WHERE deleted = 0
AND status = ${@cn.iocoder.yudao.module.mes.enums.pro.MesProFeedbackStatusEnum@FINISHED.status}
AND feedback_time >= #{beginTime}
<if test="endTime != null">
AND feedback_time &lt; #{endTime}
</if>
</select>
<!-- 按设备状态统计设备台数 -->
<select id="selectMachineryCountGroupByStatus" resultType="java.util.Map">
SELECT status, COUNT(*) AS count
FROM mes_dv_machinery
WHERE deleted = 0
GROUP BY status
</select>
<!-- 统计未处置安灯记录数 -->
<select id="selectAndonActiveCount" resultType="java.lang.Long">
SELECT COUNT(*)
FROM mes_pro_andon_record
WHERE deleted = 0
AND status = ${@cn.iocoder.yudao.module.mes.enums.pro.MesProAndonStatusEnum@ACTIVE.status}
</select>
<!-- 统计未完成维修工单数(草稿 0、维修中 1、待验收 2 -->
<select id="selectRepairActiveCount" resultType="java.lang.Long">
SELECT COUNT(*)
FROM mes_dv_repair
WHERE deleted = 0
AND status IN (${@cn.iocoder.yudao.module.mes.enums.dv.MesDvRepairStatusEnum@PREPARE.status},
${@cn.iocoder.yudao.module.mes.enums.dv.MesDvRepairStatusEnum@CONFIRMED.status},
${@cn.iocoder.yudao.module.mes.enums.dv.MesDvRepairStatusEnum@APPROVING.status})
</select>
<!-- 按天聚合报工产量 -->
<select id="selectDailyFeedbackTrend" resultType="java.util.Map">
SELECT DATE_FORMAT(feedback_time, '%Y-%m-%d') AS date,
IFNULL(SUM(feedback_quantity), 0) AS quantity,
IFNULL(SUM(qualified_quantity), 0) AS qualifiedQuantity,
IFNULL(SUM(unqualified_quantity), 0) AS unqualifiedQuantity
FROM mes_pro_feedback
WHERE deleted = 0
AND status = ${@cn.iocoder.yudao.module.mes.enums.pro.MesProFeedbackStatusEnum@FINISHED.status}
AND feedback_time >= #{beginTime}
<if test="endTime != null">
AND feedback_time &lt; #{endTime}
</if>
GROUP BY DATE_FORMAT(feedback_time, '%Y-%m-%d')
ORDER BY date
</select>
</mapper>

View File

@@ -0,0 +1,180 @@
<?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="cn.iocoder.yudao.module.mes.dal.mysql.qc.pendinginspect.MesQcPendingInspectMapper">
<!--
待检任务查询UNION ALL 多来源),已实现的来源:
1. 到货通知单IQC单据状态=PENDING_QC(2),行的 iqc_check_flag=1 且 iqc_id 为空
2. 外协入库单IQC单据状态=CONFIRMED(1),行的 iqc_check_flag=1 且 iqc_id 为空
3. 产品产出行IPQC产出行的 quality_status=PENDING(0),通过产出单头→报工关联
4. 销售出库单OQC单据状态=CONFIRMED(1),行的 oqc_check_flag=1 且 oqc_id 为空
5. 生产退料单RQC单据状态=CONFIRMED(1),行的 rqc_check_flag=1 且 rqc_id 为空 且 quality_status=0(待检)
6. 销售退货单RQC单据状态=CONFIRMED(1),行的 rqc_check_flag=1 且 rqc_id 为空 且 quality_status=0(待检)
-->
<select id="selectQcPendingPage" resultType="cn.iocoder.yudao.module.mes.controller.admin.qc.pendinginspect.vo.MesQcPendingInspectRespVO">
SELECT * FROM (
<!-- 1. IQC 来源:到货通知单 -->
SELECT
n.id AS sourceDocId,
${@cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants@WM_ARRIVAL_NOTICE} AS sourceDocType,
n.code AS sourceDocCode,
l.id AS sourceLineId,
n.arrival_date AS recordTime,
${@cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum@IQC.type} AS qcType,
l.item_id AS itemId,
l.arrival_quantity AS quantity,
n.vendor_id AS vendorId,
NULL AS workOrderId,
NULL AS workstationId,
NULL AS taskId,
NULL AS clientId
FROM mes_wm_arrival_notice n
JOIN mes_wm_arrival_notice_line l ON n.id = l.notice_id
WHERE n.status = ${@cn.iocoder.yudao.module.mes.enums.wm.MesWmArrivalNoticeStatusEnum@PENDING_QC.status}
AND l.iqc_check_flag = 1
AND l.iqc_id IS NULL
AND n.deleted = 0
AND l.deleted = 0
UNION ALL
<!-- 2. IQC 来源:外协入库单 -->
SELECT
r.id AS sourceDocId,
${@cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants@WM_OUTSOURCE_RECPT} AS sourceDocType,
r.code AS sourceDocCode,
rl.id AS sourceLineId,
r.receipt_date AS recordTime,
${@cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum@IQC.type} AS qcType,
rl.item_id AS itemId,
rl.quantity AS quantity,
r.vendor_id AS vendorId,
NULL AS workOrderId,
NULL AS workstationId,
NULL AS taskId,
NULL AS clientId
FROM mes_wm_outsource_receipt r
JOIN mes_wm_outsource_receipt_line rl ON r.id = rl.receipt_id
WHERE r.status = ${@cn.iocoder.yudao.module.mes.enums.wm.MesWmOutsourceReceiptStatusEnum@CONFIRMED.status}
AND rl.iqc_check_flag = 1
AND rl.iqc_id IS NULL
AND r.deleted = 0
AND rl.deleted = 0
UNION ALL
<!-- 3. IPQC 来源产品产出行quality_status=PENDING -->
SELECT
pf.id AS sourceDocId,
${@cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants@PRO_FEEDBACK} AS sourceDocType,
pf.code AS sourceDocCode,
ppl.id AS sourceLineId,
pf.feedback_time AS recordTime,
${@cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum@IPQC.type} AS qcType,
ppl.item_id AS itemId,
ppl.quantity AS quantity,
NULL AS vendorId,
pp.work_order_id AS workOrderId,
pp.workstation_id AS workstationId,
pp.task_id AS taskId,
NULL AS clientId
FROM mes_wm_product_produce_line ppl
JOIN mes_wm_product_produce pp ON ppl.produce_id = pp.id
JOIN mes_pro_feedback pf ON pp.feedback_id = pf.id
WHERE ppl.quality_status = ${@cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum@PENDING.status}
AND ppl.deleted = 0
AND pp.deleted = 0
AND pf.deleted = 0
UNION ALL
<!-- 4. OQC 来源销售出库单行oqc_check_flag=1 且 oqc_id IS NULL -->
SELECT
s.id AS sourceDocId,
${@cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants@WM_PRODUCT_SALES} AS sourceDocType,
s.code AS sourceDocCode,
sl.id AS sourceLineId,
s.sales_date AS recordTime,
${@cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum@OQC.type} AS qcType,
sl.item_id AS itemId,
sl.quantity AS quantity,
NULL AS vendorId,
NULL AS workOrderId,
NULL AS workstationId,
NULL AS taskId,
s.client_id AS clientId
FROM mes_wm_product_sales s
JOIN mes_wm_product_sales_line sl ON s.id = sl.sales_id
WHERE sl.oqc_check_flag = 1
AND sl.oqc_id IS NULL
AND s.status = ${@cn.iocoder.yudao.module.mes.enums.wm.MesWmProductSalesStatusEnum@CONFIRMED.status}
AND s.deleted = 0
AND sl.deleted = 0
UNION ALL
<!-- 5. RQC 来源:生产退料单行(状态=待检验,行的 rqc_check_flag=1 且 rqc_id IS NULL 且 quality_status=0 -->
SELECT
ri.id AS sourceDocId,
${@cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants@WM_RETURN_ISSUE} AS sourceDocType,
ri.code AS sourceDocCode,
ril.id AS sourceLineId,
ri.return_date AS recordTime,
${@cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum@RQC.type} AS qcType,
ril.item_id AS itemId,
ril.quantity AS quantity,
NULL AS vendorId,
ri.work_order_id AS workOrderId,
ri.workstation_id AS workstationId,
NULL AS taskId,
NULL AS clientId
FROM mes_wm_return_issue ri
JOIN mes_wm_return_issue_line ril ON ri.id = ril.issue_id
WHERE ri.status = ${@cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnIssueStatusEnum@CONFIRMED.status}
AND ril.rqc_check_flag = 1
AND ril.rqc_id IS NULL
AND ril.quality_status = ${@cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum@PENDING.status}
AND ri.deleted = 0
AND ril.deleted = 0
UNION ALL
<!-- 6. RQC 来源:销售退货单(待检验(CONFIRMED),行的 quality_status=0 -->
SELECT
r.id AS sourceDocId,
${@cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants@WM_RETURN_SALES} AS sourceDocType,
r.code AS sourceDocCode,
rl.id AS sourceLineId,
r.return_date AS recordTime,
${@cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum@RQC.type} AS qcType,
rl.item_id AS itemId,
rl.quantity AS quantity,
NULL AS vendorId,
NULL AS workOrderId,
NULL AS workstationId,
NULL AS taskId,
r.client_id AS clientId
FROM mes_wm_return_sales r
JOIN mes_wm_return_sales_line rl ON r.id = rl.return_id
WHERE r.status = ${@cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum@CONFIRMED.status}
AND rl.rqc_check_flag = 1
AND rl.rqc_id IS NULL
AND rl.quality_status = ${@cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum@PENDING.status}
AND r.deleted = 0
AND rl.deleted = 0
) t
<where>
<if test="sourceDocCode != null and sourceDocCode != ''">
AND t.sourceDocCode LIKE CONCAT('%', #{sourceDocCode}, '%')
</if>
<if test="qcType != null">
AND t.qcType = #{qcType}
</if>
<if test="itemId != null">
AND t.itemId = #{itemId}
</if>
</where>
ORDER BY t.recordTime DESC
</select>
</mapper>

View File

@@ -0,0 +1,42 @@
<?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="cn.iocoder.yudao.module.mes.dal.mysql.wm.batch.MesWmBatchMapper">
<resultMap id="BatchTraceResult" type="cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO">
<id property="id" column="batch_id"/>
<result property="code" column="batch_code"/>
<result property="workOrderId" column="work_order_id"/>
<result property="itemId" column="item_id"/>
</resultMap>
<!--
向前追溯:从某个原材料批次出发,查找它被哪些工单消耗后,产出了哪些成品批次
SQL 路径:消耗明细(icd) → 消耗单(ic) → 报工记录(pf) → 生产入库单(pp) → 入库行(ppl)
-->
<select id="selectListByForward" parameterType="String" resultMap="BatchTraceResult">
SELECT DISTINCT pf.work_order_id, pf.item_id, ppl.batch_id, ppl.batch_code
FROM mes_wm_item_consume_detail icd
LEFT JOIN mes_wm_item_consume ic ON icd.consume_id = ic.id AND ic.deleted = 0
LEFT JOIN mes_pro_feedback pf ON pf.id = ic.feedback_id AND pf.deleted = 0
LEFT JOIN mes_wm_product_produce pp ON pp.work_order_id = ic.work_order_id AND pp.deleted = 0
LEFT JOIN mes_wm_product_produce_line ppl ON pp.id = ppl.produce_id AND ppl.deleted = 0
WHERE icd.batch_code = #{batchCode}
AND icd.deleted = 0
</select>
<!--
向后追溯:从某个成品批次出发,查找生产它时消耗了哪些原材料批次
SQL 路径:入库明细(ppd) → 入库单(pp) → 消耗单(ic) → 消耗明细(icd)
-->
<select id="selectListByBackward" parameterType="String" resultMap="BatchTraceResult">
SELECT DISTINCT ic.work_order_id, icd.item_id, icd.batch_id, icd.batch_code
FROM mes_wm_product_produce_detail ppd
LEFT JOIN mes_wm_product_produce pp ON ppd.produce_id = pp.id AND pp.deleted = 0
LEFT JOIN mes_wm_item_consume ic ON pp.work_order_id = ic.work_order_id AND ic.deleted = 0
LEFT JOIN mes_wm_item_consume_detail icd ON ic.id = icd.consume_id AND icd.deleted = 0
WHERE ppd.batch_code = #{batchCode}
AND ppd.deleted = 0
AND icd.batch_code IS NOT NULL
</select>
</mapper>