Exemplo n.º 1
0
 public function update(Order $order, $itemTotal, $grandTotal, $discount_total, $amount_tendered, $isAnonymous, $postage, $orderType, $receiverAddressId)
 {
     $order->item_total = $itemTotal;
     $order->grand_total = $grandTotal;
     $order->discount_total = $discount_total;
     $order->amount_tendered = $amount_tendered;
     $order->postage = $postage;
     $order->order_type = $orderType;
     $order->receiver_address_id = $receiverAddressId;
     $buyerAddr = BuyerAddress::find($receiverAddressId);
     if (!$buyerAddr) {
         throw new \Exception(sprintf("buyer addr id : %s not found in db", ${$receiverAddressId}));
     }
     $order->receiver_address = $buyerAddr->address;
     $address = $buyerAddr->addresses;
     $county = $address->address;
     $city = $address->getFather();
     $province = $city->getFather();
     $order->receiver_full_address = $province->address . $city->address . $county . $buyerAddr->address;
     $order->receiver = $buyerAddr->receiver;
     $order->receiver_phone = $buyerAddr->mobile;
     $order->receiver_postcode = $buyerAddr->postcode;
     $order->is_anonymous = $isAnonymous;
     $order->deliver_status = Order::DELIVER_STATUS_NO;
     $order->payment_type = Order::PAYMENT_TYPE_WX;
     $order->payment_status = Order::PAY_STATUS_NO;
     $order->status = Order::STATUS_TO_PAY;
     $order->save();
     return $order->id;
 }
Exemplo n.º 2
0
 /**
  * 订单列表
  * @author Hanxiang
  * TODO
  */
 public function index()
 {
     $user = Auth::user();
     if ($user->role != User::ROLE_ADMIN) {
         return;
         //TODO
     }
     $orders = Order::where('id', '>', 0);
     $input = Input::all();
     if (isset($input['status']) && $input['status'] > 0) {
         $orders = $orders->where('status', $input['status']);
         $status = $input['status'];
     } else {
         $status = -1;
     }
     $orders = $orders->orderBy('updated_at', 'desc')->paginate(20);
     foreach ($orders as $order) {
         $shop = $order->shop;
         $seller = Shop::find($shop->id)->seller;
         $wxUser = $seller->wxUser;
         $order->shopObj = $shop;
         $order->seller = $seller;
         $order->sellerWxUser = $wxUser;
         $order->buyer = Buyer::find($order->buyer_id);
         $order->buyerWx = $order->buyer->wxUser;
         // address
         $address = BuyerAddress::find($order->receiver_address_id)->addresses;
         $order->address = $address->getFather();
     }
     return view('admin.orders.index')->with('status', $status)->with('orders', $orders);
 }
