1
0

AddServiceWorkJob.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace app\job;
  3. use think\facade\Db;
  4. use think\queue\Job;
  5. use think\facade\Log;
  6. use app\common\enum\WorkEnum;
  7. use app\common\model\equity\UserEquity;
  8. use app\common\model\works\ServiceWork;
  9. use app\common\model\equity\UserEquityLog;
  10. use app\common\model\group_activity\GroupUserOrder;
  11. class AddServiceWorkJob
  12. {
  13. public function fire(Job $job, $data)
  14. {
  15. try {
  16. Log::info('执行队列任务:'.json_encode($data));
  17. //查询拼团用户订单
  18. $userOrder = GroupUserOrder::alias('a')->leftJoin('user b','a.user_id=b.id')
  19. ->where('group_order_id', $data['id'])
  20. ->where('pay_status', 1)
  21. ->where('refund_status', 0)
  22. ->field('a.*,b.mobile')
  23. ->select()
  24. ->toArray();
  25. try {
  26. Db::startTrans();
  27. foreach ($userOrder as $k => $item) {
  28. if (empty($goods)) {
  29. $goods = UserEquity::alias('a')->leftJoin('goods b','a.goods_id=b.id')
  30. ->where('a.id', $item['user_equity_id'])
  31. ->field('b.goods_name,b.category_type,b.goods_category_ids,b.goods_category_id,b.base_service_fee')
  32. ->find();
  33. }
  34. //生成服务工单
  35. $work_data = [
  36. 'work_sn' => generate_sn(ServiceWork::class, 'work_sn'),
  37. 'real_name' => '',
  38. 'mobile' => $item['mobile'],
  39. 'address' => $item['area'].$item['address'],
  40. 'province' => 0,
  41. 'city' => 0,
  42. 'area_name' => '',
  43. 'title' => $goods['goods_name'],
  44. 'category_type' => $goods['category_type'],
  45. 'goods_category_ids' => $goods['goods_category_ids'],
  46. 'goods_category_id' => $goods['goods_category_id'],
  47. 'base_service_fee' => $goods['base_service_fee'],
  48. 'service_fee' => $item['paid_amount'],
  49. 'work_pay_status'=>WorkEnum::IS_PAY_STATUS,
  50. 'appointment_time' => time(),
  51. 'user_id'=>$item['user_id'],
  52. 'lon'=>'',
  53. 'lat'=>'',
  54. 'property_activity_id'=>0,
  55. 'user_equity_id'=>0,
  56. 'third_type'=>1,
  57. 'work_total'=>$item['paid_amount'],
  58. 'work_amount'=>$item['paid_amount'],
  59. 'work_status' => 5,
  60. 'user_confirm_status' => 3,
  61. 'service_status' => 1,
  62. 'master_worker_id' => 7,
  63. 'remark' => '拼团单:'.$item['id'],
  64. 'user_equity_id' => $item['user_equity_id'],
  65. 'group_order_id' => $item['id'],
  66. ];
  67. ServiceWork::create($work_data);
  68. UserEquityLog::create([
  69. 'user_id' => $item['user_id'],
  70. 'number' => 1,
  71. 'user_equity_id' => $item['user_equity_id'],
  72. 'create_time' => time(),
  73. ]);
  74. }
  75. Db::commit();
  76. } catch (\Exception $e) {
  77. Db::rollback();
  78. Log::error('执行队列任务失败:'.$e->getMessage());
  79. }
  80. // 任务执行成功,删除任务
  81. $job->delete();
  82. } catch (\Exception $e) {
  83. // 任务执行失败,重试任务
  84. if ($job->attempts() > 3) {
  85. // 超过最大重试次数,删除任务
  86. $job->delete();
  87. } else {
  88. $job->release(10); // 10 秒后重试
  89. }
  90. }
  91. }
  92. }