diff --git a/app/Controller/UserPatientController.php b/app/Controller/UserPatientController.php index 3ed2f2a..58f05a0 100644 --- a/app/Controller/UserPatientController.php +++ b/app/Controller/UserPatientController.php @@ -78,18 +78,18 @@ class UserPatientController extends AbstractController } /** - * 添加购物车药品数据 + * 修改购物车药品数据 * @return ResponseInterface * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ - public function addShoppingCart(): ResponseInterface + public function putShoppingCart(): ResponseInterface { $request = $this->container->get(UserPatientRequest::class); - $request->scene('addShoppingCart')->validateResolved(); + $request->scene('putShoppingCart')->validateResolved(); $UserPatientService = new UserPatientService(); - $data = $UserPatientService->addShoppingCart(); + $data = $UserPatientService->putShoppingCart(); return $this->response->json($data); } diff --git a/app/Request/UserPatientRequest.php b/app/Request/UserPatientRequest.php index 07095d3..e78464a 100644 --- a/app/Request/UserPatientRequest.php +++ b/app/Request/UserPatientRequest.php @@ -13,8 +13,9 @@ class UserPatientRequest extends FormRequest 'getPatientCouponlist' => [ // 获取患者优惠卷列表 'user_coupon_status', ], - 'addShoppingCart' => [ // 添加购物车药品数据 + 'putShoppingCart' => [ // 修改购物车药品数据 'product_id', + 'shopping_cart_num', ], ]; @@ -32,8 +33,9 @@ class UserPatientRequest extends FormRequest public function rules(): array { return [ - 'user_coupon_status' => 'required|integer|min:0|max:2', + 'user_coupon_status' => 'required|numeric|min:0|max:2', 'product_id' => 'required', + 'shopping_cart_num' => 'required|numeric|min:0|max:999', ]; } @@ -44,10 +46,15 @@ class UserPatientRequest extends FormRequest { return [ 'user_coupon_status.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), - 'user_coupon_status.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'user_coupon_status.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'user_coupon_status.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'user_coupon_status.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'product_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + + 'shopping_cart_num.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'shopping_cart_num.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'shopping_cart_num.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'shopping_cart_num.max' => "请勿超出最大添加数量", ]; } } diff --git a/app/Services/BasicDataService.php b/app/Services/BasicDataService.php index cf371de..4bfea91 100644 --- a/app/Services/BasicDataService.php +++ b/app/Services/BasicDataService.php @@ -12,6 +12,7 @@ use App\Model\Hospital; use App\Model\HospitalDepartmentCustom; use App\Model\OperationManual; use App\Model\Product; +use Hyperf\Redis\Redis; /** * 基础数据服务类 @@ -210,6 +211,8 @@ class BasicDataService extends BaseService */ public function getProductSearch(): array { + $user_info = $this->request->getAttribute("userInfo") ?? []; + $product_keyword = $this->request->input('product_keyword'); $fields = [ @@ -234,6 +237,15 @@ class BasicDataService extends BaseService return success(); } + // 获取购物车缓存数据 + $redis = $this->container->get(Redis::class); + + $redis_key = "shopping_cart" . $user_info['client_user_id']; + $shopping_cart = $redis->get($redis_key); + if (!empty($shopping_cart)){ + $shopping_cart = json_decode($shopping_cart,true); + } + foreach ($product as &$item) { $item['product_cover_img'] = addAliyunOssWebsite($item['product_cover_img']); @@ -244,6 +256,16 @@ class BasicDataService extends BaseService } unset($item['ProductPlatformAmount']); + + // 处理购物车商品数据 + $item['shopping_cart_num'] = 0; + if (!empty($shopping_cart)){ + foreach ($shopping_cart as $value){ + if ($item['product_id'] == $value['product_id']){ + $item['shopping_cart_num'] = $value['shopping_cart_num']; + } + } + } } return success($product->toArray()); diff --git a/app/Services/PatientFamilyService.php b/app/Services/PatientFamilyService.php index 9a3add0..4b7213f 100644 --- a/app/Services/PatientFamilyService.php +++ b/app/Services/PatientFamilyService.php @@ -878,6 +878,7 @@ class PatientFamilyService extends BaseService 'order_inquiry_id', 'order_prescription_id', 'family_id', + 'created_at', ]; $result = OrderProduct::getProductRecordPage($params,$fields,$page,$per_page); diff --git a/app/Services/UserPatientService.php b/app/Services/UserPatientService.php index 5e0bd27..e7ce713 100644 --- a/app/Services/UserPatientService.php +++ b/app/Services/UserPatientService.php @@ -7,6 +7,7 @@ use App\Model\Coupon; use App\Model\OrderInquiry; use App\Model\PatientHistoryInquiry; use App\Model\Product; +use App\Model\ProductPlatformAmount; use App\Model\User; use App\Model\UserCoupon; use App\Model\UserPatient; @@ -222,32 +223,118 @@ class UserPatientService extends BaseService $shopping_cart = json_decode($shopping_cart,true); - return success($shopping_cart); + if (empty($shopping_cart)){ + return success(); + } + + $data = array(); + foreach ($shopping_cart as $item){ + // 获取商品数据 + $params =array(); + $params['product_id'] = $item['product_id']; + $product = Product::getOne($params); + if (empty($product)){ + continue; + } + + $item['product_cover_img'] = addAliyunOssWebsite($product['product_cover_img']); + $item['product_price'] = $product['product_price']; + + $data[] = $item; + } + + return success($data); } /** - * 添加购物车药品数据 + * 修改购物车药品数据 * @return array */ - public function addShoppingCart(): array + public function putShoppingCart(): array { $user_info = $this->request->getAttribute("userInfo") ?? []; + $product_id = $this->request->input("product_id"); + $shopping_cart_num = $this->request->input("shopping_cart_num"); - $product_id = $this->request->route('product_id'); +// if ($shopping_cart_num > 0){ +// // 验证商品数据 +// $params =array(); +// $params['product_id'] = $product_id; +// $product = Product::getOne($params); +// if (empty($product)){ +// return fail(); +// } +// // 获取商品库存 +// $params =array(); +// $params['product_platform_id'] = $product['product_platform_id']; +// $product_platform_amount = ProductPlatformAmount::getOne($params); +// if ($product_platform_amount['stock'] <= 0){ +// return fail(HttpEnumCode::HTTP_ERROR,"商品库存不足"); +// } +// } -// $redis = $this->container->get(Redis::class); + // 读取缓存数据 + $redis = $this->container->get(Redis::class); + $redis_key = "shopping_cart" . $user_info['client_user_id']; - // 验证商品数据 - $params =array(); - $params['product_id'] = $product_id; - $product = Product::getOne($params); - if (empty($product)){ - return fail(); + $shopping_cart = $redis->get($redis_key); + if (!empty($shopping_cart)){ + $shopping_cart = json_decode($shopping_cart,true); } - // 获取商品库存 + // 处理缓存数据为空的情况 + if (empty($shopping_cart)){ + if ($shopping_cart_num > 0){ + // 处理存储数据 + $data = array(); + $data['product_id'] = $product_id; + $data['shopping_cart_num'] = $shopping_cart_num; + $res = $redis->set($redis_key,json_encode([$data],JSON_UNESCAPED_UNICODE)); + if (!$res){ + return fail(HttpEnumCode::SERVER_ERROR); + } + } + return success(); + } + $product_ids = array_column($shopping_cart,'product_id'); + if (in_array($product_id,$product_ids)){ + // 商品存在于购物车缓存中 + foreach ($shopping_cart as $key => $value){ + if ($value['product_id'] == $product_id){ + if ($shopping_cart_num <= 0){ + // 商品存在于购物车缓存中,此数据表示删除 + unset($shopping_cart[$key]); + }else{ + $shopping_cart[$key]['shopping_cart_num'] = $shopping_cart_num; + } + } + } + }else{ + // 商品未存在于购物车缓存中。 + $data = array(); + $data['product_id'] = $product_id; + $data['shopping_cart_num'] = $shopping_cart_num; + + array_unshift($shopping_cart,$data); + } + + if (!empty($shopping_cart)){ + // 重置数组排列 + array_values($shopping_cart); + + // 添加到缓存中 + $res = $redis->set($redis_key,json_encode($shopping_cart,JSON_UNESCAPED_UNICODE)); + if (!$res){ + return fail(HttpEnumCode::SERVER_ERROR); + } + }else{ + $res = $redis->del($redis_key); + if (!$res){ + return fail(HttpEnumCode::SERVER_ERROR); + } + } return success(); } diff --git a/config/routes.php b/config/routes.php index 6bba77d..9875733 100644 --- a/config/routes.php +++ b/config/routes.php @@ -313,9 +313,6 @@ Router::addGroup('/patient', function () { // 获取购物车药品数据 Router::get('/cart', [UserPatientController::class, 'getShoppingCart']); - // 添加购物车药品数据 - Router::post('/cart', [UserPatientController::class, 'addShoppingCart']); - // 修改购物车药品数据 Router::put('/cart', [UserPatientController::class, 'putShoppingCart']); });