|
|
@@ -1411,47 +1411,61 @@ class WorkOrder extends Api
|
|
|
* 2.接口接受数据文件进行保存xlsx文件以及pdf转换
|
|
|
* 3.前端进行预览pdf图片显示文件中的内容再页面上
|
|
|
*/
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
public function gdAnnexAdd() {
|
|
|
+ ini_set('display_errors', 'On');
|
|
|
+ ini_set('error_reporting', E_ALL);
|
|
|
+
|
|
|
if (!$this->request->isPost()) {
|
|
|
$this->error('请求方式错误');
|
|
|
}
|
|
|
+
|
|
|
// 获取请求参数
|
|
|
$req = $this->request->param();
|
|
|
$relateId = $req['关联编号'];
|
|
|
$attachmentContent = $req['附件内容'];
|
|
|
- $uploadDir = 'uploads/' . date('Ymd') . '/' . $relateId;
|
|
|
+ $attachmentType = $req['附件类型'];
|
|
|
+ $prefixDir = ROOT_PATH . '/public/';
|
|
|
+ $uploadDir = ''.'uploads/' . date('Ymd') . '/' . $relateId;
|
|
|
+
|
|
|
// 检查并创建目录
|
|
|
- if (!is_dir($uploadDir)) {
|
|
|
- mkdir($uploadDir, 0777, true);
|
|
|
+ if (!is_dir($prefixDir . $uploadDir)) {
|
|
|
+ mkdir($prefixDir . $uploadDir, 0777, true);
|
|
|
}
|
|
|
+
|
|
|
// 处理 Base64 附件内容
|
|
|
if (strpos($attachmentContent, 'base64,') !== false) {
|
|
|
$attachmentContent = explode('base64,', $attachmentContent)[1];
|
|
|
}
|
|
|
$fileContent = base64_decode($attachmentContent);
|
|
|
- // 创建并写入 Excel 文件
|
|
|
- $xlsxFilePath = $uploadDir . '/' . time() . '.xlsx';
|
|
|
- file_put_contents($xlsxFilePath, $fileContent);
|
|
|
- // 加载 Excel 文件
|
|
|
- $spreadsheet = IOFactory::load($xlsxFilePath);
|
|
|
- $pdfPaths = '';
|
|
|
-
|
|
|
- // 转换每个工作表到 PDF
|
|
|
- foreach ($spreadsheet->getAllSheets() as $index => $sheet) {
|
|
|
- // 为每个工作表创建单独的 PDF 文件
|
|
|
- $pdfSpreadsheet = new Spreadsheet();
|
|
|
- $pdfSpreadsheet->addExternalSheet($sheet);
|
|
|
-
|
|
|
- // 设置 PDF 写入器
|
|
|
- $pdfWriter = new Tcpdf($pdfSpreadsheet);
|
|
|
- $pdfOutputPath = $uploadDir . '/' . time() . ($index + 1) . '.pdf';
|
|
|
+ $filename = time();
|
|
|
+
|
|
|
+ // 初始化文件路径变量
|
|
|
+ $xlsxFilePath = '';
|
|
|
+ $pdfFilePath = '';
|
|
|
|
|
|
+ if ($attachmentType === 'pdf') {
|
|
|
// 保存 PDF 文件
|
|
|
- $pdfWriter->save($pdfOutputPath);
|
|
|
- $pdfPaths .= $pdfOutputPath . ','; // 将 PDF 文件路径添加到 pdfPaths
|
|
|
+ $pdfFilePath = $uploadDir . '/' . $filename . '.pdf';
|
|
|
+ file_put_contents($prefixDir . $pdfFilePath, $fileContent);
|
|
|
+ } elseif ($attachmentType === 'xlsx') {
|
|
|
+ // 保存 Excel 文件
|
|
|
+ $xlsxFilePath = $uploadDir . '/' . $filename . '.xlsx';
|
|
|
+ file_put_contents($prefixDir . $xlsxFilePath, $fileContent);
|
|
|
+
|
|
|
+ // 转换为 PDF 文件
|
|
|
+ $pdfFilePath = $uploadDir . '/' . $filename . '.pdf';
|
|
|
+ $cmd = sprintf(
|
|
|
+ 'libreoffice --headless --convert-to pdf --outdir %s %s',
|
|
|
+ escapeshellarg($prefixDir . $uploadDir),
|
|
|
+ escapeshellarg($prefixDir . $xlsxFilePath)
|
|
|
+ );
|
|
|
+ exec($cmd, $out, $retval);
|
|
|
+
|
|
|
+ if ($retval !== 0) {
|
|
|
+ $this->error('Excel 转 PDF 失败');
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ $this->error('不支持的附件类型');
|
|
|
}
|
|
|
|
|
|
// 组织数据
|
|
|
@@ -1459,10 +1473,10 @@ class WorkOrder extends Api
|
|
|
'关联编号' => $relateId,
|
|
|
'sys_id' => $req['sys_id'],
|
|
|
'附件备注' => $req['附件备注'],
|
|
|
- '附件类型' => $req['附件类型'],
|
|
|
+ '附件类型' => $attachmentType,
|
|
|
'sys_rq' => date('Y-m-d H:i:s'),
|
|
|
- 'url' => $xlsxFilePath, // 保存xlsx文件路径
|
|
|
- 'pdf' => rtrim($pdfPaths, ',') // 保存pdf文件路径
|
|
|
+ 'url' => $xlsxFilePath, // 保存 xlsx 文件路径(如果存在)
|
|
|
+ 'pdf' => $pdfFilePath // 保存 pdf 文件路径
|
|
|
];
|
|
|
|
|
|
// 数据库事务处理
|
|
|
@@ -1485,6 +1499,70 @@ class WorkOrder extends Api
|
|
|
$this->success('成功');
|
|
|
}
|
|
|
|
|
|
+// public function gdAnnexAdd() {
|
|
|
+// ini_set('display_errors','On');
|
|
|
+// ini_set('error_reporting',E_ALL);
|
|
|
+// if (!$this->request->isPost()) {
|
|
|
+// $this->error('请求方式错误');
|
|
|
+// }
|
|
|
+// // 获取请求参数
|
|
|
+// $req = $this->request->param();
|
|
|
+// $relateId = $req['关联编号'];
|
|
|
+// $attachmentContent = $req['附件内容'];
|
|
|
+// $prefixDir = ROOT_PATH .'/public/';
|
|
|
+// $uploadDir = 'uploads/' . date('Ymd') . '/' . $relateId;
|
|
|
+//
|
|
|
+// // 检查并创建目录
|
|
|
+// if (!is_dir($uploadDir)) {
|
|
|
+// mkdir($uploadDir, 0777, true);
|
|
|
+// }
|
|
|
+// // 处理 Base64 附件内容
|
|
|
+// if (strpos($attachmentContent, 'base64,') !== false) {
|
|
|
+// $attachmentContent = explode('base64,', $attachmentContent)[1];
|
|
|
+// }
|
|
|
+// $fileContent = base64_decode($attachmentContent);
|
|
|
+// $filename = time() ;
|
|
|
+// // 创建并写入 Excel 文件
|
|
|
+// $xlsxFilePath = $uploadDir . '/' . $filename . '.xlsx';
|
|
|
+// file_put_contents($prefixDir.$xlsxFilePath, $fileContent);
|
|
|
+// $str = $xlsxFilePath;
|
|
|
+// $out = $retval = null;
|
|
|
+// $outfile = $uploadDir . '/' . $filename . '.pdf';
|
|
|
+// $res = exec(sprintf('libreoffice --headless --convert-to pdf --outdir %s %s',($prefixDir.$uploadDir), $str), $out,$retval);
|
|
|
+//
|
|
|
+//
|
|
|
+// // var_dump($retval);exit;
|
|
|
+// // 组织数据
|
|
|
+// $data = [
|
|
|
+// '关联编号' => $relateId,
|
|
|
+// 'sys_id' => $req['sys_id'],
|
|
|
+// '附件备注' => $req['附件备注'],
|
|
|
+// '附件类型' => $req['附件类型'],
|
|
|
+// 'sys_rq' => date('Y-m-d H:i:s'),
|
|
|
+// 'url' => $xlsxFilePath, // 保存xlsx文件路径
|
|
|
+// 'pdf' => $outfile // 保存pdf文件路径
|
|
|
+// ];
|
|
|
+//
|
|
|
+// // 数据库事务处理
|
|
|
+// db()->startTrans();
|
|
|
+// try {
|
|
|
+// // 插入数据
|
|
|
+// $sql = db('工单_相关附件')->fetchSql(true)->insert($data);
|
|
|
+// $result = db()->query($sql);
|
|
|
+// db()->commit();
|
|
|
+// } catch (\Exception $e) {
|
|
|
+// // 回滚事务
|
|
|
+// db()->rollback();
|
|
|
+// $this->error($e->getMessage());
|
|
|
+// }
|
|
|
+//
|
|
|
+// if ($result === false) {
|
|
|
+// $this->error('失败');
|
|
|
+// }
|
|
|
+//
|
|
|
+// $this->success('成功');
|
|
|
+// }
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
@@ -2051,20 +2129,45 @@ class WorkOrder extends Api
|
|
|
$list = \db('工单_基本资料')
|
|
|
->where('订单编号',$param['order'])
|
|
|
->where($where)
|
|
|
- ->field('订单编号,img,生产款号,客户编号,款式,落货日期,箱唛要求,面料,船样描述,船样合计,粘衬,订单数量,审核,审核日期,要求')
|
|
|
+ ->field('订单编号,img,生产款号,客户编号,款式,落货日期,箱唛要求,面料,船样描述,船样合计,粘衬,订单数量,审核,审核日期,要求,water')
|
|
|
->find();
|
|
|
|
|
|
//尺码表格表头
|
|
|
- $xhdata = \db('工单_印件资料')->where('订单编号',$param['order'])->where($where)->select();
|
|
|
+ $xhdata = \db('工单_印件资料')->where('订单编号', $param['order'])->where($where)->select();
|
|
|
$arr = [];
|
|
|
- foreach ($xhdata as $key => $value){
|
|
|
- for($i=1;$i<=10;$i++){
|
|
|
- if ($value['cm'.$i] !== '' && $value['cm'.$i] !== null){
|
|
|
- array_push($arr,$value['cm'.$i]);
|
|
|
+ foreach ($xhdata as $key => $value) {
|
|
|
+ for ($i = 1; $i <= 10; $i++) {
|
|
|
+ if ($value['cm' . $i] !== '' && $value['cm' . $i] !== null) {
|
|
|
+ array_push($arr, $value['cm' . $i]);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+// 去重并重新索引
|
|
|
$arr = array_unique($arr);
|
|
|
+ $arr = array_values($arr);
|
|
|
+
|
|
|
+// 自定义排序函数
|
|
|
+ usort($arr, function($a, $b) {
|
|
|
+ // 判断是否为数字
|
|
|
+ $isNumericA = is_numeric($a);
|
|
|
+ $isNumericB = is_numeric($b);
|
|
|
+
|
|
|
+ if ($isNumericA && $isNumericB) {
|
|
|
+ // 如果都是数字,按从小到大排序
|
|
|
+ return $a - $b;
|
|
|
+ } elseif (!$isNumericA && !$isNumericB) {
|
|
|
+ // 如果都是字母,按字母顺序排序(可以自定义顺序)
|
|
|
+ $sizeOrder = ['XXS', 'XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL'];
|
|
|
+ $posA = array_search($a, $sizeOrder);
|
|
|
+ $posB = array_search($b, $sizeOrder);
|
|
|
+ return $posA - $posB;
|
|
|
+ } else {
|
|
|
+ // 如果一个是数字一个是字母,数字排在前
|
|
|
+ return $isNumericA ? -1 : 1;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
|
|
|
//打印table数据表格
|
|
|
$porlis = \db('工单_印件资料')
|
|
|
@@ -2073,79 +2176,6 @@ class WorkOrder extends Api
|
|
|
->where($where)
|
|
|
->field('子订单编号')
|
|
|
->select();
|
|
|
- $count = count($porlis);
|
|
|
-
|
|
|
- if($count == 1 || $count == 2 || $count == 3){
|
|
|
- // 查询船样为0的数据
|
|
|
- $processlist = \db('工单_印件资料')
|
|
|
- ->where('订单编号', $param['order'])
|
|
|
- ->where($where)
|
|
|
- ->where('船样', 0)
|
|
|
- ->select();
|
|
|
- foreach ($processlist as $key => $value) {
|
|
|
- // 将尺码和对应的数量从 cm1-cm10 和 cmsl1-cmsl10 转换为动态键值对
|
|
|
- for ($i = 1; $i <= 10; $i++) {
|
|
|
- if ($value['cm' . $i] !== '' && $value['cm' . $i] !== null) {
|
|
|
- $processlist[$key][$value['cm' . $i]] = $value['cmsl' . $i];
|
|
|
- }
|
|
|
- // 移除原始的 cm 和 cmsl 字段
|
|
|
- unset($processlist[$key]['cm' . $i], $processlist[$key]['cmsl' . $i]);
|
|
|
- }
|
|
|
- // 添加条码字段,值为子订单编号
|
|
|
- $processlist[$key]['条码'] = $value['子订单编号'];
|
|
|
- }
|
|
|
- // 查询船样为1的数据
|
|
|
- $chuanyang = \db('工单_印件资料')
|
|
|
- ->where('订单编号', $param['order'])
|
|
|
- ->where($where)
|
|
|
- ->where('船样', 1)
|
|
|
- ->select();
|
|
|
- foreach ($chuanyang as $key => $value) {
|
|
|
- // 将尺码和对应的数量从 cm1-cm10 和 cmsl1-cmsl10 转换为动态键值对
|
|
|
- for ($i = 1; $i <= 10; $i++) {
|
|
|
- if ($value['cm' . $i] !== '' && $value['cm' . $i] !== null) {
|
|
|
- $chuanyang[$key][$value['cm' . $i]] = $value['cmsl' . $i];
|
|
|
- }
|
|
|
- unset($chuanyang[$key]['cm' . $i], $chuanyang[$key]['cmsl' . $i]);
|
|
|
- }
|
|
|
- $chuanyang[$key]['条码'] = $value['子订单编号'];
|
|
|
- }
|
|
|
- $counthz = \db('工单_印件资料')
|
|
|
- ->where('订单编号', $param['order'])
|
|
|
- ->where($where)
|
|
|
- ->select();
|
|
|
- // 初始化累计数组
|
|
|
- $scslTotals = [
|
|
|
- 'cmsl1' => 0,
|
|
|
- 'cmsl2' => 0,
|
|
|
- 'cmsl3' => 0,
|
|
|
- 'cmsl4' => 0,
|
|
|
- 'cmsl5' => 0,
|
|
|
- 'cmsl6' => 0,
|
|
|
- 'cmsl7' => 0,
|
|
|
- 'cmsl8' => 0,
|
|
|
- 'cmsl9' => 0,
|
|
|
- 'cmsl10' => 0,
|
|
|
- 'zdtotal' => 0,
|
|
|
- ];
|
|
|
- // 遍历 $counthz 数组,将每行的 scsl1 到 scsl10 累加
|
|
|
- foreach ($counthz as $item) {
|
|
|
- for ($i = 1; $i <= 10; $i++) {
|
|
|
- $key = "cmsl{$i}";
|
|
|
- if (!empty($item[$key])) { // 检查是否有值
|
|
|
- $scslTotals[$key] += (int)$item[$key];
|
|
|
- $scslTotals['zdtotal'] += (int)$item[$key];
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- $data['scslTotals'] = $scslTotals;
|
|
|
- $data['process'] = array_merge($processlist, $chuanyang);
|
|
|
- $data['order'] = $list;
|
|
|
- $data['xhdata'] = $arr;
|
|
|
- $this->success('成功', $data);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
//合并后的子订单条码数据
|
|
|
$subOrder = $porlis[0]['子订单编号'];
|
|
|
// 找到子订单编号中的 '-' 位置
|
|
|
@@ -2166,6 +2196,39 @@ class WorkOrder extends Api
|
|
|
cm1,cm2,cm3,cm4,cm5,cm6,cm7,cm8,cm9,cm10,
|
|
|
cmsl1,cmsl2,cmsl3,cmsl4,cmsl5,cmsl6,cmsl7,cmsl8,cmsl9,cmsl10,Uniqid')
|
|
|
->select();
|
|
|
+
|
|
|
+ // 初始化汇总数组
|
|
|
+ $scslTotals = [
|
|
|
+ "cmsl1" => 0,
|
|
|
+ "cmsl2" => 0,
|
|
|
+ "cmsl3" => 0,
|
|
|
+ "cmsl4" => 0,
|
|
|
+ "cmsl5" => 0,
|
|
|
+ "cmsl6" => 0,
|
|
|
+ "cmsl7" => 0,
|
|
|
+ "cmsl8" => 0,
|
|
|
+ "cmsl9" => 0,
|
|
|
+ "cmsl10" => 0,
|
|
|
+ "zdtotal" => 0, // 总计数量
|
|
|
+ ];
|
|
|
+ // 遍历数据集进行汇总
|
|
|
+ foreach ($processlist as $item) {
|
|
|
+ // 遍历每个尺码字段(cmsl1 到 cmsl10)
|
|
|
+ for ($i = 1; $i <= 10; $i++) {
|
|
|
+ // 获取当前字段的数量
|
|
|
+ $sizeQty = $item['cmsl' . $i];
|
|
|
+ // 判断数量是否有效(非空且大于0)
|
|
|
+ if (!empty($sizeQty)) {
|
|
|
+ // 累加当前字段的数量
|
|
|
+ $scslTotals['cmsl' . $i] += $sizeQty;
|
|
|
+ // 累加到总计字段
|
|
|
+ $scslTotals['zdtotal'] += $sizeQty;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $data['scslTotals'] = $scslTotals;
|
|
|
+
|
|
|
foreach ($processlist as $key => $value) {
|
|
|
// 将尺码和对应的数量从 cm1-cm10 和 cmsl1-cmsl10 转换为动态键值对
|
|
|
for ($i = 1; $i <= 10; $i++) {
|
|
|
@@ -2242,6 +2305,9 @@ class WorkOrder extends Api
|
|
|
$finalList[] = $mergedData[$key]; // 在组的尾部添加合并数据
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
// 将船样为1的数据添加到最终列表中
|
|
|
$finalList = array_merge($finalList, $chuanyang);
|
|
|
$data['process'] = $finalList;
|
|
|
@@ -2249,156 +2315,208 @@ class WorkOrder extends Api
|
|
|
$data['xhdata'] = $arr;
|
|
|
$this->success('成功',$data);
|
|
|
} elseif (strlen($afterDash) == 4) {
|
|
|
- // 获取印件资料
|
|
|
+
|
|
|
+// if($list['water'] == 1){
|
|
|
+ // 查询非船样数据
|
|
|
+ // 获取数据
|
|
|
+// $processlist = \db('工单_印件资料')
|
|
|
+// ->where('订单编号', $param['order'])
|
|
|
+// ->where($where)
|
|
|
+// ->where('船样', 0)
|
|
|
+// ->field('子订单编号,款号, color_id, 颜色, 颜色备注, zdtotal,船样, Uniqid,
|
|
|
+// cm1, cm2, cm3, cm4, cm5, cm6, cm7, cm8, cm9, cm10,
|
|
|
+// cmsl1, cmsl2, cmsl3, cmsl4, cmsl5, cmsl6, cmsl7, cmsl8, cmsl9, cmsl10')
|
|
|
+// ->select();
|
|
|
+//
|
|
|
+//// 格式化原始数据
|
|
|
+// $formattedData = [];
|
|
|
+// foreach ($processlist as $item) {
|
|
|
+// for ($i = 1; $i <= 10; $i++) {
|
|
|
+// if (!empty($item['cm' . $i])) {
|
|
|
+// $size = $item['cm' . $i];
|
|
|
+// $item[$size] = $item['cmsl' . $i]; // 动态映射尺码字段
|
|
|
+// }
|
|
|
+// unset($item['cm' . $i], $item['cmsl' . $i]); // 删除原始字段
|
|
|
+// }
|
|
|
+// $formattedData[] = $item;
|
|
|
+// }
|
|
|
+//
|
|
|
+//// 合并数据逻辑
|
|
|
+// $result = [];
|
|
|
+// foreach ($formattedData as $item) {
|
|
|
+// $key = $item['color_id'] . '_' . $item['颜色备注'];
|
|
|
+// if (!isset($result[$key])) {
|
|
|
+// $result[$key] = $item;
|
|
|
+// $result[$key]['条码'] = $item['子订单编号']; // 初始化条码字段
|
|
|
+// } else {
|
|
|
+// foreach ($item as $size => $value) {
|
|
|
+// if (is_numeric($size)) {
|
|
|
+// $result[$key][$size] = ($result[$key][$size] ?? 0) + $value; // 累加尺码
|
|
|
+// }
|
|
|
+// }
|
|
|
+// $result[$key]['zdtotal'] += $item['zdtotal']; // 累加总数
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+//// 按照合并逻辑插入合并数据
|
|
|
+// $finalData = $formattedData; // 复制原始数据
|
|
|
+// foreach ($result as $key => $mergeItem) {
|
|
|
+// foreach (array_reverse($finalData, true) as $index => $originalItem) {
|
|
|
+// if ($originalItem['color_id'] . '_' . $originalItem['颜色备注'] === $key) {
|
|
|
+// // 插入合并数据到最后一条记录之后
|
|
|
+// $finalData = array_merge(
|
|
|
+// array_slice($finalData, 0, $index + 1),
|
|
|
+// [$mergeItem],
|
|
|
+// array_slice($finalData, $index + 1)
|
|
|
+// );
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+//// 按 color_id 和 颜色备注 排序
|
|
|
+// usort($finalData, function ($a, $b) {
|
|
|
+// // 按 color_id 排序
|
|
|
+// if ($a['color_id'] === $b['color_id']) {
|
|
|
+// // 如果 color_id 相同,按颜色备注排序
|
|
|
+// return strcmp($a['颜色备注'], $b['颜色备注']);
|
|
|
+// }
|
|
|
+// return strcmp($a['color_id'], $b['color_id']);
|
|
|
+// });
|
|
|
+//
|
|
|
+// // 查询船样为 1 的数据
|
|
|
+// $chuanyang = \db('工单_印件资料')
|
|
|
+// ->where('订单编号', $param['order'])
|
|
|
+// ->where($where)
|
|
|
+// ->where('船样', 1)
|
|
|
+// ->field('子订单编号,款号, color_id, 颜色, 颜色备注, zdtotal,船样, Uniqid,
|
|
|
+// cm1, cm2, cm3, cm4, cm5, cm6, cm7, cm8, cm9, cm10,
|
|
|
+// cmsl1, cmsl2, cmsl3, cmsl4, cmsl5, cmsl6, cmsl7, cmsl8, cmsl9, cmsl10')
|
|
|
+// ->select();
|
|
|
+//
|
|
|
+//// 格式化船样数据// 格式化原始数据
|
|
|
+// $chuanyangvval = [];
|
|
|
+// foreach ($chuanyang as $item) {
|
|
|
+// for ($i = 1; $i <= 10; $i++) {
|
|
|
+// if (!empty($item['cm' . $i])) {
|
|
|
+// $size = $item['cm' . $i];
|
|
|
+// $item[$size] = $item['cmsl' . $i]; // 动态映射尺码字段
|
|
|
+// }
|
|
|
+// unset($item['cm' . $i], $item['cmsl' . $i]); // 删除原始字段
|
|
|
+// }
|
|
|
+// $item['条码'] = $item['子订单编号']; // 添加条码字段
|
|
|
+//
|
|
|
+// $chuanyangvval[] = $item;
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 合并船样和非船样数据并去重
|
|
|
+// $final = array_map('unserialize', array_unique(array_map('serialize', array_merge($finalData, $chuanyangvval))));
|
|
|
+//
|
|
|
+// // 清理数据:对于船样为 0 的记录,删除子订单编号和颜色字段
|
|
|
+// foreach ($final as &$item) {
|
|
|
+// if (isset($item['条码']) && $item['船样'] == 0) {
|
|
|
+// unset($item['子订单编号'], $item['颜色']);
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 统计累积数据
|
|
|
+// $counthz = \db('工单_印件资料')
|
|
|
+// ->where('订单编号', $param['order'])
|
|
|
+// ->where($where)
|
|
|
+// ->select();
|
|
|
+//
|
|
|
+// // 初始化统计数组
|
|
|
+// $scslTotals = [
|
|
|
+// 'cmsl1' => 0, 'cmsl2' => 0, 'cmsl3' => 0, 'cmsl4' => 0, 'cmsl5' => 0,
|
|
|
+// 'cmsl6' => 0, 'cmsl7' => 0, 'cmsl8' => 0, 'cmsl9' => 0, 'cmsl10' => 0,
|
|
|
+// 'zdtotal' => 0,
|
|
|
+// ];
|
|
|
+//
|
|
|
+// // 累加统计尺码数量
|
|
|
+// foreach ($counthz as $item) {
|
|
|
+// for ($i = 1; $i <= 10; $i++) {
|
|
|
+// $key = "cmsl{$i}";
|
|
|
+// $scslTotals[$key] += (int)($item[$key] ?? 0); // 累加每个尺码的数量
|
|
|
+// }
|
|
|
+// }
|
|
|
+// $scslTotals['zdtotal'] = array_sum(array_slice($scslTotals, 0, 10)); // 计算总数
|
|
|
+// echo "<pre>";
|
|
|
+// print_r($processlist);
|
|
|
+// echo "<pre>";
|
|
|
+// // 返回数据给前端
|
|
|
+// $data['process'] = $processlist;
|
|
|
+// $data['scslTotals'] = $scslTotals;//汇总数据集
|
|
|
+// $data['order'] = $list;//表格数据
|
|
|
+// $data['xhdata'] = $arr;//尺码表头
|
|
|
+//
|
|
|
+// $this->success('成功', $data);
|
|
|
+// }else{
|
|
|
+ //一条子订单编号一个条码,统计颜色
|
|
|
$processlist = \db('工单_印件资料')
|
|
|
->where('订单编号', $param['order'])
|
|
|
- ->where($where)
|
|
|
- ->where('船样', 0)
|
|
|
- ->field('子订单编号, 颜色, 款号, zdtotal, 颜色备注, color_id, 船样,
|
|
|
- cm1, cm2, cm3, cm4, cm5, cm6, cm7, cm8, cm9, cm10,
|
|
|
- cmsl1, cmsl2, cmsl3, cmsl4, cmsl5, cmsl6, cmsl7, cmsl8, cmsl9, cmsl10, Uniqid')
|
|
|
+ ->whereNull('Mod_rq') // 查询未删除数据
|
|
|
->select();
|
|
|
-
|
|
|
- // 保存格式化后的数据
|
|
|
- $formattedData = [];
|
|
|
-
|
|
|
- // 遍历数据进行尺码转换并添加到输出数组
|
|
|
+ $table = [];
|
|
|
foreach ($processlist as $item) {
|
|
|
+ // 当前子订单编号的数据
|
|
|
+ $subOrder = [
|
|
|
+ '颜色备注' => $item['颜色备注'],
|
|
|
+ '色系名称' => $item['颜色'],
|
|
|
+ '订单编号' => $item['订单编号'],
|
|
|
+ '子订单编号' => $item['子订单编号'],
|
|
|
+ '条码' => $item['子订单编号'],
|
|
|
+ '款号' => $item['款号'],
|
|
|
+ ];
|
|
|
+ // 当前子订单编号的合计
|
|
|
+ $subOrderTotal = 0;
|
|
|
for ($i = 1; $i <= 10; $i++) {
|
|
|
if (!empty($item['cm' . $i])) {
|
|
|
- $item[$item['cm' . $i]] = $item['cmsl' . $i];
|
|
|
- }
|
|
|
- unset($item['cm' . $i], $item['cmsl' . $i]);
|
|
|
- }
|
|
|
- $formattedData[] = $item;
|
|
|
- }
|
|
|
-
|
|
|
- // 用于存储每个 color_id 和颜色备注的合并数据
|
|
|
- $mergedData = [];
|
|
|
-
|
|
|
- // 进行合并
|
|
|
- foreach ($formattedData as $item) {
|
|
|
- $key = $item['color_id'] . '|' . $item['颜色备注'];
|
|
|
-
|
|
|
- if (!isset($mergedData[$key])) {
|
|
|
- $mergedData[$key] = $item;
|
|
|
- $mergedData[$key]['条码'] = $item['子订单编号']; // 初始化条码
|
|
|
- } else {
|
|
|
- // 合并 zdtotal 和尺码数量
|
|
|
- $mergedData[$key]['zdtotal'] += $item['zdtotal'];
|
|
|
- // 动态获取尺码字段,合并尺码数量
|
|
|
- foreach ($item as $field => $value) {
|
|
|
- // 只处理字段名为数字的尺码字段
|
|
|
- if (is_numeric($field)) {
|
|
|
- $mergedData[$key][$field] = ($mergedData[$key][$field] ?? 0) + $value;
|
|
|
- }
|
|
|
- }
|
|
|
- // 优先选择以 "00" 结尾的条码
|
|
|
- if (substr($item['子订单编号'], -2) == '00') {
|
|
|
- $mergedData[$key]['条码'] = $item['子订单编号'];
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 将合并后的数据添加到原始数据的末尾,并排序
|
|
|
- $finalOutput = $formattedData;
|
|
|
-
|
|
|
- // 按 color_id 和 颜色备注 分组,并在每组末尾添加合并后的条码数据
|
|
|
- foreach ($mergedData as $key => $mergeItem) {
|
|
|
- $mergeItem['合并标记'] = true; // 用于标记这是合并后的数据
|
|
|
- $finalOutput[] = $mergeItem;
|
|
|
- }
|
|
|
-
|
|
|
- // 对最终数组进行排序
|
|
|
- usort($finalOutput, function($a, $b) {
|
|
|
- // 先按 color_id 排序
|
|
|
- $compare = strcmp($a['color_id'], $b['color_id']);
|
|
|
- if ($compare === 0) {
|
|
|
- // 在 color_id 相同的情况下,再按 颜色备注 排序
|
|
|
- $compare = strcmp($a['颜色备注'], $b['颜色备注']);
|
|
|
- if ($compare === 0) {
|
|
|
- // 在 颜色备注相同的情况下,按 子订单编号 排序
|
|
|
- // 如果一项是合并标记的条码数据,另一项不是,则合并标记的条码数据排在后面
|
|
|
- if (isset($a['合并标记']) && !isset($b['合并标记'])) {
|
|
|
- return 1;
|
|
|
- } elseif (!isset($a['合并标记']) && isset($b['合并标记'])) {
|
|
|
- return -1;
|
|
|
- }
|
|
|
- return strcmp($a['子订单编号'], $b['子订单编号']);
|
|
|
- }
|
|
|
- return $compare;
|
|
|
- }
|
|
|
- return $compare;
|
|
|
- });
|
|
|
-
|
|
|
- // 查询仅获取船样为 1 的数据
|
|
|
- $chuanyang = \db('工单_印件资料')
|
|
|
- ->where('订单编号', $param['order'])
|
|
|
- ->where($where)
|
|
|
- ->where('船样', 1)
|
|
|
- ->field('子订单编号, 颜色, 款号, zdtotal, 颜色备注, color_id, 船样,
|
|
|
- cm1, cm2, cm3, cm4, cm5, cm6, cm7, cm8, cm9, cm10,
|
|
|
- cmsl1, cmsl2, cmsl3, cmsl4, cmsl5, cmsl6, cmsl7, cmsl8, cmsl9, cmsl10, Uniqid')
|
|
|
- ->select();
|
|
|
-
|
|
|
- $chuanyangvval = [];
|
|
|
- // 遍历船样为 1 的数据,进行尺码转换
|
|
|
- foreach ($chuanyang as $item) {
|
|
|
- for ($i = 1; $i <= 10; $i++) {
|
|
|
- if (!empty($item['cm' . $i])) {
|
|
|
- $item[$item['cm' . $i]] = $item['cmsl' . $i];
|
|
|
+ $subOrder[$item['cm' . $i]] = $item['cmsl' . $i];
|
|
|
+ // 累加每个尺码的数量
|
|
|
+ $subOrderTotal += $item['cmsl' . $i];
|
|
|
}
|
|
|
unset($item['cm' . $i], $item['cmsl' . $i]);
|
|
|
}
|
|
|
- $item['条码'] = $item['子订单编号'];
|
|
|
- $chuanyangvval[] = $item;
|
|
|
+ $subOrder['合计'] = $subOrderTotal; // 添加合计
|
|
|
+ $table[] = $subOrder; // 将当前子订单的数据添加到 $table 中
|
|
|
}
|
|
|
|
|
|
- // 合并船样和非船样的数据并去重
|
|
|
- $final = array_map("unserialize", array_unique(array_map("serialize", array_merge($finalOutput, $chuanyangvval))));
|
|
|
- $data['process'] = $final;
|
|
|
- // 最后清除带有条码的数据中的子订单编号和颜色信息
|
|
|
- foreach ($final as &$item) {
|
|
|
- if (isset($item['条码']) && $item['船样'] == 0) {
|
|
|
- $item['子订单编号'] = '';
|
|
|
- $item['颜色'] = '';
|
|
|
- $item['款号'] = '';
|
|
|
- unset($item['子订单编号'], $item['颜色']);
|
|
|
- }
|
|
|
- }
|
|
|
- $counthz = \db('工单_印件资料')
|
|
|
- ->where('订单编号', $param['order'])
|
|
|
- ->where($where)
|
|
|
- ->select();
|
|
|
- // 初始化累计数组
|
|
|
+ // 初始化汇总数组
|
|
|
$scslTotals = [
|
|
|
- 'cmsl1' => 0,
|
|
|
- 'cmsl2' => 0,
|
|
|
- 'cmsl3' => 0,
|
|
|
- 'cmsl4' => 0,
|
|
|
- 'cmsl5' => 0,
|
|
|
- 'cmsl6' => 0,
|
|
|
- 'cmsl7' => 0,
|
|
|
- 'cmsl8' => 0,
|
|
|
- 'cmsl9' => 0,
|
|
|
- 'cmsl10' => 0,
|
|
|
- 'zdtotal' => 0,
|
|
|
+ "cmsl1" => 0,
|
|
|
+ "cmsl2" => 0,
|
|
|
+ "cmsl3" => 0,
|
|
|
+ "cmsl4" => 0,
|
|
|
+ "cmsl5" => 0,
|
|
|
+ "cmsl6" => 0,
|
|
|
+ "cmsl7" => 0,
|
|
|
+ "cmsl8" => 0,
|
|
|
+ "cmsl9" => 0,
|
|
|
+ "cmsl10" => 0,
|
|
|
+ "zdtotal" => 0, // 总计数量
|
|
|
];
|
|
|
- // 遍历 $counthz 数组,将每行的 scsl1 到 scsl10 累加
|
|
|
- foreach ($counthz as $item) {
|
|
|
+
|
|
|
+ // 遍历数据集进行汇总
|
|
|
+ foreach ($processlist as $item) {
|
|
|
+ // 遍历每个尺码字段(cmsl1 到 cmsl10)
|
|
|
for ($i = 1; $i <= 10; $i++) {
|
|
|
- $key = "cmsl{$i}";
|
|
|
- if (!empty($item[$key])) { // 检查是否有值
|
|
|
- $scslTotals[$key] += (int)$item[$key];
|
|
|
- $scslTotals['zdtotal'] += (int)$item[$key];
|
|
|
+ // 获取当前字段的数量
|
|
|
+ $sizeQty = $item['cmsl' . $i];
|
|
|
+ // 判断数量是否有效(非空且大于0)
|
|
|
+ if (!empty($sizeQty)) {
|
|
|
+ // 累加当前字段的数量
|
|
|
+ $scslTotals['cmsl' . $i] += $sizeQty;
|
|
|
+ // 累加到总计字段
|
|
|
+ $scslTotals['zdtotal'] += $sizeQty;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- $data['scslTotals'] = $scslTotals;
|
|
|
-
|
|
|
- $data['order'] = $list;
|
|
|
- $data['xhdata'] = $arr;
|
|
|
- $this->success('成功', $data);
|
|
|
+ $data['scslTotals'] = $scslTotals;
|
|
|
+ $data['process'] = $table;//汇总数据集
|
|
|
+ $data['order'] = $list;//表格数据
|
|
|
+ $data['xhdata'] = $arr;//尺码表头
|
|
|
+ $this->success('成功', $data);
|
|
|
+// }
|
|
|
} else {
|
|
|
echo "子订单编号 - 后不是2位也不是4位:$afterDash";
|
|
|
}
|