Exemplo n.º 3
0
 /**
  * 生成订单
  * @return string
  * @author zhengqian@dajiayao.cc
  */
 public function create()
 {
     //        $inputData = $this->inputData->all();
     $buyerId = $this->buyerId;
     $wxUser = Buyer::find($buyerId)->wxUser;
     if (!$wxUser) {
         return RestHelp::encodeResult(24000, "user illegality");
     }
     $inputData = json_decode(file_get_contents("php://input"), true);
     $validator = Validator::make($inputData, ['shopShortId' => 'required', 'items' => 'required', 'deliverAddressId' => 'required', 'paymentType' => 'required', "shopType" => '', 'orderNumber' => '', "isAnonymous" => 'required|Boolean']);
     if ($validator->fails()) {
         return RestHelp::parametersIllegal($validator->messages()->first());
     }
     if (!isset($inputData['items']) or !is_array($inputData['items'])) {
         return RestHelp::encodeResult(23003, 'item must be array');
     }
     $objShop = Shop::getShopByShort($inputData['shopShortId']);
     if (!$objShop) {
         return RestHelp::encodeResult(21000, sprintf("shop short id %s not found in db", $inputData['shopShortId']));
     }
     $deliver = BuyerAddress::find($inputData['deliverAddressId']);
     if (!$deliver) {
         return RestHelp::encodeResult(23001, sprintf("deliver address id: %s not found in db", $inputData['deliverAddressId']));
     }
     if (!isset($inputData['orderNumber'])) {
         $orderNumber = OrderHelper::getOrderSerialNumber();
     } else {
         $orderNumber = $inputData['orderNumber'];
     }
     $deliverAddressId = $inputData['deliverAddressId'];
     $shopId = $objShop->id;
     $itemTotal = 0;
     $postageFlag = 0;
     $shelfItems = $objShop->getItemsOnShelf();
     //检查商品合法性、库存等等
     foreach ($inputData['items'] as $item) {
         if (!array_key_exists('id', $item) or !array_key_exists('count', $item)) {
             return RestHelp::encodeResult(23005, "items not correct");
         }
         $objItem = Item::find($item['id']);
         $itemTotal += $objItem->price * $item['count'];
         if ($objItem->postage_type == Item::POSTAGE_TYPE_BUYER) {
             $postageFlag++;
         }
         if ($objItem->sale_status == Item::SALE_STATUS_NO) {
             return RestHelp::encodeResult(23006, sprintf("%s已停售", $objItem->title));
         }
         if ($objItem->shelf_status == Item::SHELF_STATUS_NO or !array_key_exists($objItem->id, $shelfItems)) {
             return RestHelp::encodeResult(23006, sprintf("%s已下架", $objItem->title));
         }
         //库存
         if ($objItem->stock < $item['count']) {
             return RestHelp::encodeResult(23006, sprintf("%s库存不足", $objItem->title));
         }
     }
     $postage = $postageFlag ? $this->settingService->getSettingByKey(Setting::KEY_ORDER_POSTAGE)->value : 0;
     $grandTotal = $itemTotal + $postage;
     $sessionTotal = WxUserKv::getValue(Buyer::find($this->buyerId)->wxUser->id, WxUserKv::BUYER_CHECK_PRICE);
     if ((string) $sessionTotal != (string) $grandTotal) {
         return RestHelp::encodeResult(22002, "illegal operation");
     }
     $discount = 0;
     $orderType = Order::PAYMENT_TYPE_WX;
     //如果传入了订单号
     if (isset($inputData['orderNumber'])) {
         //update
         $objOrder = Order::where('order_number', $inputData['orderNumber'])->first();
         if (!$objOrder) {
             return RestHelp::encodeResult(22001, "the order not found");
         }
         //new
         try {
             $orderId = $this->orderService->update($objOrder, $itemTotal, $grandTotal, $discount, $grandTotal - $discount, $inputData['isAnonymous'] ? 1 : 0, $postage, $orderType, $deliverAddressId);
         } catch (\Exception $e) {
             return RestHelp::encodeResult(23004, $e->getMessage());
         }
     } else {
         //new
         try {
             $orderId = $this->orderService->create($orderNumber, $shopId, $this->buyerId, $itemTotal, $grandTotal, $discount, $grandTotal - $discount, $postage, $orderType, $deliverAddressId, $inputData['isAnonymous'] ? 1 : 0, null, null);
         } catch (\Exception $e) {
             return RestHelp::encodeResult(23004, $e->getMessage());
         }
         //减少库存
         $commissonTotal = 0;
         foreach ($inputData['items'] as $item) {
             $objItem = Item::find($item['id']);
             $objItem->stock -= $item['count'];
             $objItem->save();
             //计算挨个佣金
             $commissonTotal += $objItem->commission * $item['count'];
         }
         //生成佣金表数据
         $commisson = OrderCommission::firstOrNew(['order_id' => $orderId]);
         $commisson->amount = $objShop->is_direct_sale == 'Y' ? 0 : $commissonTotal;
         $commisson->status = OrderCommission::STATUS_UNCONFIRMED;
         $commisson->save();
         //生成seller commisson
         $sellerCommission = SellerCommission::firstOrNew(['order_id' => $orderId, 'seller_id' => $objShop->seller_id]);
         $sellerCommission->amount = $objShop->is_direct_sale == 'Y' ? 0 : $commissonTotal;
         $sellerCommission->status = SellerCommission::STATUS_UNCONFIRMED;
         $sellerCommission->save();
     }
     $subject = '';
     //32
     $body = '';
     //128
     $itemIdList = \DB::table('order_items')->where('order_id', $orderId)->lists('item_id');
     foreach ($inputData['items'] as $item) {
         if (isset($inputData['orderNumber'])) {
             $orderItem = OrderItem::where('order_id', $orderId)->where('item_id', $item['id'])->first();
             $quantity = $orderItem ? $orderItem->quantity : 0;
             $count = $item['count'];
             $balance = $count - $quantity;
             $objItem = Item::find($item['id']);
             $objItem->stock -= $balance;
             $objItem->save();
             OrderItem::where('order_id', $orderId)->where('item_id', $item['id'])->forceDelete();
             //如果支付失败,返回修改删除了某个商品,则恢复库存 Step 1  @author zhengqian
             foreach ($itemIdList as $k => $itid) {
                 if ($item['id'] == $itid) {
                     unset($itemIdList[$k]);
                 }
             }
         }
         $orderItem = new OrderItem();
         $orderItem->order_id = $orderId;
         $orderItem->item_id = $item['id'];
         $objItem = Item::find($item['id']);
         $orderItem->name = $objItem->name;
         $subject .= $objItem->title . "*" . $objItem->spec . "*" . $objItem->{$item}['count'] . ",";
         $body .= $objItem->title . $objItem->spec . $objItem->{$item}['count'];
         $orderItem->title = $objItem->title;
         $orderItem->code = $objItem->code;
         $orderItem->barcode = $objItem->barcode;
         $orderItem->type = ItemType::find($objItem->type_id)->name;
         $orderItem->quantity = $item['count'];
         $orderItem->price = $objItem->price;
         $orderItem->item_total = $objItem->price * $item['count'];
         $commissionsRate = $this->settingService->getSettingByKey(Setting::KEY_COMMISSIONS_RATE);
         if (!$commissionsRate) {
             $commissionsRate = Setting::DEFAULT_KEY_COMMISSIONS_RATE;
         } else {
             $commissionsRate = $commissionsRate->value;
         }
         $orderItem->commission = $orderItem->item_total * $commissionsRate;
         $orderItem->save();
     }
     //如果支付失败,返回修改删除了某个商品,则恢复库存 Step 2 @author zhengqian
     if (isset($inputData['orderNumber'])) {
         foreach ($itemIdList as $itid) {
             $orderItem = OrderItem::where('order_id', $orderId)->where('item_id', $itid)->first();
             $quantity = $orderItem->quantity;
             $objItem = Item::find($itid);
             $objItem->stock += $quantity;
             $objItem->save();
             OrderItem::where('order_id', $orderId)->where('item_id', $itid)->forceDelete();
         }
     }
     $payment = new Payment();
     $payment->serial_number = OrderHelper::getPaymentSerialNumber(1);
     $payment->payment_number = '';
     $payment->order_id = $orderId;
     $payment->order_number = Order::find($orderId)->order_number;
     $payment->buyer_id = $this->buyerId;
     $payment->amount = $itemTotal;
     $payment->channel = Payment::PAYMENT_CHANNEL_PXX;
     $payment->type = Payment::PAYMENT_TYPE_WX;
     $payment->status = Order::PAY_STATUS_NO;
     $payment->save();
     try {
         \Pingpp\Pingpp::setApiKey('sk_live_3dKEivmziedjzitFhaHL7gYF');
         $ch = \Pingpp\Charge::create(array('order_no' => $payment->serial_number, 'app' => array('id' => 'app_XTOW5SXTWLGCGKef'), 'channel' => 'wx_pub', 'amount' => $sessionTotal * 100, 'client_ip' => $this->inputData->ip(), 'currency' => 'cny', 'subject' => mb_substr($subject, 0, 32), 'body' => mb_substr($body, 0, 128), 'extra' => array('open_id' => $wxUser->openid)));
     } catch (\Exception $e) {
         return RestHelp::encodeResult(22003, $e->getMessage(), ['orderNum' => $orderNumber]);
     }
     //写入paytmentLOg
     $paymentLog = new PaymentLog();
     $paymentLog->payment_id = $payment->id;
     $paymentLog->channel = Payment::PAYMENT_CHANNEL_PXX;
     $paymentLog->request_data = $ch;
     $paymentLog->respond_data = '';
     $paymentLog->save();
     //保存支付流水号
     $payment->payment_number = json_decode($ch)->id;
     $payment->save();
     return RestHelp::success(['orderNumber' => $orderNumber, 'paymentNumber' => $payment->serial_number, 'charge' => json_decode($ch, true)]);
 }
