isPending()) { $res = $order->where('updated_at', $order->updated_at)->update([ 'reduced_amount' => $order->total_amount - $reduceAmount + $order->reduced_amount, 'total_amount' => $reduceAmount, ]); if ($res === 0) { throw new BizException('订单已发生改变'); } OrderLog::create([ 'order_id'=>$order->id, 'content'=> '调整订单支付价格为:¥'.bcdiv($reduceAmount, 100, 2), ]); } } /** * 后台支付订单 * * @param Order $order * @return void */ public function adminPay(Order $order) { if ($order->isPending()) { //操作订单状态-需要调整为统一支付方法 $order->update([ 'status' => Order::STATUS_PAID, ]); OrderLog::create([ 'order_id'=>$order->id, 'content'=> '改变订单状态为【已支付】', ]); } } /** * 添加后台备注 * * @param Order $order * @param string $remark * @return void */ public function adminRemark(Order $order, string $remark) { //操作订单状态-需要调整为统一支付方法 $order->update([ 'remark' => $remark, ]); OrderLog::create([ 'order_id'=>$order->id, 'content'=> '修改订单备注:'.$remark, ]); } /** * 修改订单收货信息 * * @param Order $order * @param array $params * @return void */ public function adminEditConsignee(Order $order, array $params) { $oldOrderConsignee = $order->consignee_name.','.$order->consignee_telephone.','.$order->consignee_zone.$order->consignee_address; $order->update($params); OrderLog::create([ 'order_id'=>$order->id, 'content'=> '修改订单收货信息原收货信息:'.$oldOrderConsignee, ]); } /** * 创建订单发货单 * * @return void */ public function createPackage(Order $order, array $params) { //合并同样商品,并检验是否能发货 $packageProducts = []; if (count($params['packages']) <= 0) { throw new BizException('请选择发货商品'); } foreach ($params['packages'] as $item) { if ($item['quantity'] < 1) { throw new BizException('发货数量不能小于1'); } if (isset($packageProducts[$item['order_product_id']])) { $packageProducts[$item['order_product_id']]['quantity'] += $item['quantity']; } else { $packageProducts[$item['order_product_id']] = [ 'order_product_id'=> $item['order_product_id'], 'quantity' =>$item['quantity'], ]; } } foreach ($packageProducts as $product) { $_orderProduct = OrderProduct::where('after_sale_state', '<>', 1) ->where('remain_quantity', '>=', $product['quantity']) ->find($product['order_product_id']); if (is_null($_orderProduct)) { throw new BizException('发货数量不能大于剩余数量'); } $_orderProduct->decrement('remain_quantity', $product['quantity']); } //创建发货单数据 $package = new OrderPackage(); $package->order_id = $order->id; $package->consignee_name = $order->consignee_name; $package->consignee_telephone = $order->consignee_telephone; $package->consignee_zone = $order->consignee_zone; $package->consignee_address = $order->consignee_address; $package->shipping_company = $params['shipping_company']; $package->shipping_code = Arr::get(Kuaidi100Service::$codeArr, $package->shipping_company, ''); $package->shipping_number = $params['shipping_number']; //保存发货单 $package->save(); //保存发货单商品 OrderPackageProduct::insert(array_map(function ($value) use ($package) { return array_merge($value, [ 'order_package_id' => $package->id, 'created_at' => $package->created_at, 'updated_at' => $package->created_at, ]); }, $packageProducts)); if (config('settings.kuaidi100_is_use')) { $kuaidi100Service = new Kuaidi100Service(); $kuaidi100Service->poll($package->shipping_number, $package->shipping_code, $package->consignee_telephone); } //更新订单状态 if (!OrderProduct::where('order_id', $order->id)->where('remain_quantity', '>', 0)->exists()) { $order->update([ 'shipping_state'=>Order::SHIPPING_STATE_PROCESSED, ]); } elseif ($order->shipping_state == Order::SHIPPING_STATE_PENDING) { $order->update([ 'shipping_state'=>Order::SHIPPING_STATE_PROCESSING, ]); } } }