From 640700044e317f682735de353205c3a7ac0ef4ec Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Thu, 6 Aug 2026 22:56:32 +0800 Subject: [PATCH] =?UTF-8?q?List=20=E5=8D=A1=E7=89=87=E7=9A=84=E3=80=8C?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=B7=A5=E5=96=AE=E3=80=8D=E7=8F=BE=E5=9C=A8?= =?UTF-8?q?=E5=8F=AA=E6=9C=89=20ADMIN=20=E6=89=8D=E6=9C=83=E9=A1=AF?= =?UTF-8?q?=E7=A4=BA=EF=BC=8C=E9=9D=9E=20ADMIN=20=E5=AE=8C=E5=85=A8?= =?UTF-8?q?=E7=9C=8B=E4=B8=8D=E5=88=B0=E6=8C=89=E9=88=95=E3=80=82=20?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=B7=A5=E5=96=AE=EF=BC=8F=E5=AE=8C=E6=88=90?= =?UTF-8?q?=20API=20=E6=94=B9=E7=82=BA=E5=83=85=20ADMIN=EF=BC=9B=E3=80=8C?= =?UTF-8?q?=E5=B7=A5=E5=96=AE=E7=94=9F=E7=94=A2=E6=B5=81=E7=A8=8B=E3=80=8D?= =?UTF-8?q?tab=20=E5=83=85=20ADMIN=20=E5=8F=AF=E8=A6=8B=EF=BC=9B=E3=80=8C?= =?UTF-8?q?=E5=B7=B2=E6=8F=90=E6=96=99=E3=80=8D=E6=94=B9=E7=82=BA=E5=85=A8?= =?UTF-8?q?=E9=83=A8=20POL=20completed=EF=BC=9B=E6=96=87=E6=A1=88=E3=80=8C?= =?UTF-8?q?=E6=9C=AA=E6=8F=90=E6=96=99=E3=80=8D=E2=86=92=E3=80=8C=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=8F=90=E6=96=99=E3=80=8D=EF=BC=8FPick=20in?= =?UTF-8?q?complete=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fpsms/config/security/SecurityConfig.java | 6 ++-- .../pickOrder/entity/PickOrderRepository.kt | 35 ++++++++++--------- .../entity/ProductProcessRepository.kt | 4 +-- .../service/ProductProcessService.kt | 2 +- .../web/ProductProcessController.kt | 2 +- .../modules/user/service/GroupService.java | 2 +- .../01_product_process_complete_authority.sql | 2 +- 7 files changed, 28 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/config/security/SecurityConfig.java b/src/main/java/com/ffii/fpsms/config/security/SecurityConfig.java index 842f330..e59628a 100644 --- a/src/main/java/com/ffii/fpsms/config/security/SecurityConfig.java +++ b/src/main/java/com/ffii/fpsms/config/security/SecurityConfig.java @@ -75,7 +75,7 @@ public class SecurityConfig { } /** - * FP-MTMS Version Checklist | Functions Ref. No. 51 | v1.0.0 | 2026-08-05 + * FP-MTMS Version Checklist | Functions Ref. No. 51 | v1.0.1 | 2026-08-06 * FP-MTMS Version Checklist | Functions Ref. No. 3 | v1.0.5 | 2026-08-05 * (stockAdjustment/submit → INVENTORY_ADJUST only) */ @@ -122,9 +122,9 @@ public class SecurityConfig { .hasAuthority("ITEM_TRACING") .requestMatchers(HttpMethod.GET, "/inventoryLotLine/trace/location/**") .hasAuthority("ITEM_TRACING") - /* 工單 生產流程 完成工單 */ + /* 工單 生產流程 完成工單:僅 ADMIN */ .requestMatchers(HttpMethod.POST, "/product-process/Demo/ProcessLine/complete/**") - .hasAuthority("PRODUCT_PROCESS") + .hasAuthority("ADMIN") /* 工序「已完成」(Just Pass):僅 ADMIN */ .requestMatchers(HttpMethod.POST, "/product-process/Demo/ProcessLine/pass/**") .hasAuthority("ADMIN") diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt index 9700536..12462c3 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt @@ -256,31 +256,34 @@ fun findAllReleasedJoWorkbenchPickOrders( fun incrementSubmittedLines(@Param("pickOrderId") pickOrderId: Long): Int /** - * FP-MTMS Version Checklist | Functions Ref. No. 41 | v1.0.0 | 2026-08-03 - * JO ids that have at least one stock_out_line counted as picked - * (checked / partially_completed / completed / picking, or rejected with qty > 0). + * FP-MTMS Version Checklist | Functions Ref. No. 41 | v1.0.1 | 2026-08-06 + * JO ids whose pick order lines are all completed (one JO ↔ one pick order in practice). + * Used for production-process 「已提料」 bucket. */ @Query( value = """ - SELECT DISTINCT po.joId + SELECT po.joId FROM pick_order po INNER JOIN pick_order_line pol ON pol.poId = po.id AND pol.deleted = 0 - INNER JOIN stock_out_line sol ON sol.pickOrderLineId = pol.id AND sol.deleted = 0 WHERE po.deleted = 0 AND po.joId IN (:joIds) - AND ( - LOWER(COALESCE(sol.status, '')) IN ('checked', 'partially_completed', 'completed', 'picking') - OR (LOWER(COALESCE(sol.status, '')) = 'rejected' AND COALESCE(sol.qty, 0) > 0) - ) + GROUP BY po.joId, po.id + HAVING COUNT(*) > 0 + AND COUNT(*) = SUM( + CASE WHEN LOWER(COALESCE(pol.status, '')) = 'completed' THEN 1 ELSE 0 END + ) """, nativeQuery = true, ) fun findPickedJobOrderIds(@Param("joIds") joIds: Collection): List - /** Unlimited: picked + product process still pending / not started. */ + /** + * FP-MTMS Version Checklist | Functions Ref. No. 41 | v1.0.1 | 2026-08-06 + * Unlimited: all POL completed + product process still pending / not started. + */ @Query( value = """ - SELECT DISTINCT po.joId + SELECT po.joId FROM pick_order po INNER JOIN job_order jo ON jo.id = po.joId @@ -293,13 +296,13 @@ fun incrementSubmittedLines(@Param("pickOrderId") pickOrderId: Long): Int AND LOWER(pp.status) = 'pending' AND pp.startTime IS NULL INNER JOIN pick_order_line pol ON pol.poId = po.id AND pol.deleted = 0 - INNER JOIN stock_out_line sol ON sol.pickOrderLineId = pol.id AND sol.deleted = 0 WHERE po.deleted = 0 AND po.joId IS NOT NULL - AND ( - LOWER(COALESCE(sol.status, '')) IN ('checked', 'partially_completed', 'completed', 'picking') - OR (LOWER(COALESCE(sol.status, '')) = 'rejected' AND COALESCE(sol.qty, 0) > 0) - ) + GROUP BY po.joId, po.id + HAVING COUNT(*) > 0 + AND COUNT(*) = SUM( + CASE WHEN LOWER(COALESCE(pol.status, '')) = 'completed' THEN 1 ELSE 0 END + ) """, nativeQuery = true, ) diff --git a/src/main/java/com/ffii/fpsms/modules/productProcess/entity/ProductProcessRepository.kt b/src/main/java/com/ffii/fpsms/modules/productProcess/entity/ProductProcessRepository.kt index ce34319..46b4863 100644 --- a/src/main/java/com/ffii/fpsms/modules/productProcess/entity/ProductProcessRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/productProcess/entity/ProductProcessRepository.kt @@ -57,7 +57,7 @@ interface ProductProcessRepository : JpaRepository, JpaSpe ): List /** - * FP-MTMS Version Checklist | Functions Ref. No. 41 | v1.0.0 | 2026-08-03 + * FP-MTMS Version Checklist | Functions Ref. No. 41 | v1.0.1 | 2026-08-06 * Production list lookback: inclusive date range on ProductProcess.date. */ @Query( @@ -114,7 +114,7 @@ interface ProductProcessRepository : JpaRepository, JpaSpe GROUP BY p.jobOrder.id """ ) - /** FP-MTMS Version Checklist | Functions Ref. No. 41 | v1.0.0 | 2026-08-03 */ + /** FP-MTMS Version Checklist | Functions Ref. No. 41 | v1.0.1 | 2026-08-06 */ fun findCandidateJobOrderAggregatesByJobOrderIds( @Param("jobOrderIds") jobOrderIds: Collection, @Param("itemCode") itemCode: String?, diff --git a/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt b/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt index f52fd6e..682faa1 100644 --- a/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt +++ b/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt @@ -1498,7 +1498,7 @@ open class ProductProcessService( } /** - * FP-MTMS Version Checklist | Functions Ref. No. 41 | v1.0.0 | 2026-08-03 + * FP-MTMS Version Checklist | Functions Ref. No. 41 | v1.0.1 | 2026-08-06 * QC 列表:按 jobOrder 粒度分页,qcReady 由该 jobOrder 下所有 productProcessLine 是否全部 Completed/Pass 决定。 * * 注意:date/itemCode/jobOrderCode/bomIds 用来筛选“候选 jobOrder”,但 qcReady 判断会用该 jobOrder 下全部 productProcessLine。 diff --git a/src/main/java/com/ffii/fpsms/modules/productProcess/web/ProductProcessController.kt b/src/main/java/com/ffii/fpsms/modules/productProcess/web/ProductProcessController.kt index 350ce48..5ad8842 100644 --- a/src/main/java/com/ffii/fpsms/modules/productProcess/web/ProductProcessController.kt +++ b/src/main/java/com/ffii/fpsms/modules/productProcess/web/ProductProcessController.kt @@ -200,7 +200,7 @@ class ProductProcessController( return productProcessService.getAllJoborderProductProcessInfo(bomType) } - /** FP-MTMS Version Checklist | Functions Ref. No. 41 | v1.0.0 | 2026-08-03 */ + /** FP-MTMS Version Checklist | Functions Ref. No. 41 | v1.0.1 | 2026-08-06 */ @GetMapping("/Demo/Process/search") fun demoprocesssearch( @RequestParam(required = false) date: String?, diff --git a/src/main/java/com/ffii/fpsms/modules/user/service/GroupService.java b/src/main/java/com/ffii/fpsms/modules/user/service/GroupService.java index d78acaf..707f196 100644 --- a/src/main/java/com/ffii/fpsms/modules/user/service/GroupService.java +++ b/src/main/java/com/ffii/fpsms/modules/user/service/GroupService.java @@ -187,7 +187,7 @@ public class GroupService extends AbstractBaseEntityService> listAuth(Map args) { diff --git a/src/main/resources/db/changelog/changes/20260805_product_process_complete/01_product_process_complete_authority.sql b/src/main/resources/db/changelog/changes/20260805_product_process_complete/01_product_process_complete_authority.sql index d08ede3..9b6d5cf 100644 --- a/src/main/resources/db/changelog/changes/20260805_product_process_complete/01_product_process_complete_authority.sql +++ b/src/main/resources/db/changelog/changes/20260805_product_process_complete/01_product_process_complete_authority.sql @@ -3,6 +3,6 @@ --changeset fpsms:product_process_complete_authority --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM authority WHERE authority = 'PRODUCT_PROCESS' ---comment: FP-MTMS Version Checklist | Functions Ref. No. 51 | v1.0.0 | 2026-08-05 — Allow completing job order product process lines (工單 生產流程 完成工單) +--comment: FP-MTMS Version Checklist | Functions Ref. No. 51 | v1.0.1 | 2026-08-06 — Allow completing job order product process lines (工單 生產流程 完成工單) INSERT IGNORE INTO `authority` (`authority`, `name`, `module`, `description`) VALUES ('PRODUCT_PROCESS', '工單 生產流程 完成工單', 'JOB_ORDER', 'Allow completing job order product process lines');