AdoptCostOrderDetailForm.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\plugins\adopt\models\client;
  8. use app\constants\OptionSetting;
  9. use app\models\common\ExpressDetail;
  10. use app\models\DeliveryInfo;
  11. use app\models\District;
  12. use app\models\Goods;
  13. use app\models\Mch;
  14. use app\models\Md;
  15. use app\models\Option;
  16. use app\models\Order;
  17. use app\models\OrderComment;
  18. use app\models\OrderDetail;
  19. use app\models\OrderForm;
  20. use app\models\OrderRefund;
  21. use app\models\SaasUser;
  22. use app\models\Shop;
  23. use app\models\Store;
  24. use app\models\User;
  25. use app\models\VerifyCard;
  26. use app\plugins\adopt\models\AdoptCostOrder;
  27. use app\plugins\adopt\models\AdoptOrderInfo;
  28. use app\utils\Delivery\Delivery;
  29. use app\utils\Tools;
  30. use yii\base\Model;
  31. use yii\helpers\Json;
  32. use yii\helpers\Json as HelpersJson;
  33. class AdoptCostOrderDetailForm extends Model
  34. {
  35. public $store_id;
  36. public $user_id;
  37. public $order_id;
  38. public $order_no;
  39. public $order_user_id;
  40. public $delivery_type;
  41. public $latitude;
  42. public $longitude;
  43. public function rules()
  44. {
  45. return [
  46. [['order_id'], 'required'],
  47. ];
  48. }
  49. public function search()
  50. {
  51. if (!$this->validate()) {
  52. return ['code' => 1, 'msg' => $this->getErrorSummary(false)[0]];
  53. }
  54. $order = AdoptCostOrder::findOne([
  55. 'store_id' => $this->store_id,
  56. 'id' => $this->order_id,
  57. 'user_id' => $this->user_id,
  58. 'is_delete' => 0,
  59. 'is_recycle'=> 0,
  60. ]);
  61. if (!$order) {
  62. return [
  63. 'code' => 1,
  64. 'msg' => '订单不存在',
  65. ];
  66. }
  67. $status = "";
  68. if ($order->is_pay == 0) {
  69. $status = '订单未付款';
  70. } elseif ($order->is_pay == 1 && $order->trade_status == Order::ORDER_FLOW_NO_SEND) {
  71. $status = '订单待发货';
  72. } elseif ($order->trade_status == Order::ORDER_FLOW_SEND) {
  73. $status = '订单已发货';
  74. } elseif ($order->trade_status == Order::ORDER_FLOW_CONFIRM) {
  75. $status = '订单已完成';
  76. }
  77. $goods_list = OrderDetail::find()->alias('od')
  78. ->where(['od.order_id' => $order->order_id, 'od.is_delete' => 0])->all();
  79. $num = 0;
  80. foreach ($goods_list as $i => $item) {
  81. $goods = HelpersJson::decode($item['goods_info']);
  82. $orderComment = OrderComment::findOne(['store_id' => $this->store_id, 'order_id' => $order->id, 'goods_id' => $item['goods_id']]);
  83. $newItem = [];
  84. $goods_model = Goods::findOne($item['goods_id']);
  85. $cards = [];
  86. if (!empty($goods_model->verify_card_id)) {
  87. $ids = explode(',', $goods_model->verify_card_id);
  88. $cards = Tools::getVerifyList($ids);
  89. } else {
  90. $cards = [];
  91. }
  92. $newItem['verify_card'] = $cards;
  93. $newItem['is_comment'] = (!$orderComment && $order->is_pay == Order::IS_PAY_TRUE && $order->trade_status == Order::ORDER_FLOW_CONFIRM) ? 1 : 0;
  94. $newItem['goods_id'] = $item['goods_id'];
  95. $newItem['order_detail_id'] = $item['id'];
  96. $newItem['name'] = $item['goods_name'] ?: $goods['name'];
  97. $newItem['total_price'] = $item['total_price'];
  98. $newItem['num'] = $item['num'];
  99. $newItem['attr'] = json_decode($item['attr']);
  100. $num += intval($item['num']);
  101. $newItem['goods_pic'] = $item['pic'] ?: $goods['cover_pic'];
  102. if ($item['is_refund'] == 1) {
  103. $newItem['is_order_refund'] = 1;
  104. } else {
  105. $newItem['is_order_refund'] = 0;
  106. }
  107. if ($order->is_pay == 1 && ($order->trade_status == Order::ORDER_FLOW_SEND || $order->trade_status == Order::ORDER_FLOW_CONFIRM) && $order->order_type != 4) {
  108. $newItem['order_refund_enable'] = 1;
  109. } else {
  110. $newItem['order_refund_enable'] = 0;
  111. }
  112. if ($order->trade_status == Order::ORDER_FLOW_CONFIRM) {
  113. $after_sale_time = Option::get(OptionSetting::STORE_AFTER_SALE_TIME);
  114. if ((time() - $order->confirm_time) > $after_sale_time['value'] * 86400) {//超过可售后时间
  115. $newItem['order_refund_enable'] = 0;
  116. }
  117. }
  118. if($item['is_level'] == 1 && ($order->discount && $order->discount < 10)){
  119. $newItem['is_level'] = 1;
  120. }
  121. // 商品配送方式信息
  122. $newItem['delivery_type'] = $item['delivery_type'];
  123. $newItem['shop'] = [];
  124. if ($item['delivery_type'] == OrderDetail::GOODS_DELIVERY_SHOP) {
  125. $shop_info = Shop::find()->where(['id' => $item['shop_id']])->asArray()->one();
  126. $newItem['shop']['address'] = $shop_info['address'];
  127. $newItem['shop']['id'] = $shop_info['id'];
  128. $newItem['shop']['name'] = $shop_info['name'];
  129. $newItem['shop']['mobile'] = $shop_info['mobile'];
  130. }
  131. $newList[] = $newItem;
  132. }
  133. if ($order->before_update_price) {
  134. if ($order->before_update_price < $order->pay_price) {
  135. $before_update = "加价";
  136. $money = $order->pay_price - $order->before_update_price;
  137. } else {
  138. $before_update = "优惠";
  139. $money = $order->before_update_price - $order->pay_price;
  140. }
  141. } else {
  142. $before_update = "";
  143. $money = "";
  144. }
  145. if(!$order->integral){
  146. $order->integral = 0;
  147. }
  148. // 查询物流信息
  149. $model = new ExpressDetail();
  150. // $model->express = $order->express;
  151. // $model->express_no = $order->express_no;
  152. // TODO: 测试
  153. $model->express = '圆通';
  154. $model->express_no = 'YT5364186723454';
  155. $model->store_id = $this->store_id;
  156. $res = $model->search();
  157. $express_detail = [];
  158. if ($res['code'] != 0) {
  159. $express_detail['list'] = [];
  160. $express_detail['status'] = 0;
  161. $express_detail['status_text'] = '未知';
  162. } else {
  163. $express_detail = $res['data'];
  164. }
  165. $deliveryInfo = null;
  166. if ($order->is_delivery == 1) {
  167. $deliveryInfo = DeliveryInfo::find()->where(['order_no' => $order->order_no])->one();
  168. }
  169. $final_pay_type = [];
  170. $pay_type_list = [];
  171. $is_open_friend_pay = false;
  172. $pay_type_list_json = Option::get(OptionSetting::STORE_PAYMENT, get_store_id(), 'pay', Option::get(OptionSetting::STORE_PAYMENT, get_store_id(), 'store')['value']);
  173. if (!empty($pay_type_list_json)) {
  174. $pay_type_list_arr = Json::decode($pay_type_list_json['value']);
  175. foreach ($pay_type_list_arr as $index => $pay_type) {
  176. if ($index == 'friend' && $pay_type['value'] == 1) {
  177. $pay_type_list[] = [
  178. 'name' => '朋友代付',
  179. 'payment' => 7,
  180. ];
  181. $is_open_friend_pay = true;
  182. }
  183. if (is_wechat_platform() && $index == 'wechat') {
  184. $pay_type_list[] = [
  185. 'name' => '微信支付',
  186. 'payment' => 1,
  187. ];
  188. }
  189. if (is_alipay_platform() && $index == 'alipay') {
  190. $pay_type_list[] = [
  191. 'name' => '支付宝支付',
  192. 'payment' => 4,
  193. ];
  194. }
  195. if (is_toutiao_platform()) {
  196. $pay_type_list[] = [
  197. 'name' => '线上支付',
  198. 'payment' => 5,
  199. ];
  200. }
  201. if ($index == 'huodao' && $pay_type['value'] == 1) {
  202. $pay_type_list[] = [
  203. 'name' => '货到付款',
  204. 'payment' => 2,
  205. ];
  206. }
  207. }
  208. }
  209. $final_pay_type = $pay_type_list;
  210. // 订单人信息
  211. $saas_user = SaasUser::findOne(['mobile' => User::findOne($order->user_id)->binding]);
  212. // 代付人信息
  213. $pay_user_info = [];
  214. if ($order->pay_user_id > 0) {
  215. $pay_saas_user = SaasUser::findOne(['mobile' => User::findOne($order->pay_user_id)->binding]);
  216. $pay_user_info = [
  217. 'name' => $pay_saas_user->name,
  218. 'mobile' => $pay_saas_user->mobile
  219. ];
  220. }
  221. // 门店信息
  222. $md_info = [];
  223. if ($order->md_id > 0) {
  224. $md = Md::findOne($order->md_id);
  225. $md_info = [
  226. 'name' => $md->name,
  227. 'address' => District::findOne($md->province)->name . District::findOne($md->city)->name
  228. . District::findOne($md->district)->name . $md->address,
  229. 'latitude' => $md->latitude,
  230. 'longitude' => $md->longitude,
  231. 'mobile' => $md->mobile,
  232. 'distance' => Tools::getDistance($md->latitude, $md->longitude, get_params('latitude'), get_params('longitude'))
  233. ];
  234. } else {
  235. $store = Store::findOne($order->store_id);
  236. $province_name = District::findOne($store->province_id)->name;
  237. $city_name = District::findOne($store->city_id)->name;
  238. $district_name = District::findOne($store->district_id)->name;
  239. $lat = '';
  240. $long = '';
  241. $coordinate = explode(',', $store->coordinate);
  242. if ($coordinate) {
  243. $lat = $coordinate[0];
  244. $long = $coordinate[1];
  245. }
  246. $md_info = [
  247. 'name' => $store->name,
  248. 'address' => $province_name .$city_name
  249. . $district_name . $store->address,
  250. 'latitude' => $lat,
  251. 'longitude' => $long,
  252. 'mobile' => $store->contact_tel,
  253. 'distance' => Tools::getDistance($lat, $long, get_params('latitude'), get_params('longitude'))
  254. ];
  255. }
  256. \Yii::warning($final_pay_type);
  257. $adopt_order = Order::find()->alias('o')
  258. ->leftJoin(['aoi' => AdoptOrderInfo::tableName()], 'o.id = aoi.order_id')
  259. ->where([
  260. 'o.id' => $order->order_id,
  261. 'o.store_id' => $this->store_id,
  262. 'o.order_type' => 5
  263. ])->select(['o.order_no','aoi.harvest_weight'])->asArray()->one();
  264. return [
  265. 'code' => 0,
  266. 'msg' => 'success',
  267. 'data' => [
  268. 'shop_name' => $order->md_id > 0 || !empty($md_info['name']) ? $md_info['name'] : '平台自营',
  269. 'pay_user_info' => $pay_user_info,
  270. 'pay_user_id' => $order->pay_user_id,
  271. 'pay_type_list' => $final_pay_type,
  272. 'is_delivery' => $order->is_delivery,
  273. 'express_detail' => $express_detail,
  274. 'order_id' => $order->id,
  275. 'is_pay' => $order->is_pay,
  276. 'status' => $status,
  277. 'express' => $order->express,
  278. 'express_no' => $order->express_no,
  279. 'name' => $order->name,
  280. 'mobile' => $order->mobile,
  281. 'address' => $order->address,
  282. 'order_no' => $order->order_no,
  283. 'addtime' => date('Y-m-d H:i:s', $order->created_at),
  284. 'total_price' => doubleval(sprintf('%.2f', $order->total_price)),
  285. 'express_price' => doubleval(sprintf('%.2f', $order->express_price)),
  286. 'goods_total_price' => doubleval(sprintf('%.2f', doubleval($order->total_price) - doubleval($order->express_price))),
  287. 'coupon_sub_price' => isset($order->coupon_sub_price) ? $order->coupon_sub_price : 0,
  288. 'pay_price' => $deliveryInfo ? sprintf("%1.2f", $order->pay_price + $deliveryInfo->fee) : $order->pay_price ,
  289. 'num' => $num,
  290. 'md_info' => $md_info,
  291. 'goods_list' => $newList,
  292. 'is_offline' => $order->is_offline,
  293. 'content' => $order->content ? $order->content : "",
  294. 'before_update' => $before_update,
  295. 'money' => $money,
  296. 'discount' => $order->discount,
  297. 'user_coupon_id' => $order->user_coupon_id,
  298. 'words' => $order->words,
  299. 'pay_type' => $order->pay_type,
  300. 'integral'=> json_decode($order->integral),
  301. 'apply_delete' => $order->apply_delete,
  302. 'trade_status' => $order->trade_status,
  303. 'order_type' => $order->order_type,
  304. 'cancel_reason' => Delivery::$validReason,
  305. 'delivery_info' => $deliveryInfo,
  306. 'open_friend_pay' => intval($is_open_friend_pay),
  307. 'user_info' => [
  308. 'name' => $saas_user->name,
  309. 'avatar' => $saas_user->avatar
  310. ],
  311. 'cost_detail' => $order->cost_detail ? json_decode($order->cost_detail) : [],
  312. 'weight' => $order->weight,
  313. 'adopt_order_no' => $adopt_order['order_no'],
  314. 'harvest_weight' => $adopt_order['harvest_weight'],
  315. ],
  316. ];
  317. }
  318. }