| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- <?php
- namespace app\extra\service\cutter;
- use app\extra\basic\Service;
- use app\extra\dao\cutter\CutterOrderDao;
- use app\extra\service\user\UserBillService;
- use app\extra\service\user\UserBrokerageService;
- use app\extra\service\user\UserLevelService;
- use app\extra\service\user\UserService;
- use app\model\cutter\CutterOrder;
- use app\model\cutter\CutterTask;
- use think\exception\ValidateException;
- class CutterOrderService extends Service
- {
- protected $task;
- /**
- * 设置模型
- * @return string
- */
- public function __construct()
- {
- $this->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;
- });
- }
- }
|