| 编号 |
名称 |
数量 |
单位 |
单价 |
金额 |
备注 |
{$tableList}
{$tkString}
本单:{$actPrice}
上次欠款:{$beforeDebtPrice}
待付欠款:{$debtAmount}
{$balanceContent}
请在收到货后12小时以内验货,超12小时概不负责!
XL;
}
}
$content .= <<
XL;
$file = $dir . $orderSn . '.html';
$imgFile = $dir . $orderSn . '.png';
if (file_exists($file)) {
unlink($file);
}
if (file_exists($imgFile)) {
unlink($imgFile);
}
file_put_contents($file, $content);
$con = new Converter(null, [
"fmt" => "png",
"in" => $file,
"out" => $imgFile,
]);
$con->convert();
return ['imgFile' => $imgFile];
}
//应收统计下载 ssh 20240530
public static function exportAccountList($list, $mainId)
{
$phpExcelFile = Yii::getAlias("@vendor/phpoffice/phpexcel/");
require_once($phpExcelFile . 'Classes/PHPExcel.php');
$objPHPExcel = new \PHPExcel();
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Document")
->setSubject("Office 2007 XLSX Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("file");
$ghsTitle = '供货商';
$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader(date('n月j日') . " " . $ghsTitle);
$objPHPExcel->getActiveSheet()->getPageMargins()->setTop(0.7);
$objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(0.1);
$objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.5);
$objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0);
$objPHPExcel->getActiveSheet()->getPageMargins()->setHeader(0.1);
$objPHPExcel->getActiveSheet()->getPageMargins()->setFooter(0);
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'ID');
$objPHPExcel->getActiveSheet()->setCellValue('B1', '名称');
$objPHPExcel->getActiveSheet()->setCellValue('C1', '金额');
$objPHPExcel->getActiveSheet()->setCellValue('D1', '订单数');
//设置宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(25);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);
//加粗
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('C1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$baseRow = 2;
foreach ($list as $key => $custom) {
$i = $baseRow + $key;
$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $custom['id']);
$objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $custom['name']);
$objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $custom['amount']);
$objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $custom['num']);
//居左
$objPHPExcel->getActiveSheet()->getStyle('A' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('C' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('D' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}
$fileName = '应收统计-' . date("m-d");
$objPHPExcel->getActiveSheet()->setTitle($fileName);
$objPHPExcel->setActiveSheetIndex(0);
$dir = './priceTable/' . $mainId;
if (file_exists($dir) == false) {
mkdir($dir, 0777, true);
}
$date = $fileName;
$file = $date . '.xls';
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
if (file_exists($dir . '/' . $file)) {
unlink($dir . '/' . $file);
}
$objWriter->save($dir . '/' . $file);
$fileUrl = Yii::$app->params['ghsHost'] . '/priceTable/' . $mainId . '/' . $file;
util::success(['file' => $fileUrl, 'shortFile' => $file]);
}
//应收统计下载 ssh 20240530
public static function exportPastList($list, $mainId)
{
$phpExcelFile = Yii::getAlias("@vendor/phpoffice/phpexcel/");
require_once($phpExcelFile . 'Classes/PHPExcel.php');
$objPHPExcel = new \PHPExcel();
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Document")
->setSubject("Office 2007 XLSX Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("file");
$ghsTitle = '供货商';
$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader(date('n月j日') . " " . $ghsTitle);
$objPHPExcel->getActiveSheet()->getPageMargins()->setTop(0.7);
$objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(0.1);
$objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.5);
$objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0);
$objPHPExcel->getActiveSheet()->getPageMargins()->setHeader(0.1);
$objPHPExcel->getActiveSheet()->getPageMargins()->setFooter(0);
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'ID');
$objPHPExcel->getActiveSheet()->setCellValue('B1', '客户');
$objPHPExcel->getActiveSheet()->setCellValue('C1', '手机号');
$objPHPExcel->getActiveSheet()->setCellValue('D1', '欠款金额');
//设置宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(25);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);
//加粗
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('C1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$baseRow = 2;
foreach ($list as $key => $custom) {
$i = $baseRow + $key;
$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $custom['id']);
$objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $custom['name']);
$objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $custom['mobile']);
$objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $custom['currentDebAmount']);
//居左
$objPHPExcel->getActiveSheet()->getStyle('A' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('C' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('D' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}
$fileName = '历史应收-' . date("m-d");
$objPHPExcel->getActiveSheet()->setTitle($fileName);
$objPHPExcel->setActiveSheetIndex(0);
$dir = './priceTable/' . $mainId;
if (file_exists($dir) == false) {
mkdir($dir, 0777, true);
}
$date = $fileName;
$file = $date . '.xls';
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
if (file_exists($dir . '/' . $file)) {
unlink($dir . '/' . $file);
}
$objWriter->save($dir . '/' . $file);
$fileUrl = Yii::$app->params['ghsHost'] . '/priceTable/' . $mainId . '/' . $file;
util::success(['file' => $fileUrl, 'shortFile' => $file]);
}
public static function exportYj($list, $mainId)
{
$phpExcelFile = Yii::getAlias("@vendor/phpoffice/phpexcel/");
require_once($phpExcelFile . 'Classes/PHPExcel.php');
$objPHPExcel = new \PHPExcel();
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Document")
->setSubject("Office 2007 XLSX Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("file");
$ghsTitle = '供货商';
$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader(date('n月j日') . " " . $ghsTitle);
$objPHPExcel->getActiveSheet()->getPageMargins()->setTop(0.7);
$objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(0.1);
$objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.5);
$objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0);
$objPHPExcel->getActiveSheet()->getPageMargins()->setHeader(0.1);
$objPHPExcel->getActiveSheet()->getPageMargins()->setFooter(0);
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'ID');
$objPHPExcel->getActiveSheet()->setCellValue('B1', '客户');
$objPHPExcel->getActiveSheet()->setCellValue('C1', '手机号');
$objPHPExcel->getActiveSheet()->setCellValue('D1', '订单数');
$objPHPExcel->getActiveSheet()->setCellValue('E1', '订单金额');
$objPHPExcel->getActiveSheet()->setCellValue('F1', '退款金额');
$objPHPExcel->getActiveSheet()->setCellValue('G1', '实际金额');
$objPHPExcel->getActiveSheet()->setCellValue('H1', '纸箱费');
$objPHPExcel->getActiveSheet()->setCellValue('I1', '打包费');
$objPHPExcel->getActiveSheet()->setCellValue('J1', '运费');
//设置宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);
//加粗
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('C1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('E1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('F1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('G1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('H1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('I1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('J1')->getFont()->setSize(9)->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('E1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('F1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('G1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('H1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('I1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('J1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$baseRow = 2;
foreach ($list as $key => $custom) {
$i = $baseRow + $key;
$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $custom['id']);
$objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $custom['name']);
$objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $custom['mobile']);
$objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $custom['num']);
$objPHPExcel->getActiveSheet()->setCellValue('E' . $i, $custom['orderPrice']);
$objPHPExcel->getActiveSheet()->setCellValue('F' . $i, $custom['tkPrice']);
$objPHPExcel->getActiveSheet()->setCellValue('G' . $i, $custom['actPrice']);
$objPHPExcel->getActiveSheet()->setCellValue('H' . $i, $custom['carton']);
$objPHPExcel->getActiveSheet()->setCellValue('I' . $i, $custom['pack']);
$objPHPExcel->getActiveSheet()->setCellValue('J' . $i, $custom['freight']);
//居左
$objPHPExcel->getActiveSheet()->getStyle('A' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('C' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('D' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('E' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('F' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('G' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('H' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('I' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('J' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}
$fileName = '客户业绩-' . date("m-d");
$objPHPExcel->getActiveSheet()->setTitle($fileName);
$objPHPExcel->setActiveSheetIndex(0);
$dir = './priceTable/' . $mainId;
if (file_exists($dir) == false) {
mkdir($dir, 0777, true);
}
$date = $fileName;
$file = $date . '.xls';
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
if (file_exists($dir . '/' . $file)) {
unlink($dir . '/' . $file);
}
$objWriter->save($dir . '/' . $file);
$fileUrl = Yii::$app->params['ghsHost'] . '/priceTable/' . $mainId . '/' . $file;
util::success(['file' => $fileUrl, 'shortFile' => $file]);
}
public static function printLogisticsLabel($order, $shop, $ext)
{
/**************************如果是好多花的云仓还要再打一下标签纸,多处要同步修改,关键词 hdh_yc *****************************/
$orderMainId = $order->mainId;
if (getenv('YII_ENV') == 'production') {
$map = [65726, 58, 25119, 28500, 1294, 12925, 2644, 10652, 2084, 89473, 83694];
} else {
$map = [828,644];
}
/**************************如果是好多花的云仓还要再打一下标签纸,多处要同步修改,关键词 hdh_yc *****************************/
$customId = $order->customId ?? 0;
$custom = CustomClass::getById($customId, true);
if (empty($custom)) {
if (!in_array($orderMainId, $map)) {
util::fail('没有找到客户');
} else {
return false;
}
}
$shortName = $custom->shortName ?? '未命名';
$shortName = stringUtil::subStringUtf8($shortName, 5);
$customMobile = $order->customMobile ?? '';
if (empty($customMobile)) {
if (!in_array($orderMainId, $map)) {
util::fail('客户手机号无效');
} else {
return false;
}
}
//东莞我要花 手机后四号变星号
if (in_array((int)$orderMainId, [2644, 10652, 89473], true)) {
$customMobile = preg_replace('/(.{4})$/u', '****', trim($customMobile));
}
$customName = $order->customName ?? '';
$remark = $order->remark ?? '';
$shortRemark = stringUtil::subStringUtf8($remark, 8);
$wlName = $custom->wlName ?? '';
if (empty($wlName)) {
$wlName = $shortRemark;
}
$distId = $custom->distId ?? '';
$dist = DistClass::getById($distId, true);
$distName = $dist->name ?? '未分区';
$address = $order->address ?? '';
$floor = $order->floor ?? '';
$fullAddress = $address . $floor;
$showAddress = $order->showAddress ?? '';
$shopName = $shop->shopName ?? '';
$sjName = $shop->merchantName;
$currentName = $shopName == '首店' ? $sjName : $sjName . ' ' . $shopName;
$telephone = $shop->telephone ?? '';
$wlLabelSn = $ext->wlLabelSn ?? '';
if (empty($wlLabelSn)) {
if (!in_array($orderMainId, $map)) {
util::fail('请绑定物流标签机');
} else {
return false;
}
}
$p = new printUtil($wlLabelSn);
if (!in_array($orderMainId, $map)) {
$p->times = 1;
//安庆三叶鲜花批发,比较特殊
if ($orderMainId == 2071) {
$content = '' . $shortName . '';
$content .= '地址';
$content .= '' . $customMobile . '';
$content .= '号码';
$content .= '' . $wlName . '';
$content .= '物流';
$content .= '' . $currentName . ' ' . $telephone . '';
} else {
$content = '' . $shortName . '';
$content .= '地址';
$content .= '' . $customMobile . '';
$content .= '号码';
$content .= '' . $wlName . '';
$content .= '物流';
$content .= '' . $currentName . ' ' . $telephone . '';
}
} else {
/**************************如果是好多花的云仓还要再打一下标签纸,多处要同步修改,关键词 hdh_yc *****************************/
$sameTimeIds = $order->sameTimeIds;
$num = 1;
if (!empty($sameTimeIds)) {
$ids = explode(',', $sameTimeIds);
if (!empty($ids)) {
$num = count($ids);
}
}
if ($num > 1) {
$customName = $customName . ' 共' . $num . '单';
}
$itemNum = $order->itemNum ?? 0;
$itemNum = floatval($itemNum);
$payTime = $order->payTime ?? '';
$payDate = date('m-d H:i', strtotime($payTime));
$content = '' . $customName . '';
// 地址超过15个字,字体大小(w和h)变小一级(由 w="2" h="2" 变为 w="1" h="1")
$addressLen = mb_strlen($fullAddress, 'UTF-8');
$fontScale = '2';
$content .= '' . $fullAddress . '';
if(!empty($showAddress)){
$content .= '' . $showAddress . '';
}
$content .= '' . $customMobile . ' ' . $itemNum . '扎';
$content .= '' . $distName . ' ' . $payDate . '';
/**************************如果是好多花的云仓还要再打一下标签纸,多处要同步修改,关键词 hdh_yc *****************************/
}
$p->printLabelMsg($content);
if (is_object($order) && method_exists($order, 'save')) {
$order->printWlNum = intval($order->printWlNum ?? 0) + 1;
$order->save();
}
return true;
}
//打印花材的物流标 ssh 20260507
public static function printItemLabel($order, $shop, $ext, $product, $num, $boxNum, $orderItem)
{
$customId = $order->customId ?? 0;
$custom = CustomClass::getById($customId, true);
$customMobile = $order->customMobile ?? '';
$customName = $order->customName ?? '';
$remark = $order->remark ?? '';
$shortRemark = stringUtil::subStringUtf8($remark, 8);
$wlName = $custom->wlName ?? '';
if (empty($wlName)) {
$wlName = $shortRemark;
}
$distId = $custom->distId ?? '';
$dist = DistClass::getById($distId, true);
$distName = $dist->name ?? '未分区';
$address = $order->address ?? '';
$floor = $order->floor ?? '';
$fullAddress = $address . $floor;
$wlLabelSn = $ext->wlLabelSn ?? '';
if (empty($wlLabelSn)) {
util::fail('请绑定物流标签机');
}
$p = new printUtil($wlLabelSn);
$p->times = $num;
$sameTimeIds = $order->sameTimeIds;
$num = 1;
if (!empty($sameTimeIds)) {
$ids = explode(',', $sameTimeIds);
if (!empty($ids)) {
$num = count($ids);
}
}
if ($num > 1) {
$customName = $customName . ' ' . $num . '单';
}
$remark = '';
if (!empty($orderItem->remark)) {
$remark .= $orderItem->remark;
}
if (!empty($order->remark)) {
if (!empty($remark)) {
$remark .= ' ' . $order->remark;
} else {
$remark .= $order->remark;
}
}
$productName = $product->name ?? '';
$content = '' . $productName . ' 装箱数:' . $boxNum . '';
$content .= '————————————————————';
$content .= '客户:' . $customName . '';
$content .= '地址:' . $fullAddress . '';
$content .= '电话:' . $customMobile . '';
$content .= '备注:' . $remark . '';
$p->printLabelMsg($content);
return true;
}
//更新客户同一天的订单 $update 0 添加 1 修改
public static function updateMergeOrder($order, $update = 0)
{
$date = substr($order->payTime, 0, 10);
$customId = $order->customId ?? 0;
$mainId = $order->mainId ?? 0;
$orderId = $order->id ?? 0;
//找到当前订单客户的账单日期为 $date 的所有订单
$startTime = $date . ' 00:00:00';
$endTime = $date . ' 23:59:59';
$dayOrders = self::getAllByCondition([
'mainId' => $mainId,
'customId' => $customId,
'payTime' => ['between', [$startTime, $endTime]]
], 'id ASC', 'id');
if (empty($dayOrders)) {
return false;
}
$ids = array_column($dayOrders, 'id');
$count = count($ids);
if ($update == 0) {
if ($count <= 1) {
//新增,如果当天只有一个订单,不需要操作
return false;
}
$hasMerge = OrderMergeSnClass::getByCondition(['customId' => $customId, 'mergeDate' => $date], true);
if (!empty($hasMerge)) {
$hasMergeId = $hasMerge->id ?? 0;
$order->mergeId = $hasMergeId;
$order->save();
OrderMergeClass::add(['mergeId' => $hasMergeId, 'orderId' => $orderId, 'mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId]);
self::syncOrderMergeNumForMergeId($hasMergeId);
PurchaseClass::syncMergeRelationByOrderIds([$orderId]);
} else {
self::rebuildOrderMergeGroupForDay($ids, $date, $customId, $mainId);
}
} else {
//修改账单日:订单 payTime 已在调用方改为新日 $date
$oldMergeId = (int)($order->mergeId ?? 0);
if ($oldMergeId > 0) {
$oldMergeSn = OrderMergeSnClass::getById($oldMergeId, true);
if (empty($oldMergeSn)) {
// 订单仍挂着 mergeId,但主档已不存在,避免后续报错并清理脏数据
$order->mergeId = 0;
$order->mergeNum = 0;
$order->save();
} else {
$oldDate = $oldMergeSn->mergeDate ?? '';
if ($oldDate == $date) {
//合并组账单日与当前一致,无需调整
return false;
}
$oldMergeList = OrderMergeClass::getAllByCondition(['mergeId' => $oldMergeId], null, '*', null, true);
if (count($oldMergeList) <= 2) {
//合并组内至多 2 单:整组 dissolve(与原先「只剩一单合并无意义」一致)
$oldMergeSn->delete();
$del = [];
foreach ($oldMergeList as $mergeRow) {
$del[] = $mergeRow->orderId;
$mergeRow->delete();
}
self::updateByIds($del, ['mergeId' => 0, 'mergeNum' => 0]);
} else {
$order->mergeId = 0;
$order->mergeNum = 0;
$order->save();
OrderMergeClass::deleteByCondition(['mergeId' => $oldMergeId, 'orderId' => $orderId]);
self::syncOrderMergeNumForMergeId($oldMergeId);
}
}
}
$hasNewMerge = OrderMergeSnClass::getByCondition(['customId' => $customId, 'mergeDate' => $date], true);
if (!empty($hasNewMerge)) {
$newMergeId = $hasNewMerge->id ?? 0;
$order->mergeId = $newMergeId;
$order->save();
OrderMergeClass::add(['mergeId' => $newMergeId, 'orderId' => $orderId, 'mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId]);
self::syncOrderMergeNumForMergeId($newMergeId);
PurchaseClass::syncMergeRelationByOrderIds([$orderId]);
} else {
self::rebuildOrderMergeGroupForDay($ids, $date, $customId, $mainId);
}
}
return true;
}
/**
* 指定客户、某日多单:新建合并主档,回写订单 mergeId,并批量写入 xhGhsOrderMerge。
*
* @param int[] $ids 当日同客户订单 id 列表
*/
private static function rebuildOrderMergeGroupForDay(array $ids, $date, $customId, $mainId)
{
$mergeData = ['mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId];
$mergeId = orderSn::getGhsOrderMergeId($mergeData);
$mergeNum = count($ids);
self::updateByIds($ids, ['mergeId' => $mergeId, 'mergeNum' => $mergeNum]);
$addData = [];
foreach ($ids as $currentId) {
$addData[] = ['mergeId' => $mergeId, 'orderId' => $currentId, 'mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId];
}
OrderMergeClass::batchAdd($addData);
PurchaseClass::syncMergeRelationByOrderIds($ids);
}
/** 按 xhGhsOrderMerge 明细数量,回写该合并组内所有订单的 mergeNum */
private static function syncOrderMergeNumForMergeId($mergeId)
{
$mergeId = (int)$mergeId;
if ($mergeId <= 0) {
return;
}
$rows = OrderMergeClass::getAllByCondition(['mergeId' => $mergeId], null, 'orderId', null, true);
$mergeNum = count($rows);
if ($mergeNum === 0) {
return;
}
$orderIds = [];
foreach ($rows as $row) {
$orderIds[] = (int)(is_object($row) ? ($row->orderId ?? 0) : ($row['orderId'] ?? 0));
}
$orderIds = array_values(array_filter($orderIds));
if (!empty($orderIds)) {
self::updateByIds($orderIds, ['mergeNum' => $mergeNum]);
}
}
// 更新同天内的所有订单的 sameTimeIds
public static function updateSameTimeIds($order, $date)
{
$id = $order->id ?? 0;
$customId = $order->customId ?? 0;
$mainId = $order->mainId ?? 0;
$oldSameTimeIds = $order->sameTimeIds ?? '';
//找到当前订单客户的账单日期为 $date 的所有订单,然后更新同天内的所有订单的 sameTimeIds(加此次要改变的订单的订单号$id)
$startTime = $date . ' 00:00:00';
$endTime = $date . ' 23:59:59';
$dayOrders = self::getAllByCondition([
'mainId' => $mainId,
'customId' => $customId,
'payTime' => ['between', [$startTime, $endTime]]
], 'id ASC', 'id, sameTimeIds');
$ids = [];
if (!empty($dayOrders)) {
$ids = array_column($dayOrders, 'id');
}
// 确保当前订单ID在列表中
if (!in_array($id, $ids)) {
$ids[] = $id;
}
// 排序并去重
sort($ids);
$ids = array_unique($ids);
// 限制最多 90 单,避免 someTimeIds 过长(兼容原先业务逻辑限制)
if (count($ids) > 90) {
$ids = array_slice($ids, 0, 90);
}
$sameTimeIdsStr = implode(',', $ids);
// 更新所有相关订单
if (!empty($ids) && in_array($id, $ids)) {
self::updateByIds($ids, ['sameTimeIds' => $sameTimeIdsStr]);
}
//从原先同天内的订单中删除此次要改变的订单的订单号$id
if (!empty($oldSameTimeIds) && $oldSameTimeIds != $sameTimeIdsStr) {
$oldSameTimeIdsArr = explode(',', $oldSameTimeIds);
if (in_array($id, $oldSameTimeIdsArr)) {
$oldSameTimeIdsArr = array_diff($oldSameTimeIdsArr, [$id]);
$oldSameTimeIdsStr = implode(',', $oldSameTimeIdsArr);
if (!empty($oldSameTimeIdsArr)) {
self::updateByIds($oldSameTimeIdsArr, ['sameTimeIds' => $oldSameTimeIdsStr]);
}
}
}
//noticeUtil::push("orderIds = {$sameTimeIdsStr}, sameTimeIdsStr: {$sameTimeIdsStr}");
}
}