/** * Run the database seeds. * * @return void */ public function run() { Model::unguard(); // $this->call('UserTableSeeder'); DB::table('users')->truncate(); User::create(['id' => 1, 'username' => 'admin', 'email' => '*****@*****.**', 'password' => \Hash::make('11431143'), 'role' => User::ROLE_ADMIN, 'status' => User::STATUS_NORMAL]); DB::table('suppliers')->truncate(); Supplier::create(['id' => 1, 'username' => 'nanpufood', 'email' => '*****@*****.**', 'title' => '南浦集团', 'description' => '快速消费品综合代理和营销集团', 'service_phone' => '021-61923399', 'status' => 1]); //店铺 DB::table('shops')->truncate(); Shop::create(['id' => 1, 'short_id' => "yayao", 'province_id' => 310000, 'city_id' => 310100, 'county_id' => 310110, 'type' => 2, 'name' => '丫摇官方直营店', 'seller_id' => 1, 'thumbnail' => '', 'title' => '丫摇小店', 'subtitle' => '丫摇官方直营店', 'is_direct_sale' => Shop::IS_DIRECT_SALE_YES, 'banner' => '/images/banner_7.jpg', 'thumbnail' => '/images/logo_160.png']); //卖家 DB::table('sellers')->truncate(); \Dajiayao\Model\Seller::create(['id' => 1, 'wx_user_id' => 1, 'mobile' => '15995420354', 'parent_id' => 0, 'realname' => '丫摇官方店主']); \Dajiayao\Model\Seller::create(['id' => 2, 'wx_user_id' => 2, 'mobile' => '13800138000', 'parent_id' => 0, 'realname' => '测试店主']); //微信user DB::table('wx_users')->truncate(); \Dajiayao\Model\WxUser::create(['id' => 1, 'subscribe' => 1, 'openid' => 'oVtn9t9nmKQodGDQHLHfbHE_CDPI', 'nickname' => '小明', 'sex' => 1, 'city' => '苏州', 'country' => '中国', 'province' => '江苏', 'language' => 'zh_CN', 'role' => 2, 'headimgurl' => 'http://wx.qlogo.cn/mmopen/NWsF4EmJMsG8AeztibfdK5NWzAN6oX6PEwUOzeia9gzTvKW753aV0icuqTetiap4Tgf7q5sEdIaEstoa9hvvdlesuw/0']); \Dajiayao\Model\WxUser::create(['id' => 2, 'subscribe' => 1, 'openid' => 'oVtn9t9nmKQodGDQHLHfbHE_CDPI', 'nickname' => '小明2', 'sex' => 1, 'city' => '苏州', 'country' => '中国', 'province' => '江苏', 'language' => 'zh_CN', 'role' => 2, 'headimgurl' => 'http://wx.qlogo.cn/mmopen/NWsF4EmJMsG8AeztibfdK5NWzAN6oX6PEwUOzeia9gzTvKW753aV0icuqTetiap4Tgf7q5sEdIaEstoa9hvvdlesuw/0']); DB::table('items')->truncate(); Item::create(['id' => 1, 'name' => '星巴克 星冰乐咖啡', 'title' => '星巴克 星冰乐咖啡', 'code' => '1234', 'barcode' => '678952135', 'type_id' => 1, 'supplier_id' => 1, 'spec' => '摩卡味 281ml', 'weight' => 281, 'volume' => 281, 'price' => 18, 'market_price' => 28, 'stock' => 10000, 'shelf_status' => 1, 'sale_status' => 1, 'comment' => '真便宜啊', 'postage_type' => 2]); Item::create(['id' => 2, 'name' => '星巴克 星冰乐咖啡', 'title' => '星巴克 星冰乐 香草味 咖啡饮料 281ml*6美国进口', 'code' => '1235', 'barcode' => '678952185', 'type_id' => 1, 'supplier_id' => 1, 'spec' => '摩卡味 281ml * 6', 'weight' => 1686, 'volume' => 1686, 'price' => 108, 'market_price' => 168, 'stock' => 10000, 'shelf_status' => 1, 'sale_status' => 1, 'comment' => '真的很便宜啊', 'postage_type' => 2]); Item::create(['id' => 3, 'name' => '星巴克 星冰乐咖啡', 'title' => '星巴克 星冰乐 摩卡 咖啡饮料 281ml*6美国进口', 'code' => '1236', 'barcode' => '678952165', 'type_id' => 1, 'supplier_id' => 1, 'spec' => '摩卡味 281ml * 6', 'weight' => 1686, 'volume' => 1686, 'price' => 108, 'market_price' => 168, 'stock' => 10000, 'shelf_status' => 1, 'sale_status' => 1, 'comment' => '买买买啊', 'postage_type' => 2]); DB::table('shop_items')->truncate(); \Dajiayao\Model\ShopItem::create(["shop_id" => 1, "item_id" => 1, "stock" => 1000, "sort" => 1, "is_single" => 1]); \Dajiayao\Model\ShopItem::create(["shop_id" => 1, "item_id" => 2, "stock" => 1000, "sort" => 1, "is_single" => 1]); \Dajiayao\Model\ShopItem::create(["shop_id" => 1, "item_id" => 3, "stock" => 1000, "sort" => 1, "is_single" => 1]); DB::table('images')->truncate(); \Dajiayao\Model\Image::create(['url' => '/images/product.jpg', 'name' => '星巴克', 'type' => 1]); DB::table('item_images')->truncate(); \Dajiayao\Model\ItemImage::create(['item_id' => 1, 'image_id' => 1]); \Dajiayao\Model\ItemImage::create(['item_id' => 2, 'image_id' => 1]); \Dajiayao\Model\ItemImage::create(['item_id' => 3, 'image_id' => 1]); DB::table('item_type')->truncate(); ItemType::create(['id' => 1, 'name' => '饮料', 'sort' => 1]); ItemType::create(['id' => 2, 'name' => '酒类', 'sort' => 2]); ItemType::create(['id' => 3, 'name' => '坚果', 'sort' => 3]); DB::table('expresses')->truncate(); \Dajiayao\Model\Express::create(['name' => '圆通', 'code' => 'yuantong', 'website' => 'http://www.yto.net.cn', 'phone' => '95554']); \Dajiayao\Model\Express::create(['name' => '申通', 'code' => 'shentong', 'website' => 'http://www.sto.cn', 'phone' => '95543']); \Dajiayao\Model\Express::create(['name' => '韵达', 'code' => 'yunda', 'website' => 'http://www.yundaex.com', 'phone' => '400-821-6789']); \Dajiayao\Model\Express::create(['name' => '顺丰', 'code' => 'shunfeng', 'website' => 'http://www.sf-express.com', 'phone' => '95338']); DB::table('settings')->truncate(); \Dajiayao\Model\Setting::create(['key' => 'commissions:rate', 'name' => '佣金比例', 'value' => '0.1', 'description' => '佣金 = 实际成交价 x 佣金比例', 'parent_id' => 0]); \Dajiayao\Model\Setting::create(['key' => 'order:payment:duration', 'name' => '订单最晚支付时间', 'value' => '1', 'parent_id' => 0]); \Dajiayao\Model\Setting::create(['key' => 'order:auto:receive:duration', 'name' => '发货后自动收货时间', 'value' => '36', 'parent_id' => 0]); \Dajiayao\Model\Setting::create(['key' => 'order:postage', 'name' => '统一邮费', 'value' => '10', 'parent_id' => 0]); DB::table('buyers')->truncate(); \Dajiayao\Model\Buyer::create(['id' => 2, 'wx_user_id' => 2, 'mobile' => '18600186000', 'subscribe_status' => 1]); DB::table('buyer_addresses')->truncate(); \Dajiayao\Model\BuyerAddress::create(['buyer_id' => 2, 'address_id' => 320507, 'address' => '相城区元和街道', 'postcode' => 215000, 'receiver' => 'zzq', 'mobile' => 159987548, 'default' => 1]); }
/** * 生成订单 * @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)]); }
/** * 编辑商品 * @author Hanxiang * @param $id * @return view */ public function update($id) { //TODO:检查当前用户是否可编辑 $item = Item::find($id); if (!$item) { abort(404); } $item->imgurl = asset('/themeforest/images/avatar.png'); //TODO $itemImage = ItemImage::where('item_id', $id)->first(); if (count($itemImage) > 0) { $image = Image::find($itemImage->image_id); if (count($image)) { $item->imgurl = $image->url; } } $supplier = Supplier::find($item->supplier_id); $itemTypes = ItemType::orderBy('sort')->get(); $setting = Setting::getByKey(Setting::KEY_COMMISSIONS_RATE); return view('admin.items.update')->with('item', $item)->with('supplier', $supplier)->with('itemTypes', $itemTypes)->with('setting', $setting); }