Exemplo n.º 4
0
 /**
  * @param $id
  * @return string
  * @author zhengqian@dajiayao.cc
  */
 public function update($id)
 {
     if (!$id) {
         return RestHelp::parametersIllegal("id is required");
     }
     $buyerAddress = BuyerAddress::find($id);
     if (!$buyerAddress) {
         return RestHelp::encodeResult(23000, 'deliver_addr is not found');
     }
     $buyerId = $this->buyerId;
     $inputData = $this->inputData->all();
     $validator = Validator::make($inputData, ['countyId' => '', 'address' => '', 'postcode' => '', 'receiver' => '', 'mobile' => '', 'default' => '']);
     if ($validator->fails()) {
         return RestHelp::parametersIllegal($validator->messages()->first());
     }
     $this->buyerAddressService->update($buyerAddress, $buyerId, isset($inputData['countyId']) ? $inputData['countyId'] : $buyerAddress->county_id, isset($inputData['address']) ? $inputData['address'] : $buyerAddress->address, isset($inputData['postcode']) ? $inputData['postcode'] : $buyerAddress->postcode, isset($inputData['receiver']) ? $inputData['receiver'] : $buyerAddress->receiver, isset($inputData['mobile']) ? $inputData['mobile'] : $buyerAddress->mobile, isset($inputData['default']) ? $inputData['default'] : $buyerAddress->default);
     return RestHelp::success();
 }