dao = new CutterOrderDao(); } public function createOrder(int $id,array $user) { return $this->transaction(function () use ($id, $user) { $cutterTaskService = new CutterTaskService(); $take = $cutterTaskService->getOne(["id"=>$id,'status'=>1,'is_del'=>0]); if(!$cutterTaskService->decField([['id','=',$id],['total','>',1]],'total',1)){ throw new ValidateException('该任务已被领取完了,可以关注一下其它任务哦'); } if ($take->isEmpty()) throw new ValidateException('任务异常'); $userLevelService = new UserLevelService(); $grade = $userLevelService->value(['id'=>$user['level']],'grade'); if($take['grade'] > $grade){ throw new ValidateException("该任务需求更高等级,无法领取"); } $order = $this->dao->getOne(["task_id"=>$take['id'],'uid'=>$user['uid']]); if (!$order->isEmpty()) throw new ValidateException("同一个任务仅限领取一次"); if(strtotime($take['end_time']) > time()){ throw new ValidateException("该任务已到截止期,无法领取"); } return $this->dao->save(['uid'=>$user['uid'],'task_id'=>$id]); }); } public function submit(array $data,array $user) { $id = $data['id']??0; $order = $this->dao->getOne(["id"=>$id,'uid'=>$user['uid']]); if ($order->isEmpty()) throw new ValidateException('参数异常'); $cutterTaskService = new CutterTaskService(); $take = $cutterTaskService->getOne(["id"=>$order['task_id'],'status'=>1,'is_del'=>0]); if ($take->isEmpty()) throw new ValidateException('任务异常'); if(strtotime($take['end_time']) > time()){ throw new ValidateException("该任务已到截止期"); } if(in_array($order['status'],['-1','0'])){ return $this->dao->update($order['id'],['audit_url'=>$data['url'],'status'=>1]); } if($order['status'] == 2){ return $this->dao->update($order['id'],['finish_url'=>$data['url'],'status'=>3]); } } protected function searchFilter(array $param = []): array { $filter = []; !empty($param['uid']) && $filter[] = ["uid", '=', $param['uid']]; isset($param['status']) && $param['status'] != '' && $filter[] = ["status", '=', $param['status']]; return $filter; } /** * 列表 * @param array $param */ public function getList(array $param = [],string $field = '*', int $page = 0,int $limit = 0,string $order = 'id desc') { $list = $this->dao->getList($this->searchFilter($param),$field,$page,$limit,$order); $count = $this->dao->count($this->searchFilter($param)); return compact('list','count'); } /** * 列表 * @param array $param */ public function getLst(array $param = [],string $field = '*', int $page = 0,int $limit = 0,string $order = 'id desc') { $list = $this->dao->getLst($this->searchFilter($param),$field,$page,$limit,$order); $count = $this->dao->count($this->searchFilter($param)); return compact('list','count'); } /** * @param array $param */ public function getOrder(array $param = [],string $field = '*') { return $this->dao->getOrder($param,$field); } public function affirm(int $id) { $order = $this->dao->getOne(["id"=>$id]); if($order->isEmpty()) throw new ValidateException('参数异常'); if($order['status'] != 1) throw new ValidateException('订单状态异常'); return $this->dao->update($id,['status'=>2]); } public function reject(int $id,string $remark) { $order = $this->dao->getOne(["id"=>$id]); if($order->isEmpty()) throw new ValidateException('参数异常'); if($order['status'] != 1) throw new ValidateException('订单状态异常'); return $this->dao->update($id,['status'=>-1,'remark'=>$remark]); } public function settle(int $id) { $order = $this->dao->getOne(["id"=>$id]); if($order->isEmpty()) throw new ValidateException('参数异常'); if($order['status'] != 3) throw new ValidateException('订单状态异常'); $userService = new UserService(); $user = $userService->getOne(['uid'=>$order['uid']]); $cutterTaskService = new CutterTaskService(); $task = $cutterTaskService->getOne(['id'=>$order['task_id']]); return $this->transaction(function () use ($id,$task, $user, $userService) { if (!$res = $this->dao->update($id,['status'=>4])) { throw new ValidateException('结算失败'); } if (!$userService->incField(['uid'=>$user['uid']], 'brokerage_price', $task['price'])) { throw new ValidateException('修改用户信息失败'); } $balance = bcadd((string)$user['brokerage_price'], (string)$task['price'], 2) ?? 0; //保存佣金记录 $userBrokerageServices = new UserBrokerageService(); $mark = '订单结算成功,获得' . $task['price'] . '元'."佣金"; $userBrokerageServices->income('order_settle', $user['uid'], ['mark' => $mark, 'number' => $task['price']], $balance, $id); $userBillService = new UserBillService(); $userBillService->incomeExp($user['uid'],$task['exp'],'订单结算成功','订单结算成功,增加经验值'.$task['exp'],$id); return true; }); } }