From 747e37fc8673bf5ed3a2bb5deda8a94f77254764 Mon Sep 17 00:00:00 2001 From: ctexthuang Date: Fri, 14 Mar 2025 10:05:12 +0800 Subject: [PATCH] feat : catering --- app/Cache/Redis/Admin/AdminRedisKey.php | 11 +++++ app/Controller/Admin/CateringController.php | 38 ++++++++++++++++- app/Model/Caterer.php | 37 +++++++++++++++++ app/Model/Site.php | 15 +++++++ app/Model/Spu.php | 3 +- .../Admin/Catering/CateringBaseService.php | 15 ++++++- .../CateringService.php} | 8 ++-- .../Admin/Catering/Meal/CheckService.php | 41 +++++++++++++++++++ .../Admin/Catering/Meal/CycleListService.php | 28 ++++++++----- app/Service/Admin/User/EmployeeService.php | 4 ++ .../ServiceTrait/Admin/RoleMembersTrait.php | 28 +++++++++++++ 11 files changed, 210 insertions(+), 18 deletions(-) create mode 100644 app/Model/Caterer.php rename app/Service/Admin/Catering/{CycleOrderCountService.php => Meal/CateringService.php} (55%) create mode 100644 app/Service/Admin/Catering/Meal/CheckService.php diff --git a/app/Cache/Redis/Admin/AdminRedisKey.php b/app/Cache/Redis/Admin/AdminRedisKey.php index 782817d..c655f00 100644 --- a/app/Cache/Redis/Admin/AdminRedisKey.php +++ b/app/Cache/Redis/Admin/AdminRedisKey.php @@ -95,6 +95,17 @@ class AdminRedisKey return 'catering:option:is:cycle_id:'.$cycleId; } + /** + * 套餐配餐点位顺序 + * @param int $cycleId + * @param int $kitchenId + * @return string + */ + public static function mealSiteOrderByKitchenId(int $cycleId,int $kitchenId): string + { + return 'meal:site:order:cycle_id:'.$cycleId.':kitchen_id:'.$kitchenId; + } + /** * @return string */ diff --git a/app/Controller/Admin/CateringController.php b/app/Controller/Admin/CateringController.php index 22b26c3..d38cc3f 100644 --- a/app/Controller/Admin/CateringController.php +++ b/app/Controller/Admin/CateringController.php @@ -5,9 +5,11 @@ declare(strict_types=1); namespace App\Controller\Admin; use App\Middleware\Admin\JwtAuthMiddleware; -use App\Service\Admin\Catering\Meal\CycleListService as MealCycleListService; +use App\Service\Admin\Catering\Meal\CheckService; use App\Service\Admin\Catering\Option\CompleteListService; use App\Service\Admin\Catering\Option\CompletePrintService; +use App\Service\Admin\Catering\Meal\CycleListService as MealCycleListService; +use APP\Service\Admin\Catering\Meal\CateringService as MealCateringService; use App\Service\Admin\Catering\Option\CycleListService as OptionCycleListService; use App\Service\Admin\Catering\Option\CateringService as OptionCateringService; use App\Service\Admin\Catering\Option\PrintService; @@ -24,6 +26,12 @@ use Psr\Container\NotFoundExceptionInterface; ])] class CateringController { + /** + * 套餐周期配餐列表 + * @return array + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ #[RequestMapping(path: "meal/cycle_list", methods: "GET")] #[Scene(scene: "meal_cycle_list")] public function getMealCycleList() @@ -31,6 +39,12 @@ class CateringController return (new MealCycleListService)->handle(); } + /** + * 自选周期配餐列表 + * @return array + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ #[RequestMapping(path: "option/cycle_list", methods: "GET")] #[Scene(scene: "option_cycle_list")] public function getOptionCycleList() @@ -38,6 +52,10 @@ class CateringController return(new OptionCycleListService)->handle(); } + /** + * 套餐剩余数量 + * @return array + */ #[RequestMapping(path: "meal/remain_count", methods: "GET")] #[Scene(scene: "meal_remain_count")] public function remainMealCateringCount() @@ -45,6 +63,10 @@ class CateringController return (new MealCycleListService)->remainCount(); } + /** + * 自选剩余数量 + * @return array + */ #[RequestMapping(path: "option/remain_count", methods: "GET")] #[Scene(scene: "option_remain_count")] public function remainOptionCateringCount() @@ -52,14 +74,28 @@ class CateringController return (new OptionCycleListService)->remainCount(); } + /** + * @return array + */ + #[RequestMapping(path: "meal/spu_list", methods: "GET")] + #[Scene(scene: "meal_spu_list")] public function getMealGoodsList() { return (new MealCycleListService)->skuList(); } + #[RequestMapping(path: "meal/catering", methods: "GET")] + #[Scene(scene: "meal_catering")] public function mealCatering() { + return (new MealCateringService)->handle(); + } + #[RequestMapping(path: "meal/catering/finish_check", methods: "GET")] + #[Scene(scene: "meal_catering_finish_check")] + public function mealFinishCheck() + { + return (new CheckService)->handle(); } /** diff --git a/app/Model/Caterer.php b/app/Model/Caterer.php new file mode 100644 index 0000000..a21ebc2 --- /dev/null +++ b/app/Model/Caterer.php @@ -0,0 +1,37 @@ + 'integer', 'user_id' => 'integer', 'type' => 'integer', 'kitchen_id' => 'integer']; + + const string CREATED_AT = 'create_time'; + const string UPDATED_AT = 'update_time'; +} diff --git a/app/Model/Site.php b/app/Model/Site.php index 2d2ef99..f82028c 100644 --- a/app/Model/Site.php +++ b/app/Model/Site.php @@ -111,4 +111,19 @@ class Site extends Model return $res->toArray(); } + + /** + * @param int $kitchenId + * @return Builder[]|Collection + */ + public function getListByKitchenId(int $kitchenId): Collection|array + { + return $this + ->where('kitchen_id',$kitchenId) + ->where('is_del',SiteCode::SITE_NO_DEL) + ->where('status',SiteCode::SITE_ENABLE) + ->orderBy('sequence') + ->select(['name','id','delivered_id','sequence']) + ->get(); + } } diff --git a/app/Model/Spu.php b/app/Model/Spu.php index 92f9602..77eb3fd 100644 --- a/app/Model/Spu.php +++ b/app/Model/Spu.php @@ -15,6 +15,7 @@ use Hyperf\DbConnection\Model\Model; * @property int $city_id * @property int $kitchen_id * @property int $chef_id + * @property int $caterer_id * @property string $title * @property string $sub_title * @property int $category_id @@ -42,7 +43,7 @@ class Spu extends Model /** * The attributes that should be cast to native types. */ - protected array $casts = ['id' => 'integer', 'cycle_id' => 'integer', 'city_id' => 'integer', 'kitchen_id' => 'integer','chef_id' => 'integer', 'category_id' => 'integer', 'saleable' => 'integer','type' => 'integer','sort' => 'integer']; + protected array $casts = ['id' => 'integer', 'cycle_id' => 'integer', 'city_id' => 'integer', 'kitchen_id' => 'integer','chef_id' => 'integer','caterer_id' => 'integer','category_id' => 'integer', 'saleable' => 'integer','type' => 'integer','sort' => 'integer']; const string CREATED_AT = 'create_time'; const string UPDATED_AT = 'update_time'; diff --git a/app/Service/Admin/Catering/CateringBaseService.php b/app/Service/Admin/Catering/CateringBaseService.php index 754e8f3..a7a1a59 100644 --- a/app/Service/Admin/Catering/CateringBaseService.php +++ b/app/Service/Admin/Catering/CateringBaseService.php @@ -15,6 +15,7 @@ use App\Cache\Redis\Common\ConfigCache; use App\Constants\Common\RoleCode; use App\Exception\ErrException; use App\Model\AdminUser; +use App\Model\Caterer; use App\Model\DriverSequence; use App\Model\Site; use App\Model\Sku; @@ -76,6 +77,12 @@ abstract class CateringBaseService extends BaseService #[Inject] protected AdminUser $adminUserModel; + /** + * @var Caterer + */ + #[Inject] + protected Caterer $catererModel; + /** * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface @@ -118,10 +125,14 @@ abstract class CateringBaseService extends BaseService $this->cycleId = (int)$cycleId; } + /** + * @return void + */ private function getKitchenId(): void { - //todo 自选配餐员工要绑定厨房 套餐配餐员工要绑定每日套餐 - $this->kitchenId = 1; + $caterInfo = $this->catererModel->where('user_id',$this->adminId)->first(); + if (empty($caterInfo) || empty($caterInfo->kitchen_id)) throw new ErrException('账号异常/该账号没有绑定厨房'); + $this->kitchenId = $caterInfo->kitchen_id; } /** diff --git a/app/Service/Admin/Catering/CycleOrderCountService.php b/app/Service/Admin/Catering/Meal/CateringService.php similarity index 55% rename from app/Service/Admin/Catering/CycleOrderCountService.php rename to app/Service/Admin/Catering/Meal/CateringService.php index 706c302..c0dcd71 100644 --- a/app/Service/Admin/Catering/CycleOrderCountService.php +++ b/app/Service/Admin/Catering/Meal/CateringService.php @@ -8,12 +8,14 @@ declare(strict_types=1); -namespace App\Service\Admin\Catering; +namespace App\Service\Admin\Catering\Meal; -class CycleOrderCountService extends +use App\Service\Admin\Catering\CateringBaseService; + +class CateringService extends CateringBaseService { public function handle() { - //todo Write logic + } } \ No newline at end of file diff --git a/app/Service/Admin/Catering/Meal/CheckService.php b/app/Service/Admin/Catering/Meal/CheckService.php new file mode 100644 index 0000000..4e9cd63 --- /dev/null +++ b/app/Service/Admin/Catering/Meal/CheckService.php @@ -0,0 +1,41 @@ +logInfo = $this->orderMealCateringLog->find($this->request->input('id')); + + + } +} \ No newline at end of file diff --git a/app/Service/Admin/Catering/Meal/CycleListService.php b/app/Service/Admin/Catering/Meal/CycleListService.php index a613e46..bf3b6d3 100644 --- a/app/Service/Admin/Catering/Meal/CycleListService.php +++ b/app/Service/Admin/Catering/Meal/CycleListService.php @@ -13,6 +13,7 @@ namespace App\Service\Admin\Catering\Meal; use App\Exception\ErrException; use App\Model\OrderMealCateringLog; use App\Model\Sku; +use App\Model\Spu; use App\Service\Admin\Catering\CateringBaseService; use Hyperf\Di\Annotation\Inject; use Psr\Container\ContainerExceptionInterface; @@ -70,20 +71,25 @@ class CycleListService extends CateringBaseService return $this->return->success('success',['count' => $count]); } + /** + * @var Spu + */ + #[Inject] + protected Spu $spuModel; + public function skuList() { - $res = [ - [ - 'id' => 1, - 'name' => 'spu_name' - ], - [ - 'id' => 2, - 'name' => 'spu2_name' - ] - ]; + $spuList = $this->spuModel->where('caterer_id',$this->adminId)->select(['title','sub_title','id as spu_id'])->get(); + if (empty($skuList)) return $this->return->success('success',['list' => []]); + $spuList = $spuList->toArray(); - return $this->return->success('success',$res); + $skuList = $this->skuModel->where('spu_id',array_column($spuList,'spu_id'))->pluck('id','spu_id'); + + foreach ($spuList as &$v) { + $v['sku_id'] = $skuList[$v['spu_id']] ?? 0; + } + + return $this->return->success('success',['list' => $spuList]); } } \ No newline at end of file diff --git a/app/Service/Admin/User/EmployeeService.php b/app/Service/Admin/User/EmployeeService.php index 3011cbf..0a0ff70 100644 --- a/app/Service/Admin/User/EmployeeService.php +++ b/app/Service/Admin/User/EmployeeService.php @@ -113,6 +113,7 @@ class EmployeeService extends BaseService RoleCode::DRIVER => $this->addDriver($model->id,$model->chinese_name), RoleCode::CHEF => $this->addChef($model->id), RoleCode::WAREHOUSE => $this->addWarehouseKeeper($model->id), + RoleCode::OPTION_CATERING, RoleCode::MEAL_CATERING => $this->addCaterer($model->id,$model->role_id), default => true, }; @@ -148,6 +149,7 @@ class EmployeeService extends BaseService RoleCode::DRIVER => $this->delDriver($info->id), RoleCode::CHEF => $this->delChef($info->id), RoleCode::WAREHOUSE => $this->delWarehouseKeeper($info->id), + RoleCode::OPTION_CATERING, RoleCode::MEAL_CATERING => $this->delCaterer($info->id), default => true, }; @@ -155,6 +157,7 @@ class EmployeeService extends BaseService RoleCode::DRIVER => $this->addDriver($info->id,$info->chinese_name), RoleCode::CHEF => $this->addChef($info->id), RoleCode::WAREHOUSE => $this->addWarehouseKeeper($info->id), + RoleCode::OPTION_CATERING, RoleCode::MEAL_CATERING => $this->addCaterer($info->id,$roleId), default => true, }; @@ -195,6 +198,7 @@ class EmployeeService extends BaseService RoleCode::DRIVER => $this->delDriver($info->id), RoleCode::CHEF => $this->delChef($info->id), RoleCode::WAREHOUSE => $this->delWarehouseKeeper($info->id), + RoleCode::OPTION_CATERING, RoleCode::MEAL_CATERING => $this->delCaterer($info->id), default => true, }; diff --git a/app/Service/ServiceTrait/Admin/RoleMembersTrait.php b/app/Service/ServiceTrait/Admin/RoleMembersTrait.php index 9d2e06b..887ca5a 100644 --- a/app/Service/ServiceTrait/Admin/RoleMembersTrait.php +++ b/app/Service/ServiceTrait/Admin/RoleMembersTrait.php @@ -2,6 +2,7 @@ namespace App\Service\ServiceTrait\Admin; +use App\Model\Caterer; use App\Model\Chef; use App\Model\DriverSequence; use App\Model\WarehouseKeeper; @@ -27,6 +28,12 @@ trait RoleMembersTrait #[Inject] protected WarehouseKeeper $warehouseKeeperModel; + /** + * @var Caterer + */ + #[Inject] + protected Caterer $catererModel; + /** * @param int $id * @param string $name @@ -64,6 +71,19 @@ trait RoleMembersTrait return $warehouseKeeper->save(); } + /** + * @param int $id + * @param int $type + * @return bool + */ + protected function addCaterer(int $id,int $type) + { + $caterer = new Caterer(); + $caterer->user_id = $id; + $caterer->type = $type; + return $caterer->save(); + } + /** * @param int $id * @return bool @@ -93,4 +113,12 @@ trait RoleMembersTrait return $this->warehouseKeeperModel->where('user_id', $id)->delete(); } + /** + * @param $id + * @return bool + */ + protected function delCaterer($id): bool + { + return $this->catererModel->where('user_id', $id)->delete(); + } } \ No newline at end of file