# `Sp_unifiedPlanning_BtnCalculation` (procedure) > @author:钱豹 @date:20210711 封存 @describe: 主生产计划界面,确认计划 调用本过程,主要功能: 1、收回特定条件(如故障 返回重排) 的机台任务 2、计算每个机台的任务开始时间,负荷, 3、按机器中的排程规格,更新每个机台的IORDER 4、按工艺路线,更改机台的开始时间,推算交期 - **Type:** PROCEDURE - **Deterministic:** NO - **SQL data access:** CONTAINS SQL ## Parameters | # | Mode | Name | Type | |---|---|---|---| | 1 | IN | `sProInParam` | `varchar(10000)` | | 2 | IN | `sMakePerson` | `varchar(100)` | | 3 | IN | `sBrId` | `varchar(100)` | | 4 | IN | `sSuId` | `varchar(100)` | | 5 | OUT | `sReturn` | `varchar(1000)` | | 6 | OUT | `sCode` | `int` | ## Body _Body is not pre-cached. To inspect: `mysql --defaults-file=~/.my.cnf -e 'SHOW CREATE PROCEDURE `Sp_unifiedPlanning_BtnCalculation`'`._ ## Narrative **Business context:** 生产管理 → 生产排程 / 主生产计划 — 统一规划(机台) recompute. Author 钱豹's header documents the four-step pipeline run when a planner clicks 确认计划 on the 主生产计划 screen: (1) reclaim machine tasks flagged for rescheduling (e.g. failures, return-for-rework), (2) recompute every machine's task-start time and load, (3) re-sequence `iOrder` per machine according to its scheduling rule, (4) walk the routing to update successor-process start times and back-derive 交期. **What it does:** Parses `$.params[*].value[*]` from `sProInParam` to get the target machine, `sCurrStatus`, and `tCStartTime`. Iterates the active `mftproductionplanslave` rows (sState in 1,2, bFrozen=0) for that machine, calls `Sp_GetMachineByApsRule` per slave to fit the APS rule, then inserts a marker row into `mftproductionplancalc`. The companion 工艺路线 walk is delegated to `Sp_unifiedPlanning_BtnCalculation_workorder`, which fans out to `Sp_unifiedPlanning_BtnCalculation_workorder_calc` per work-order. **Invocation:** Two entry points — both Java-side. (1) `GenericProcedureCallServiceImpl.doGenericProcedureCall()` short-circuits the generic CALL when `sProName='Sp_unifiedPlanning_BtnCalculation'` and `sCurrStatus IN (2,3)`, instead calling `BtnCalculationServiceImpl.doSp_unifiedPlanning_BtnCalculation(sMachineId, sBrandsId, sSubsidiaryId, iOrder, sMakePerson, tCStartTime, sLanguage)` — the per-machine APS path that uses MyBatis cursors and a parallel `ExecutorService`. (2) Same service's overload (`sProInParam, sMakePerson, sBrId, sSuId`) `{CALL Sp_unifiedPlanning_BtnCalculation(...)}` invokes this proc directly. xly-src ships `script/标版/30100101/schedule/Sp_unifiedPlanning_BtnCalculation.sql`.