CutterOrderService.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. namespace app\extra\service\cutter;
  3. use app\extra\basic\Service;
  4. use app\extra\dao\cutter\CutterOrderDao;
  5. use app\extra\service\user\UserBrokerageService;
  6. use app\extra\service\user\UserService;
  7. use app\model\cutter\CutterOrder;
  8. use app\model\cutter\CutterTask;
  9. use think\exception\ValidateException;
  10. class CutterOrderService extends Service
  11. {
  12. protected $task;
  13. /**
  14. * 设置模型
  15. * @return string
  16. */
  17. public function __construct()
  18. {
  19. $this->dao = new CutterOrderDao();
  20. }
  21. public function createOrder(int $id,array $user)
  22. {
  23. return $this->transaction(function () use ($id, $user) {
  24. $cutterTaskService = new CutterTaskService();
  25. $take = $cutterTaskService->getOne(["id"=>$id,'status'=>1,'is_del'=>0]);
  26. if ($take->isEmpty()) throw new ValidateException('任务异常');
  27. $order = $this->dao->getOne(["task_id"=>$take['id'],'uid'=>$user['uid']]);
  28. if (!$order->isEmpty()) throw new ValidateException("同一个任务仅限领取一次");
  29. if(strtotime($take['end_time']) > time()){
  30. throw new ValidateException("该任务已到截止期,无法领取");
  31. }
  32. return $this->dao->save(['uid'=>$user['uid'],'task_id'=>$id]);
  33. });
  34. }
  35. public function submit(array $data,array $user)
  36. {
  37. $id = $data['id']??0;
  38. $order = $this->dao->getOne(["id"=>$id,'uid'=>$user['uid']]);
  39. if ($order->isEmpty()) throw new ValidateException('参数异常');
  40. $cutterTaskService = new CutterTaskService();
  41. $take = $cutterTaskService->getOne(["id"=>$order['task_id'],'status'=>1,'is_del'=>0]);
  42. if ($take->isEmpty()) throw new ValidateException('任务异常');
  43. if(strtotime($take['end_time']) > time()){
  44. throw new ValidateException("该任务已到截止期");
  45. }
  46. if(in_array($order['status'],['-1','0'])){
  47. return $this->dao->update($order['id'],['audit_url'=>$data['url'],'status'=>1]);
  48. }
  49. if($order['status'] == 2){
  50. return $this->dao->update($order['id'],['finish_url'=>$data['url'],'status'=>3]);
  51. }
  52. }
  53. protected function searchFilter(array $param = []): array
  54. {
  55. $filter = [];
  56. !empty($param['uid']) && $filter[] = ["uid", '=', $param['uid']];
  57. isset($param['status']) && $param['status'] != '' && $filter[] = ["status", '=', $param['status']];
  58. return $filter;
  59. }
  60. /**
  61. * 列表
  62. * @param array $param
  63. */
  64. public function getList(array $param = [],string $field = '*', int $page = 0,int $limit = 0,string $order = 'id desc')
  65. {
  66. $list = $this->dao->getList($this->searchFilter($param),$field,$page,$limit,$order);
  67. $count = $this->dao->count($this->searchFilter($param));
  68. return compact('list','count');
  69. }
  70. /**
  71. * 列表
  72. * @param array $param
  73. */
  74. public function getLst(array $param = [],string $field = '*', int $page = 0,int $limit = 0,string $order = 'id desc')
  75. {
  76. $list = $this->dao->getLst($this->searchFilter($param),$field,$page,$limit,$order);
  77. $count = $this->dao->count($this->searchFilter($param));
  78. return compact('list','count');
  79. }
  80. /**
  81. * @param array $param
  82. */
  83. public function getOrder(array $param = [],string $field = '*')
  84. {
  85. return $this->dao->getOrder($param,$field);
  86. }
  87. public function affirm(int $id)
  88. {
  89. $order = $this->dao->getOne(["id"=>$id]);
  90. if($order->isEmpty()) throw new ValidateException('参数异常');
  91. if($order['status'] != 1) throw new ValidateException('订单状态异常');
  92. return $this->dao->update($id,['status'=>2]);
  93. }
  94. public function reject(int $id,string $remark)
  95. {
  96. $order = $this->dao->getOne(["id"=>$id]);
  97. if($order->isEmpty()) throw new ValidateException('参数异常');
  98. if($order['status'] != 1) throw new ValidateException('订单状态异常');
  99. return $this->dao->update($id,['status'=>-1,'remark'=>$remark]);
  100. }
  101. public function settle(int $id)
  102. {
  103. $order = $this->dao->getOne(["id"=>$id]);
  104. if($order->isEmpty()) throw new ValidateException('参数异常');
  105. if($order['status'] != 3) throw new ValidateException('订单状态异常');
  106. $userService = new UserService();
  107. $user = $userService->getOne(['uid'=>$order['uid']]);
  108. $cutterTaskService = new CutterTaskService();
  109. $task = $cutterTaskService->getOne(['id'=>$order['task_id']]);
  110. return $this->transaction(function () use ($id,$task, $user, $userService) {
  111. if (!$res = $this->dao->update($id,['status'=>4])) {
  112. throw new ValidateException('结算失败');
  113. }
  114. if (!$userService->incField(['uid'=>$user['uid']], 'brokerage_price', $task['price'])) {
  115. throw new ValidateException('修改用户信息失败');
  116. }
  117. $balance = bcsub((string)$user['brokerage_price'], (string)$data['price'], 2) ?? 0;
  118. //保存佣金记录
  119. $userBrokerageServices = new UserBrokerageService();
  120. $mark = '订单结算成功,获得' . $task['price'] . '元'."佣金";
  121. $userBrokerageServices->income('order_settle', $user['uid'], ['mark' => $mark, 'number' => $task['price']], $balance, $res['id']);
  122. return true;
  123. });
  124. }
  125. }