|
|
@@ -1762,14 +1762,23 @@ class OrderSuperLoss extends Api
|
|
|
$list['考核'] = ($status == 1) ? '不参与考核' : '参与考核';
|
|
|
|
|
|
$list['实际投料'] = $list['实际投料']*10000;
|
|
|
- //目标合格率
|
|
|
- $list['target_rate'] = ($list['实际投料']-$list['计划损耗'])/$list['实际投料']*100;
|
|
|
- $list['target_rate'] = number_format($list['target_rate'],2);
|
|
|
- $list['target_rate'] = $list['target_rate'].'%';
|
|
|
- //实际合格率
|
|
|
- $list['real_rate'] = $list['warehousing_num']/($list['实际投料'])*100;
|
|
|
- $list['real_rate'] = number_format($list['real_rate'],2);
|
|
|
- $list['real_rate'] = $list['real_rate'].'%';
|
|
|
+ $feedQty = floatval($list['实际投料']);
|
|
|
+ $gxhValues = $this->getSuperLossProcessGxhList($param['order'], $param['yjno']);
|
|
|
+ $targetRateVal = $this->calcSuperLossTargetQualificationRate(
|
|
|
+ $param['order'],
|
|
|
+ $param['yjno'],
|
|
|
+ $gxhValues
|
|
|
+ );
|
|
|
+ $realRateVal = $feedQty > 0 ? (floatval($list['warehousing_num']) / $feedQty * 100) : 0.0;
|
|
|
+ $rewardMultiplier = $this->resolveSuperLossRewardMultiplier(
|
|
|
+ $targetRateVal,
|
|
|
+ $realRateVal,
|
|
|
+ floatval($list['材料废'] ?? 0),
|
|
|
+ $feedQty
|
|
|
+ );
|
|
|
+ $list['reward_rate'] = (string)$rewardMultiplier;
|
|
|
+ $list['target_rate'] = number_format($targetRateVal, 2) . '%';
|
|
|
+ $list['real_rate'] = number_format($realRateVal, 2) . '%';
|
|
|
|
|
|
//查询工序数据(字段名与历史 ProcessLoss 一致)
|
|
|
$gy_field = '
|
|
|
@@ -1808,10 +1817,11 @@ class OrderSuperLoss extends Api
|
|
|
if ($this->isSuperLossRewardExcluded((string)$value['Gy0_gxmc'])) {
|
|
|
$gy_data[$key]['工序超节损金额'] = 0;
|
|
|
} else {
|
|
|
- $gy_data[$key]['工序超节损金额'] = round(
|
|
|
- $gy_data[$key]['loss'] * floatval($value['超节损承担比例']) * $moneyRate,
|
|
|
- 4
|
|
|
- );
|
|
|
+ $processReward = $gy_data[$key]['loss'] * floatval($value['超节损承担比例']) * $moneyRate;
|
|
|
+ if ($rewardMultiplier > 1 && $processReward != 0.0) {
|
|
|
+ $processReward *= $rewardMultiplier;
|
|
|
+ }
|
|
|
+ $gy_data[$key]['工序超节损金额'] = round($processReward, 4);
|
|
|
}
|
|
|
$denom = (float)$value['Gy0_计划接货数'];
|
|
|
if ($denom <= 0) {
|
|
|
@@ -2544,7 +2554,7 @@ class OrderSuperLoss extends Api
|
|
|
$strFields = [
|
|
|
'Gd_gdbh', 'yjno', 'ls', '成品代号', '成品名称', '计量单位', 'warehousing_date',
|
|
|
'warehousing_num', '计划损耗', '废品合计', 'intangible_loss', '材料废', '零头处理',
|
|
|
- '外发废', 'zcfp', '班组分摊质检废品', '订单数量', '销售订单号', 'target_rate', 'real_rate', '考核',
|
|
|
+ '外发废', 'zcfp', '班组分摊质检废品', '订单数量', '销售订单号', 'target_rate', 'real_rate', 'reward_rate', '考核',
|
|
|
];
|
|
|
foreach ($strFields as $f) {
|
|
|
if (array_key_exists($f, $list)) {
|
|
|
@@ -2999,7 +3009,7 @@ class OrderSuperLoss extends Api
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 材料费(张数)未超投料 1.5% 时,按目标/实际合格率偏差确定节损金额倍率(边界向下归档)
|
|
|
+ * 材料废(张)占投料超过 1.5% 时,再按目标/实际合格率偏差确定节损金额倍率(边界向下归档)。
|
|
|
*/
|
|
|
private function resolveSuperLossRewardMultiplier(
|
|
|
float $targetRate,
|
|
|
@@ -3010,7 +3020,7 @@ class OrderSuperLoss extends Api
|
|
|
if ($feedQty <= 0) {
|
|
|
return 1.0;
|
|
|
}
|
|
|
- if (($materialWaste / $feedQty) > 0.015) {
|
|
|
+ if (($materialWaste / $feedQty) <= 0.015) {
|
|
|
return 1.0;
|
|
|
}
|
|
|
|