DeliveryProcess.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. <?php
  2. namespace App\Traits;
  3. use App\Logistic;
  4. use App\OracleDOCOrderDetail;
  5. use App\OracleDOCWaveDetails;
  6. use App\Owner;
  7. use App\OwnerLogisticPrintTemplate;
  8. use Illuminate\Support\Carbon;
  9. use Illuminate\Support\Facades\Cache;
  10. trait DeliveryProcess
  11. {
  12. use DrawImage;
  13. // 将 base64编码 转 图片 进行修改并保存,后把修改保存的图片转为 base64编码 返回
  14. function processing(&$params)
  15. {
  16. // TODO 获取模板
  17. $owner_query = Owner::query()->selectRaw('id')->where('code', $params['owner_code']);
  18. $logistic_query = Logistic::query()->selectRaw('id')->where('code', $params['logistic_code']);
  19. $item = OwnerLogisticPrintTemplate::query()->with('printTemplate')->where('owner_id', $owner_query)->where('logistic_id', $logistic_query)->first();
  20. $path = '';
  21. $img = $this->getImage($params['base64'], $path);
  22. $img = $this->draw($params['delivery'] ?? [], $item, $img);
  23. $img->save($path);
  24. $arr = [];
  25. if (Cache::has('print-template-file-list')) {
  26. $arr = Cache::get('print-template-file-list');
  27. }
  28. $arr[] = ['time' => Carbon::now(), 'path' => $path];
  29. Cache::put('print-template-file-list', $arr);
  30. // TODO 将文件进行base64编码
  31. if ($fp = fopen($path, "rp", 0)) {
  32. $gambar = fread($fp, filesize($path));
  33. fclose($fp);
  34. $params['base64'] = chunk_split(base64_encode($gambar));
  35. }
  36. $params['is_process'] = true;
  37. return $params;
  38. }
  39. // $item
  40. // 将按条件转化为
  41. function getDeliveryInfo($item, $type): ?array
  42. {
  43. if (in_array($type, ['TB', 'PDD', 'SF'])) return $this->getDocOrderDeliveryInfo($item);
  44. else if (in_array($type, ['JD', 'SFQHD'])) return $this->getDocOrderInfo($item);
  45. return [];
  46. }
  47. // 菜鸟面单和拼多多面单 TB PDD
  48. function getDocOrderDeliveryInfo($docOrderDelivery): array
  49. {
  50. // 波次订单总数
  51. $wave_count = (function () use ($docOrderDelivery) {
  52. $count = OracleDOCWaveDetails::query()->where('waveno', $docOrderDelivery->docOrderHeader['waveno'])->count();
  53. return $count ? strval($count) : '0';
  54. })();
  55. // 备注
  56. list($remark1, $remark2, $remark3) = (function () use ($docOrderDelivery) {
  57. switch ($docOrderDelivery->docOrderHeader['customerid'] ?? '') {
  58. case 'BOAO':
  59. return ['易碎、易融', '不可放置自提柜!', '需当面签收!'];
  60. case 'LINGFEI':
  61. return ['快递小哥送货路远,风吹日晒注意安全,', '见到小主代问声好,你我共建文明家园!', ''];
  62. case 'WEIXI1':
  63. return ['售后电话13816946227', '', ''];
  64. default:
  65. return ['', '', ''];
  66. }
  67. })();
  68. // 仓库
  69. $wh = (function () use ($docOrderDelivery) {
  70. $customerid = $docOrderDelivery->docOrderHeader['customerid'] ?? '';
  71. if (strstr('泗砖', $customerid)) return '泗砖宝石仓';
  72. if (strstr('武乡', $customerid)) return '武乡宝石仓';
  73. if (strstr('九干', $customerid)) return '九干宝石仓';
  74. return '宝时仓';
  75. })();
  76. // whaddr 仓库地址
  77. $whaddr = (function () use ($docOrderDelivery) {
  78. $peo = $docOrderDelivery->docOrderHeader->oracleBASCustomer['address1'];
  79. if (strstr($peo, '九干')) return '上海上海市松江区九干路1300号';
  80. if (strstr($peo, '武乡')) return '上海嘉定区徐行镇武乡路9号';
  81. if (strstr($peo, '泗砖')) return '上海嘉定区徐行镇武乡路9号';
  82. return '宝时仓';
  83. })();
  84. // 城镇 收货
  85. $raddr = (function () use ($docOrderDelivery) {
  86. $docOrderHeader = $docOrderDelivery['doc_order_header'];
  87. return ($docOrderHeader['c_province'] ?? '') . ' ' . ($docOrderHeader['c_city'] ?? '') . ' ' . ($docOrderHeader['c_address2'] ?? '');
  88. })();
  89. // 韵达特殊处理
  90. $yd = (function () use ($docOrderDelivery) {
  91. $carrierid = $docOrderDelivery->docOrderHeader['carrierid'];
  92. if ($carrierid !== "YUNDA") return '';
  93. if (in_array($carrierid, ['上海', '上海市'])) return 'A';
  94. if (in_array($carrierid, ['江苏', '江苏省', '浙江', '浙江省'])) return 'B';
  95. if (in_array($carrierid, ['北京', '北京市', '安徽', '安徽省', '山东', '河南', '江西', '湖南', '湖北', '山东省', '河南省', '江西省', '湖南省', '湖北省'])) return 'C';
  96. if (in_array($carrierid, [
  97. '上海', '上海市', '江苏', '江苏省', '浙江', '浙江省', '北京', '北京市', '安徽', '安徽省', '山东', '河南', '江西', '湖南', '湖北', '山东省', '河南省', '江西省', '湖南省', '湖北省'
  98. ])) return 'D';
  99. return '';
  100. })();
  101. return [
  102. 'waveno' => $docOrderDelivery->docOrderHeader['waveno'] ?? '', // 波次
  103. 'print_sum' => '总打印数' . ($wave_count ?? 0) . '行号#' . $docOrderDelivery->docOrderHeader->oracleDOCWaveDetail['seqno'], // 订单所处波次的序号
  104. 'wave_count' => $wave_count,
  105. // 订单总数
  106. 'count' => (function () use ($docOrderDelivery) {
  107. $count = OracleDOCOrderDetail::query()->where('orderno', $docOrderDelivery->docOrderHeader['ordenro'])->sum('qtyAllocated_each') ;
  108. return $count ? strval($count) : "0";
  109. })(), // 订单商品总数
  110. 'remark1' => $remark1,
  111. 'remark2' => $remark2,
  112. 'remark3' => $remark3,
  113. 'wh' => $wh,
  114. 'whaddr' => $whaddr, // 仓库地址
  115. 'deliveryno' => $docOrderDelivery->docOrderHeader['deliveryno'] ?? $docOrderDelivery->docOrderHeader['soreference5'], // 快递单号
  116. 'c_contact' => $docOrderDelivery->docOrderHeader['c_contact'] ?? '',
  117. 'c_province' => $docOrderDelivery->docOrderHeader['c_province'] ?? '',
  118. 'c_city' => $docOrderDelivery->docOrderHeader['c_city'] ?? '',
  119. 'c_address2' => $docOrderDelivery->docOrderHeader['c_address2'] ?? $docOrderDelivery->docOrderHeader['c_district'],
  120. 'c_tel1' => $docOrderDelivery->docOrderHeader['c_tel1'] ?? $docOrderDelivery->docOrderHeader['c_tel2'],
  121. 'c_tel2' => $docOrderDelivery->docOrderHeader['c_tel2'],
  122. 'issuepartyname' => $docOrderDelivery->docOrderHeader['issuepartyname'] ?? '宝时云仓',
  123. 'logistic_number' => $docOrderDelivery['delivery_no'],
  124. 'raddr' => $raddr, // 收货地址
  125. 'YD' => $yd, // 韵达自定义
  126. 'H_EDI_15' => $docOrderDelivery->docOrderHeader['H_EDI_15'] ?? '', // 大头笔
  127. 'logistic_name' => (function () use ($docOrderDelivery) {
  128. $logistic = Logistic::query()->where('code', $docOrderDelivery->docOrderHeader['carrierid'])->first();
  129. return $logistic['name'] ?? '';
  130. })(), // 承运商
  131. 'consigneeid' => $docOrderDelivery->docOrderHeader['consigneeid'] ?? '',
  132. 'qrcode' => $docOrderDelivery['qrcode'] ?? '',
  133. 'date' => Carbon::now()->format(Carbon::DEFAULT_TO_STRING_FORMAT)
  134. ];
  135. }
  136. // 非菜鸟面单 SF SFQHD JD
  137. function getDocOrderInfo($docOrderHeader): array
  138. {
  139. // 联系号码
  140. $tel = (function () use ($docOrderHeader) {
  141. if (in_array($docOrderHeader['customerid'], ['HANDA', 'BAIPING', 'JINBAOBEI', 'DUOCHOU', 'YUNKAI']) &&
  142. in_array($docOrderHeader['issuepartyname'], ['私密渠道A', '私密渠道BP', '金宝贝启蒙', 'ATSUGI厚木', '初品公司'])) {
  143. return '18616839461';
  144. }
  145. if (in_array($docOrderHeader['customerid'], ['HEDI']) &&
  146. in_array($docOrderHeader['issuepartyname'], ['马丁'])) {
  147. return '18811144744';
  148. }
  149. return '13761413262';
  150. })();
  151. // whaddr 仓库地址
  152. $whaddr = (function () use ($docOrderHeader) {
  153. $address = $docOrderHeader->oracleBASCustomer['address1'] ?? '';
  154. if (strstr($address, '泗砖')) return '上海上海市松江区泗砖公路351号';
  155. if (strstr($address, '武乡')) return '上海嘉定区徐行镇武乡路9号';
  156. if (strstr($address, '九干')) return '上海上海市松江区九干路1300号';
  157. return '';
  158. })();
  159. // $ordercount 订单波次的订单总数
  160. $owner_count = (function () use ($docOrderHeader) {
  161. $count = OracleDOCWaveDetails::query()->where('waveno', $docOrderHeader['waveno'])->count();
  162. return $count ? strval($count) : "0";
  163. })();
  164. // orderseq 订单在波次里的序号
  165. $orderseq = (function () use ($docOrderHeader) {
  166. return $docOrderHeader->oracleDOCWaveDetail->seqno ?? '';
  167. })();
  168. // seqno
  169. $seqno = (function () use ($docOrderHeader, $orderseq) {
  170. $count = OracleDOCWaveDetails::query()->where('waveno', $docOrderHeader['waveno'])->count();
  171. return '总打印数' . ($count) . " 行号#" . $orderseq;
  172. })();
  173. // 备注
  174. list($remark1, $remark2, $remark3) = (function () use ($docOrderHeader) {
  175. switch ($docOrderHeader['customerid'] ?? '') {
  176. case 'BOAO':
  177. return ['易碎、易融', '不可放置自提柜!', '需当面签收!'];
  178. case 'LINGFEI':
  179. return ['快递小哥送货路远,风吹日晒注意安全,', '见到小主代问声好,你我共建文明家园!', ''];
  180. case 'WEIXI1':
  181. return ['售后电话13816946227', '', ''];
  182. default:
  183. return ['', '', ''];
  184. }
  185. })();
  186. $number = (function () use ($docOrderHeader) {
  187. if (in_array($docOrderHeader['userdefine1'], ['SFJR', 'SFJRDF'])) return '1';
  188. if (in_array($docOrderHeader['userdefine1'], ['SFSY', 'SFSYDF', 'SFSYQHD'])) return '4';
  189. if (in_array($docOrderHeader['userdefine1'], ['SFTH', 'SFTHQHD'])){
  190. if (in_array($docOrderHeader['c_province'], ['西藏', '西藏自治区'])) return '4';
  191. else return '68';
  192. }
  193. if ($docOrderHeader['userdefine1'] == 'SFTHDF'){
  194. if (in_array($docOrderHeader['c_province'], ['上海', '上海市', '江苏', '江苏省', '浙江', '浙江省', '安徽省', '安徽', '西藏', '西藏自治区'])) return '4';
  195. else return '6';
  196. }
  197. return '';
  198. })();
  199. // js 结算方式
  200. $js = (function () use ($docOrderHeader) {
  201. if (in_array($docOrderHeader['userdefine1'], ['SFSYDF', 'SFTHDF'])) return "到付";
  202. else return '季付月结';
  203. })();
  204. // 寄付月结
  205. $jfyj = (function () use ($docOrderHeader) {
  206. $base_customer = $docOrderHeader['oracleBASCustomer'];
  207. if (in_array($docOrderHeader['userdefine1'], ['SFSY', 'SFSYQHD', 'SFJR'])) return '寄付月结:0210188294';
  208. if (in_array($docOrderHeader['userdefine1'], ['SFTH', 'SFTHQHD'])) {
  209. if ($base_customer['udf3'] == '货安') return '寄付月结:0210321137';
  210. if ($base_customer['udf3'] != '货安') return '寄付月结:0218877996';
  211. }
  212. if (in_array($docOrderHeader['userdefine1'], ['SFTH', 'SFTHQHD'])) return '到付';
  213. return '寄付月结:0210188294';
  214. })();
  215. // 仓库
  216. $wh = (function () use ($docOrderHeader) {
  217. $customerid = $docOrderHeader['customerid'] ?? '';
  218. if (strstr($customerid,'泗砖' )) return '泗砖宝石仓';
  219. if (strstr($customerid,'武乡' )) return '武乡宝石仓';
  220. if (strstr($customerid,'九干' )) return '九干宝石仓';
  221. return '宝时仓';
  222. })();
  223. $yd = (function () use ($docOrderHeader) {
  224. if ($docOrderHeader['carrierid'] == 'YUNDA') {
  225. if (in_array($docOrderHeader['c_province'], ['上海', '上海市'])) return 'A';
  226. if (in_array($docOrderHeader['c_province'], ['江苏', '江苏省', '浙江', '浙江省'])) return 'B';
  227. if (in_array($docOrderHeader['c_province'], ['北京', '北京市', '安徽', '安徽省', '山东', '河南', '江西', '湖南', '湖北', '山东省', '河南省', '江西省', '湖南省', '湖北省'])) return 'C';
  228. if (!in_array($docOrderHeader['c_province'],['上海','上海市','江苏','江苏省','浙江','浙江省','北京','北京市','安徽','安徽省','山东','河南','江西','湖南','湖北','山东省','河南省','江西省','湖南省','湖北省']))
  229. return 'D';
  230. }
  231. return '';
  232. })();
  233. return [
  234. 'waveno' => $docOrderHeader['waveno'] ?? '',
  235. 'print_sum' => '总打印数' . ($owner_count ?? 0) . '行号#' .$docOrderHeader->oracleDOCWaveDetail['seqno'] ?? '', // 订单所处波次的序号,
  236. 'wave_count' => $owner_count,
  237. 'orderno' => $docOrderHeader['orderno'] ?? '',
  238. 'logistic_number' => $docOrderHeader['deliveryno'] ?? $docOrderHeader['soreference5'],
  239. 'count' => $owner_count, // 订单所属波次订单总数
  240. 'orderseq' => $orderseq, // 订单序号
  241. 'seqno' => $seqno, // 打印序号
  242. 'remark1' => $remark1, // 备注1
  243. 'remark2' => $remark2, // 备注2
  244. 'remark3' => $remark3, // 备注3
  245. 'grossweight' => $docOrderHeader->oracleDOCWaveDetail['grossweight'] ?? '', // 重量
  246. 'wh' => $wh, // 仓库
  247. 'whaddr' => $whaddr, // 仓库地址
  248. 'deliveryno' => '', // 快递单号
  249. 'raddr' => ($docOrderHeader['c_province'] ?? '') . ' ' . ($docOrderHeader['c_city'] ?? '') . ' ' . ($docOrderHeader['c_address2'] ?? ''), // 发货地址
  250. 'c_contact' => $docOrderHeader['c_contact'],
  251. 'c_province' => $docOrderHeader['c_province'],
  252. 'c_city'=> $docOrderHeader['c_city'],
  253. 'c_address2' => $docOrderHeader['c_address2'] ?? $docOrderHeader['c_district'],
  254. 'c_tel1' => $docOrderHeader['c_tel1'] ?? $docOrderHeader['c_tel2'],
  255. 'c_tel2' => $docOrderHeader['c_tel2'] ,
  256. 'issuepartyname' => $docOrderHeader['issuepartyname'] ?? '宝时云仓',
  257. 'tel' => $tel, // 售后电话
  258. 'number' => $number, //
  259. 'js' => $js, // 结算方式
  260. 'jfyj' => $jfyj, // 季付 月结
  261. 'YD' => $yd, // 韵达自定义
  262. 'date' => Carbon::now()->format(Carbon::DEFAULT_TO_STRING_FORMAT)
  263. ];
  264. }
  265. }