Order.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types=1);
  12. namespace app\api\service\order;
  13. use app\api\model\OrderGoodsPackage as OrderGoodsPackageModel;
  14. use app\common\enum\order\DeliveryStatus as DeliveryStatusEnum;
  15. use app\common\library\helper;
  16. use app\common\service\BaseService;
  17. use app\common\model\Express as ExpressModel;
  18. use Endroid\QrCode\ErrorCorrectionLevel;
  19. use Endroid\QrCode\QrCode;
  20. /**
  21. * 订单详情服务类
  22. * Class Order
  23. * @package app\api\service\order
  24. */
  25. class Order extends BaseService
  26. {
  27. /**
  28. * 获取物流单号集合
  29. * @param $model
  30. * @return array
  31. * @author: zjwhust
  32. * @Time: 2021/9/30 17:27
  33. */
  34. public function getUserOrderExpress($model){
  35. $express_list['arr'] = $express_list['pac'] = [];
  36. foreach ($model['goods'] as $good){
  37. if($good['is_split_package']){
  38. $express_no = OrderGoodsPackageModel::where('order_goods_id',$good['order_goods_id'])->column('express_no');
  39. $express_list['pac'] = array_merge($express_list['pac'],$express_no);
  40. }else{
  41. if($good['express_no']){
  42. $express_list['arr'][] = $good['express_no'];
  43. }
  44. }
  45. }
  46. // 获取物流单号集合
  47. return $express_list;
  48. // return array_values(array_filter(array_unique(helper::getArrayColumn($model['goods'], 'express_no'))));
  49. }
  50. /**
  51. * 判断订单列表是否有多个物流单号
  52. * @param $model
  53. * @author: zjwhust
  54. * @Time: 2021/9/30 17:39
  55. */
  56. public function setUserOrder($model){
  57. foreach ($model as $item){
  58. if($item['delivery_status']==DeliveryStatusEnum::DELIVERED){//订单状态没有更改为已发货就不显示物流信息
  59. $split_package = array_values(array_unique(helper::getArrayColumn($item['goods'], 'is_split_package')));
  60. if(in_array(1,$split_package)){
  61. $item['is_mult_express_no'] = 2;
  62. $item['express_no'] = '';
  63. }else{
  64. $getOrderExpress = array_values(array_filter(array_unique(helper::getArrayColumn($item['goods'], 'express_no'))));
  65. $count = count($getOrderExpress);
  66. $item['is_mult_express_no'] = $count;
  67. $item['express_no'] = implode(',',$getOrderExpress);
  68. }
  69. }else{
  70. $item['is_mult_express_no'] = 0;
  71. $item['express_no'] = '';
  72. }
  73. }
  74. }
  75. /**
  76. * 单个物流显示物流详情
  77. * @param $order
  78. * @param $expressNo
  79. * @return array
  80. * @throws \app\common\exception\BaseException
  81. * @throws \think\db\exception\DataNotFoundException
  82. * @throws \think\db\exception\DbException
  83. * @throws \think\db\exception\ModelNotFoundException
  84. * @author: zjwhust
  85. * @Time: 2021/10/8 16:25
  86. */
  87. public function getExpressDetail($order,$expressNo){
  88. $res = [];
  89. foreach ($order['goods'] as $goods){
  90. if($goods['express_no']==$expressNo){
  91. $res['order'] = [
  92. "express_no"=>$goods['express_no'],
  93. "express_company"=>$goods['express_company'],
  94. "address"=>$order['address'],
  95. ];
  96. $ExpressModel = new ExpressModel;
  97. $res['delivery'] = $ExpressModel->deliverylist($goods['express_no'], $goods['delivery_time'], 1);
  98. break;
  99. }else{
  100. foreach ($goods['package'] as $pack){
  101. if($pack['express_no']==$expressNo){
  102. $res['order'] = [
  103. "express_no"=>$pack['express_no'],
  104. "express_company"=>$pack['express_company'],
  105. "address"=>$order['address'],
  106. ];
  107. $ExpressModel = new ExpressModel;
  108. $res['delivery'] = $ExpressModel->deliverylist($pack['express_no'], $pack['delivery_time'], 1);
  109. break;
  110. }
  111. }
  112. }
  113. continue;
  114. }
  115. return $res;
  116. }
  117. //
  118. public function getExpressInfo($express_no,$delivery_time){
  119. $expressModel = new ExpressModel;
  120. $res = $expressModel->deliverylist($express_no,$delivery_time, 1);
  121. return $res;
  122. }
  123. /**
  124. * 多个物流订单显示物流列表
  125. * @param $order
  126. * @return array
  127. * @throws \app\common\exception\BaseException
  128. * @throws \think\db\exception\DataNotFoundException
  129. * @throws \think\db\exception\DbException
  130. * @throws \think\db\exception\ModelNotFoundException
  131. * @author: zjwhust
  132. * @Time: 2021/10/8 15:20
  133. */
  134. public function getExpressList($order){
  135. $res = [];
  136. foreach ($order['goods'] as $goods){
  137. if($goods['is_split_package']){
  138. foreach ($goods['package'] as $pack){
  139. $res[$pack['express_no']]['express_company'] = $pack['express_company'];
  140. $res[$pack['express_no']]['express_no'] = $pack['express_no'];
  141. $res[$pack['express_no']]['order_no'] = $order['order_no'];
  142. $res[$pack['express_no']]['order_id'] = $order['order_id'];
  143. $res[$pack['express_no']]['pay_time'] = $order['pay_time'];
  144. $res[$pack['express_no']]['goods'][] = $goods;
  145. $res[$pack['express_no']]['total_nums'] = $pack['total_num'];
  146. $res[$pack['express_no']]['delivery_time'] = $pack['delivery_time'];
  147. $res[$pack['express_no']]['is_split_package'] = $goods['is_split_package'];
  148. }
  149. }else{
  150. if($goods['express_no']){
  151. $res[$goods['express_no']]['express_company'] = $goods['express_company'];
  152. $res[$goods['express_no']]['express_no'] = $goods['express_no'];
  153. $res[$goods['express_no']]['order_no'] = $order['order_no'];
  154. $res[$goods['express_no']]['order_id'] = $order['order_id'];
  155. $res[$goods['express_no']]['pay_time'] = $order['pay_time'];
  156. $res[$goods['express_no']]['goods'][] = $goods;
  157. $res[$goods['express_no']]['delivery_time'] = $goods['delivery_time'];
  158. $res[$goods['express_no']]['is_split_package'] = $goods['is_split_package'];
  159. }
  160. }
  161. unset($goods['package']);
  162. }
  163. $ExpressModel = new ExpressModel;
  164. foreach ($res as &$express){
  165. $express['express'] = $ExpressModel->deliverylist($express['express_no'], $express['delivery_time'], 2);
  166. if(!$express['is_split_package']){
  167. $express['total_nums'] = helper::getArrayColumnSum($express['goods'],'total_num');
  168. }
  169. }
  170. return array_values($res);
  171. }
  172. /**
  173. * 生成核销码二维码地址
  174. */
  175. public static function getHxQrcode($hxCode) {
  176. $qrCode = new QrCode($hxCode);
  177. $qrCode->setSize(300);
  178. // Set advanced options
  179. $qrCode->setWriterByName('png');
  180. $qrCode->setMargin(10);
  181. $qrCode->setEncoding('UTF-8');
  182. $qrCode->setErrorCorrectionLevel(new ErrorCorrectionLevel(ErrorCorrectionLevel::HIGH));
  183. $qrCode->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]);
  184. $qrCode->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]);
  185. $qrCode->setWriterOptions(['exclude_xml_declaration' => true]);
  186. // Directly output the QR code
  187. header('Content-Type: '.$qrCode->getContentType());
  188. exit($qrCode->writeString());
  189. }
  190. }