DetailController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 2017/3/3
  6. * Time: 上午9:10
  7. */
  8. namespace app\frontend\modules\order\controllers;
  9. use app\common\components\ApiController;
  10. use app\common\exceptions\AppException;
  11. use app\common\models\DispatchType;
  12. use app\common\models\Goods;
  13. use app\common\models\Member;
  14. use app\common\models\Order;
  15. use app\common\models\PayType;
  16. use app\framework\Http\Request;
  17. use app\frontend\models\OrderAddress;
  18. use app\common\services\goods\VideoDemandCourseGoods;
  19. use app\frontend\modules\member\models\MemberModel;
  20. use app\frontend\modules\member\services\MemberService;
  21. use app\frontend\modules\goods\services\TradeGoodsPointsServer;
  22. use Yunshop\Diyform\models\OrderGoodsDiyForm;
  23. use app\frontend\modules\order\services\OrderService;
  24. use Yunshop\PhotoOrder\models\OrderModel;
  25. use Yunshop\StoreReserve\models\ReserveOrder;
  26. class DetailController extends ApiController
  27. {
  28. /**
  29. * @param Request $request
  30. * @return \Illuminate\Http\JsonResponse
  31. * @throws AppException
  32. */
  33. public function index(Request $request)
  34. {
  35. $this->validate([
  36. 'order_id' => 'required|integer'
  37. ]);
  38. $orderId = request()->query('order_id');
  39. $order = $this->getOrder()->with(['hasManyOrderGoods', 'orderDeduction', 'orderDiscount', 'orderFees', 'orderServiceFees', 'orderCoupon', 'orderInvoice', 'orderAddress'])->find($orderId);
  40. if (is_null($order)) {
  41. return $this->errorJson('订单不存在');
  42. }
  43. $order->hasManyOrderGoods->each(function ($orderGoods) {
  44. //评论
  45. $orderGoods->hasOneComment;
  46. //计算积分显示
  47. $orderGoods->points = $this->setGoodPoints($orderGoods->hasOneGoods, $orderGoods->price, $orderGoods->goods_cost_price);
  48. if ($orderGoods->order->refund_id) {
  49. $orderGoods->refunded_total = $orderGoods->manyRefundedGoodsLog
  50. ->where('refund_id', '!=', $orderGoods->order->refund_id)->sum('refund_total');
  51. } else {
  52. $orderGoods->refunded_total = $orderGoods->manyRefundedGoodsLog->sum('refund_total');
  53. }
  54. });
  55. if ($order->orderInvoice) {
  56. $invoice = $order->orderInvoice;
  57. } else {
  58. $invoice = Order::getInvoice($orderId);
  59. }
  60. if (is_null($order)) {
  61. return $this->errorJson('未找到数据', []);
  62. }
  63. $data = $order->toArray();
  64. $data['pay_type_name'] = $this->getPayTypeName($order);//自定义显示支付类型名称
  65. $invoice->invoice = ("0" != $invoice->invoice) ? 1 : 0;
  66. $data['invoice_type'] = $invoice->invoice_type;
  67. $data['email'] = $invoice->email;
  68. $data['rise_type'] = $invoice->rise_type;
  69. $data['collect_name'] = $invoice->collect_name;
  70. $data['company_number'] = $invoice->company_number;
  71. $data['invoice_state'] = $invoice->invoice;
  72. $backups_button = $data['button_models'];
  73. $data['address_info'] = OrderAddress::select('address', 'mobile', 'realname')->where('order_id', $order['id'])->first() ?: [];
  74. if (app('plugins')->isEnabled('diyform')) {
  75. $orderGoodsIds = $order->hasManyOrderGoods->pluck('id');
  76. $formDatas = OrderGoodsDiyForm::whereIn('order_goods_id', $orderGoodsIds)->with(['diyformData' => function ($diyformData) {
  77. $diyformData->with(['diyformType']);
  78. }])->get()->toArray();
  79. foreach ($data['has_many_order_goods'] as &$orderGoods) {
  80. foreach ($formDatas as $formData) {
  81. if ($orderGoods['id'] == $formData['order_goods_id']) {
  82. $formType = unserialize($formData['diyform_data']['diyform_type']['fields']);
  83. $formData = unserialize($formData['diyform_data']['data']);
  84. $formContent = [];
  85. foreach ($formData as $formKey => $formItem) {
  86. if ($formType[$formKey]['data_type'] == 5) {
  87. $formItem = array_map(function ($image) {
  88. return yz_tomedia($image);
  89. }, $formItem);
  90. }
  91. $formContent[] = [
  92. 'title' => $formType[$formKey]['tp_name'],
  93. 'content' => $formItem,
  94. 'type' => $formKey,
  95. 'data_type' => $formType[$formKey]['data_type'],
  96. 'value' => $formItem
  97. ];
  98. }
  99. //
  100. $orderGoods['diyform_data'] = $formContent;
  101. break;
  102. }
  103. }
  104. }
  105. }
  106. if (app('plugins')->isEnabled('photo-order')) {
  107. $photo = OrderModel::where('order_id', $order['id'])->first();
  108. if ($photo) {
  109. $data['photo_order_thumbs'] = unserialize($photo['thumbs']);
  110. } else {
  111. $data['photo_order_thumbs'] = '';
  112. }
  113. }
  114. if (app('plugins')->isEnabled('store-cashier')) {
  115. //加入门店ID,订单跳转商品详情需要
  116. $store_id = \Yunshop\StoreCashier\store\models\StoreGoods::select()->byGoodsId($order->hasManyOrderGoods[0]->goods_id)->first()->store_id;
  117. $data['has_many_order_goods']['0']['store_id'] = $store_id;
  118. //临时解决
  119. $storeObj = \Yunshop\StoreCashier\common\models\Store::getStoreByCashierId($order->hasManyOrderGoods[0]->goods_id)->first();
  120. if ($storeObj) {
  121. $data['button_models'] = $backups_button;
  122. }
  123. $data['is_boss'] = false;
  124. if ($order->store->uid == MemberService::getCurrentMemberModel()->uid) {
  125. $data['is_boss'] = true;//店长标识
  126. }
  127. if ($order['dispatch_type_id'] == DispatchType::SELF_DELIVERY) {
  128. // $data['address_info'] = \Yunshop\StoreCashier\common\models\SelfDelivery::where('order_id', $order['id'])->first();
  129. } elseif ($order['dispatch_type_id'] == DispatchType::STORE_DELIVERY) {
  130. // $data['address_info'] = \Yunshop\StoreCashier\common\models\StoreDelivery::where('order_id', $order['id'])->first();
  131. }
  132. if (app('plugins')->isEnabled('store-reserve')) {
  133. $reserveOrder = ReserveOrder::where('order_id', $orderId)->first();
  134. if ($reserveOrder && $reserveOrder->date) {
  135. $data['reserve_date'] = date('Y-m-d', $reserveOrder->date);
  136. }
  137. }
  138. }
  139. $videoDemand = new VideoDemandCourseGoods();
  140. foreach ($data['has_many_order_goods'] as &$value) {
  141. $value['thumb'] = yz_tomedia($value['thumb']);
  142. //视频点播
  143. $value['is_course'] = $videoDemand->isCourse($value['goods_id']);
  144. }
  145. $configs = \app\common\modules\shop\ShopConfig::current()->get('shop-foundation.order.order_detail');
  146. if ($configs) {
  147. foreach ($configs as $pluginName => $pluginOperators) {
  148. $class = array_get($pluginOperators, 'class');
  149. $function = array_get($pluginOperators, 'api_function');
  150. if (class_exists($class) && method_exists($class, $function) && is_callable([$class, $function])) {
  151. $plugin_data = $class::$function($data['id']);
  152. if ($plugin_data) {
  153. $data[$pluginName] = $plugin_data;
  154. }
  155. }
  156. }
  157. }
  158. if ($order['dispatch_type_id'] == 2) {
  159. $data['custom'] = $this->custom();
  160. }
  161. $data['receipt_goods_notice'] = OrderService::getReceiptGoodsNotice();
  162. return $this->successJson($msg = 'ok', $data);
  163. }
  164. protected function custom()
  165. {
  166. $custom = '';
  167. if ($this->aSwitch()) {
  168. $lis = Order::find(request()->query('order_id'));
  169. $member_info = MemberModel::getUserInfos_v2($lis->uid)->first();
  170. if (empty($member_info)) {
  171. $this->jump = true;
  172. $this->jumpUrl(\YunShop::request()->type, Member::getMid());
  173. }
  174. //自定义表单
  175. $custom = (new MemberService())->newMemberInfoAttrStatus($member_info);
  176. }
  177. return $custom;
  178. }
  179. /**
  180. * 自定义显示支付方式名称
  181. * @param $order
  182. * @return string
  183. */
  184. protected function getPayTypeName($order)
  185. {
  186. if ($order->pay_type_id != PayType::CASH_PAY && $order->status == Order::WAIT_PAY) {
  187. return '未支付';
  188. }
  189. $append = '';
  190. if ($order->hasOneBehalfPay) {
  191. $append = "(代付:{$order->hasOneBehalfPay->behalf_id})";
  192. }
  193. if ($order->pay_type_id == PayType::CREDIT) {
  194. $setCredit = \Setting::get('shop.shop.credit');
  195. return ($setCredit ?: '余额') . $append;
  196. }
  197. $pay_type_name = $order->hasOnePayType->name;
  198. if (app('plugins')->isEnabled('pay-manage')) {
  199. $pay_type_name = \Yunshop\PayManage\models\PayType::currentPayAlias($order->pay_type_id);
  200. }
  201. return $pay_type_name.$append;
  202. }
  203. protected function memberId()
  204. {
  205. return \YunShop::app()->getMemberId();
  206. }
  207. protected function aSwitch()
  208. {
  209. return \app\common\facades\Setting::get('plugin.store.membership_open') == 1;
  210. }
  211. protected function getOrder()
  212. {
  213. return app('OrderManager')->make('Order');
  214. }
  215. /**
  216. * @description 获取积分
  217. * @param $goodsModel
  218. * @param $goods_market_price
  219. * @param $goods_cost_price
  220. * @return mixed|string
  221. */
  222. protected function setGoodPoints($goodsModel, $goods_market_price, $goods_cost_price)
  223. {
  224. $points = '';
  225. $tradeGoodsPointsServer = new TradeGoodsPointsServer;
  226. if ($tradeGoodsPointsServer->close(TradeGoodsPointsServer::ORDER_PAGE)) {
  227. return $points;
  228. }
  229. $tradeGoodsPointsServer->getPointSet($goodsModel);
  230. $points = $tradeGoodsPointsServer->finalSetPoint($points);
  231. return $tradeGoodsPointsServer->getPoint($points, $goods_market_price, $goods_cost_price);
  232. }
  233. }