|
|
@@ -84,6 +84,7 @@ class OrderSuperLoss extends Api
|
|
|
* 报废定额=(基础损耗+损耗率*计划产量)*损耗系数*计损色数(特定工序会有,如果无就不乘)
|
|
|
* 允损比例=报废定额/计划产量
|
|
|
* 目标合格率 = 100%-超节损工单中显示工序的允损比例之和
|
|
|
+ * 节损奖 小盒0.02 大盒0.09
|
|
|
*
|
|
|
*/
|
|
|
public function getList(){
|
|
|
@@ -110,7 +111,7 @@ class OrderSuperLoss extends Api
|
|
|
if (!empty($params['date']) || !empty($params['code'])) {
|
|
|
$this->error('参数错误');
|
|
|
}
|
|
|
- $where['a.成品名称'] = array('like','%'.$params['search'].'%');
|
|
|
+ $where['a.成品名称|a.jjcp_gdbh'] = array('like','%'.$params['search'].'%');
|
|
|
}
|
|
|
$where['b.行号' ] = 1;
|
|
|
$where['a.jjcp_smb' ] = array('IN', array('末 板', '末板'));
|
|
|
@@ -122,8 +123,11 @@ class OrderSuperLoss extends Api
|
|
|
if (empty($pages)){
|
|
|
$pages = 1;
|
|
|
}
|
|
|
-// halt($where);
|
|
|
- $is_have_cache = false;
|
|
|
+ $str = '';
|
|
|
+ if (empty($params['search'])){
|
|
|
+ $str = '/'.$date . '/' . $params['code'].'/'.$pages;
|
|
|
+ }
|
|
|
+ $is_have_cache = Cache::get('OrderSuperLoss/getList'.$str);
|
|
|
if ($is_have_cache === false){
|
|
|
if (!empty($params['code'])){
|
|
|
$data = db('成品入仓')->alias('a')
|
|
|
@@ -172,18 +176,22 @@ class OrderSuperLoss extends Api
|
|
|
UNION SELECT sczl_gxh FROM db_sczl WHERE sczl_gdbh = '{$value['Gd_gdbh']}') AS combined_result";
|
|
|
$gxh_arr = Db::query($gxh_sql);
|
|
|
$gxh_values = array_column($gxh_arr, 'sczl_gxh');
|
|
|
- $gy_data =db('工单_工艺资料')->where('Gy0_gdbh',$value['Gd_gdbh'])->where('Gy0_gxh','in',$gxh_values)->field('Gy0_计划接货数,Gy0_计划损耗')->select();
|
|
|
+ $gy_data =db('工单_工艺资料')->where('Gy0_gdbh',$value['Gd_gdbh'])->where('Gy0_gxh','in',$gxh_values)->field('Gy0_gxmc,Gy0_计划接货数,Gy0_计划损耗')->select();
|
|
|
$arr = [];
|
|
|
$plan_loss = [];//工单计划损耗
|
|
|
+ $machine_plan_loss = 0;//机检计划损耗
|
|
|
foreach ($gy_data as $k=>$v){
|
|
|
if ($v['Gy0_计划接货数'] > 0){
|
|
|
$rate = round($v['Gy0_计划损耗'] / $v['Gy0_计划接货数'],5);
|
|
|
}else{
|
|
|
$rate = 0;
|
|
|
}
|
|
|
-
|
|
|
$arr[$k] = floor($rate * 10000) /10000;
|
|
|
$plan_loss[$k] = $v['Gy0_计划损耗'];
|
|
|
+
|
|
|
+// if (strpos($v['Gy0_gxmc'],'机检') !== false){
|
|
|
+// $machine_plan_loss = $v['Gy0_计划损耗'];
|
|
|
+// }
|
|
|
}
|
|
|
if ($value['实际投料'] >0 ){
|
|
|
$target_rate = (1-array_sum($arr))*100;
|
|
|
@@ -194,10 +202,6 @@ class OrderSuperLoss extends Api
|
|
|
$data[$key]['target_rate'] = ''; //目标合格率
|
|
|
$data[$key]['real_rate'] = '';//实际合格率
|
|
|
}
|
|
|
-
|
|
|
- //奖惩系数及金额
|
|
|
- $data[$key]['reward_rate'] = '1';
|
|
|
- $data[$key]['reward_money'] = '';
|
|
|
//制程废品
|
|
|
$zzfp_data =db('设备_产量计酬')->where('sczl_gdbh',$value['Gd_gdbh'])->field('SUM(sczl_zcfp) as sczl_zcfp')->select();
|
|
|
$data[$key]['zcfp'] = $zzfp_data[0]['sczl_zcfp'] * $value['yj_ls'];//制程废品
|
|
|
@@ -218,10 +222,12 @@ class OrderSuperLoss extends Api
|
|
|
$quality = [];//质检废数组
|
|
|
$material = [];//材料废数组
|
|
|
$change = [];//零头处理数组
|
|
|
+ $machine = [];//机检废品数组
|
|
|
$j = 0;
|
|
|
$m = 0;
|
|
|
$n = 0;
|
|
|
$l = 0;
|
|
|
+ $o = 0;
|
|
|
foreach ($waste_out as $entry) {
|
|
|
for ($i = 1; $i <= 13; $i++) {
|
|
|
$labelKey = "fp_lb" . $i;
|
|
|
@@ -247,23 +253,50 @@ class OrderSuperLoss extends Api
|
|
|
$quality[$m]= $entry[$slKey];
|
|
|
$m++;
|
|
|
}
|
|
|
+// if ($entry[$bhKey] != '000000' && substr($entry[$labelKey],0,3) == 'K01'){
|
|
|
+// $machine[$o]= $entry[$slKey];
|
|
|
+// $o++;
|
|
|
+// }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+// $machine_waste = array_sum($machine);//机检废品
|
|
|
+// if ($data[$key]['Gd_gdbh'] == '2401746'){
|
|
|
+// halt($machine_waste);
|
|
|
+// }
|
|
|
+// $data[$key]['工单计划损耗'] = array_sum($plan_loss);//工单计划损耗
|
|
|
+// /**
|
|
|
+// * 奖惩系数及金额
|
|
|
+// * 奖惩金额 = 工单节损数 * 0.02(0.09)
|
|
|
+// * 工单节损数 = 工单计划损耗 - 废品总数 - 机检节损数
|
|
|
+// * 机检节损数 = 机检计划损耗 - 机检质检废品
|
|
|
+// */
|
|
|
+// $machine_loss = $machine_plan_loss - $machine_waste;
|
|
|
+// $order_loss = $data[$key]['工单计划损耗'] - $data[$key]['废品合计'] - $machine_loss;
|
|
|
+// if (strpos($data[$key]['成品名称'],'小盒')){
|
|
|
+// $moneyRate = 0.02;
|
|
|
+// }else{
|
|
|
+// $moneyRate = 0.09;
|
|
|
+// }
|
|
|
+// $reward = $order_loss * $moneyRate;
|
|
|
+ $data[$key]['reward_rate'] = '1';
|
|
|
+// $data[$key]['reward_money'] = number_format($reward,2);
|
|
|
+ $data[$key]['reward_money'] = '';
|
|
|
$data[$key]['材料废'] = array_sum($material); //材料废
|
|
|
$data[$key]['零头处理'] = array_sum($change); //零头处理
|
|
|
$data[$key]['外发废'] = array_sum($list);//外发废
|
|
|
$data[$key]['分摊废'] = '';//分摊废
|
|
|
- $data[$key]['工单计划损耗'] = array_sum($plan_loss);//工单计划损耗
|
|
|
$data[$key]['工单质检废'] = array_sum($quality); //质检废
|
|
|
}
|
|
|
$res = [
|
|
|
'data'=>$data,
|
|
|
'total' => $total
|
|
|
];
|
|
|
-// Cache::set('OrderSuperLoss/getList'.$params['date'],$res,3600);
|
|
|
+ if ($str != false){
|
|
|
+ Cache::set('OrderSuperLoss/getList'.$str,$res,3600);
|
|
|
+ }
|
|
|
}else{
|
|
|
-// $res = Cache::get('OrderSuperLoss/getList'.$params['date']);
|
|
|
+ $res = Cache::get('OrderSuperLoss/getList'.$str);
|
|
|
}
|
|
|
$this->success('请求成功',$res);
|
|
|
}
|
|
|
@@ -306,6 +339,7 @@ class OrderSuperLoss extends Api
|
|
|
* 工单超节损统计
|
|
|
* @ApiMethod GET
|
|
|
* @params string order
|
|
|
+ * 节损奖 小盒0.02 大盒0.09
|
|
|
*/
|
|
|
public function getOrderSuperLossCount(){
|
|
|
if (Request::instance()->isGet() == false) {
|
|
|
@@ -360,9 +394,9 @@ class OrderSuperLoss extends Api
|
|
|
//制程废品
|
|
|
$zzfp_data =db('设备_产量计酬')->where('sczl_gdbh',$order)->field('SUM(sczl_zcfp) as sczl_zcfp')->select();
|
|
|
//联数
|
|
|
- $ls =db('工单_印件资料')->where('Yj_Gdbh',$order)->value('yj_ls');
|
|
|
+ $ls =db('工单_工艺资料')->where('Gy0_gdbh',$order)->field('Gy0_ls')->find();
|
|
|
//制程废品*ls
|
|
|
- $data['zcfp'] = $zzfp_data[0]['sczl_zcfp'] * $ls;
|
|
|
+ $data['zcfp'] = $zzfp_data[0]['sczl_zcfp'] * $ls['Gy0_ls'];
|
|
|
//废品数量
|
|
|
$wasteTotal = db('db_qczl')->where('qczl_gdbh',$order)->sum('qczl_fp');
|
|
|
if (empty($wasteTotal)){
|
|
|
@@ -427,6 +461,7 @@ class OrderSuperLoss extends Api
|
|
|
$total['total_fp'] = 0;
|
|
|
$total['waste_quality'] = 0;
|
|
|
$total['waste_intangible'] = 0;
|
|
|
+ $total['reward'] = 0;
|
|
|
//按工序打印
|
|
|
if ($params['type'] == 1){
|
|
|
$total['total_waste'] = 0;
|
|
|
@@ -436,7 +471,7 @@ class OrderSuperLoss extends Api
|
|
|
$gy_data[$k]['total_fp'] = $item['total_fp'] * $item['Gy0_ls'];
|
|
|
$gy_data[$k]['total_cl'] = $item['total_cl'] * $item['Gy0_ls'];
|
|
|
//无形损
|
|
|
- $gy_data[$k]['intangible_loss'] = round($item['Gy0_计划损耗'] / $plan_total * $data['intangible_loss']);
|
|
|
+ $gy_data[$k]['intangible_loss'] = round(number_format($item['Gy0_计划损耗']/$plan_total,4) * $data['intangible_loss']);
|
|
|
foreach ($waste_out as $entry) {
|
|
|
for ($i = 1; $i <= 13; $i++) {
|
|
|
$gxmcKey = "fp_gxmc" . $i;
|
|
|
@@ -466,14 +501,26 @@ class OrderSuperLoss extends Api
|
|
|
//工序实际报废率
|
|
|
$gy_data[$k]['actual_loss_rate'] = number_format($gy_data[$k]['total_waste'] / $item['Gy0_计划接货数'],4) * 100 .'%';
|
|
|
$gy_data[$k]['超节损承担比例'] = number_format($item['超节损承担比例'],4) * 100 .'%';
|
|
|
-
|
|
|
+ //工序超节损金额
|
|
|
+ if (strpos($data['成品名称'],'小盒')){
|
|
|
+ $moneyRate = 0.02;
|
|
|
+ }else{
|
|
|
+ $moneyRate = 0.09;
|
|
|
+ }
|
|
|
+ if (strpos($item['Gy0_gxmc'],'机检') !== false){
|
|
|
+ $gy_data[$k]['工序超节损金额'] = '0.000000';
|
|
|
+ }else{
|
|
|
+ $gy_data[$k]['工序超节损金额'] = number_format($gy_data[$k]['loss'] * $item['超节损承担比例'] * $moneyRate,4);
|
|
|
+ }
|
|
|
$total['plan_loss'] += $gy_data[$k]['Gy0_计划损耗'];
|
|
|
$total['total_fp'] += $gy_data[$k]['total_fp'];
|
|
|
$total['waste_quality'] += $gy_data[$k]['waste_quality'];
|
|
|
$total['waste_intangible'] += $gy_data[$k]['intangible_loss'];
|
|
|
$total['total_waste'] += $gy_data[$k]['total_waste'];
|
|
|
$total['loss'] += $gy_data[$k]['loss'];
|
|
|
+ $total['reward'] += $gy_data[$k]['工序超节损金额'];
|
|
|
}
|
|
|
+ $total['reward'] = number_format($total['reward'],2);
|
|
|
$data['gy_data'] = $gy_data;
|
|
|
$data['total'] = $total;
|
|
|
$this->success('请求成功',$data);
|
|
|
@@ -511,9 +558,7 @@ class OrderSuperLoss extends Api
|
|
|
->group('b.sczl_gxh, b.sczl_bh1, CASE WHEN b.sczl_bh2 = "000000" THEN "" ELSE b.sczl_bh2 END, b.sczl_bh3,
|
|
|
b.sczl_bh4, b.sczl_bh5, b.sczl_bh6, b.sczl_bh7, b.sczl_bh8, b.sczl_bh9, c.sczl_bh1')
|
|
|
->order('a.Gy0_gxh asc, b.开工时间 asc, c.sczl_rq desc')
|
|
|
-// ->fetchSql(true)
|
|
|
->select();
|
|
|
-// halt($gy_data);
|
|
|
foreach ($gy_data as $key=>$value){
|
|
|
$gy_data[$key]['Gy0_yjno'] = $value['Gy0_yjno'] > 10 ? $value['Gy0_yjno'] : '0'.$value['Gy0_yjno'];
|
|
|
//每道工序的产量(按班组分)
|
|
|
@@ -554,13 +599,11 @@ class OrderSuperLoss extends Api
|
|
|
$bhKey = "fp_bh" . $i;
|
|
|
if ((int)substr($entry[$gxmcKey],0,2) == $value['Gy0_gxh'] && $entry[$bhKey] == $value['sczl_bh1']){
|
|
|
$gy_data[$key]['质检废'] += $entry[$slKey];
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//无形损分摊
|
|
|
$gy_data[$key]['无形损分摊'] = round($gy_data[$key]['计划损耗'] / $plan_total * $data['intangible_loss']);
|
|
|
- $gy_data[$key]['超节损承担比例'] = number_format($value['超节损承担比例'],4) * 100 .'%';
|
|
|
//班组成员
|
|
|
$nameArr = [];
|
|
|
for ($j = 1; $j <= 10; $j++) {
|
|
|
@@ -578,7 +621,6 @@ class OrderSuperLoss extends Api
|
|
|
unset($gy_data[$key]['sczl_bh']);
|
|
|
|
|
|
}
|
|
|
-// halt($gy_data);
|
|
|
//重新计算多班组同组长的质检废,质检废 = 班组产量 / 总产量 * 质检废
|
|
|
$totals = [];
|
|
|
foreach ($gy_data as $item) {
|
|
|
@@ -607,12 +649,27 @@ class OrderSuperLoss extends Api
|
|
|
$total_waste = $item['质检废'] + $item['sczl_zcfp'];
|
|
|
}
|
|
|
$gy_data[$i]['节损数量'] = $item['计划损耗'] - $total_waste;
|
|
|
- $i++;
|
|
|
+ //节损奖
|
|
|
+ if (strpos($data['成品名称'],'小盒')){
|
|
|
+ $moneyRate = 0.02;
|
|
|
+ }else{
|
|
|
+ $moneyRate = 0.09;
|
|
|
+ }
|
|
|
+ if (strpos($item['sczl_gxmc'],'机检') !== false){
|
|
|
+ $gy_data[$i]['节损奖'] = 0;
|
|
|
+ }else{
|
|
|
+ $gy_data[$i]['节损奖'] = number_format($gy_data[$i]['节损数量'] * $item['超节损承担比例'] * $moneyRate,4);
|
|
|
+ }
|
|
|
+ $gy_data[$i]['超节损承担比例'] = number_format($item['超节损承担比例'],4) * 100 .'%';
|
|
|
+
|
|
|
$total['plan_loss'] += $item['计划损耗'];
|
|
|
$total['total_fp'] += $item['sczl_zcfp'];
|
|
|
$total['waste_quality'] += $item['质检废'];
|
|
|
$total['waste_intangible'] += $item['无形损分摊'];
|
|
|
+ $total['reward'] += $gy_data[$i]['节损奖'];
|
|
|
+ $i++;
|
|
|
}
|
|
|
+ $total['reward'] = number_format($total['reward'],2);
|
|
|
$data['gy_data'] = $gy_data;
|
|
|
$data['total'] = $total;
|
|
|
$this->success('请求成功',$data);
|