|
@@ -762,7 +762,7 @@ class Achievementatestatistics extends Api
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 01.产品年度投入产出率统计->数据列表
|
|
|
|
|
|
|
+ * 01.产品年度投入产出率统计->数据汇总表
|
|
|
*/
|
|
*/
|
|
|
public function list_Productyear() {
|
|
public function list_Productyear() {
|
|
|
if ($this->request->isGet() === false) {
|
|
if ($this->request->isGet() === false) {
|
|
@@ -780,7 +780,7 @@ class Achievementatestatistics extends Api
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$qualityData = \db('工单_质量考核汇总')
|
|
$qualityData = \db('工单_质量考核汇总')
|
|
|
- ->field('Gy0_gdbh, 客户代号, sys_rq, 实际投料, 入仓数量, 产品代号, 产品名称, 销售订单号, 订单数量,计量单位')
|
|
|
|
|
|
|
+ ->field('Gy0_gdbh, 客户代号, 入仓日期 as sys_rq, 实际投料, 入仓数量, 产品代号, 产品名称, 销售订单号, 订单数量,计量单位')
|
|
|
->where('YEAR(Sys_rq)', $rq)
|
|
->where('YEAR(Sys_rq)', $rq)
|
|
|
->where($where)
|
|
->where($where)
|
|
|
->select();
|
|
->select();
|
|
@@ -789,30 +789,39 @@ class Achievementatestatistics extends Api
|
|
|
$this->success('未查询到数据', []);
|
|
$this->success('未查询到数据', []);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- //按工单编号和月份分组并计算总和
|
|
|
|
|
- $gongdanMap = [];
|
|
|
|
|
|
|
+ // 第一步:按工单去重,每个工单只取一条记录
|
|
|
|
|
+ $uniqueByGongdan = [];
|
|
|
foreach ($qualityData as $data) {
|
|
foreach ($qualityData as $data) {
|
|
|
$gdbh = $data['Gy0_gdbh'];
|
|
$gdbh = $data['Gy0_gdbh'];
|
|
|
|
|
+ if (!isset($uniqueByGongdan[$gdbh])) {
|
|
|
|
|
+ $uniqueByGongdan[$gdbh] = $data;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 第二步:按产品代号和月份分组并计算总和
|
|
|
|
|
+ $productMap = [];
|
|
|
|
|
+ foreach ($uniqueByGongdan as $gdbh => $data) {
|
|
|
|
|
+ $productCode = $data['产品代号'];
|
|
|
$sysRq = $data['sys_rq'];
|
|
$sysRq = $data['sys_rq'];
|
|
|
|
|
|
|
|
// 提取月份1-12 的月份数字
|
|
// 提取月份1-12 的月份数字
|
|
|
$month = date('n', strtotime($sysRq));
|
|
$month = date('n', strtotime($sysRq));
|
|
|
|
|
|
|
|
- if (!isset($gongdanMap[$gdbh])) {
|
|
|
|
|
- $gongdanMap[$gdbh] = [
|
|
|
|
|
- 'Gy0_gdbh' => $gdbh,
|
|
|
|
|
|
|
+ if (!isset($productMap[$productCode])) {
|
|
|
|
|
+ $productMap[$productCode] = [
|
|
|
'sys_rq' => substr($data['sys_rq'], 0, 4),
|
|
'sys_rq' => substr($data['sys_rq'], 0, 4),
|
|
|
'计量单位' => $data['计量单位'],
|
|
'计量单位' => $data['计量单位'],
|
|
|
'成品编码' => $data['产品代号'],
|
|
'成品编码' => $data['产品代号'],
|
|
|
'成品名称' => $data['产品名称'],
|
|
'成品名称' => $data['产品名称'],
|
|
|
'months' => [],
|
|
'months' => [],
|
|
|
'实际投料' => 0,
|
|
'实际投料' => 0,
|
|
|
- '入仓数量' => 0
|
|
|
|
|
|
|
+ '入仓数量' => 0,
|
|
|
|
|
+ '工单列表' => [] // 记录包含的工单编号
|
|
|
];
|
|
];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (!isset($gongdanMap[$gdbh]['months'][$month])) {
|
|
|
|
|
- $gongdanMap[$gdbh]['months'][$month] = [
|
|
|
|
|
|
|
+ if (!isset($productMap[$productCode]['months'][$month])) {
|
|
|
|
|
+ $productMap[$productCode]['months'][$month] = [
|
|
|
'实际投料' => 0,
|
|
'实际投料' => 0,
|
|
|
'入仓数量' => 0
|
|
'入仓数量' => 0
|
|
|
];
|
|
];
|
|
@@ -820,12 +829,17 @@ class Achievementatestatistics extends Api
|
|
|
|
|
|
|
|
//实际投料先乘以10000再累加
|
|
//实际投料先乘以10000再累加
|
|
|
$adjustedActual = round($data['实际投料'] * 10000);
|
|
$adjustedActual = round($data['实际投料'] * 10000);
|
|
|
- $gongdanMap[$gdbh]['months'][$month]['实际投料'] = $adjustedActual;
|
|
|
|
|
- $gongdanMap[$gdbh]['months'][$month]['入仓数量'] = $data['入仓数量'];
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 累加月度数据
|
|
|
|
|
+ $productMap[$productCode]['months'][$month]['实际投料'] += $adjustedActual;
|
|
|
|
|
+ $productMap[$productCode]['months'][$month]['入仓数量'] += $data['入仓数量'];
|
|
|
|
|
|
|
|
// 累加年度总量(实际投料已经乘以10000)
|
|
// 累加年度总量(实际投料已经乘以10000)
|
|
|
- $gongdanMap[$gdbh]['实际投料'] = $adjustedActual;
|
|
|
|
|
- $gongdanMap[$gdbh]['入仓数量'] = $data['入仓数量'];
|
|
|
|
|
|
|
+ $productMap[$productCode]['实际投料'] += $adjustedActual;
|
|
|
|
|
+ $productMap[$productCode]['入仓数量'] += $data['入仓数量'];
|
|
|
|
|
+
|
|
|
|
|
+ // 记录工单编号
|
|
|
|
|
+ $productMap[$productCode]['工单列表'][] = $data['Gy0_gdbh'];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//月份
|
|
//月份
|
|
@@ -837,14 +851,16 @@ class Achievementatestatistics extends Api
|
|
|
|
|
|
|
|
//合并数据并计算合格率
|
|
//合并数据并计算合格率
|
|
|
$result = [];
|
|
$result = [];
|
|
|
- foreach ($gongdanMap as $gdbh => $gongdanData) {
|
|
|
|
|
|
|
+ foreach ($productMap as $productCode => $productData) {
|
|
|
$resultItem = [
|
|
$resultItem = [
|
|
|
- 'sys_rq' => $gongdanData['sys_rq'],
|
|
|
|
|
- 'Gy0_gdbh' => $gongdanData['Gy0_gdbh'],
|
|
|
|
|
- '成品编码' => $gongdanData['成品编码'],
|
|
|
|
|
- '成品名称' => $gongdanData['成品名称'],
|
|
|
|
|
- '实际投料' => $gongdanData['实际投料'],
|
|
|
|
|
- '入仓数量' => $gongdanData['入仓数量']
|
|
|
|
|
|
|
+ 'sys_rq' => $productData['sys_rq'],
|
|
|
|
|
+ '成品编码' => $productData['成品编码'],
|
|
|
|
|
+ '成品名称' => $productData['成品名称'],
|
|
|
|
|
+ '实际投料' => $productData['实际投料'],
|
|
|
|
|
+ '入仓数量' => $productData['入仓数量'],
|
|
|
|
|
+ '计量单位' => $productData['计量单位'],
|
|
|
|
|
+ '工单数量' => count($productData['工单列表']),
|
|
|
|
|
+ '工单列表' => implode(', ', $productData['工单列表'])
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
// 初始化各月份数据
|
|
// 初始化各月份数据
|
|
@@ -852,9 +868,9 @@ class Achievementatestatistics extends Api
|
|
|
$resultItem[$monthName] = '-';
|
|
$resultItem[$monthName] = '-';
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 处理该工单的月度数据
|
|
|
|
|
- if (isset($gongdanData['months'])) {
|
|
|
|
|
- foreach ($gongdanData['months'] as $month => $monthData) {
|
|
|
|
|
|
|
+ // 处理该产品的月度数据
|
|
|
|
|
+ if (isset($productData['months'])) {
|
|
|
|
|
+ foreach ($productData['months'] as $month => $monthData) {
|
|
|
$adjustedActual = $monthData['实际投料'];
|
|
$adjustedActual = $monthData['实际投料'];
|
|
|
$delivery = $monthData['入仓数量'];
|
|
$delivery = $monthData['入仓数量'];
|
|
|
|
|
|
|
@@ -887,8 +903,7 @@ class Achievementatestatistics extends Api
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 产品年度明细查询
|
|
|
|
|
- * 根据成品编码查询每个月的累计数据
|
|
|
|
|
|
|
+ * 01.产品年度投入产出率统计->数据明细表
|
|
|
*/
|
|
*/
|
|
|
public function list_Productmonth() {
|
|
public function list_Productmonth() {
|
|
|
if ($this->request->isGet() === false) {
|
|
if ($this->request->isGet() === false) {
|
|
@@ -905,17 +920,26 @@ class Achievementatestatistics extends Api
|
|
|
|
|
|
|
|
// 1. 查询对应的工单数据
|
|
// 1. 查询对应的工单数据
|
|
|
$qualityData = \db('工单_质量考核汇总')
|
|
$qualityData = \db('工单_质量考核汇总')
|
|
|
- ->field('Gy0_gdbh 工单编号, 订单数量, sys_rq, 实际投料, 入仓数量, 客户代号, 客户名称, 产品代号, 产品名称, 销售订单号')
|
|
|
|
|
- ->where('产品代号', $productCode) // 根据产品代号查询
|
|
|
|
|
- ->where('YEAR(sys_rq)', $year)
|
|
|
|
|
- ->order('sys_rq ASC')
|
|
|
|
|
|
|
+ ->field('Gy0_gdbh as 工单编号, 订单数量, 入仓日期, 实际投料, 入仓数量, 客户代号, 客户名称, 产品代号, 产品名称, 销售订单号')
|
|
|
|
|
+ ->where('产品代号', $productCode)
|
|
|
|
|
+ ->where('YEAR(入仓日期)', $year)
|
|
|
|
|
+ ->order('入仓日期','desc')
|
|
|
->select();
|
|
->select();
|
|
|
|
|
|
|
|
if (empty($qualityData)) {
|
|
if (empty($qualityData)) {
|
|
|
$this->success('该产品无质量考核数据', []);
|
|
$this->success('该产品无质量考核数据', []);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 2. 按月份分组累计数据
|
|
|
|
|
|
|
+ // 2. 先按工单去重,每个工单只取一条记录
|
|
|
|
|
+ $uniqueByGongdan = [];
|
|
|
|
|
+ foreach ($qualityData as $data) {
|
|
|
|
|
+ $gdbh = $data['工单编号'];
|
|
|
|
|
+ if (!isset($uniqueByGongdan[$gdbh])) {
|
|
|
|
|
+ $uniqueByGongdan[$gdbh] = $data;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 按月份分组累计数据
|
|
|
$monthlyData = [];
|
|
$monthlyData = [];
|
|
|
$monthNames = [
|
|
$monthNames = [
|
|
|
1 => '1月', 2 => '2月', 3 => '3月', 4 => '4月',
|
|
1 => '1月', 2 => '2月', 3 => '3月', 4 => '4月',
|
|
@@ -923,19 +947,18 @@ class Achievementatestatistics extends Api
|
|
|
9 => '9月', 10 => '10月', 11 => '11月', 12 => '12月'
|
|
9 => '9月', 10 => '10月', 11 => '11月', 12 => '12月'
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
- foreach ($qualityData as $data) {
|
|
|
|
|
- $sysRq = $data['sys_rq'];
|
|
|
|
|
|
|
+ foreach ($uniqueByGongdan as $gdbh => $data) {
|
|
|
|
|
+ $sysRq = $data['入仓日期'];
|
|
|
$month = date('n', strtotime($sysRq)); // 1-12 的月份数字
|
|
$month = date('n', strtotime($sysRq)); // 1-12 的月份数字
|
|
|
|
|
|
|
|
// 初始化月份数据
|
|
// 初始化月份数据
|
|
|
if (!isset($monthlyData[$month])) {
|
|
if (!isset($monthlyData[$month])) {
|
|
|
$monthlyData[$month] = [
|
|
$monthlyData[$month] = [
|
|
|
- 'sys_rq' => substr($data['sys_rq'], 0, 10),
|
|
|
|
|
- '工单编号' => $data['工单编号'],
|
|
|
|
|
'月份' => $monthNames[$month],
|
|
'月份' => $monthNames[$month],
|
|
|
'订单数量' => 0,
|
|
'订单数量' => 0,
|
|
|
'实际投料' => 0,
|
|
'实际投料' => 0,
|
|
|
'入仓数量' => 0,
|
|
'入仓数量' => 0,
|
|
|
|
|
+ '入仓日期' => $data['入仓日期'],
|
|
|
'客户代号' => $data['客户代号'],
|
|
'客户代号' => $data['客户代号'],
|
|
|
'客户名称' => $data['客户名称'],
|
|
'客户名称' => $data['客户名称'],
|
|
|
'产品代号' => $data['产品代号'],
|
|
'产品代号' => $data['产品代号'],
|
|
@@ -944,15 +967,17 @@ class Achievementatestatistics extends Api
|
|
|
];
|
|
];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 累计相加(实际投料乘以10000)
|
|
|
|
|
- $monthlyData[$month]['订单数量'] = floatval($data['订单数量']);
|
|
|
|
|
- $monthlyData[$month]['实际投料'] = round(floatval($data['实际投料']) * 10000);
|
|
|
|
|
- $monthlyData[$month]['入仓数量'] = floatval($data['入仓数量']);
|
|
|
|
|
|
|
+ $monthlyData[$month]['订单数量'] += round($data['订单数量'] * 10000);
|
|
|
|
|
+ $monthlyData[$month]['实际投料'] += round($data['实际投料'] * 10000);
|
|
|
|
|
+ $monthlyData[$month]['入仓数量'] += round($data['入仓数量']);
|
|
|
|
|
+
|
|
|
|
|
+ // 记录工单编号
|
|
|
|
|
+ $monthlyData[$month]['工单编号'][] = $data['工单编号'];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 3. 计算每个月的实际合格率
|
|
|
|
|
|
|
+ // 4. 计算每个月的实际合格率并整理结果
|
|
|
$detailList = [];
|
|
$detailList = [];
|
|
|
- foreach ($monthlyData as $monthData) {
|
|
|
|
|
|
|
+ foreach ($monthlyData as $month => $monthData) {
|
|
|
// 计算实际合格率
|
|
// 计算实际合格率
|
|
|
$actualRate = '-';
|
|
$actualRate = '-';
|
|
|
if ($monthData['实际投料'] > 0) {
|
|
if ($monthData['实际投料'] > 0) {
|
|
@@ -963,10 +988,9 @@ class Achievementatestatistics extends Api
|
|
|
$actualRate = '0%';
|
|
$actualRate = '0%';
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- $detailList[] = [
|
|
|
|
|
- 'sys_rq' => $monthData['sys_rq'],
|
|
|
|
|
- '工单编号' => $monthData['工单编号'],
|
|
|
|
|
- '日期' => $monthData['月份'], // 这里显示月份名称
|
|
|
|
|
|
|
+ $detailList[$month] = [
|
|
|
|
|
+ '日期' => $monthData['月份'],
|
|
|
|
|
+ '入仓日期' => substr($monthData['入仓日期'], 0, 10),
|
|
|
'订单数量' => $monthData['订单数量'],
|
|
'订单数量' => $monthData['订单数量'],
|
|
|
'实际投料' => $monthData['实际投料'],
|
|
'实际投料' => $monthData['实际投料'],
|
|
|
'入仓数量' => $monthData['入仓数量'],
|
|
'入仓数量' => $monthData['入仓数量'],
|
|
@@ -975,13 +999,11 @@ class Achievementatestatistics extends Api
|
|
|
'客户名称' => $monthData['客户名称'],
|
|
'客户名称' => $monthData['客户名称'],
|
|
|
'产品代号' => $monthData['产品代号'],
|
|
'产品代号' => $monthData['产品代号'],
|
|
|
'产品名称' => $monthData['产品名称'],
|
|
'产品名称' => $monthData['产品名称'],
|
|
|
- '销售订单号' => $monthData['销售订单号']
|
|
|
|
|
|
|
+ '销售订单号' => $monthData['销售订单号'],
|
|
|
|
|
+ '工单编号' => implode(', ', $monthData['工单编号'])
|
|
|
];
|
|
];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 按月份排序
|
|
|
|
|
- ksort($detailList);
|
|
|
|
|
-
|
|
|
|
|
$this->success('成功', array_values($detailList));
|
|
$this->success('成功', array_values($detailList));
|
|
|
}
|
|
}
|
|
|
|
|
|