|
|
@@ -14,20 +14,16 @@ namespace app\api\model\book;
|
|
|
|
|
|
use app\api\model\School;
|
|
|
use app\api\model\SchoolSpeciality;
|
|
|
-use app\api\model\Setting as SettingModel;
|
|
|
use app\api\model\SpecialityBook;
|
|
|
use app\api\model\User;
|
|
|
use app\api\service\User as UserService;
|
|
|
-use app\common\library\helper;
|
|
|
use app\common\library\wechat\WxPay;
|
|
|
use app\common\model\book\Order as OrderModel;
|
|
|
use app\common\model\wxapp\Setting as WxappSettingModel;
|
|
|
use app\common\service\Order as OrderService;
|
|
|
-use app\api\service\book\PaySuccess as OrderPaySuccesService;
|
|
|
-use app\api\service\Order\source\Factory as OrderSourceFactory;
|
|
|
use app\common\enum\book\order\PayStatus as PayStatusEnum;
|
|
|
-use app\common\enum\book\order\PayType as OrderPayTypeEnum;
|
|
|
use app\common\exception\BaseException;
|
|
|
+use think\model\relation\HasOne;
|
|
|
|
|
|
/**
|
|
|
* 用户报名订单模型
|
|
|
@@ -49,20 +45,61 @@ class Order extends OrderModel
|
|
|
];
|
|
|
|
|
|
/**
|
|
|
+ * 关联学校
|
|
|
+ * @return HasOne
|
|
|
+ */
|
|
|
+ public function school(): HasOne
|
|
|
+ {
|
|
|
+ return $this->HasOne('app\\common\\model\\School','id','school_id')
|
|
|
+ ->field('school_name,logo')
|
|
|
+ ->bind(['school_name as book_school_name']);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 关联学校
|
|
|
+ * @return HasOne
|
|
|
+ */
|
|
|
+ public function speciality(): HasOne
|
|
|
+ {
|
|
|
+ return $this->HasOne('app\\common\\model\\SchoolSpeciality','speciality_id','speciality_id')
|
|
|
+ ->bind(['speciality_name']);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 获取订单列表
|
|
|
* @return \think\Paginator
|
|
|
* @throws BaseException
|
|
|
* @throws \think\db\exception\DbException
|
|
|
*/
|
|
|
- public function getList()
|
|
|
+ public function getList($params=[], $listRows=15)
|
|
|
{
|
|
|
// 当前用户ID
|
|
|
$userId = UserService::getCurrentLoginUserId();
|
|
|
// 获取列表数据
|
|
|
- return $this->where('user_id', '=', $userId)
|
|
|
+ $list = $this->with(['school','speciality'])->where('book_user_id', '=', $userId)
|
|
|
->where('status', '>=', PayStatusEnum::PENDING)
|
|
|
+ ->where(function ($query) use($params){
|
|
|
+ // 用户订单
|
|
|
+ $userId = isset($params['book_user_id'])? $params['book_user_id'] : 0;
|
|
|
+ if($userId>0){
|
|
|
+ $query->where('book_user_id','=', $userId);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 老师订单
|
|
|
+ $teacherId = isset($params['user_id'])? $params['user_id'] : 0;
|
|
|
+ if($teacherId>0){
|
|
|
+ $query->where('user_id','=', $teacherId);
|
|
|
+ }
|
|
|
+
|
|
|
+ $status = isset($params['status'])? $params['status'] : 0;
|
|
|
+ if($status>0 || $status == -2){
|
|
|
+ $query->where('status','=', $status);
|
|
|
+ }
|
|
|
+ })
|
|
|
->order(['create_time' => 'desc'])
|
|
|
- ->paginate(15);
|
|
|
+ ->paginate($listRows);
|
|
|
+ $list->hidden(['fields','']);
|
|
|
+ return $list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -234,6 +271,90 @@ class Order extends OrderModel
|
|
|
return $this->save($order);
|
|
|
}
|
|
|
|
|
|
+ public function modifyOrder($orderId, $params=[])
|
|
|
+ {
|
|
|
+ if(empty($orderId)){
|
|
|
+ $this->error = '订单参数错误';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $modifyType = isset($params['type'])? $params['type'] : 0;
|
|
|
+ if(!in_array($modifyType, [1,2])){
|
|
|
+ $this->error = '订单修改类型错误';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $model = self::detail($orderId);
|
|
|
+ if(empty($model)){
|
|
|
+ $this->error = '订单不存在';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $data = ['update_time'=> time()];
|
|
|
+ if($modifyType == 1){
|
|
|
+ if(!in_array($model['status'],[1,2,3])){
|
|
|
+ $this->error = '订单状态不可操作';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $receiptName = isset($params['receipt_name'])? $params['receipt_name'] : '';
|
|
|
+ if(empty($receiptName)){
|
|
|
+ $this->error = '请填写收货人姓名';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $receiptMobile = isset($params['receipt_mobile'])? $params['receipt_mobile'] : '';
|
|
|
+ if(empty($receiptMobile)){
|
|
|
+ $this->error = '请填写收货人联系电话';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $receiptAddress = isset($params['receipt_address'])? $params['receipt_address'] : '';
|
|
|
+ if(empty($receiptAddress)){
|
|
|
+ $this->error = '请填写收货人地址';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $data = [
|
|
|
+ 'receipt_name'=> $receiptName,
|
|
|
+ 'receipt_mobile'=> $receiptMobile,
|
|
|
+ 'receipt_address'=> $receiptAddress,
|
|
|
+ ];
|
|
|
+ }else if ($modifyType == 2){
|
|
|
+ if(!in_array($model['status'],[1,2,3])){
|
|
|
+ $this->error = '订单状态不可操作';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $specialityId = isset($params['speciality_id'])? intval(['speciality_id']) : 0;
|
|
|
+ if(empty($specialityId)){
|
|
|
+ $this->error = '请选择修改的专业';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 专业参数验证
|
|
|
+ $speciality = SchoolSpeciality::detail($specialityId);
|
|
|
+ if(empty($speciality)){
|
|
|
+ $this->error = '报名专业不存在';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if($speciality['school_id'] != $model['school_id']){
|
|
|
+ $this->error = '报名专业和学校不匹配';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 报名人数验证
|
|
|
+ $bookNum = SpecialityBook::getBooks($specialityId);
|
|
|
+ $remainBookNum = max(0, $speciality['recruit_num'] - $bookNum);
|
|
|
+ if($remainBookNum <= 0){
|
|
|
+ $this->error = '该专业报名人数已满';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $data = [
|
|
|
+ 'speciality_id' => $specialityId
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ return $model->save($data);
|
|
|
+ }
|
|
|
/**
|
|
|
* 验证支付订单
|
|
|
* @param $order
|
|
|
@@ -246,6 +367,7 @@ class Order extends OrderModel
|
|
|
{
|
|
|
$orderId = isset($order['order_id'])? $order['order_id'] : 0;
|
|
|
if($orderId<=0){
|
|
|
+ $this->error = '订单参数错误';
|
|
|
return false;
|
|
|
}
|
|
|
$orderStatus = isset($order['status'])? $order['status'] : 0;
|
|
|
@@ -329,6 +451,42 @@ class Order extends OrderModel
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 取消订单
|
|
|
+ * @param $orderId
|
|
|
+ * @param string $remark
|
|
|
+ * @return bool
|
|
|
+ * @throws BaseException
|
|
|
+ * @throws \cores\exception\BaseException
|
|
|
+ * @throws \think\db\exception\DataNotFoundException
|
|
|
+ * @throws \think\db\exception\DbException
|
|
|
+ * @throws \think\db\exception\ModelNotFoundException
|
|
|
+ */
|
|
|
+ public function cancelOrder($orderId, $remark='')
|
|
|
+ {
|
|
|
+ if(empty($orderId)){
|
|
|
+ $this->error = '订单参数错误';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $model = new Order();
|
|
|
+ $model = $model::getUserOrderDetail($orderId);
|
|
|
+ if(!$model){
|
|
|
+ $this->error = '报名订单不存在';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // 订单所属老师才何以设置
|
|
|
+ $userInfo = UserService::getCurrentLoginUser(true);
|
|
|
+ if($userInfo['user_id'] != $model['book_user_id']){
|
|
|
+ $this->error = '订单无权操作';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(!in_array($model['status'], [1,2])){
|
|
|
+ $this->error = '订单状态不可操作';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $model->save(['status'=> -1,'update_time'=> time(),'remark'=> $remark]);
|
|
|
+ }
|
|
|
+ /**
|
|
|
* 订单发货设置
|
|
|
* @param int $orderId 订单ID
|
|
|
* @param $params 发货参数:快递公司ID、快递公司名称、快递单号
|
|
|
@@ -372,6 +530,10 @@ class Order extends OrderModel
|
|
|
$this->error = '订单无权操作';
|
|
|
return false;
|
|
|
}
|
|
|
+ if(in_array($model['status'], [1,2])){
|
|
|
+ $this->error = '订单未支付';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
if($model['status'] != 3){
|
|
|
$this->error = '订单已发货或状态不可操作';
|
|
|
return false;
|
|
|
@@ -450,7 +612,12 @@ class Order extends OrderModel
|
|
|
$this->error = '订单无权操作';
|
|
|
return false;
|
|
|
}
|
|
|
- if($model['refund_status'] != 1 || $model['status'] <=1){
|
|
|
+ if(in_array($model['status'], [1,2])){
|
|
|
+ $this->error = '订单未支付';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if($model['refund_status'] != 1 || !in_array($model['status'], [3,4])){
|
|
|
$this->error = '订单设置为可退款或状态不可操作';
|
|
|
return false;
|
|
|
}
|
|
|
@@ -492,7 +659,13 @@ class Order extends OrderModel
|
|
|
$this->error = '订单无权操作';
|
|
|
return false;
|
|
|
}
|
|
|
- if($model['refund_status'] != 2 || $model['status'] <=1){
|
|
|
+
|
|
|
+ if(in_array($model['status'], [1,2])){
|
|
|
+ $this->error = '订单未支付';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if($model['refund_status'] != 2 || !in_array($model['status'], [3,4])){
|
|
|
$this->error = '订单已申请退款或状态不可操作';
|
|
|
return false;
|
|
|
}
|
|
|
@@ -535,8 +708,17 @@ class Order extends OrderModel
|
|
|
$this->error = '订单无权操作';
|
|
|
return false;
|
|
|
}
|
|
|
+ if($model['status'] == -2){
|
|
|
+ $this->error = '订单已退款';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(in_array($model['status'], [1,2])){
|
|
|
+ $this->error = '订单未支付';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
- if($model['refund_status'] != 3 || $model['status'] <= 0){
|
|
|
+ if($model['refund_status'] != 3 || !in_array($model['status'], [3,4])){
|
|
|
$this->error = '订单已退款或状态不可操作';
|
|
|
return false;
|
|
|
}
|