Order.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | A3Mall
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2020 http://www.a3-mall.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Author: xzncit <158373108@qq.com>
  8. // +----------------------------------------------------------------------
  9. namespace app\admin\service\order;
  10. use mall\library\delivery\aliyun\Aliyun;
  11. use think\facade\Db;
  12. use think\facade\Env;
  13. use think\facade\Session;
  14. use app\admin\model\Order as OrderModel;
  15. use app\common\models\order\OrderCollection as OrderCollectionModel;
  16. use app\common\models\order\OrderDelivery as OrderDeliveryModel;
  17. use app\common\models\order\OrderRefundment as OrderRefundmentModel;
  18. use app\common\service\order\Order as OrderService;
  19. use app\common\models\system\Users as SystemUsersModel;
  20. use app\common\models\order\OrderLog as OrderLogModel;
  21. use app\common\models\Store as StoreModel;
  22. use app\common\models\Area as AreaModel;
  23. use app\common\models\goods\Distribution as DistributionModel;
  24. use app\common\models\Payment as PaymentModel;
  25. use app\common\models\order\OrderGoods as OrderGoodsModel;
  26. use app\common\models\goods\Goods as GoodsModel;
  27. use app\common\models\goods\GoodsItem as GoodsItemModel;
  28. use app\common\models\users\Users as UsersModel;
  29. use app\common\models\users\UsersGroup as UsersGroupModel;
  30. use app\common\models\goods\Freight as FreightModel;
  31. use app\common\models\wechat\WechatUsers as WechatUsersModel;
  32. use app\common\service\subscribe\mini\Subscribe as SubscribeMini;
  33. use app\common\service\subscribe\wechat\Subscribe as SubscribeWechat;
  34. class Order extends OrderService {
  35. /**
  36. * 搜索条件
  37. * @param $key
  38. * @return array
  39. */
  40. public static function getCondition($key){
  41. $condition = [];
  42. if(isset($key["pay_type"]) && $key["pay_type"] != '-1'){
  43. $condition[] = ["order.pay_status","=",$key["pay_type"]];
  44. }
  45. if(isset($key["status"]) && $key["status"] != '-1'){
  46. $condition[] = ["order.status","=",$key["status"]];
  47. }
  48. if(isset($key["distribution_status"]) && $key["distribution_status"] != '-1'){
  49. $condition[] = ["order.distribution_status","=",$key["distribution_status"]];
  50. }
  51. if(!empty($key["title"])){
  52. $condition[] = ["order.order_no","like",'%'.$key["title"].'%'];
  53. }
  54. if(isset($key["order_status"])){
  55. if(in_array($key["order_status"],[1,2,3,4,5])){
  56. $condition = [];
  57. switch ($key["order_status"]){
  58. case 1:
  59. $condition[] = ["order.pay_status","=",0];
  60. break;
  61. case 2:
  62. $condition[] = ["order.pay_status","=",1];
  63. $condition[] = ["order.distribution_status","=",0];
  64. break;
  65. case 3:
  66. $condition[] = ["order.distribution_status","=",1];
  67. $condition[] = ["order.delivery_status","=",0];
  68. break;
  69. case 4:
  70. $condition[] = ["order.status","=",5];
  71. $condition[] = ["order.evaluate_status","=",0];
  72. break;
  73. case 5:
  74. $condition[] = ["order.status","=",5];
  75. break;
  76. }
  77. }
  78. }
  79. return $condition;
  80. }
  81. /**
  82. * 获取列表数据
  83. * @param $data
  84. * @return array
  85. * @throws \think\db\exception\DataNotFoundException
  86. * @throws \think\db\exception\DbException
  87. * @throws \think\db\exception\ModelNotFoundException
  88. */
  89. public static function getList($data){
  90. $condition = self::getCondition($data["key"]??[]);
  91. $count = OrderModel::withJoin(["users","payment"])->where($condition)->count();
  92. $result = array_map(function ($res){
  93. $res["username"] = getUserName($res);
  94. $res["distribution_status_name"] = self::getStatusText(self::getStatus($res));
  95. $res["pay_status_name"] = self::getPaymentStatusText($res["pay_status"]);
  96. $res["order_type_name"] = self::getOrderTypeText($res['type']);
  97. return $res;
  98. },OrderModel::withJoin(["users","payment"])->where($condition)->order("id","desc")->page($data["page"]??1,$data["limit"]??10)->select()->toArray());
  99. return ["count"=>$count, "data"=>$result];
  100. }
  101. /**
  102. * 详情
  103. * @param $id
  104. * @return array
  105. * @throws \think\db\exception\DataNotFoundException
  106. * @throws \think\db\exception\DbException
  107. * @throws \think\db\exception\ModelNotFoundException
  108. */
  109. public static function detail($id){
  110. if(!$row = OrderModel::where("id",$id)->find()){
  111. throw new \Exception("您要查找的订单不存在!");
  112. }
  113. $row["store"] = StoreModel::where("id",$row["store_id"])->find();
  114. if(!empty($row["store"])){
  115. $row["store"]["area_name"] = AreaModel::getArea([$row["store"]["province"],$row["store"]["city"],$row["store"]["area"]],",");
  116. }
  117. $row["type_name"] = self::getOrderTypeText($row['type']);
  118. $row["distribution_status_name"] = self::getSendStatus($row["distribution_status"]);
  119. $row["order_status"] = self::getStatus($row);
  120. $row["order_status_text"] = self::getStatusText($row["order_status"]);
  121. $row['order_payment_status_text'] = self::getPaymentStatusText($row["pay_status"]);
  122. $row["distribution_name"] = DistributionModel::where(["id"=>$row["distribution_id"]])->value("title");
  123. $row["payment_name"] = PaymentModel::where(["id" => $row["pay_type"]])->value("name");
  124. $goods = OrderGoodsModel::where(["order_id" =>$id])->order("id","DESC")->select()->toArray();
  125. foreach($goods as $key=>$item){
  126. $goods[$key]["goods_array"] = "";
  127. if(!empty($item["goods_array"])){
  128. $goods[$key]["goods_array"] = json_decode($item["goods_array"],true);
  129. }
  130. $goods[$key]["order_price"] = number_format($item["goods_nums"]*$item["sell_price"],2);
  131. }
  132. $goodsWeight = 0.00;
  133. foreach ($goods as $key => $val) {
  134. $goodsWeight += $val["goods_nums"] * $val["goods_weight"];
  135. if ($val["product_id"] <= 0) {
  136. $goodsData = GoodsModel::where(["id" => $val["goods_id"]])->find();
  137. $goods[$key]["store_nums"] = $goodsData["store_nums"];
  138. } else {
  139. $product = GoodsItemModel::where(["id" => $val["product_id"]])->find();
  140. $goods[$key]["store_nums"] = $product["store_nums"];
  141. }
  142. }
  143. $row["goods_weight"] = $goodsWeight;
  144. $row["goods"] = $goods;
  145. $row["users"] = UsersModel::where(["id" => $row["user_id"]])->find();
  146. $row["users"]["username"] = getUserName($row["users"]);
  147. $group_name = UsersGroupModel::where(["id" => $row["users"]["group_id"]])->value("name");
  148. $row["users"]["level"] = empty($group_name) ? "默认会员" : $group_name;
  149. if (empty($group_name)) {
  150. $row["users"]["level"] = "默认会员";
  151. } else {
  152. $row["users"]["level"] = $group_name;
  153. }
  154. $row["users"]["sex"] = $row["users"]["sex"] == 1 ? "男" : ($row["users"]["sex"] == 0 ? "保密" : "女");
  155. if($row["users"]["status"] == 0){
  156. $row["users"]["status_text"] = "正常";
  157. }else if($row["users"]["status"] == 1){
  158. $row["users"]["status_text"] = "审核";
  159. }else if($row["users"]["status"] == 2){
  160. $row["users"]["status_text"] = "锁定";
  161. }else if($row["users"]["status"] == 3){
  162. $row["users"]["status_text"] = "删除";
  163. }
  164. $row["area_name"] = AreaModel::getArea([$row["province"],$row["city"],$row["area"]],",");
  165. $row["order_log"] = OrderLogModel::where(["order_id"=>$row["id"]])->select()->toArray();
  166. $row["pay_time"] = date("Y-m-d H:i:s",$row["pay_time"]);
  167. $row["send_time"] = date("Y-m-d H:i:s",$row["send_time"]);
  168. $row["accept_time"] = date("Y-m-d H:i:s",$row["accept_time"]);
  169. $row["completion_time"] = date("Y-m-d H:i:s",$row["completion_time"]);
  170. return [ "data"=>$row ];
  171. }
  172. /**
  173. * 获取订单支付详情页数据
  174. * @param $id
  175. * @return array
  176. * @throws \Exception
  177. */
  178. public static function getPaymentDetail($id){
  179. if(!$row = OrderModel::where(["id"=>$id])->find()){
  180. throw new \Exception("您要查找的订单不存在!",0);
  181. }
  182. $row["username"] = SystemUsersModel::where([ "id"=>Session::get("system_user_id") ])->value("username");
  183. $row["payment_name"] = PaymentModel::where(["id" => $row["pay_type"]])->value("name");
  184. return [ "data"=>$row ];
  185. }
  186. /**
  187. * 订单发货
  188. * @param $data
  189. * @return mixed
  190. * @throws \Exception
  191. */
  192. public static function deliverGoods($data){
  193. try{
  194. $data["admin_id"] = Session::get("system_user_id");
  195. OrderModel::startTrans();
  196. self::sendDeliverGoods($data);
  197. OrderModel::commit();
  198. return $data["id"];
  199. }catch (\Exception $ex){
  200. OrderModel::rollback();
  201. throw new \Exception($ex->getMessage(),$ex->getCode());
  202. }
  203. }
  204. /**
  205. * 获取发货详情数据
  206. * @param $id
  207. * @return array
  208. * @throws \think\db\exception\DataNotFoundException
  209. * @throws \think\db\exception\DbException
  210. * @throws \think\db\exception\ModelNotFoundException
  211. */
  212. public static function getDistributionDetail($id){
  213. if(!$row = Db::name("order")->where(["id"=>$id])->find()){
  214. throw new \Exception("您要查找的订单不存在!",0);
  215. }
  216. $goods = Db::name("order_goods")->where(["order_id" =>$row["id"]])->order("id","DESC")->select()->toArray();
  217. $goodsWeight = 0.00;
  218. foreach ($goods as $key => $val) {
  219. $goodsWeight += $val["goods_nums"] * $val["goods_weight"];
  220. if ($val["product_id"] <= 0) {
  221. $goodsData = Db::name("goods")->where(["id" => $val["goods_id"]])->find();
  222. $goods[$key]["store_nums"] = $goodsData["store_nums"];
  223. } else {
  224. $product = Db::name("goods_item")->where(["id" => $val["product_id"]])->find();
  225. $goods[$key]["store_nums"] = $product["store_nums"];
  226. }
  227. $goods[$key]["goods_array"] = "";
  228. if(!empty($val["goods_array"])){
  229. $goods[$key]["goods_array"] = json_decode($val["goods_array"],true);
  230. }
  231. $goods[$key]["order_price"] = number_format($val["goods_nums"]*$val["sell_price"],2);
  232. }
  233. $row["goods_weight"] = $goodsWeight;
  234. $row["goods"] = $goods;
  235. $row["distribution_name"] = DistributionModel::where(["id"=>$row["distribution_id"]])->value("title");
  236. return [
  237. "data"=>$row,
  238. "freight"=>FreightModel::where(['status'=>0])->select()->toArray(),
  239. "province"=>AreaModel::where(['pid'=>0])->select()->toArray(),
  240. "city"=>AreaModel::where(['pid'=>$row["province"]])->select()->toArray(),
  241. "area"=>AreaModel::where(['pid'=>$row["city"]])->select()->toArray()
  242. ];
  243. }
  244. /**
  245. * 支付
  246. * @param $data
  247. * @return mixed
  248. * @throws \Exception
  249. */
  250. public static function payOrder($data){
  251. try{
  252. OrderModel::startTrans();
  253. $note = $data["note"]??"";
  254. $order = OrderModel::where(["id"=>$data["id"]??0])->find();
  255. if(empty($order)){
  256. throw new \Exception("操作失败,订单不存在!",0);
  257. }
  258. $admin_id = Session::get("system_user_id");
  259. self::payment($order["order_no"],$admin_id,$note);
  260. $admin_name = SystemUsersModel::where(["id"=>$admin_id])->value("username");
  261. OrderLogModel::create([
  262. 'order_id' => $order["id"],
  263. 'username' => $admin_name,
  264. 'action' => '付款',
  265. 'result' => '成功',
  266. 'note' => '订单【' . $order["order_no"] . '】付款' . $order["order_amount"] . '元',
  267. 'create_time' => time()
  268. ]);
  269. OrderModel::commit();
  270. return $order["id"];
  271. }catch (\Exception $ex){
  272. OrderModel::rollback();
  273. throw new \Exception($ex->getMessage(),$ex->getCode());
  274. }
  275. }
  276. /**
  277. * 订单退款
  278. * @param $data
  279. * @return mixed
  280. * @throws \Exception
  281. */
  282. public static function orderRefund($data){
  283. try{
  284. OrderModel::startTrans();
  285. $type = $data["type"]??0;
  286. $amount = $data["amount"]??0;
  287. $id = $data["id"]??0;
  288. $status = $data["status"]??0;
  289. $desc = $data["desc"]??0;
  290. $order_goods_id = $data["order_goods_id"]??[];
  291. if(empty($order_goods_id)){
  292. throw new \Exception("请选择需要退款的商品!",0);
  293. }
  294. if(!$order = OrderModel::where(["id"=>$id])->find()){
  295. throw new \Exception("您要操作的订单不存在!",0);
  296. }
  297. $admin_id = Session::get("system_user_id");
  298. // 管理员拒绝退款
  299. if($status == 1){
  300. if(OrderRefundmentModel::where("order_id",$order["id"])->count()){
  301. OrderRefundmentModel::where("order_id",$order["id"])->save([
  302. 'admin_id' => $admin_id,'dispose_idea' => $desc,"pay_status"=>1,"dispose_time"=>time()
  303. ]);
  304. }else{
  305. throw new \Exception("该用户未申请退款!",0);
  306. }
  307. $user = WechatUsersModel::where("user_id",$order["user_id"])->find();
  308. if(!empty($user["mp_openid"])){
  309. SubscribeMini::refundNotice($user["mp_openid"],$order['order_no']);
  310. }
  311. if(!empty($user["openid"])){
  312. SubscribeWechat::refund($user["mp_openid"],$order['order_no']);
  313. }
  314. return $order["id"];
  315. }
  316. $orderGoodsList = OrderGoodsModel::where("id","in",$order_goods_id)->where("is_send","<>",2)->select()->toArray();
  317. if (empty($orderGoodsList)) {
  318. throw new \Exception('订单中没有符合退货条件的商品', 0);
  319. }
  320. //计算退款商品的原始支付金额
  321. $actAmount = 0;
  322. foreach ($orderGoodsList as $val) {
  323. $orderGoodsRow = $val;
  324. $actAmount += $orderGoodsRow['real_price'] * $orderGoodsRow['goods_nums'];
  325. }
  326. if ($amount > $actAmount) {
  327. throw new \Exception('填写的退款金额不能大于实际用户支付的金额', 0);
  328. }
  329. if(($refunds_id = OrderRefundmentModel::where("order_id",$order["id"])->value("id")) == false){
  330. $refunds_id = OrderRefundmentModel::create([
  331. 'order_no' => $order["order_no"],
  332. 'order_id' => $order["id"],
  333. "user_id"=>$order['user_id'],
  334. 'admin_id' => $admin_id,
  335. 'type' => $type,
  336. 'pay_status' => 0,
  337. 'dispose_time' => time(),
  338. 'content' => '系统退款',
  339. 'dispose_idea' => $desc,
  340. 'create_time' => time(),
  341. 'amount' => $amount,
  342. 'order_goods_id' => implode(",", $order_goods_id)
  343. ])->id;
  344. }else{
  345. OrderRefundmentModel::where("order_id",$order["id"])->save([
  346. 'admin_id' => $admin_id,'dispose_idea' => $desc,'type' => $type,
  347. ]);
  348. }
  349. self::refund($refunds_id,$admin_id);
  350. OrderModel::commit();
  351. return $order["id"];
  352. }catch (\Exception $ex){
  353. OrderModel::rollback();
  354. throw new \Exception($ex->getMessage(),$ex->getCode());
  355. }
  356. }
  357. /**
  358. * 退款详情
  359. * @param $id
  360. * @return array
  361. * @throws \think\db\exception\DataNotFoundException
  362. * @throws \think\db\exception\DbException
  363. * @throws \think\db\exception\ModelNotFoundException
  364. */
  365. public static function orderRefundDetail($id){
  366. if(!$row = OrderModel::where(array("id"=>$id))->find()){
  367. throw new \Exception("您要查找的订单不存在!",0);
  368. }
  369. $row["amount_refund"] = self::getRefundAmount($row);
  370. $row["payment"] = PaymentModel::where("id",$row["pay_type"])->find();
  371. $orderRefundment = OrderRefundmentModel::where("order_id",$row["id"])->find();
  372. $order_goods_id = isset($orderRefundment["order_goods_id"]) ? explode(",",$orderRefundment["order_goods_id"]) : [];
  373. $goods = OrderGoodsModel::where(["order_id" =>$row["id"]])->order("id","DESC")->select()->toArray();
  374. foreach ($goods as $key => $val) {
  375. $goods[$key]["send_status"] = Order::getSendStatus($val["is_send"]);
  376. $goods[$key]["goods_array"] = "";
  377. if(!empty($val["goods_array"])){
  378. $goods[$key]["goods_array"] = json_decode($val["goods_array"],true);
  379. }
  380. $goods[$key]["checked"] = in_array($val["id"],$order_goods_id) ? true : false;
  381. $goods[$key]["order_price"] = number_format($val["goods_nums"]*$val["sell_price"],2);
  382. }
  383. $row["goods"] = $goods;
  384. $row["distribution_name"] = DistributionModel::where(["id"=>$row["distribution_id"]])->value("title");
  385. return [
  386. "data"=>$row,
  387. "freight"=>FreightModel::where(['status' => 0])->select()->toArray(),
  388. "province"=>AreaModel::where(['pid' => 0])->select()->toArray(),
  389. "city"=>AreaModel::where(['pid' => $row["province"]])->select()->toArray(),
  390. "area"=>AreaModel::where(['pid' => $row["city"]])->select()->toArray()
  391. ];
  392. }
  393. public static function completeOrder($data){
  394. try{
  395. OrderModel::startTrans();
  396. $id = $data["id"]??0;
  397. $status = $data["status"]??0;
  398. if ($id <= 0 || !in_array($status, [4, 5])) {
  399. throw new \Exception("参数错误",0);
  400. }
  401. $orderData = [ 'status' => $status, 'completion_time' => time() ];
  402. if($status == 5){
  403. $orderData["delivery_status"] = 1;
  404. $orderData["distribution_status"] = 1;
  405. $orderData["evaluate_status"] = 1;
  406. }
  407. $row = OrderModel::where(["id"=>$id])->find();
  408. OrderModel::where(['id'=>$id])->save($orderData);
  409. if ($status == 5 && in_array($row["distribution_status"],[1,2])) {
  410. $action = '完成';
  411. $note = '订单【' . $row['order_no'] . '】完成成功';
  412. //完成订单并且进行支付
  413. self::complete($row['order_no'],Session::get("system_user_id"));
  414. }else{
  415. $action = '作废';
  416. $note = '订单【' . $row['order_no'] . '】作废成功';
  417. }
  418. $username = SystemUsersModel::where(["id"=>Session::get("system_user_id")])->value("username");
  419. OrderLogModel::create([
  420. 'order_id' => $id,
  421. 'username' => $username,
  422. 'action' => $action,
  423. 'result' => '成功',
  424. 'note' => $note,
  425. 'create_time' => time()
  426. ]);
  427. OrderModel::commit();
  428. return true;
  429. }catch (\Exception $ex){
  430. OrderModel::rollback();
  431. throw new \Exception($ex->getMessage());
  432. }
  433. }
  434. /**
  435. * 修改订单金额
  436. * @param $data
  437. * @return bool
  438. * @throws \Exception
  439. */
  440. public static function updateAmount($data){
  441. try{
  442. $order = OrderModel::where("id",$data["id"]??0)->find();
  443. $action = $data["action"]??0;
  444. $num = $data["num"]??0;
  445. if(empty($order)){
  446. throw new \Exception("您要操作的订单不存在",0);
  447. }else if($order["pay_status"] == 1){
  448. throw new \Exception("您要操作的订单已支付",0);
  449. }
  450. if($action == 1 && $num > $order["order_amount"]){
  451. throw new \Exception("您要操作的金额超过订单总金额",0);
  452. }
  453. $data = [];
  454. switch ($action){
  455. case 0:
  456. $data["increase_amount"] = $num;
  457. $data["order_amount"] = $order["order_amount"] + $num;
  458. break;
  459. case 1:
  460. $data["reduce_amount"] = $num;
  461. $data["order_amount"] = $order["order_amount"] - $num;
  462. break;
  463. }
  464. OrderModel::startTrans();
  465. Db::name("order")->where("id",$order["id"])->update($data);
  466. $username = SystemUsersModel::where(["id"=>Session::get("system_user_id")])->value("username");
  467. OrderLogModel::create([
  468. 'order_id' => $order["id"],
  469. 'username' => $username,
  470. 'action' => $action == 0 ? "增加金额" : "减少金额",
  471. 'result' => '成功',
  472. 'note' => "修改订单金额",
  473. 'create_time' => time()
  474. ]);
  475. OrderModel::commit();
  476. return true;
  477. }catch (\Exception $ex){
  478. OrderModel::rollback();
  479. throw new \Exception($ex->getMessage());
  480. }
  481. }
  482. /**
  483. * 获取订单数据
  484. * @param $id
  485. * @return array
  486. * @throws \think\db\exception\DataNotFoundException
  487. * @throws \think\db\exception\DbException
  488. * @throws \think\db\exception\ModelNotFoundException
  489. */
  490. public static function updateAmountDetail($id){
  491. return [ "order"=>OrderModel::where("id",$id)->find() ];
  492. }
  493. /**
  494. * 获取物流数据
  495. * @param $id
  496. * @return array
  497. * @throws \think\db\exception\DataNotFoundException
  498. * @throws \think\db\exception\DbException
  499. * @throws \think\db\exception\ModelNotFoundException
  500. */
  501. public static function getExpressData($id){
  502. $order = OrderModel::where("id",$id)->where("distribution_status","in","1,2")->find();
  503. $order['delivery'] = OrderDeliveryModel::where("order_id",$id)->find();
  504. $type = strtolower(FreightModel::where("id",$order['delivery']["freight_id"])->value("type"));
  505. if($type == 'sfexpress'){
  506. $order['delivery']["distribution_code"] = $order['delivery']["distribution_code"] . ":" . substr($order['delivery']["mobile"],-4);
  507. }
  508. $order["region"] = AreaModel::getArea([$order['province'],$order['city'],$order['area']],' ');
  509. $express = ["expName"=>"", "number"=>"", "takeTime"=>"", "updateTime"=>""];
  510. try{
  511. $express = Aliyun::query($order['delivery']["distribution_code"],$type);
  512. }catch(\Exception $ex){
  513. $express["list"][] = [
  514. "status"=>"商家正在通知快递公司",
  515. "time"=>date("Y-m-d H:i:s",$order["send_time"])
  516. ];
  517. }
  518. return [
  519. "accept_name"=>$order["accept_name"],
  520. "mobile"=>$order["mobile"],
  521. "region"=>$order["region"],
  522. "address"=>$order["address"],
  523. "order_no"=>$order["order_no"],
  524. "express"=>$express
  525. ];
  526. }
  527. /**
  528. * 删除
  529. * @param $ids
  530. * @return bool
  531. * @throws \Exception
  532. */
  533. public static function delete($ids){
  534. try{
  535. OrderModel::startTrans();
  536. $array = array_map("intval",explode(",",$ids));
  537. foreach($array as $id) {
  538. $row = OrderModel::where('id', $id)->find();
  539. if (empty($row)) {
  540. continue;
  541. }
  542. OrderModel::where("id",$id)->delete();
  543. OrderCollectionModel::where(["order_id" => $id])->delete();
  544. OrderDeliveryModel::where(["order_id" => $id])->delete();
  545. OrderGoodsModel::where(["order_id" => $id])->delete();
  546. OrderRefundmentModel::where(["order_id" => $id])->delete();
  547. OrderLogModel::where(["order_id" => $id])->delete();
  548. }
  549. OrderModel::commit();
  550. return true;
  551. }catch (\Exception $ex){
  552. OrderModel::rollback();
  553. throw new \Exception($ex->getMessage());
  554. }
  555. }
  556. }