Smart Uber 的核心

v1.0.0 2017-05-07 16:35 UTC

This package is not auto-updated.

Last update: 2024-09-20 20:10:59 UTC


README

假设我们有一个客户,他想买一块铁,他会去五金店买这块铁,然后五金店会告诉仓库拿一些铁,或者五金店可以去找供应商,如果铁缺货

我们这里有四个部门

分支 => 假设这是客户,就像有人在找一块铁

公司 => 这个部门将帮助客户更容易地找到他们想要的,就像五金店的老板

供应商 => 这与仓库人员类似,他们可以提供客户想要的商品,如果铁缺货,他们会寻找其他仓库,我们也可以称之为铁供应商

成员 => 这是客户想要的东西

这个包的主要目的是让我们更容易寻求支援,比如找出租车、工人、铁等。这个包将帮助我们更容易地整合公司和供应商部门。

安装

使用 composer 安装最新版本:


$ composer require smart-uber/core

接下来,将您的新供应商添加到 config/app.php 中的 providers 数组中


'providers' => [

// ...
SmartUber\Core\Providers\CoreServiceProvider::class,
// ...
],

别忘了发布我们的配置,在终端中输入 php artisan vendor:publish --tag=core-config 命令

现在您可以在您的应用程序中开始使用 Smart uber 了。

用法

分支

在分支部门,您想开立采购单并告诉公司您需要支援,使用 openRequest 方法


$company = new Company();
$branch = new Branch();

您需要先将分支与公司关联起来


$branch->company()->associate($company);
$requisition = $branch->openRequest('Branch Requisition', 'This is my first requisition', '2017-03-13', '2017-03-20');

第一个参数是主题,第二个参数是描述,第三个参数是开始日期,第四个参数是结束日期

公司

分支开立采购单后,公司可以使用 postRequest 方法从分支发布采购单

发布采购单时,公司将根据公司的总供应商自动生成 providerRequisition 模型。

在此之前,如果您没有任何 provider 模型的实例,我们需要创建一些供应商并将其与公司关联


$company = new Company();
$provider = new Provider();
$user = new User();
$provider->company()->associate($company);
$provider->user()->associate($user);
$company->save();
$provider->save();
$user->save();    
$requisition = $company->postRequest($requisition, '2017-03-21', '50.000', '100.000', RateType::HOURLY); // posting the branches requisition

第二个参数是招聘日期,第三个参数是最低价格,第四个参数是最高价格,第五个参数是费率类型。您还可以设置费率类型,例如 HOURLY(按小时)、WEEKLY(每周)、MONTHLY(每月)。

如果您不想使用分支的采购单,您可以在公司模型中使用 openRequest 方法打开自己的采购单


$company->openRequest($branch, 'Company Requisition', 'This is my first requisition', '2017-03-13', '2017-03-20');

Company 需要一个 Branch 模型来开立采购单,并且 Company 还可以使用 closeRequest 方法关闭采购单


$company->closeRequest($requisition);

公司发布采购单并重新发布给供应商后,当然会有申请人,申请人也可以被公司接受或拒绝。然后我们可以使用 acceptApplicantrejectApplicant 方法,参数将接收一个 Applicant 模型的实例

供应商

在供应商模型中,我们有两种不同的供应商,例如外部供应商和内部供应商。外部供应商如公司拥有的供应商,而内部供应商不是公司拥有的

我们还可以检查供应商是否是内部供应商,我们可以使用 isInternal 方法


$provider->isInternal(); // return boolean

然后,在该公司发布需求后,供应商将收到一份公司需求报价,供应商可以选择接受或拒绝,您可以使用acceptCompanyRequisitionrejectCompanyRequisition,您也可以使用cancelCompanyRequisition方法取消需求。

分支提出需求后,公司将通过通知供应商来帮助他们。

假设一个供应商有许多成员,供应商是出租车经理,成员是出租车司机,所以在这里,出租车经理将告诉成员公司需要增援,如果成员感兴趣,他们将接受需求,所以我们将使用openTender方法。

在此之前,如果您还没有成员模型的实例,我们需要创建一个成员并将其与供应商关联。


$member = new Member();
$user = new User();
$member->provider()->associate($provider);
$member->save();
$tender = $provider->openTender($requisition, RateType::HOURLY, 100.000, RateType::HOURLY); //Return tender

Provider需要Requisition模型的实例来开设投标,第二个参数是费率类型,第三个参数是加价价格,第四个参数是加价费率类型。费率类型和加价费率类型是类似的东西,您也可以将其设置为WEEKLYMONTHLY

供应商也可以关闭和取消投标,我们可以使用cancelTendercloseTender方法,我们刚才提到公司可以接受和拒绝申请,供应商也可以这样做,但在这里,供应商需要在公司筛选申请之前筛选申请人。

我们可以使用acceptApplicantrejectApplicant,参数将接收申请人模型的实例。

默认情况下,全局配置供应商auto_accept设置为false,如果您不希望供应商逐个接受或拒绝申请,可以将它设置为true,现在当申请人到来时,供应商总是自动接受。

成员

所以刚才我们讨论的成员是可以提供增援的人,成员将看到所有发布的投标,但如果成员对投标感兴趣,他们也可以使用applyTender方法申请投标。


$applicants = $member->applyTender($tender); // return Applicant model

这将生成一个Applicant模型。

成员也可以取消申请,我们可以使用cancelApplication方法,但有时您需要从上次申请投标时获取申请人,我们可以使用applicant方法。


$member->applicant($tender); // return applicant model

配置

配置被设计得尽可能灵活。您可以设置所有Eloquent模型的默认值,然后为单个模型覆盖这些设置。

默认情况下,全局配置可以在app/config/core_config.php文件中设置。这里是一个配置示例,显示了所有默认设置。


return [
    'payment'          => SmartUber\Core\Payment::class,
    'match_maker'       => SmartUber\Core\MatchMaker::class,
    'auto_accept'          => false,
    'auto_push_notification'       => false
];

支付

当然,并非所有项目都有相同的支付系统,一些项目需要不同的支付系统,基本上这个包使用全局支付,如果您想覆盖为自己的支付系统,您可以在Config/core_config.php的支付属性中覆盖配置。

如何调用支付方法?

我们可以使用公司模型中的makePayment方法。


$company->makePayment();

这将根据您的配置调用您的支付系统。

match_maker

有时我们不想让所有投标都可以被成员看到,也不想让所有成员都可以看到投标,也不希望所有成员都应该收到通知,默认情况下,我们有一个全局的match_maker模型通知所有成员。

我们可以通过特定方式通知某些成员,例如,供应商只想通知所有性别为男性的成员。因为匹配标准有很多,您也可以尝试使用您的match_maker模型单独覆盖我们的全局match_maker。

auto_accept

有时我们不想逐个接受所有成员,默认配置中自动接受设置为false,我们可以将其设置为true,提供商将始终自动接受所有成员,而无需逐个接受。

自动推送通知

当你发布招标时,你需要通知所有成员,公司有一个需求。如果此选项设置为true,我们不需要手动将通知推送给成员,或者如果设置为false,你可能需要使用pushNotification方法手动通知所有成员。


$provider->pushNotification($tender);// Will notify to all member were owned by this provider