|
|
@@ -198,14 +198,15 @@ class OrderSuperLoss extends Api
|
|
|
if (empty($gxh_values)) {
|
|
|
$this->error('未查询到报工工序');
|
|
|
}
|
|
|
+ $sczlProcessSub = $this->buildSczlProcessAggSubSql();
|
|
|
$gy_data =db('工单_工艺资料')
|
|
|
->alias('a')
|
|
|
->field([
|
|
|
'a.Gy0_yjno', 'a.Gy0_gxh', 'RTRIM(a.Gy0_gxmc) as Gy0_gxmc','RTRIM(a.Add_gxmc) as Add_gxmc','a.Gy0_ks', 'a.Gy0_ls', 'a.Gy0_计划接货数*a.Gy0_ls as Gy0_计划接货数',
|
|
|
- 'a.Gy0_计划损耗', 'a.无形损承担比例','a.超节损承担比例','SUM(b.sczl_zcfp) as total_fp','SUM(b.sczl_cl) as total_cl','SUM(c.sczl_cl) as cl','SUM(c.sczl_fp) as fp',
|
|
|
+ 'a.Gy0_计划损耗', 'a.无形损承担比例','a.超节损承担比例','SUM(b.sczl_zcfp) as total_fp','SUM(b.sczl_cl) as total_cl','SUM(c.cl) as cl','SUM(c.fp) as fp',
|
|
|
])
|
|
|
->join('设备_产量计酬 b', 'a.Gy0_gdbh = b.sczl_gdbh AND a.Gy0_yjno = b.sczl_yjno AND a.Gy0_gxh = b.sczl_gxh','left')
|
|
|
- ->join('db_sczl c', 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh','left')
|
|
|
+ ->join([$sczlProcessSub => 'c'], 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh', 'left')
|
|
|
->where([
|
|
|
'a.Gy0_gdbh' => $order,
|
|
|
'a.Gy0_yjno' => $params['yjno'],
|
|
|
@@ -418,6 +419,7 @@ class OrderSuperLoss extends Api
|
|
|
->group('b.sczl_gxh')
|
|
|
->order('a.Gy0_gxh')
|
|
|
->select();
|
|
|
+ $sczlTeamSub = $this->buildSczlTeamAggSubSql();
|
|
|
//按班组分的产量数据
|
|
|
$gy_data =db('工单_工艺资料')
|
|
|
->alias('a')
|
|
|
@@ -426,18 +428,18 @@ class OrderSuperLoss extends Api
|
|
|
'SUM(b.sczl_zcfp) as sczl_zcfp', 'SUM(b.sczl_cl) as total_cl',
|
|
|
'b.sczl_bh1', 'b.sczl_bh2', 'b.sczl_bh3', 'b.sczl_bh4', 'b.sczl_bh5', 'b.sczl_bh6',
|
|
|
'b.sczl_bh7', 'b.sczl_bh8', 'b.sczl_bh9', 'b.sczl_bh10',
|
|
|
- 'rtrim(c.sczl_gxmc) as gxmc', 'SUM(c.sczl_cl) as cl', 'SUM(c.sczl_fp) as fp', 'c.sczl_bh1 as sczl_bh'
|
|
|
+ 'c.gxmc', 'c.cl', 'c.fp', 'c.sczl_bh1 as sczl_bh'
|
|
|
])
|
|
|
->join('设备_产量计酬 b', 'a.Gy0_gdbh = b.sczl_gdbh AND a.Gy0_yjno = b.sczl_yjno AND a.Gy0_gxh = b.sczl_gxh','left')
|
|
|
- ->join('db_sczl c', 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh','left')
|
|
|
+ ->join([$sczlTeamSub => 'c'], 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh AND IFNULL(b.sczl_bh1,\'\') = IFNULL(c.sczl_bh1,\'\')', 'left')
|
|
|
->where([
|
|
|
'a.Gy0_gdbh' => $order,
|
|
|
'a.Gy0_yjno' => $params['yjno'],
|
|
|
'a.Gy0_gxh' => ['in', $gxh_values],
|
|
|
- 'b.sczl_cl|c.sczl_cl' => ['>', 0]
|
|
|
+ 'b.sczl_cl|c.cl' => ['>', 0]
|
|
|
])
|
|
|
->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')
|
|
|
+ b.sczl_bh4, b.sczl_bh5, b.sczl_bh6, b.sczl_bh7, b.sczl_bh8, b.sczl_bh9')
|
|
|
->order('a.Gy0_gxh asc, b.开工时间 asc, c.sczl_rq desc')
|
|
|
->select();
|
|
|
foreach ($gy_data as $key=>$value){
|
|
|
@@ -1172,11 +1174,12 @@ class OrderSuperLoss extends Api
|
|
|
$total['waste_quality'] = 0;
|
|
|
$total['waste_intangible'] = 0;
|
|
|
$total['reward'] = 0; //超节损奖励数组
|
|
|
+ $sczlProcessSubForCl = $this->buildSczlProcessAggSubSql();
|
|
|
//工单产量数据详情查询
|
|
|
$total_cl_data = \db('工单_工艺资料')->alias('a')
|
|
|
- ->field(['a.Gy0_yjno', 'a.Gy0_gxh', 'rtrim(a.Gy0_gxmc) as gxmc', 'a.Gy0_ls', 'SUM(b.sczl_cl) as total_cl', 'SUM(c.sczl_cl) as cl','rtrim(a.印刷方式) as 印刷方式','rtrim(a.版距) as 版距'])
|
|
|
+ ->field(['a.Gy0_yjno', 'a.Gy0_gxh', 'rtrim(a.Gy0_gxmc) as gxmc', 'a.Gy0_ls', 'SUM(b.sczl_cl) as total_cl', 'MAX(c.cl) as cl','rtrim(a.印刷方式) as 印刷方式','rtrim(a.版距) as 版距'])
|
|
|
->join('设备_产量计酬 b', 'a.Gy0_gdbh = b.sczl_gdbh AND a.Gy0_yjno = b.sczl_yjno AND a.Gy0_gxh = b.sczl_gxh', 'left')
|
|
|
- ->join('db_sczl c', 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh', 'left')
|
|
|
+ ->join([$sczlProcessSubForCl => 'c'], 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh', 'left')
|
|
|
->where([
|
|
|
'a.Gy0_gdbh' => $workOrderData['jjcp_gdbh'],
|
|
|
'a.Gy0_yjno' => $workOrderData['jjcp_yjno'],
|
|
|
@@ -1185,6 +1188,7 @@ class OrderSuperLoss extends Api
|
|
|
->group('a.Gy0_gxh')
|
|
|
->order('a.Gy0_gxh')
|
|
|
->select();
|
|
|
+ $sczlTeamSub = $this->buildSczlTeamAggSubSql();
|
|
|
//按班组分的产量数据
|
|
|
$gy_data = db('工单_工艺资料')
|
|
|
->alias('a')
|
|
|
@@ -1195,14 +1199,14 @@ class OrderSuperLoss extends Api
|
|
|
'b.sczl_bh7', 'b.sczl_bh8', 'b.sczl_bh9', 'b.sczl_bh10', 'GROUP_CONCAT(DISTINCT b.sczl_num SEPARATOR ",") AS 流程单',
|
|
|
'b.sczl_bzdh', 'b.sczl_rate1', 'b.sczl_rate2', 'b.sczl_rate3', 'b.sczl_rate4', 'b.sczl_rate5',
|
|
|
'b.sczl_rate6', 'b.sczl_rate7', 'b.sczl_rate8', 'b.sczl_rate9', 'b.sczl_rate10',
|
|
|
- 'rtrim(c.sczl_gxmc) as gxmc', 'SUM(c.sczl_cl) as cl', 'SUM(c.sczl_fp) as fp', 'c.sczl_bh1 as sczl_bh',
|
|
|
- 'd.使用部门 as 使用部门', 'c.sczl_bzdh as bzdh', 'b.sczl_jtbh', 'a.损耗系数', 'a.Gy0_ms', 'a.Gy0_Rate0',
|
|
|
+ 'c.gxmc', 'c.cl', 'c.fp', 'c.sczl_bh1 as sczl_bh',
|
|
|
+ 'd.使用部门 as 使用部门', 'c.bzdh', 'b.sczl_jtbh', 'a.损耗系数', 'a.Gy0_ms', 'a.Gy0_Rate0',
|
|
|
'a.Gy0_Rate1', 'a.无形损承担比例', 'a.Gy0_计划接货数*a.Gy0_ls*a.Gy0_ks as 计划产量', 'e.Gd_客户代号', 'e.Gd_客户名称',
|
|
|
'e.Gd_cpdh', 'e.Gd_cpmc', 'e.销售订单号', 'e.投料大箱', 'e.订单数量', 'e.计量单位', 'rtrim(a.Gy0_SITE) as Gy0_SITE',
|
|
|
'rtrim(a.印刷方式) as 印刷方式','rtrim(a.版距) as 版距'
|
|
|
])
|
|
|
->join('设备_产量计酬 b', 'a.Gy0_gdbh = b.sczl_gdbh AND a.Gy0_yjno = b.sczl_yjno AND a.Gy0_gxh = b.sczl_gxh', 'left')
|
|
|
- ->join('db_sczl c', 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh', 'left')
|
|
|
+ ->join([$sczlTeamSub => 'c'], 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh AND IFNULL(b.sczl_bh1,\'\') = IFNULL(c.sczl_bh1,\'\')', 'left')
|
|
|
->join('设备_基本资料 d', 'd.设备编号 = b.sczl_jtbh', 'left')
|
|
|
->join('工单_基本资料 e', 'a.Gy0_gdbh = e.Gd_gdbh AND a.Gy0_yjno = e.行号')
|
|
|
->where([
|
|
|
@@ -1211,7 +1215,7 @@ class OrderSuperLoss extends Api
|
|
|
'a.Gy0_gxh' => ['in', $gxh_values],
|
|
|
])
|
|
|
->group('a.Gy0_gxh,b.sczl_jtbh,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')
|
|
|
+ b.sczl_bh4, b.sczl_bh5, b.sczl_bh6, b.sczl_bh7, b.sczl_bh8, b.sczl_bh9')
|
|
|
->order('a.Gy0_gxh asc, b.开工时间 asc, c.sczl_rq desc')
|
|
|
->select();
|
|
|
$gy_data = $this->appendMissingSuperLossProcessRows(
|
|
|
@@ -2247,12 +2251,36 @@ class OrderSuperLoss extends Api
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 修改工单类型
|
|
|
- * @return void
|
|
|
- * @throws Exception
|
|
|
- * @throws \think\db\exception\BindParamException
|
|
|
- * @throws \think\exception\PDOException
|
|
|
+ * db_sczl 按工序聚合,避免与产量计酬 JOIN 时 SUM 被放大
|
|
|
*/
|
|
|
+ private function buildSczlProcessAggSubSql(): string
|
|
|
+ {
|
|
|
+ return db('db_sczl')
|
|
|
+ ->field('sczl_gdbh, sczl_yjno, sczl_gxh, SUM(sczl_cl) as cl, SUM(sczl_fp) as fp')
|
|
|
+ ->group('sczl_gdbh, sczl_yjno, sczl_gxh')
|
|
|
+ ->buildSql();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * db_sczl 按工序+班组聚合(与产量计酬 sczl_bh1 对齐)
|
|
|
+ */
|
|
|
+ private function buildSczlTeamAggSubSql(): string
|
|
|
+ {
|
|
|
+ return db('db_sczl')
|
|
|
+ ->field([
|
|
|
+ 'sczl_gdbh',
|
|
|
+ 'sczl_yjno',
|
|
|
+ 'sczl_gxh',
|
|
|
+ 'sczl_bh1',
|
|
|
+ 'SUM(sczl_cl) as cl',
|
|
|
+ 'SUM(sczl_fp) as fp',
|
|
|
+ 'MAX(rtrim(sczl_gxmc)) as gxmc',
|
|
|
+ 'MAX(sczl_bzdh) as bzdh',
|
|
|
+ ])
|
|
|
+ ->group('sczl_gdbh, sczl_yjno, sczl_gxh, sczl_bh1')
|
|
|
+ ->buildSql();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 进入超节损的工序号(产量计酬 + 拆片报工),与 getOrderSuperLossCount 一致
|
|
|
*/
|
|
|
@@ -2366,20 +2394,21 @@ class OrderSuperLoss extends Api
|
|
|
return $gyData;
|
|
|
}
|
|
|
|
|
|
+ $sczlProcessSub = $this->buildSczlProcessAggSubSql();
|
|
|
$processRows = db('工单_工艺资料')
|
|
|
->alias('a')
|
|
|
->field([
|
|
|
'a.Gy0_gdbh', 'a.Gy0_yjno', 'a.Gy0_gxh', 'a.Gy0_ls', 'a.Gy0_ks', 'a.Gy0_计划损耗', 'a.超节损承担比例',
|
|
|
'CONCAT(`a`.`Gy0_gxmc`, "【", a.Add_gxmc,"】") AS sczl_gxmc',
|
|
|
'SUM(b.sczl_zcfp) as sczl_zcfp', 'SUM(b.sczl_cl) as total_cl',
|
|
|
- 'SUM(c.sczl_cl) as cl', 'SUM(c.sczl_fp) as fp',
|
|
|
+ 'c.cl', 'c.fp',
|
|
|
'a.无形损承担比例', 'a.Gy0_Rate0', 'a.Gy0_Rate1', 'a.损耗系数', 'a.Gy0_ms',
|
|
|
'a.Gy0_计划接货数*a.Gy0_ls*a.Gy0_ks as 计划产量',
|
|
|
'rtrim(a.Gy0_SITE) as Gy0_SITE', 'rtrim(a.印刷方式) as 印刷方式', 'rtrim(a.版距) as 版距',
|
|
|
'e.Gd_客户代号', 'e.Gd_客户名称', 'e.Gd_cpdh', 'e.Gd_cpmc', 'e.销售订单号', 'e.投料大箱', 'e.订单数量', 'e.计量单位',
|
|
|
])
|
|
|
->join('设备_产量计酬 b', 'a.Gy0_gdbh = b.sczl_gdbh AND a.Gy0_yjno = b.sczl_yjno AND a.Gy0_gxh = b.sczl_gxh', 'left')
|
|
|
- ->join('db_sczl c', 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh', 'left')
|
|
|
+ ->join([$sczlProcessSub => 'c'], 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh', 'left')
|
|
|
->join('工单_基本资料 e', 'a.Gy0_gdbh = e.Gd_gdbh AND a.Gy0_yjno = e.行号', 'left')
|
|
|
->where(['a.Gy0_gdbh' => $gdbh, 'a.Gy0_yjno' => $yjno, 'a.Gy0_gxh' => ['in', $missing]])
|
|
|
->group('a.Gy0_gxh')
|