|
|
@@ -43,128 +43,116 @@ class SubWorkorderStatus extends Api
|
|
|
*/
|
|
|
public function SubWorkOrderStatusList()
|
|
|
{
|
|
|
- // 验证请求类型是否为 GET
|
|
|
- if ($this->request->isGet() === false) {
|
|
|
+ if (!$this->request->isGet()) {
|
|
|
$this->error('请求错误');
|
|
|
}
|
|
|
|
|
|
- // 获取请求参数并验证
|
|
|
$param = $this->request->param();
|
|
|
- if (empty($param)) {
|
|
|
+ if (empty($param) || empty($param['order'])) {
|
|
|
$this->error('参数错误');
|
|
|
}
|
|
|
|
|
|
- // 提取子订单编号的前12位作为色系ID
|
|
|
- $colour_id = substr($param['order'], 0, 12);
|
|
|
+ $orderNo = $param['order'];
|
|
|
+ $isSubOrder = strpos($orderNo, '-') !== false;
|
|
|
+ $colour_id = substr($orderNo, 0, 12);
|
|
|
|
|
|
- // 获取订单尺码信息
|
|
|
- $where['Mod_rq'] = null;
|
|
|
- $xhdata = \db('工单_印件资料')
|
|
|
- ->where('子订单编号', $param['order'])
|
|
|
- ->where($where)
|
|
|
- ->field('cm1,cm2,cm3,cm4,cm5,cm6,cm7,cm8,cm9,cm10')
|
|
|
- ->select();
|
|
|
-
|
|
|
- // 收集cm1到cm10的非空值并排序
|
|
|
- $arr = [];
|
|
|
- foreach ($xhdata as $value) {
|
|
|
- for ($i = 1; $i <= 10; $i++) {
|
|
|
- $cmValue = $value['cm' . $i] ?? null;
|
|
|
- if (!empty($cmValue)) {
|
|
|
- $arr[] = $cmValue;
|
|
|
- }
|
|
|
- }
|
|
|
+ // 条件构造
|
|
|
+ $where = ['a.Mod_rq' => null];
|
|
|
+ if ($isSubOrder) {
|
|
|
+ $where['a.子订单编号'] = $orderNo;
|
|
|
+ } else {
|
|
|
+ $where['a.订单编号'] = $orderNo;
|
|
|
}
|
|
|
- $arr = array_unique($arr); // 去重
|
|
|
- sort($arr); // 排序
|
|
|
|
|
|
- // 获取工单详细资料
|
|
|
- $workOrderData = \db('工单_印件资料')
|
|
|
+ // 获取所有工单数据(订单或子订单)
|
|
|
+ $workOrderList = \db('工单_印件资料')
|
|
|
->alias('a')
|
|
|
->join('工单_基本资料 b', 'a.订单编号 = b.订单编号')
|
|
|
- ->where('a.子订单编号', $param['order'])
|
|
|
- ->where('a.Mod_rq', null)
|
|
|
+ ->where($where)
|
|
|
->field('a.订单编号,a.子订单编号,a.款号,b.款式,b.客户编号,a.zdtotal,
|
|
|
cm1,cm2,cm3,cm4,cm5,cm6,cm7,cm8,cm9,cm10,
|
|
|
cmsl1,cmsl2,cmsl3,cmsl4,cmsl5,cmsl6,cmsl7,cmsl8,cmsl9,cmsl10')
|
|
|
- ->find();
|
|
|
+ ->select();
|
|
|
+
|
|
|
+ if (empty($workOrderList)) {
|
|
|
+ $this->error('未找到相关工单数据');
|
|
|
+ }
|
|
|
|
|
|
- // 初始化制单数据
|
|
|
+ // 初始化变量
|
|
|
+ $sizeList = [];
|
|
|
$result = [
|
|
|
'工序名称' => '制单',
|
|
|
- 'total' => ' ',
|
|
|
- '制单数' => $workOrderData['zdtotal'] ?? 0
|
|
|
+ 'total' => 0,
|
|
|
+ '制单数' => 0
|
|
|
];
|
|
|
|
|
|
- // 处理cm1到cm10和对应的cmsl1到cmsl10数据
|
|
|
- for ($i = 1; $i <= 10; $i++) {
|
|
|
- $cmKey = 'cm' . $i;
|
|
|
- $cmslKey = 'cmsl' . $i;
|
|
|
- if (!empty($workOrderData[$cmKey])) {
|
|
|
- $result[$workOrderData[$cmKey]] = (int)($workOrderData[$cmslKey] ?? 0);
|
|
|
+ foreach ($workOrderList as $workOrder) {
|
|
|
+ $result['制单数'] += $workOrder['zdtotal'];
|
|
|
+
|
|
|
+ for ($i = 1; $i <= 10; $i++) {
|
|
|
+ $cmKey = 'cm' . $i;
|
|
|
+ $cmslKey = 'cmsl' . $i;
|
|
|
+ if (!empty($workOrder[$cmKey])) {
|
|
|
+ $size = $workOrder[$cmKey];
|
|
|
+ $qty = (int)($workOrder[$cmslKey] ?? 0);
|
|
|
+ $sizeList[] = $size;
|
|
|
+ if (!isset($result[$size])) {
|
|
|
+ $result[$size] = 0;
|
|
|
+ }
|
|
|
+ $result[$size] += $qty;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 定义工序名称
|
|
|
- $processes = ['裁剪', '车缝', '手工', '大烫', '总检', '包装'];
|
|
|
+ $sizeList = array_unique($sizeList);
|
|
|
+ sort($sizeList);
|
|
|
|
|
|
// 获取设备产量数据
|
|
|
$list = \db('设备_产量计酬')
|
|
|
- ->where('子订单编号', 'like', $colour_id . '%')
|
|
|
- ->where('子订单编号',$param['order'])
|
|
|
+ ->where($isSubOrder ? ['子订单编号' => $orderNo] : ['订单编号' => $orderNo])
|
|
|
->where('mod_rq', null)
|
|
|
->select();
|
|
|
|
|
|
+ $processes = ['裁剪', '车缝', '手工', '大烫', '总检', '包装'];
|
|
|
$data['data'] = [];
|
|
|
- array_unshift($data['data'], $result); // 将制单数据放在第一个位置
|
|
|
- // 获取色系的制单总数
|
|
|
-// $total = \db('工单_印件资料')
|
|
|
-// ->where('子订单编号', 'like', $colour_id . '%')
|
|
|
-// ->column('sum(zdtotal)');
|
|
|
- // 处理各工序数据
|
|
|
+ $data['data'][] = $result;
|
|
|
+
|
|
|
foreach ($processes as $process) {
|
|
|
- $res = array_fill_keys($arr, 0); // 初始化每个尺码为0
|
|
|
- foreach ($list as $value) {
|
|
|
- if ($value['工序名称'] === $process) {
|
|
|
- $quantity = ($process === '裁剪' || $process === '车缝')
|
|
|
- ? $value['数量']
|
|
|
- : $value['s_num'];
|
|
|
-
|
|
|
- // 更新对应尺码的数据
|
|
|
- if (array_key_exists($value['尺码'], $res)) {
|
|
|
- $res[$value['尺码']] += $quantity;
|
|
|
- }
|
|
|
+ $processData = array_fill_keys($sizeList, 0);
|
|
|
+ foreach ($list as $item) {
|
|
|
+ if ($item['工序名称'] === $process && in_array($item['尺码'], $sizeList)) {
|
|
|
+ $qty = ($process === '裁剪' || $process === '车缝') ? $item['数量'] : $item['s_num'];
|
|
|
+ $processData[$item['尺码']] += $qty;
|
|
|
}
|
|
|
}
|
|
|
- // 计算总量并设置工序信息
|
|
|
- $res['total'] = array_sum($res);
|
|
|
- $res['工序名称'] = $process;
|
|
|
-// $res['制单数'] = $total[0];
|
|
|
- $data['data'][] = $res;
|
|
|
+ $processData['total'] = array_sum($processData);
|
|
|
+ $processData['工序名称'] = $process;
|
|
|
+ $data['data'][] = $processData;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-// 计算完成百分比
|
|
|
- foreach ($data['data'] as $key => $value) {
|
|
|
-
|
|
|
- // 如果工序名称是“制单”,则直接将 scale 设置为空
|
|
|
- if ($value['工序名称'] === '制单') {
|
|
|
- $data['data'][$key]['scale'] = '';
|
|
|
- continue; // 跳过当前循环
|
|
|
+ // 计算百分比
|
|
|
+ foreach ($data['data'] as &$val) {
|
|
|
+ if ($val['工序名称'] === '制单') {
|
|
|
+ $val['scale'] = '';
|
|
|
+ } else {
|
|
|
+ $val['scale'] = $result['制单数'] > 0
|
|
|
+ ? number_format(($val['total'] / $result['制单数']) * 100, 2) . '%'
|
|
|
+ : '0%';
|
|
|
}
|
|
|
-
|
|
|
- // 其他工序正常计算百分比
|
|
|
- $data['data'][$key]['scale'] = $workOrderData['zdtotal'] > 0
|
|
|
- ? number_format(($value['total'] / $workOrderData['zdtotal']) * 100, 2) . '%'
|
|
|
- : '0%';
|
|
|
+ }
|
|
|
+ $data['arr'] = $sizeList;
|
|
|
+
|
|
|
+ if ($isSubOrder) {
|
|
|
+ // 查询的是子订单,直接取第一条完整数据
|
|
|
+ $data['workOrderData'] = $workOrderList[0];
|
|
|
+ } else {
|
|
|
+ // 查询的是订单编号,保留第一条数据但去掉 "子订单编号"
|
|
|
+ $workOrderData = $workOrderList[0];
|
|
|
+ unset($workOrderData['子订单编号']); // 去掉子订单编号
|
|
|
+ $data['workOrderData'] = $workOrderData;
|
|
|
}
|
|
|
|
|
|
|
|
|
- // 输出整理后的数据
|
|
|
- $data['arr'] = $arr;
|
|
|
- $data['workOrderData'] = $workOrderData;
|
|
|
-
|
|
|
$this->success('成功', $data);
|
|
|
}
|
|
|
|