|
@@ -56,11 +56,24 @@ class OrderSuperLoss extends Api
|
|
|
date DESC,
|
|
date DESC,
|
|
|
编号 ASC;";
|
|
编号 ASC;";
|
|
|
$data = Db::query($sql);
|
|
$data = Db::query($sql);
|
|
|
|
|
+ $data = \db('工单_质量考核汇总')
|
|
|
|
|
+ ->field([
|
|
|
|
|
+ 'sys_ny AS date',
|
|
|
|
|
+ 'CASE
|
|
|
|
|
+ WHEN 产品代号 REGEXP \'[A-Za-z]\' THEN LEFT(产品代号, 5)
|
|
|
|
|
+ ELSE LEFT(产品代号, 4)
|
|
|
|
|
+ END AS 编号',
|
|
|
|
|
+ '客户名称',
|
|
|
|
|
+ 'COUNT(DISTINCT Gy0_gdbh) AS count'
|
|
|
|
|
+ ])
|
|
|
|
|
+ ->group('编号, date')
|
|
|
|
|
+ ->order('date DESC,编号')
|
|
|
|
|
+ ->select();
|
|
|
// 创建一个新数组来存储整理后的数据
|
|
// 创建一个新数组来存储整理后的数据
|
|
|
$organizedData = [];
|
|
$organizedData = [];
|
|
|
// 遍历原始数据
|
|
// 遍历原始数据
|
|
|
foreach ($data as $entry) {
|
|
foreach ($data as $entry) {
|
|
|
- $date = date('Ym',strtotime($entry['date']));
|
|
|
|
|
|
|
+ $date = $entry['date'];
|
|
|
|
|
|
|
|
// 检查日期是否在已整理数据中存在
|
|
// 检查日期是否在已整理数据中存在
|
|
|
if (isset($organizedData[$date])) {
|
|
if (isset($organizedData[$date])) {
|
|
@@ -90,7 +103,7 @@ class OrderSuperLoss extends Api
|
|
|
$finalData = [];
|
|
$finalData = [];
|
|
|
foreach ($organizedData as $date => $entries) {
|
|
foreach ($organizedData as $date => $entries) {
|
|
|
$totalCount = $entries['total_count'];
|
|
$totalCount = $entries['total_count'];
|
|
|
- $index = $date . '-' . $totalCount;
|
|
|
|
|
|
|
+ $index = $date;
|
|
|
unset($entries['total_count']);
|
|
unset($entries['total_count']);
|
|
|
$finalData[$index] = $entries;
|
|
$finalData[$index] = $entries;
|
|
|
}
|
|
}
|
|
@@ -1631,61 +1644,154 @@ class OrderSuperLoss extends Api
|
|
|
|
|
|
|
|
|
|
|
|
|
//超节损列表
|
|
//超节损列表
|
|
|
|
|
+// public function getList()
|
|
|
|
|
+// {
|
|
|
|
|
+// if (Request::instance()->isGet() == false) {
|
|
|
|
|
+// $this->error('非法请求');
|
|
|
|
|
+// }
|
|
|
|
|
+// $params = Request::instance()->param();
|
|
|
|
|
+// $where = [];
|
|
|
|
|
+// if (!empty($params['code'])) {
|
|
|
|
|
+// if (!empty($params['search'])) {
|
|
|
|
|
+// $this->error('参数错误');
|
|
|
|
|
+// }
|
|
|
|
|
+// $where['产品代号'] = $params['code'];
|
|
|
|
|
+// }
|
|
|
|
|
+// if (!empty($params['date'])) {
|
|
|
|
|
+// if (!empty($params['search'])) {
|
|
|
|
|
+// $this->error('参数错误');
|
|
|
|
|
+// }
|
|
|
|
|
+// $where['sys_ny' ] = $params['date'];
|
|
|
|
|
+// }
|
|
|
|
|
+// if (!empty($params['search'])) {
|
|
|
|
|
+// if (!empty($params['date']) || !empty($params['code'])) {
|
|
|
|
|
+// $this->error('参数错误');
|
|
|
|
|
+// }
|
|
|
|
|
+// $where['Gy0_gdbh|产品名称|产品代号'] = array('like','%'.$params['search'].'%');
|
|
|
|
|
+// }
|
|
|
|
|
+// $limit = $params['limit'];
|
|
|
|
|
+// if (empty($limit)){
|
|
|
|
|
+// $limit = 15;
|
|
|
|
|
+// }
|
|
|
|
|
+// $pages = $params['page'];
|
|
|
|
|
+// if (empty($pages)){
|
|
|
|
|
+// $pages = 1;
|
|
|
|
|
+// }
|
|
|
|
|
+// // 定义字段
|
|
|
|
|
+// $field = '
|
|
|
|
|
+// sys_ny,
|
|
|
|
|
+// Gy0_gdbh as Gd_gdbh,
|
|
|
|
|
+// `印件及工序` as jjcp_yjno,
|
|
|
|
|
+// `印件及工序` as yj_Yjno,
|
|
|
|
|
+// `联数` as yj_ls,
|
|
|
|
|
+// `产品代号` as 成品编码,
|
|
|
|
|
+// `产品名称` as 成品名称,
|
|
|
|
|
+// `实际投料`,
|
|
|
|
|
+// `计量单位`,
|
|
|
|
|
+// DATE(`入仓日期`) AS warehousing_date,
|
|
|
|
|
+// `入仓数量` as warehousing_num,
|
|
|
|
|
+// SUM(DISTINCT `计划损耗`) AS `工单计划损耗`,
|
|
|
|
|
+// `废品合计`,
|
|
|
|
|
+// SUM(`CjsJe`) AS reward_money,
|
|
|
|
|
+// `印件无形损` as 工单无形损,
|
|
|
|
|
+// `材料废`,
|
|
|
|
|
+// `零头处理`,
|
|
|
|
|
+// `外发废`,
|
|
|
|
|
+// SUM(`班组制程废品`) AS zcfp,
|
|
|
|
|
+// `班组分摊质检废品` as 工单质检废
|
|
|
|
|
+// ';
|
|
|
|
|
+// $list = \db('工单_质量考核汇总')
|
|
|
|
|
+// ->field($field)
|
|
|
|
|
+// ->where($where)
|
|
|
|
|
+// ->group('Gy0_gdbh, `印件及工序`')
|
|
|
|
|
+// ->order('sys_rq DESC')
|
|
|
|
|
+// ->page($pages)
|
|
|
|
|
+// ->limit($limit)
|
|
|
|
|
+// ->select();
|
|
|
|
|
+// foreach ($list as $key=>$value){
|
|
|
|
|
+// $status = \db('工单_印件资料')
|
|
|
|
|
+// ->where('Yj_Gdbh',$value['Gd_gdbh'])
|
|
|
|
|
+// ->where('yj_Yjno',$value['jjcp_yjno'])
|
|
|
|
|
+// ->value('质量考核');
|
|
|
|
|
+// $list[$key]['质量考核'] = $status;
|
|
|
|
|
+// if ($status == 1){
|
|
|
|
|
+// $list[$key]['考核'] = '否';
|
|
|
|
|
+// }else{
|
|
|
|
|
+// $list[$key]['考核'] = '是';
|
|
|
|
|
+// }
|
|
|
|
|
+// $value['实际投料'] = $value['实际投料']*10000;
|
|
|
|
|
+// //目标合格率
|
|
|
|
|
+// $list[$key]['target_rate'] = ($value['实际投料']-$value['工单计划损耗'])/$value['实际投料']*100;
|
|
|
|
|
+// $list[$key]['target_rate'] = number_format($list[$key]['target_rate'],2);
|
|
|
|
|
+// $list[$key]['target_rate'] = $list[$key]['target_rate'].'%';
|
|
|
|
|
+// //实际合格率
|
|
|
|
|
+// $list[$key]['real_rate'] = ($value['实际投料']-$value['废品合计'])/$value['实际投料']*100;
|
|
|
|
|
+// $list[$key]['real_rate'] = number_format($list[$key]['real_rate'],2);
|
|
|
|
|
+// $list[$key]['real_rate'] = $list[$key]['real_rate'].'%';
|
|
|
|
|
+// $list[$key]['reward_rate'] = '1';
|
|
|
|
|
+// }
|
|
|
|
|
+// if (!empty($list)){
|
|
|
|
|
+// $this->success('成功',$list);
|
|
|
|
|
+// }else{
|
|
|
|
|
+// $this->error('未找到数据');
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
public function getList()
|
|
public function getList()
|
|
|
{
|
|
{
|
|
|
- if (Request::instance()->isGet() == false) {
|
|
|
|
|
|
|
+ if (!Request::instance()->isGet()) {
|
|
|
$this->error('非法请求');
|
|
$this->error('非法请求');
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
$params = Request::instance()->param();
|
|
$params = Request::instance()->param();
|
|
|
$where = [];
|
|
$where = [];
|
|
|
|
|
+
|
|
|
|
|
+ // 设置默认分页和限制
|
|
|
|
|
+ $limit = empty($params['limit']) ? 15 : intval($params['limit']);
|
|
|
|
|
+ $pages = empty($params['page']) ? 1 : intval($params['page']);
|
|
|
|
|
+
|
|
|
|
|
+ // 构建查询条件
|
|
|
if (!empty($params['code'])) {
|
|
if (!empty($params['code'])) {
|
|
|
- if (!empty($params['search'])) {
|
|
|
|
|
- $this->error('参数错误');
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 根据产品代号是否含有字母确定匹配长度
|
|
|
|
|
+ $prefixLength = preg_match('/[A-Za-z]/', $params['code']) ? 5 : 4;
|
|
|
|
|
+ $where['产品代号'] = ['LIKE', substr($params['code'], 0, $prefixLength) . '%'];
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
if (!empty($params['date'])) {
|
|
if (!empty($params['date'])) {
|
|
|
- if (!empty($params['search'])) {
|
|
|
|
|
- $this->error('参数错误');
|
|
|
|
|
- }
|
|
|
|
|
- $where['sys_ny' ] = $params['date'];
|
|
|
|
|
|
|
+ $where['sys_ny'] = $params['date'];
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
if (!empty($params['search'])) {
|
|
if (!empty($params['search'])) {
|
|
|
if (!empty($params['date']) || !empty($params['code'])) {
|
|
if (!empty($params['date']) || !empty($params['code'])) {
|
|
|
$this->error('参数错误');
|
|
$this->error('参数错误');
|
|
|
}
|
|
}
|
|
|
- $where['Gy0_gdbh|产品名称|产品代号'] = array('like','%'.$params['search'].'%');
|
|
|
|
|
- }
|
|
|
|
|
- $limit = $params['limit'];
|
|
|
|
|
- if (empty($limit)){
|
|
|
|
|
- $limit = 15;
|
|
|
|
|
- }
|
|
|
|
|
- $pages = $params['page'];
|
|
|
|
|
- if (empty($pages)){
|
|
|
|
|
- $pages = 1;
|
|
|
|
|
|
|
+ $where['Gy0_gdbh|产品名称|产品代号'] = ['like', '%' . $params['search'] . '%'];
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
// 定义字段
|
|
// 定义字段
|
|
|
- $field = '
|
|
|
|
|
- sys_ny,
|
|
|
|
|
- Gy0_gdbh as Gd_gdbh,
|
|
|
|
|
- `印件及工序` as jjcp_yjno,
|
|
|
|
|
- `印件及工序` as yj_Yjno,
|
|
|
|
|
- `联数` as yj_ls,
|
|
|
|
|
- `产品代号` as 成品编码,
|
|
|
|
|
- `产品名称` as 成品名称,
|
|
|
|
|
- `实际投料`,
|
|
|
|
|
- `计量单位`,
|
|
|
|
|
- DATE(`入仓日期`) AS warehousing_date,
|
|
|
|
|
- `入仓数量` as warehousing_num,
|
|
|
|
|
- SUM(DISTINCT `计划损耗`) AS `工单计划损耗`,
|
|
|
|
|
- `废品合计`,
|
|
|
|
|
- SUM(`CjsJe`) AS reward_money,
|
|
|
|
|
- `印件无形损` as 工单无形损,
|
|
|
|
|
- `材料废`,
|
|
|
|
|
- `零头处理`,
|
|
|
|
|
- `外发废`,
|
|
|
|
|
- SUM(`班组制程废品`) AS zcfp,
|
|
|
|
|
- `班组分摊质检废品` as 工单质检废
|
|
|
|
|
- ';
|
|
|
|
|
|
|
+ $field = '
|
|
|
|
|
+ sys_ny,
|
|
|
|
|
+ Gy0_gdbh AS Gd_gdbh,
|
|
|
|
|
+ `印件及工序` AS jjcp_yjno,
|
|
|
|
|
+ `印件及工序` AS yj_Yjno,
|
|
|
|
|
+ `联数` AS yj_ls,
|
|
|
|
|
+ `产品代号` AS 成品编码,
|
|
|
|
|
+ `产品名称` AS 成品名称,
|
|
|
|
|
+ `实际投料`,
|
|
|
|
|
+ `计量单位`,
|
|
|
|
|
+ DATE(`入仓日期`) AS warehousing_date,
|
|
|
|
|
+ `入仓数量` AS warehousing_num,
|
|
|
|
|
+ SUM(DISTINCT `计划损耗`) AS `工单计划损耗`,
|
|
|
|
|
+ `废品合计`,
|
|
|
|
|
+ SUM(`CjsJe`) AS reward_money,
|
|
|
|
|
+ `印件无形损` AS 工单无形损,
|
|
|
|
|
+ `材料废`,
|
|
|
|
|
+ `零头处理`,
|
|
|
|
|
+ `外发废`,
|
|
|
|
|
+ SUM(`班组制程废品`) AS zcfp,
|
|
|
|
|
+ `班组分摊质检废品` AS 工单质检废
|
|
|
|
|
+ ';
|
|
|
|
|
+
|
|
|
|
|
+ // 查询数据
|
|
|
$list = \db('工单_质量考核汇总')
|
|
$list = \db('工单_质量考核汇总')
|
|
|
->field($field)
|
|
->field($field)
|
|
|
->where($where)
|
|
->where($where)
|
|
@@ -1694,35 +1800,39 @@ class OrderSuperLoss extends Api
|
|
|
->page($pages)
|
|
->page($pages)
|
|
|
->limit($limit)
|
|
->limit($limit)
|
|
|
->select();
|
|
->select();
|
|
|
- foreach ($list as $key=>$value){
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 处理查询结果
|
|
|
|
|
+ foreach ($list as $key => $value) {
|
|
|
$status = \db('工单_印件资料')
|
|
$status = \db('工单_印件资料')
|
|
|
- ->where('Yj_Gdbh',$value['Gd_gdbh'])
|
|
|
|
|
- ->where('yj_Yjno',$value['jjcp_yjno'])
|
|
|
|
|
|
|
+ ->where('Yj_Gdbh', $value['Gd_gdbh'])
|
|
|
|
|
+ ->where('yj_Yjno', $value['jjcp_yjno'])
|
|
|
->value('质量考核');
|
|
->value('质量考核');
|
|
|
|
|
+
|
|
|
$list[$key]['质量考核'] = $status;
|
|
$list[$key]['质量考核'] = $status;
|
|
|
- if ($status == 1){
|
|
|
|
|
- $list[$key]['考核'] = '否';
|
|
|
|
|
- }else{
|
|
|
|
|
- $list[$key]['考核'] = '是';
|
|
|
|
|
- }
|
|
|
|
|
- $value['实际投料'] = $value['实际投料']*10000;
|
|
|
|
|
- //目标合格率
|
|
|
|
|
- $list[$key]['target_rate'] = ($value['实际投料']-$value['工单计划损耗'])/$value['实际投料']*100;
|
|
|
|
|
- $list[$key]['target_rate'] = number_format($list[$key]['target_rate'],2);
|
|
|
|
|
- $list[$key]['target_rate'] = $list[$key]['target_rate'].'%';
|
|
|
|
|
- //实际合格率
|
|
|
|
|
- $list[$key]['real_rate'] = ($value['实际投料']-$value['废品合计'])/$value['实际投料']*100;
|
|
|
|
|
- $list[$key]['real_rate'] = number_format($list[$key]['real_rate'],2);
|
|
|
|
|
- $list[$key]['real_rate'] = $list[$key]['real_rate'].'%';
|
|
|
|
|
- $list[$key]['reward_rate'] = '1';
|
|
|
|
|
- }
|
|
|
|
|
- if (!empty($list)){
|
|
|
|
|
- $this->success('成功',$list);
|
|
|
|
|
- }else{
|
|
|
|
|
|
|
+ $list[$key]['考核'] = ($status == 1) ? '否' : '是';
|
|
|
|
|
+
|
|
|
|
|
+ $actualMaterial = $value['实际投料'] * 10000;
|
|
|
|
|
+ $list[$key]['target_rate'] = $this->calculateRate($actualMaterial, $value['工单计划损耗']);
|
|
|
|
|
+ $list[$key]['real_rate'] = $this->calculateRate($actualMaterial, $value['废品合计']);
|
|
|
|
|
+ $list[$key]['reward_rate'] = '1'; // or some logic if needed
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!empty($list)) {
|
|
|
|
|
+ $this->success('成功', $list);
|
|
|
|
|
+ } else {
|
|
|
$this->error('未找到数据');
|
|
$this->error('未找到数据');
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// 计算合格率
|
|
|
|
|
+ private function calculateRate($actual, $loss)
|
|
|
|
|
+ {
|
|
|
|
|
+ if ($actual == 0) {
|
|
|
|
|
+ return '0.00%'; // 防止除以零
|
|
|
|
|
+ }
|
|
|
|
|
+ $rate = ($actual - $loss) / $actual * 100;
|
|
|
|
|
+ return number_format($rate, 2) . '%';
|
|
|
|
|
+ }
|
|
|
//工序超节损
|
|
//工序超节损
|
|
|
public function ProcessLoss()
|
|
public function ProcessLoss()
|
|
|
{
|
|
{
|