From dfc2c35374749b7cea9c4c24915990300d4312d0 Mon Sep 17 00:00:00 2001 From: wanghousheng Date: Wed, 31 Jan 2024 01:31:21 +0800 Subject: [PATCH] 1 --- app/api/controller/Recovery.php | 236 +++++++++++++++++++++++++ app/api/model/RecoveryImage.php | 32 ++++ app/api/model/RecoveryOrder.php | 103 +++++++++++ app/common/enum/RecoveryStatusEnum.php | 39 ++++ app/common/enum/RecoveryTypeEnum.php | 38 ++++ app/common/model/RecoveryImage.php | 48 +++++ app/common/model/RecoveryOrder.php | 67 +++++++ 7 files changed, 563 insertions(+) create mode 100644 app/api/controller/Recovery.php create mode 100644 app/api/model/RecoveryImage.php create mode 100644 app/api/model/RecoveryOrder.php create mode 100644 app/common/enum/RecoveryStatusEnum.php create mode 100644 app/common/enum/RecoveryTypeEnum.php create mode 100644 app/common/model/RecoveryImage.php create mode 100644 app/common/model/RecoveryOrder.php diff --git a/app/api/controller/Recovery.php b/app/api/controller/Recovery.php new file mode 100644 index 00000000..17460e36 --- /dev/null +++ b/app/api/controller/Recovery.php @@ -0,0 +1,236 @@ +request->post('order_status')); + if ($order_status) { + $where['order_status'] = $order_status; + } + $model = new RecoveryOrder(); + $list = $model->getUserList($where); + return $this->renderSuccess(compact('list')); + } + + /** + * @notes:订单状态 + * @return Json + * @author: wanghousheng + */ + public function orderStatus(): Json + { + $list = array_values(RecoveryStatusEnum::data()); + return $this->renderSuccess(compact('list')); + } + + /** + * @notes:获取详情 + * @return Json|void + * @throws BaseException + * @author: wanghousheng + */ + public function detail() + { + $recoveryId = intval($this->request->post('recovery_id')); + if (!$recoveryId) { + return $this->renderError('缺少必要参数'); + } + $model = new RecoveryOrder(); + $model->getDetails($recoveryId); + } + + /** + * @notes:新增记录 + * @return Json + * @throws BaseException + * @author: wanghousheng + */ + public function add(): Json + { + $imageIds = $this->request->post('image_ids'); + if ($imageIds && !is_array($imageIds)) { + $imageIds = explode(',', $imageIds); + } + $shop_id = intval($this->request->post('shop_id')); + if (!$shop_id) { + return $this->renderError('门店不能为空'); + } + $recovery_type_arr = array_values(RecoveryStatusEnum::data()); + $recovery_type_arr = array_column($recovery_type_arr, 'value'); + $recovery_type = intval($this->request->post('recovery_type')); + if (!in_array($recovery_type, $recovery_type_arr)) { + return $this->renderError('回收方式错误'); + } + $username = $this->request->post('username'); + if (!$username) { + return $this->renderError('姓名不能为空'); + } + $server_time = $this->request->post('server_time'); + if (!$server_time || !strtotime($server_time)) { + return $this->renderError('服务时间不合法'); + } + $mobile = $this->request->post('mobile'); + if (!$mobile || !preg_match("/1[3457896]\d{9}$/", $mobile)) { + return $this->renderError('手机号不正确'); + } + $expect_price = $this->request->post('expect_price'); + if (!$expect_price || helper::number2($expect_price) <= 0) { + return $this->renderError('期待价格不能为空'); + } + $sex = intval($this->request->post('sex', 1)); + $remake = $this->request->post('remake'); + $brand = $this->request->post('brand'); + if (!$brand) { + return $this->renderError('品牌不能为空'); + } + $model = $this->request->post('model'); + if (!$model) { + return $this->renderError('型号不能为空'); + } + $wx_account = $this->request->post('wx_account'); + $house_number = $this->request->post('house_number'); + $shipping_address = $this->request->post('shipping_address'); + //邮寄回收 + if ($recovery_type == RecoveryTypeEnum::MAIL || $recovery_type == RecoveryTypeEnum::DOOR) { + if (!$shipping_address) { + return $this->renderError('联系地址不能为空'); + } + if (!$house_number) { + return $this->renderError('门牌号不能为空'); + } + } + $shipping_address .= $house_number; + $express_id = intval($this->request->post('express_id')); + $express_no = $this->request->post('express_no'); + $data = [ + 'express_id' => $express_id, + 'express_no' => $express_no, + 'shipping_address' => $shipping_address, + 'wx_account' => $wx_account, + 'model' => $model, + 'brand' => $brand, + 'remake' => $remake, + 'sex' => $sex, + 'expect_price' => $expect_price, + 'mobile' => $mobile, + 'server_time' => $server_time, + 'username' => $username, + 'recovery_type' => $recovery_type, + 'shop_id' => $shop_id, + ]; + $model = new RecoveryOrder(); + if ($model->add($data, $imageIds)) { + return $this->renderSuccess('提交成功'); + } + return $this->renderError('提交失败'); + } + + /** + * @notes:更新 + * @return Json + * @author: wanghousheng + */ + public function update(): Json + { + $recovery_id = intval($this->request->post('recovery_id')); + if (!$recovery_id) { + return $this->renderError('缺少必要参数'); + } + $imageIds = $this->request->post('image_ids'); + if ($imageIds && !is_array($imageIds)) { + $imageIds = explode(',', $imageIds); + } + $shop_id = intval($this->request->post('shop_id')); + if (!$shop_id) { + return $this->renderError('门店不能为空'); + } + $recovery_type_arr = array_values(RecoveryStatusEnum::data()); + $recovery_type_arr = array_column($recovery_type_arr, 'value'); + $recovery_type = intval($this->request->post('recovery_type')); + if (!in_array($recovery_type, $recovery_type_arr)) { + return $this->renderError('回收方式错误'); + } + $username = $this->request->post('username'); + if (!$username) { + return $this->renderError('姓名不能为空'); + } + $server_time = $this->request->post('server_time'); + if (!$server_time || !strtotime($server_time)) { + return $this->renderError('服务时间不合法'); + } + $mobile = $this->request->post('mobile'); + if (!$mobile || !preg_match("/1[3457896]\d{9}$/", $mobile)) { + return $this->renderError('手机号不正确'); + } + $expect_price = $this->request->post('expect_price'); + if (!$expect_price || helper::number2($expect_price) <= 0) { + return $this->renderError('期待价格不能为空'); + } + $sex = intval($this->request->post('sex', 1)); + $remake = $this->request->post('remake'); + $brand = $this->request->post('brand'); + if (!$brand) { + return $this->renderError('品牌不能为空'); + } + $model = $this->request->post('model'); + if (!$model) { + return $this->renderError('型号不能为空'); + } + $wx_account = $this->request->post('wx_account'); + $house_number = $this->request->post('house_number'); + $shipping_address = $this->request->post('shipping_address'); + //邮寄回收 + if ($recovery_type == RecoveryTypeEnum::MAIL) { + if (!$shipping_address) { + return $this->renderError('发货地址不能为空'); + } + if (!$house_number) { + return $this->renderError('门牌号不能为空'); + } + } + $shipping_address .= $house_number; + $express_id = intval($this->request->post('express_id')); + $express_no = $this->request->post('express_no'); + $data = [ + 'express_id' => $express_id, + 'express_no' => $express_no, + 'shipping_address' => $shipping_address, + 'wx_account' => $wx_account, + 'model' => $model, + 'brand' => $brand, + 'remake' => $remake, + 'sex' => $sex, + 'expect_price' => $expect_price, + 'mobile' => $mobile, + 'server_time' => $server_time, + 'username' => $username, + 'recovery_type' => $recovery_type, + 'shop_id' => $shop_id, + ]; + $model = new RecoveryOrder(); + if ($model->edit($data, $recovery_id, $imageIds)) { + return $this->renderSuccess('操作成功'); + } + return $this->renderError('操作失败'); + } +} \ No newline at end of file diff --git a/app/api/model/RecoveryImage.php b/app/api/model/RecoveryImage.php new file mode 100644 index 00000000..75d17f28 --- /dev/null +++ b/app/api/model/RecoveryImage.php @@ -0,0 +1,32 @@ + $recoveryId]); + // 批量写入商品图片记录 + return static::increased($recoveryId, $imageIds); + } +} \ No newline at end of file diff --git a/app/api/model/RecoveryOrder.php b/app/api/model/RecoveryOrder.php new file mode 100644 index 00000000..fc818034 --- /dev/null +++ b/app/api/model/RecoveryOrder.php @@ -0,0 +1,103 @@ + $userId]); + } + //分销商工程师 + return $this->where($where) + ->where($where) + ->order(['create_time' => 'desc']) + ->paginate($listRows); + } + + /** + * @notes:订单详情 + * @param int $recoveryId + * @return BaseRecoveryOrder|array|null + * @throws BaseException + * @author: wanghousheng + */ + public function getDetails(int $recoveryId) + { + $where['recovery_id'] = $recoveryId; + $where['user_id'] = UserService::getCurrentLoginUserId(); + return static::detail($where, ['images.file']); + } + + /** + * @notes:添加记录 + * @param array $data + * @param array $imageIds + * @return bool + * @throws BaseException + * @author: wanghousheng + */ + public function add(array $data, array $imageIds = []): bool + { + $data['order_no'] = OrderService::createOrderNo(); + $data['user_id'] = UserService::getCurrentLoginUserId(); + $data['store_id'] = self::$storeId; + $data['create_time'] = time(); + $data['update_time'] = $data['create_time']; + $insertId = $this->insertGetId($data); + if ($insertId) { + if ($imageIds) { + RecoveryImage::increased($insertId, $imageIds); + } + return true; + } + return false; + } + + /** + * @notes:更新 + * @param array $data + * @param int $recoveryId + * @param array $imageIds + * @return bool + * @author: wanghousheng + */ + public function edit(array $data, int $recoveryId, array $imageIds = []): bool + { + if ($this->where(['recovery_id' => $recoveryId])->save($data)) { + if ($imageIds) { + RecoveryImage::updates($recoveryId, $imageIds); + } + return true; + } + return false; + } +} \ No newline at end of file diff --git a/app/common/enum/RecoveryStatusEnum.php b/app/common/enum/RecoveryStatusEnum.php new file mode 100644 index 00000000..9ed1eccf --- /dev/null +++ b/app/common/enum/RecoveryStatusEnum.php @@ -0,0 +1,39 @@ + [ + 'name' => '待验收', + 'value' => self::ACCEPTED, + ], + self::ALREADY => [ + 'name' => '已验收', + 'value' => self::ALREADY, + ], + self::CANCEL => [ + 'name' => '已取消', + 'value' => self::CANCEL, + ], + ]; + } + +} \ No newline at end of file diff --git a/app/common/enum/RecoveryTypeEnum.php b/app/common/enum/RecoveryTypeEnum.php new file mode 100644 index 00000000..23a13dbb --- /dev/null +++ b/app/common/enum/RecoveryTypeEnum.php @@ -0,0 +1,38 @@ + [ + 'name' => '待验收', + 'value' => self::DOOR, + ], + self::SHOP => [ + 'name' => '已验收', + 'value' => self::SHOP, + ], + self::MAIL => [ + 'name' => '已取消', + 'value' => self::MAIL, + ], + ]; + } +} \ No newline at end of file diff --git a/app/common/model/RecoveryImage.php b/app/common/model/RecoveryImage.php new file mode 100644 index 00000000..3bef1370 --- /dev/null +++ b/app/common/model/RecoveryImage.php @@ -0,0 +1,48 @@ +belongsTo('UploadFile', 'image_id', 'file_id'); + } + + /** + * @notes:批量插入回收图片记录 + * @param int $recoveryId 回收ID + * @param array $imageIds 图片ID集 + * @return array|false + * @author: wanghousheng + */ + public static function increased(int $recoveryId, array $imageIds) + { + $dataset = []; + foreach ($imageIds as $imageId) { + $dataset[] = [ + 'image_id' => $imageId, + 'recovery_id' => $recoveryId, + 'store_id' => self::$storeId + ]; + } + return (new static)->addAll($dataset); + } +} \ No newline at end of file diff --git a/app/common/model/RecoveryOrder.php b/app/common/model/RecoveryOrder.php new file mode 100644 index 00000000..7dd287f2 --- /dev/null +++ b/app/common/model/RecoveryOrder.php @@ -0,0 +1,67 @@ +hasMany('RecoveryImage')->order(['id']); + } + + public function getOrderStatusTextAttr($value, $data) + { + $result = RecoveryStatusEnum::data(); + if (!empty($result[$data['order_status']]['name'])) { + return $result[$data['order_status']]['name']; + } + return '未知'; + } + + public function getRecoveryTypeTextAttr($value, $data) + { + $result = RecoveryTypeEnum::data(); + if (!empty($result[$data['recovery_type']]['name'])) { + return $result[$data['recovery_type']]['name']; + } + return '未知'; + } + + /** + * @notes:详情 + * @param $where + * @param array $with + * @return RecoveryOrder|array|null + * @author: wanghousheng + */ + public static function detail($where, array $with = []) + { + return static::get($where, $with); + } + +} \ No newline at end of file