Files
sam-kd/output/common/function.php

80 lines
2.5 KiB
PHP
Raw Permalink Normal View History

<?php
/**
* 컷팅 매수 계산
*
* @param string $itemSelect '실리카'|'와이어'|'화이바'
* @param int $height 원단 세로 길이(mm)
* @return array [
* 'firstCut' => 전체 절단 횟수,
* '900' => 900 규격 매수(0 or 1),
* '800' => 800 규격 매수(0 or 1),
* '600' => 600 규격 매수(0 or 1),
* '400' => 400 규격 매수(0 or 1),
* '300' => 300 규격 매수(0 or 1),
* 'remaining'=> 최종 남은 높이(mm)
* ]
*/
function calculateCutSize(string $itemSelect, int $height): array {
// 1) 기준 폭 선택
switch ($itemSelect) {
case (strpos($itemSelect, '실리') !== false): $value = 1220; $threshold = 940; $itemSelect='실리카'; break;
case (strpos($itemSelect, '와이어') !== false): $value = 1180; $threshold = 900; $itemSelect='와이어'; break;
case (strpos($itemSelect, '화이') !== false): $value = 1200; $threshold = 924; $itemSelect='화이바'; break;
default:
throw new InvalidArgumentException("지원하지 않는 원단: {$itemSelect}");
}
// 2) 시접 추가
$makeVertical = $height
+ 140
+ floor($height / $value) * 40;
// 3) 기본 절단 횟수
$firstCut = (int) floor($makeVertical / $value);
// 4) 남은 높이 계산
$remaining = $makeVertical - ($firstCut * $value);
// 5) 남은 높이가 임계치 넘으면 추가 절단
if ($remaining > $threshold) {
$firstCut++;
// $remaining -= $value;
}
// 6) 공차별 분류 범위 정의
$ranges = [
'실리카' => [
'900' => [841, 940],
'800' => [641, 840],
'600' => [441, 640],
'400' => [341, 440],
'300' => [ 1, 340],
],
'와이어' => [
'900' => [801, 900],
'800' => [601, 800],
'600' => [401, 600],
'400' => [301, 400],
'300' => [ 1, 300],
],
'화이바' => [
'900' => [825, 924],
'800' => [625, 824],
'600' => [425, 624],
'400' => [325, 424],
'300' => [ 1, 324],
],
];
// 7) 결과 배열 구성
$result = [
'firstCut' => $firstCut,
'remaining' => $remaining,
];
foreach ($ranges[$itemSelect] as $key => [$min, $max]) {
$result[$key] = ($remaining >= $min && $remaining <= $max) ? 1 : 0;
}
return $result;
}
?>