|
|
@@ -0,0 +1,295 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+
|
|
|
+namespace App\Traits;
|
|
|
+
|
|
|
+
|
|
|
+use App\Logistic;
|
|
|
+use App\OracleDOCOrderDetail;
|
|
|
+use App\OracleDOCWaveDetails;
|
|
|
+use App\Owner;
|
|
|
+use App\OwnerLogisticPrintTemplate;
|
|
|
+use Illuminate\Support\Carbon;
|
|
|
+use Illuminate\Support\Facades\Cache;
|
|
|
+
|
|
|
+trait DeliveryProcess
|
|
|
+{
|
|
|
+ use DrawImage;
|
|
|
+
|
|
|
+ // 将 base64编码 转 图片 进行修改并保存,后把修改保存的图片转为 base64编码 返回
|
|
|
+ function processing(&$params)
|
|
|
+ {
|
|
|
+ // TODO 获取模板
|
|
|
+ $owner_query = Owner::query()->selectRaw('id')->where('code', $params['owner_code']);
|
|
|
+ $logistic_query = Logistic::query()->selectRaw('id')->where('code', $params['logistic_code']);
|
|
|
+ $item = OwnerLogisticPrintTemplate::query()->with('printTemplate')->where('owner_id', $owner_query)->where('logistic_id', $logistic_query)->first();
|
|
|
+
|
|
|
+ $path = '';
|
|
|
+ $img = $this->getImage($params['base64'], $path);
|
|
|
+
|
|
|
+ $img = $this->draw($params['delivery'] ?? [], $item, $img);
|
|
|
+
|
|
|
+ $img->save($path);
|
|
|
+
|
|
|
+ $arr = [];
|
|
|
+ if (Cache::has('print-template-file-list')) {
|
|
|
+ $arr = Cache::get('print-template-file-list');
|
|
|
+ }
|
|
|
+
|
|
|
+ $arr[] = ['time' => Carbon::now(), 'path' => $path];
|
|
|
+ Cache::put('print-template-file-list', $arr);
|
|
|
+
|
|
|
+ // TODO 将文件进行base64编码
|
|
|
+ if ($fp = fopen($path, "rp", 0)) {
|
|
|
+ $gambar = fread($fp, filesize($path));
|
|
|
+ fclose($fp);
|
|
|
+ $params['base64'] = chunk_split(base64_encode($gambar));
|
|
|
+ }
|
|
|
+ $params['is_process'] = true;
|
|
|
+ return $params;
|
|
|
+ }
|
|
|
+
|
|
|
+ // $item
|
|
|
+ // 将按条件转化为
|
|
|
+ function getDeliveryInfo($item, $type): ?array
|
|
|
+ {
|
|
|
+ if (in_array($type, ['TB', 'PDD', 'SF'])) return $this->getDocOrderDeliveryInfo($item);
|
|
|
+ else if (in_array($type, ['JD', 'SFQHD'])) return $this->getDocOrderInfo($item);
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 菜鸟面单和拼多多面单 TB PDD
|
|
|
+ function getDocOrderDeliveryInfo($docOrderDelivery): array
|
|
|
+ {
|
|
|
+ // 波次订单总数
|
|
|
+ $wave_count = (function () use ($docOrderDelivery) {
|
|
|
+ $count = OracleDOCWaveDetails::query()->where('waveno', $docOrderDelivery->docOrderHeader['waveno'])->count();
|
|
|
+ return $count ? strval($count) : '0';
|
|
|
+ })();
|
|
|
+ // 备注
|
|
|
+ list($remark1, $remark2, $remark3) = (function () use ($docOrderDelivery) {
|
|
|
+ switch ($docOrderDelivery->docOrderHeader['customerid'] ?? '') {
|
|
|
+ case 'BOAO':
|
|
|
+ return ['易碎、易融', '不可放置自提柜!', '需当面签收!'];
|
|
|
+ case 'LINGFEI':
|
|
|
+ return ['快递小哥送货路远,风吹日晒注意安全,', '见到小主代问声好,你我共建文明家园!', ''];
|
|
|
+ case 'WEIXI1':
|
|
|
+ return ['售后电话13816946227', '', ''];
|
|
|
+ default:
|
|
|
+ return ['', '', ''];
|
|
|
+ }
|
|
|
+ })();
|
|
|
+ // 仓库
|
|
|
+ $wh = (function () use ($docOrderDelivery) {
|
|
|
+ $customerid = $docOrderDelivery->docOrderHeader['customerid'] ?? '';
|
|
|
+ if (strstr('泗砖', $customerid)) return '泗砖宝石仓';
|
|
|
+ if (strstr('武乡', $customerid)) return '武乡宝石仓';
|
|
|
+ if (strstr('九干', $customerid)) return '九干宝石仓';
|
|
|
+ return '宝时仓';
|
|
|
+ })();
|
|
|
+
|
|
|
+ // whaddr 仓库地址
|
|
|
+ $whaddr = (function () use ($docOrderDelivery) {
|
|
|
+ $peo = $docOrderDelivery->docOrderHeader->oracleBASCustomer['address1'];
|
|
|
+ if (strstr($peo, '九干')) return '上海上海市松江区九干路1300号';
|
|
|
+ if (strstr($peo, '武乡')) return '上海嘉定区徐行镇武乡路9号';
|
|
|
+ if (strstr($peo, '泗砖')) return '上海嘉定区徐行镇武乡路9号';
|
|
|
+ return '宝时仓';
|
|
|
+ })();
|
|
|
+ // 城镇 收货
|
|
|
+ $raddr = (function () use ($docOrderDelivery) {
|
|
|
+ $docOrderHeader = $docOrderDelivery['doc_order_header'];
|
|
|
+ return ($docOrderHeader['c_province'] ?? '') . ' ' . ($docOrderHeader['c_city'] ?? '') . ' ' . ($docOrderHeader['c_address2'] ?? '');
|
|
|
+ })();
|
|
|
+ // 韵达特殊处理
|
|
|
+ $yd = (function () use ($docOrderDelivery) {
|
|
|
+ $carrierid = $docOrderDelivery->docOrderHeader['carrierid'];
|
|
|
+ if ($carrierid !== "YUNDA") return '';
|
|
|
+ if (in_array($carrierid, ['上海', '上海市'])) return 'A';
|
|
|
+ if (in_array($carrierid, ['江苏', '江苏省', '浙江', '浙江省'])) return 'B';
|
|
|
+ if (in_array($carrierid, ['北京', '北京市', '安徽', '安徽省', '山东', '河南', '江西', '湖南', '湖北', '山东省', '河南省', '江西省', '湖南省', '湖北省'])) return 'C';
|
|
|
+ if (in_array($carrierid, [
|
|
|
+ '上海', '上海市', '江苏', '江苏省', '浙江', '浙江省', '北京', '北京市', '安徽', '安徽省', '山东', '河南', '江西', '湖南', '湖北', '山东省', '河南省', '江西省', '湖南省', '湖北省'
|
|
|
+ ])) return 'D';
|
|
|
+ return '';
|
|
|
+ })();
|
|
|
+ return [
|
|
|
+ 'waveno' => $docOrderDelivery->docOrderHeader['waveno'] ?? '', // 波次
|
|
|
+ 'print_sum' => '总打印数' . ($wave_count ?? 0) . '行号#' . $docOrderDelivery->docOrderHeader->oracleDOCWaveDetail['seqno'], // 订单所处波次的序号
|
|
|
+ 'wave_count' => $wave_count,
|
|
|
+ // 订单总数
|
|
|
+ 'count' => (function () use ($docOrderDelivery) {
|
|
|
+ $count = OracleDOCOrderDetail::query()->where('orderno', $docOrderDelivery->docOrderHeader['ordenro'])->sum('qtyAllocated_each') ;
|
|
|
+ return $count ? strval($count) : "0";
|
|
|
+ })(), // 订单商品总数
|
|
|
+ 'remark1' => $remark1,
|
|
|
+ 'remark2' => $remark2,
|
|
|
+ 'remark3' => $remark3,
|
|
|
+ 'wh' => $wh,
|
|
|
+ 'whaddr' => $whaddr, // 仓库地址
|
|
|
+ 'deliveryno' => $docOrderDelivery->docOrderHeader['deliveryno'] ?? $docOrderDelivery->docOrderHeader['soreference5'], // 快递单号
|
|
|
+ 'c_contact' => $docOrderDelivery->docOrderHeader['c_contact'] ?? '',
|
|
|
+ 'c_province' => $docOrderDelivery->docOrderHeader['c_province'] ?? '',
|
|
|
+ 'c_city' => $docOrderDelivery->docOrderHeader['c_city'] ?? '',
|
|
|
+ 'c_address2' => $docOrderDelivery->docOrderHeader['c_address2'] ?? $docOrderDelivery->docOrderHeader['c_district'],
|
|
|
+ 'c_tel1' => $docOrderDelivery->docOrderHeader['c_tel1'] ?? $docOrderDelivery->docOrderHeader['c_tel2'],
|
|
|
+ 'c_tel2' => $docOrderDelivery->docOrderHeader['c_tel2'],
|
|
|
+ 'issuepartyname' => $docOrderDelivery->docOrderHeader['issuepartyname'] ?? '宝时云仓',
|
|
|
+ 'logistic_number' => $docOrderDelivery['delivery_no'],
|
|
|
+ 'raddr' => $raddr, // 收货地址
|
|
|
+ 'YD' => $yd, // 韵达自定义
|
|
|
+ 'H_EDI_15' => $docOrderDelivery->docOrderHeader['H_EDI_15'] ?? '', // 大头笔
|
|
|
+ 'logistic_name' => (function () use ($docOrderDelivery) {
|
|
|
+ $logistic = Logistic::query()->where('code', $docOrderDelivery->docOrderHeader['carrierid'])->first();
|
|
|
+ return $logistic['name'] ?? '';
|
|
|
+ })(), // 承运商
|
|
|
+ 'consigneeid' => $docOrderDelivery->docOrderHeader['consigneeid'] ?? '',
|
|
|
+ 'qrcode' => $docOrderDelivery['qrcode'] ?? '',
|
|
|
+ 'date' => Carbon::now()->format(Carbon::DEFAULT_TO_STRING_FORMAT)
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 非菜鸟面单 SF SFQHD JD
|
|
|
+ function getDocOrderInfo($docOrderHeader): array
|
|
|
+ {
|
|
|
+ // 联系号码
|
|
|
+ $tel = (function () use ($docOrderHeader) {
|
|
|
+ if (in_array($docOrderHeader['customerid'], ['HANDA', 'BAIPING', 'JINBAOBEI', 'DUOCHOU', 'YUNKAI']) &&
|
|
|
+ in_array($docOrderHeader['issuepartyname'], ['私密渠道A', '私密渠道BP', '金宝贝启蒙', 'ATSUGI厚木', '初品公司'])) {
|
|
|
+ return '18616839461';
|
|
|
+ }
|
|
|
+ if (in_array($docOrderHeader['customerid'], ['HEDI']) &&
|
|
|
+ in_array($docOrderHeader['issuepartyname'], ['马丁'])) {
|
|
|
+ return '18811144744';
|
|
|
+ }
|
|
|
+ return '13761413262';
|
|
|
+ })();
|
|
|
+
|
|
|
+ // whaddr 仓库地址
|
|
|
+ $whaddr = (function () use ($docOrderHeader) {
|
|
|
+ $address = $docOrderHeader->oracleBASCustomer['address1'] ?? '';
|
|
|
+ if (strstr($address, '泗砖')) return '上海上海市松江区泗砖公路351号';
|
|
|
+ if (strstr($address, '武乡')) return '上海嘉定区徐行镇武乡路9号';
|
|
|
+ if (strstr($address, '九干')) return '上海上海市松江区九干路1300号';
|
|
|
+ return '';
|
|
|
+ })();
|
|
|
+
|
|
|
+ // $ordercount 订单波次的订单总数
|
|
|
+ $owner_count = (function () use ($docOrderHeader) {
|
|
|
+ $count = OracleDOCWaveDetails::query()->where('waveno', $docOrderHeader['waveno'])->count();
|
|
|
+ return $count ? strval($count) : "0";
|
|
|
+ })();
|
|
|
+
|
|
|
+ // orderseq 订单在波次里的序号
|
|
|
+ $orderseq = (function () use ($docOrderHeader) {
|
|
|
+ return $docOrderHeader->oracleDOCWaveDetail->seqno ?? '';
|
|
|
+ })();
|
|
|
+
|
|
|
+ // seqno
|
|
|
+ $seqno = (function () use ($docOrderHeader, $orderseq) {
|
|
|
+ $count = OracleDOCWaveDetails::query()->where('waveno', $docOrderHeader['waveno'])->count();
|
|
|
+ return '总打印数' . ($count) . " 行号#" . $orderseq;
|
|
|
+ })();
|
|
|
+
|
|
|
+ // 备注
|
|
|
+ list($remark1, $remark2, $remark3) = (function () use ($docOrderHeader) {
|
|
|
+ switch ($docOrderHeader['customerid'] ?? '') {
|
|
|
+ case 'BOAO':
|
|
|
+ return ['易碎、易融', '不可放置自提柜!', '需当面签收!'];
|
|
|
+ case 'LINGFEI':
|
|
|
+ return ['快递小哥送货路远,风吹日晒注意安全,', '见到小主代问声好,你我共建文明家园!', ''];
|
|
|
+ case 'WEIXI1':
|
|
|
+ return ['售后电话13816946227', '', ''];
|
|
|
+ default:
|
|
|
+ return ['', '', ''];
|
|
|
+ }
|
|
|
+ })();
|
|
|
+
|
|
|
+ $number = (function () use ($docOrderHeader) {
|
|
|
+ if (in_array($docOrderHeader['userdefine1'], ['SFJR', 'SFJRDF'])) return '1';
|
|
|
+ if (in_array($docOrderHeader['userdefine1'], ['SFSY', 'SFSYDF', 'SFSYQHD'])) return '4';
|
|
|
+ if (in_array($docOrderHeader['userdefine1'], ['SFTH', 'SFTHQHD'])){
|
|
|
+ if (in_array($docOrderHeader['c_province'], ['西藏', '西藏自治区'])) return '4';
|
|
|
+ else return '68';
|
|
|
+ }
|
|
|
+ if ($docOrderHeader['userdefine1'] == 'SFTHDF'){
|
|
|
+ if (in_array($docOrderHeader['c_province'], ['上海', '上海市', '江苏', '江苏省', '浙江', '浙江省', '安徽省', '安徽', '西藏', '西藏自治区'])) return '4';
|
|
|
+ else return '6';
|
|
|
+ }
|
|
|
+ return '';
|
|
|
+ })();
|
|
|
+
|
|
|
+ // js 结算方式
|
|
|
+ $js = (function () use ($docOrderHeader) {
|
|
|
+ if (in_array($docOrderHeader['userdefine1'], ['SFSYDF', 'SFTHDF'])) return "到付";
|
|
|
+ else return '季付月结';
|
|
|
+ })();
|
|
|
+
|
|
|
+ // 寄付月结
|
|
|
+ $jfyj = (function () use ($docOrderHeader) {
|
|
|
+ $base_customer = $docOrderHeader['oracleBASCustomer'];
|
|
|
+ if (in_array($docOrderHeader['userdefine1'], ['SFSY', 'SFSYQHD', 'SFJR'])) return '寄付月结:0210188294';
|
|
|
+
|
|
|
+ if (in_array($docOrderHeader['userdefine1'], ['SFTH', 'SFTHQHD'])) {
|
|
|
+ if ($base_customer['udf3'] == '货安') return '寄付月结:0210321137';
|
|
|
+ if ($base_customer['udf3'] != '货安') return '寄付月结:0218877996';
|
|
|
+ }
|
|
|
+
|
|
|
+ if (in_array($docOrderHeader['userdefine1'], ['SFTH', 'SFTHQHD'])) return '到付';
|
|
|
+ return '寄付月结:0210188294';
|
|
|
+ })();
|
|
|
+
|
|
|
+
|
|
|
+ // 仓库
|
|
|
+ $wh = (function () use ($docOrderHeader) {
|
|
|
+ $customerid = $docOrderHeader['customerid'] ?? '';
|
|
|
+ if (strstr($customerid,'泗砖' )) return '泗砖宝石仓';
|
|
|
+ if (strstr($customerid,'武乡' )) return '武乡宝石仓';
|
|
|
+ if (strstr($customerid,'九干' )) return '九干宝石仓';
|
|
|
+ return '宝时仓';
|
|
|
+ })();
|
|
|
+
|
|
|
+ $yd = (function () use ($docOrderHeader) {
|
|
|
+ if ($docOrderHeader['carrierid'] == 'YUNDA') {
|
|
|
+ if (in_array($docOrderHeader['c_province'], ['上海', '上海市'])) return 'A';
|
|
|
+ if (in_array($docOrderHeader['c_province'], ['江苏', '江苏省', '浙江', '浙江省'])) return 'B';
|
|
|
+ if (in_array($docOrderHeader['c_province'], ['北京', '北京市', '安徽', '安徽省', '山东', '河南', '江西', '湖南', '湖北', '山东省', '河南省', '江西省', '湖南省', '湖北省'])) return 'C';
|
|
|
+ if (!in_array($docOrderHeader['c_province'],['上海','上海市','江苏','江苏省','浙江','浙江省','北京','北京市','安徽','安徽省','山东','河南','江西','湖南','湖北','山东省','河南省','江西省','湖南省','湖北省']))
|
|
|
+ return 'D';
|
|
|
+ }
|
|
|
+ return '';
|
|
|
+ })();
|
|
|
+ return [
|
|
|
+ 'waveno' => $docOrderHeader['waveno'] ?? '',
|
|
|
+ 'print_sum' => '总打印数' . ($owner_count ?? 0) . '行号#' .$docOrderHeader->oracleDOCWaveDetail['seqno'] ?? '', // 订单所处波次的序号,
|
|
|
+ 'wave_count' => $owner_count,
|
|
|
+ 'orderno' => $docOrderHeader['orderno'] ?? '',
|
|
|
+ 'logistic_number' => $docOrderHeader['deliveryno'] ?? $docOrderHeader['soreference5'],
|
|
|
+ 'count' => $owner_count, // 订单所属波次订单总数
|
|
|
+ 'orderseq' => $orderseq, // 订单序号
|
|
|
+ 'seqno' => $seqno, // 打印序号
|
|
|
+ 'remark1' => $remark1, // 备注1
|
|
|
+ 'remark2' => $remark2, // 备注2
|
|
|
+ 'remark3' => $remark3, // 备注3
|
|
|
+ 'grossweight' => $docOrderHeader->oracleDOCWaveDetail['grossweight'] ?? '', // 重量
|
|
|
+ 'wh' => $wh, // 仓库
|
|
|
+ 'whaddr' => $whaddr, // 仓库地址
|
|
|
+ 'deliveryno' => '', // 快递单号
|
|
|
+ 'raddr' => ($docOrderHeader['c_province'] ?? '') . ' ' . ($docOrderHeader['c_city'] ?? '') . ' ' . ($docOrderHeader['c_address2'] ?? ''), // 发货地址
|
|
|
+ 'c_contact' => $docOrderHeader['c_contact'],
|
|
|
+ 'c_province' => $docOrderHeader['c_province'],
|
|
|
+ 'c_city'=> $docOrderHeader['c_city'],
|
|
|
+ 'c_address2' => $docOrderHeader['c_address2'] ?? $docOrderHeader['c_district'],
|
|
|
+ 'c_tel1' => $docOrderHeader['c_tel1'] ?? $docOrderHeader['c_tel2'],
|
|
|
+ 'c_tel2' => $docOrderHeader['c_tel2'] ,
|
|
|
+ 'issuepartyname' => $docOrderHeader['issuepartyname'] ?? '宝时云仓',
|
|
|
+ 'tel' => $tel, // 售后电话
|
|
|
+ 'number' => $number, //
|
|
|
+ 'js' => $js, // 结算方式
|
|
|
+ 'jfyj' => $jfyj, // 季付 月结
|
|
|
+ 'YD' => $yd, // 韵达自定义
|
|
|
+ 'date' => Carbon::now()->format(Carbon::DEFAULT_TO_STRING_FORMAT)
|
|
|
+ ];
|
|
|
+ }
|
|
|
+}
|