ExpressController.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. <?php
  2. namespace app\frontend\modules\dispatch\controllers;
  3. use app\common\components\ApiController;
  4. use app\common\exceptions\AppException;
  5. use app\common\models\Order;
  6. use app\common\models\order\Express;
  7. use app\common\models\order\OrderPackage;
  8. use app\common\models\OrderGoods;
  9. use Illuminate\Support\Facades\Redis;
  10. use Yunshop\JdSupply\services\JdOrderService;
  11. /**
  12. * Created by PhpStorm.
  13. * Author: 芸众商城 www.yunzshop.com
  14. * Date: 2017/4/6
  15. * Time: 下午4:03
  16. */
  17. class ExpressController extends ApiController
  18. {
  19. protected $order;
  20. /**
  21. * @return \Illuminate\Http\JsonResponse
  22. * @throws AppException
  23. */
  24. public function index()
  25. {
  26. $order_id = request('order_id');
  27. // $order_id = 516;
  28. $order_express_id = request('order_express_id');
  29. // $order_express_id = 127;
  30. if(empty($order_express_id)){
  31. $order_express_id = 0;
  32. }
  33. $cacheKey = 'orderExpressId_'.$order_express_id.'_' . $order_id;
  34. $result = Redis::get($cacheKey);
  35. if (!$result) {
  36. // 过期或未命中
  37. $result = $this->__index();
  38. Redis::setex($cacheKey, 120, json_encode($result));
  39. } else {
  40. $result = json_decode($result, true);
  41. \Log::info('---发货2express---', $result);
  42. }
  43. if(request()->type==2 && !miniVersionCompare('1.1.139')) return $this->successJson('成功', $result);
  44. $shopOrderSet = \Setting::get('shop.order');
  45. $for_goods = false;
  46. $package = [];
  47. if($shopOrderSet['package_show'] == 2 && in_array($result['plugin_id'],[0,120]) && miniVersionCompare('1.1.139')) {
  48. $package = Express::where('order_id', $order_id)
  49. ->orderBy('id', 'asc')
  50. ->pluck('id');
  51. $for_goods = true;
  52. $package = $package->toArray();
  53. }
  54. $res = [
  55. 'data' => $result,
  56. 'for_goods' => $for_goods,
  57. 'package' => $package
  58. ];
  59. return $this->successJson('成功', $res);
  60. }
  61. /**
  62. * 获取订单包裹(多包裹发货)
  63. * order_id
  64. *
  65. */
  66. public function getOrderMultiplePackages()
  67. {
  68. $shopOrderSet = \Setting::get('shop.order');
  69. $order_id = request('order_id');
  70. // $order_id = 516;
  71. $order = $this->getOrder();
  72. if (!isset($order)) {
  73. throw new AppException('未找到订单');
  74. }
  75. if (!isset($order->express)) {
  76. throw new AppException('未找到配送信息');
  77. }
  78. if(empty($order_id)){
  79. throw new AppException('缺少订单id');
  80. }
  81. $data = [
  82. 'logistics_api' => 'dispatch.express',
  83. 'goods_package' => $shopOrderSet['package_show'] == 2?true:false,
  84. ];
  85. if($shopOrderSet['package_show'] != 2 || !in_array($order->plugin_id,[0,120]) || !miniVersionCompare('1.1.139')){
  86. $express = new Express();
  87. $express_data = $express->where('order_id',$order_id)->with(['ordergoods'=>function($query){
  88. $query->select('order_express_id','title','thumb','goods_id');
  89. }])->get();
  90. foreach ($express_data as $k=>$v){
  91. $express = $v->getExpress($v->express_code, $v->express_sn);
  92. if (json_decode($express)->result == 'error') {
  93. throw new AppException(json_decode($express)->resp);
  94. }
  95. $logistics['order_express_id'] = $v['id']; //包裹id
  96. $logistics['express_sn'] = $v->express_sn; //
  97. $logistics['company_name'] = $v->express_company_name;
  98. if(!empty($express['data'])){
  99. $logistics['last_express_context'] = $express['data'][count($express['data'])-1]['context'];
  100. }else{
  101. $logistics['last_express_context'] = '';
  102. }
  103. // 不清楚为什么表没关联到yz_order_package 在 yz_order_package表里有数据 先做兼容.
  104. if ($v->ordergoods->isEmpty()) {
  105. $logistics['thumb'] = $v->hasManyOrderPackage[0]? $v->hasManyOrderPackage[0]->orderGoods->thumb: '';//封面图
  106. $logistics['goods'] = $v->hasManyOrderPackage->map(function ($orderPackage) {
  107. return $orderPackage->orderGoods;
  108. });//封面图
  109. $logistics['count'] = $v->hasManyOrderPackage->sum('total');
  110. $logistics['tel'] = $express['tel'];
  111. $logistics['status_name'] = $express['status_name'];
  112. } else {
  113. $logistics['thumb'] = $v->ordergoods[0]->thumb;//封面图
  114. $logistics['goods'] = $v->ordergoods;//封面图
  115. $logistics['count'] = count($v->ordergoods);
  116. $logistics['tel'] = $express['tel'];
  117. $logistics['status_name'] = $express['status_name'];
  118. }
  119. $data['data'][] = $logistics;
  120. $data['count'] = count($express_data);
  121. }
  122. }else{
  123. $order_goods = OrderGoods::uniacid()->where('order_id',$order_id)->get();
  124. $data['count'] = $order_goods->count();
  125. $data['data'] = $this->forGoodsPackage($order_goods);
  126. }
  127. return $this->successJson('成功', $data);
  128. }
  129. public function __index()
  130. {
  131. $order = $this->getOrder();
  132. if (!isset($order)) {
  133. throw new AppException('未找到订单');
  134. }
  135. if (!isset($order->express)) {
  136. throw new AppException('未找到配送信息');
  137. }
  138. $order_express_id = request('order_express_id');
  139. // $order_express_id = 127;
  140. if(empty($order_express_id)){
  141. $express_code = $order->express->express_code;
  142. $express_sn = $order->express->express_sn;
  143. $express_company_name = $order->express->express_company_name;
  144. $thumb = $order->hasManyOrderGoods[0]->thumb;
  145. }else{
  146. $express_data = Express::where('id',$order_express_id)->where('order_id',$order->id)->with('ordergoods')->first();
  147. $express_code = $express_data->express_code;
  148. $express_sn = $express_data->express_sn;
  149. $express_company_name = $express_data->express_company_name;
  150. $thumb = $express_data->hasOneOrderPackage->orderGoods->thumb?:'';
  151. }
  152. //$data
  153. $express = $order->express->getExpress($express_code, $express_sn);
  154. \Log::info('---发货1express---', ['express' => $express, 'express_code' => $express_code, 'express_sn' =>$express_sn]);
  155. $data['express_sn'] =$express_sn;
  156. $data['company_name'] = $express_company_name;
  157. $data['data'] = array_reverse($express['data']);//$express['data'];
  158. // $data['goods'] = $goods;
  159. $data['thumb'] = $thumb;
  160. $data['tel'] = $express['tel'];
  161. $data['status_name'] = $express['status_name'];
  162. $data['plugin_id'] = $order->plugin_id;
  163. \Log::info('---发货2express---', $data);
  164. return $data;
  165. }
  166. /**
  167. * @return \Illuminate\Http\JsonResponse
  168. * @throws AppException
  169. */
  170. // public function index()
  171. // {
  172. //
  173. // $order = $this->getOrder();
  174. // if (!isset($order)) {
  175. // throw new AppException('未找到订单');
  176. // }
  177. // if (!isset($order->express)) {
  178. // throw new AppException('未找到配送信息');
  179. // }
  180. // //$data
  181. // $express = $order->express->getExpress($order->express->express_code, $order->express->express_sn);
  182. // \Log::info('---发货1express---', ['express' => $express, 'express_code' => $order->express->express_code, 'express_sn' => $order->express->express_sn]);
  183. // $data['express_sn'] = $order->express->express_sn;
  184. // $data['company_name'] = $order->express->express_company_name;
  185. // $data['data'] = $express['data'];
  186. // $data['thumb'] = $order->hasManyOrderGoods[0]->thumb;
  187. // $data['tel'] = $express['tel'];
  188. // $data['status_name'] = $express['status_name'];
  189. // \Log::info('---发货2express---', $data);
  190. //
  191. // return $this->successJson('成功', $data);
  192. // }
  193. protected function _getOrder($order_id){
  194. return Order::find($order_id);
  195. }
  196. private function getOrder()
  197. {
  198. if (!isset($this->order)) {
  199. $order_id = request('order_id');
  200. // $order_id = 516;
  201. $this->order = $this->_getOrder($order_id);
  202. }
  203. return $this->order;
  204. }
  205. private function forGoodsPackage($order_goods)
  206. {
  207. $res = [];
  208. foreach ($order_goods as $v){
  209. $express_time = '';
  210. $express_sn = '';
  211. $company_name = '';
  212. $order_express_id = '';
  213. $status_name = '未发货';
  214. $package = OrderPackage::uniacid()
  215. ->where('order_goods_id',$v->id)
  216. ->with('hasOneExpress')
  217. ->orderBy('id','asc')
  218. ->get();
  219. if(!$package->isEmpty()){
  220. $status_name = '部分发货';
  221. $finder = $package->first();
  222. $express_time = $finder->created_at->format('Y-m-d H:i:s');
  223. $express_sn = $finder->hasOneExpress->express_sn;
  224. $company_name = $finder->hasOneExpress->express_company_name;
  225. $order_express_id = $finder->hasOneExpress->id;
  226. if($package->sum('total') == $v->total) $status_name = '已发货';
  227. }
  228. $res[] = [
  229. 'thumb' => yz_tomedia($v->thumb),
  230. 'count' => $v->total,
  231. 'express_time' => $express_time,
  232. 'express_sn' => $express_sn,
  233. 'company_name' => $company_name,
  234. 'status_name' => $status_name,
  235. 'order_express_id' => $order_express_id
  236. ];
  237. }
  238. return $res;
  239. }
  240. }