<?php namespace app\api\controller\v1; use app\BaseController; use app\model\api\ExpCost; use app\model\api\Member; use app\model\api\MemberDetail; use app\model\Api\MemberShop; use app\model\api\Order as OrderModel; use app\model\api\OrderInfo; use app\model\api\Product; use app\model\api\SiteProduct; use app\model\api\UserAddress; use app\model\api\Warehouse; use app\model\system\ProductAttr; use app\Request; use library\services\UtilService; use library\utils\Region; use think\db\exception\DbException; use think\facade\Db; class Order extends BaseController { /** * 获取产品信息 */ public function getProductInfo(Request $request){ $where = UtilService::getMore([ ['product_id', 0], ['unique', ''] ], $request); $data = Db::name('ProductAttrValue')->where('product_id', $where['product_id'])->where('unique', $where['unique'])->find(); if($data['price'] == '0.00'){ $data['price'] = round($data['ot_price'] * 1.05, 2); } $data['store_name'] = Db::name('Product')->where('id', $where['product_id'])->value('store_name'); return app('json')->success($data); } /** * 买样订单 * @param Request $request */ public function buyOrder(Request $request) { $data = UtilService::getMore([ ['pro_id', '', 'empty', '参数错误'], ['unique', '', 'empty', '参数错误'], ['num', '', 'empty', '参数错误'], ['addressId', '', 'empty', '参数错误'], ['pro_price', 0], ['postage', 0], ['all_price', 0], ['mono', ''] ], $request); try { OrderModel::beginTrans(); $addressId = $data['addressId']; unset($data['addressId']); $data['order_id'] = 'TF' . time() . sprintf('%04d', rand(0, 1000)) . $request->user['uid']; //订单号 $data['uid'] = $request->user['uid']; $data['time'] = time(); $oId = OrderModel::insertGetId($data); $address = UserAddress::find($addressId); $save['o_id'] = $oId; $save['uid'] = $request->user['uid']; $save['name'] = $address['real_name']; $save['mobile'] = $address['phone']; $save['address'] = $address['province'] . $address['city'] . $address['district'] . $address['detail']; $save['money'] = $data['all_price']; $save['pro_price'] = $data['pro_price']; $save['pro_id'] = $data['pro_id']; $save['exp_price'] = $data['postage']; $save['time'] = time(); OrderInfo::insert($save); OrderModel::commitTrans(); } catch (DbException $db) { OrderModel::rollbackTrans(); return app('json')->fail("下单失败,原因:" . $db->getMessage()); } return app('json')->success([ 'order_id' => $data['order_id'], 'price' => $data['all_price'] ]); } /** * 代发订单 * @param Request $request */ public function subOrder(Request $request) { [$orderAr, $proId, $warehouseId, $expId, $platformId, $mono, $extraFreight] = UtilService::getMore([ ['orderAr', '', 'empty', '参数错误'], ['proId', '', 'empty', '参数错误'], ['warehouseId', '', 'empty', '参数错误'], ['expId', '', 'empty', '请选择运送方式'], ['platformId', '', 'empty', '参数错误'], ['mono', ''], ['extraFreight', 0] ], $request, true); $expPrice = 0; //邮费费用 $expressId = 0; //快递ID $siteExpCommission = 0;//分站佣金费用 //检测数据 $sitePro = (new SiteProduct)->getItem($proId); if ($sitePro['count'] <= 0 || count($orderAr) > $sitePro['count']) { return app('json')->fail("订单产品数量不足,请重新选择!"); } //判断仓库是否可以下单 $warehouseIds = explode(',',$sitePro['warehouse_ids']); if(!in_array($warehouseId,$warehouseIds)) { return app('json')->fail("请重新选择产品!"); } $warehouse = (new Warehouse)->where('id',$warehouseId)->find(); if(empty($warehouse) || empty($warehouse['status'])) { return app('json')->fail("分仓已下架,请选择其他分仓"); } $region = new Region; //检查地址数据 foreach ($orderAr as $k => $v) { $rData = $region->getRegion($v['address']); if (empty($rData['province']) || empty($rData['city']) || empty($rData['area']) ) { // return app('json')->fail('第' . (intval($k) + 1) .'行,'.$v['address'] .'地址信息有误,请重新检查省市区!'); } } //订单总数 $orderCount = count($orderAr); $price = $sitePro['price'] * $orderCount; $siteProCommission = $sitePro['price'] > $sitePro['commission'] ? ($sitePro['price'] - $sitePro['commission']) : 0;//分站佣金 //快递信息 $expCode = new ExpCost; $expCode->getExpCostData($request->site['sassid'], $request->user['levelid']); $expData = array_filter($expCode->getWareHouseExpCost($warehouseId, '*'), function ($item) use ($expId) { if ($item['id'] == $expId) { return true; } }); //如果有快递信息,分析分账提成 || 用户推荐佣金 if (!empty($expData)) { $expressId = $expData[0]['express_id']; $expPrice = $expData[0]['money']; //分站金额 $money = $expCode->getSysExpCostPrice($expressId, $warehouseId, $request->site['sassid']); $siteExpCommission = empty($money) ? 0 : ($expPrice > $money ? ($expPrice - $money) : 0); } if (empty($expressId)) { return app('json')->fail("本次邮寄方式不存在,请重新选择邮寄方式。"); } //获取低价 $floorExp = $expCode ->where('warehouse_id', $warehouseId) ->where('express_id', $expressId) ->where('sassid', 0) ->where('level_id', -1) ->value('money'); //会员店铺 $shopAr = []; foreach ($orderAr as $v) { $shop_name = trim($v['shop_name']); if (!empty($shop_name)) { $shopAr[$shop_name] = ['name' => $shop_name]; } } try { \app\model\api\Order::beginTrans(); $mShop = new MemberShop; foreach ($shopAr as $k => $v) { $shopId = $mShop->where('name', $k) ->where('uid', $this->user['uid']) ->value('id'); if (empty($shopId)) $shopId = $mShop->insertGetId(['name' => $k, 'uid' => $this->user['uid']]); $shopAr[$k]['id'] = $shopId; } //下单 $save['order_id'] = 'TF' . time() . sprintf('%04d', rand(0, 1000)) . $request->user['uid'];//订单号 $save['all_price'] = $price + $expPrice * $orderCount + $extraFreight;//总金额 [价格 + 快递*产品数量] $save['pro_site_commission'] = $siteProCommission * $orderCount;//产品分站佣金 $save['exp_site_commission'] = $siteExpCommission * $orderCount;//快递分站佣金 $save['site_commission'] = $save['pro_site_commission'] + $save['exp_site_commission'];//分站提成 $save['pro_id'] = $sitePro['id'];//产品ID $save['platform_id'] = $platformId;//来源[拼多多,淘宝] $save['warehouse_id'] = $warehouseId;//仓库来源 $save['status'] = 0;//状态 $save['time'] = time(); $save['express_id'] = $expressId;//快递类型 $save['sassid'] = $request->site['sassid'];//分站 $save['mono'] = $mono;//备注 $save['pro_price'] = $price;//产品价格 $save['uid'] = $request->user['uid']; $oId = (new Order)->insertGetId($save); foreach ($orderAr as $k => $v) { $shop_name = trim($v['shop_name']); $d = []; $d['o_id'] = $oId; $d['in_order_id'] = $save['order_id'] . '-' . ($k + 1); $d['out_order_id'] = $v['out_order_id']; $d['name'] = $v['name']; $d['mobile'] = $v['mobile']; $d['address'] = $v['address']; $d['pro_price'] = $sitePro['price']; $d['pro_id'] = $sitePro['id']; $d['exp_id'] = $expressId; if(strstr($d['address'], '北京')){ $d['exp_price'] = $expPrice + $warehouse['beijing']; }else if(strstr($d['address'], '上海')){ $d['exp_price'] = $expPrice + $warehouse['shanghai']; }else if(strstr($d['address'], '青海')){ $d['exp_price'] = $expPrice + $warehouse['qinghai']; }else{ $d['exp_price'] = $expPrice; } $d['money'] = $sitePro['price'] + $d['exp_price']; $d['sassid'] = $request->site['sassid']; $d['uid'] = $request->user['uid']; $d['time'] = time(); $d['platform_id'] = $platformId; $d['warehouse_id'] = $warehouseId; $d['pro_site_commission'] = $siteProCommission; $d['exp_site_commission'] = $siteExpCommission; $d['site_commission'] = $siteProCommission + $siteExpCommission; $d['exp_floor_price'] = empty($floorExp) ? 0 : $floorExp; $d['shop_id'] = empty($shop_name) ? 0 : $shopAr[$shop_name]['id']; (new OrderInfo)->insert($d); } Order::commitTrans(); } catch (DbException $db) { Order::rollbackTrans(); return app('json')->fail("下单失败,理由:" . $db->getMessage()); } return app('json')->success([ 'order_id' => $save['order_id'], 'price' => $save['all_price'], ]); } /** * 余额支付 * @param Request $request */ public function balancePay(Request $request) { [$orderId] = UtilService::getMore([ ['order_id', '', 'empty', '参数错误'], ], $request, true); $order = OrderModel::where('order_id', $orderId)->find(); if (empty($order)) { return app('json')->fail('找不到订单信息'); } //订单已付款 if (!empty($order['is_pay'])) { return app('json')->fail('订单已经支付成功'); } if ($order['all_price'] > $request->user['money']) { return app('json')->fail('余额不足!'); } $res = (new MemberDetail)->consumption($order['all_price'], $request->user['uid'], [ 'mobile' => $request->user['mobile'], 'order_id' => $orderId, 'money' => $order['all_price'] ]); if ($res) { //减库存加销量 (new Product)->where('id', $order['pro_id'])->dec('stock', $order['num'])->inc('sales', $order['num'])->update(); Db::name('ProductAttrValue')->where('product_id', $order['pro_id'])->where('unique', $order['unique'])->dec('stock', $order['num'])->inc('sales', $order['num'])->update(); //改订单状态 OrderModel::where('order_id', $orderId)->save([ 'status' => 1, 'is_pay' => 1, 'pay_type' => 'yue', 'pay_time' => time() ]); //改子订单状态 OrderInfo::where('o_id', $order['id'])->save(['status' => 1,]); //设置维护人 /*$last_con_time = (new Member)->where('uid', $request->user['uid'])->value('last_con_time'); if($last_con_time == 0){ $follow = (new MemberFollow)->where('uid', $request->user['uid'])->where('admin_id', 99)->find(); if($follow){ (new Member)->where('uid', $request->user['uid'])->save(['admin_id' => 99]); }else{ (new Member)->where('uid', $request->user['uid'])->save(['admin_id' => 100]); } }*/ (new Member)->where('uid', $request->user['uid'])->save(['last_con_time' => time()]); return app('json')->success(['msg' => '支付成功']); } else { return app('json')->fail('支付失败'); } } /** * 获取订单列表 * @param Request $request */ public function getOrderList(Request $request) { $where = UtilService::getMore([ ['type', ''], ['page', 0], ['limit', ''] ], $request); $data = (new OrderModel)->getUserOrderList($request->user['uid'], $where); return app('json')->success($data); } /** * 取消订单 * @param Request $request */ public function cancelOrder(Request $request) { $post = UtilService::getMore([ ['id', '', 'empty', '参数错误'], ], $request); $order = new OrderModel; $data = $order ->where('uid', $request->user['uid']) ->where('id', $post['id']) ->find(); if (empty($data)) { return app('json')->fail('找不到订单信息'); } //订单状态 if ($data['status'] != 0) { return app('json')->fail('当前订单无法取消'); } $order->where('id', $data['id'])->save(['status' => -1,]); (new OrderInfo)->where('o_id', $data['id'])->save(['status' => -1]); return app('json')->success(['msg' => '取消成功']); } }