AddServiceWorkJob.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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\orders\RechargeOrder;
  11. use app\common\model\group_activity\GroupOrder;
  12. use app\common\model\group_activity\GroupUserOrder;
  13. class AddServiceWorkJob
  14. {
  15. public function fire(Job $job, $data)
  16. {
  17. $group_order_id = $data['id'];//拼团订单ID
  18. $goods = [];
  19. try {
  20. //查询拼团用户订单
  21. $userOrder = GroupUserOrder::alias('a')->leftJoin('user b','a.user_id=b.id')
  22. ->where('group_order_id', $group_order_id)
  23. ->where('pay_status', 1)
  24. ->where('refund_status', 0)
  25. ->field('a.*,b.mobile')
  26. ->select()
  27. ->toArray();
  28. if (empty($userOrder)) {
  29. return true;
  30. }
  31. Db::startTrans();
  32. foreach ($userOrder as $k => $item) {
  33. if (empty($goods)) {
  34. $goods = UserEquity::alias('a')->leftJoin('goods b','a.goods_id=b.id')
  35. ->where('a.id', $item['user_equity_id'])
  36. ->field('a.number,b.goods_name,b.category_type,b.goods_category_ids,b.goods_category_id,b.base_service_fee')
  37. ->findOrEmpty()
  38. ->toArray();
  39. }
  40. //生成服务工单
  41. $work_data = [
  42. 'work_sn' => generate_sn(ServiceWork::class, 'work_sn'),
  43. 'real_name' => '',
  44. 'mobile' => $item['mobile'],
  45. 'address' => $item['area'].$item['address'],
  46. 'province' => 0,
  47. 'city' => 0,
  48. 'area_name' => '',
  49. 'title' => $goods['goods_name'],
  50. 'category_type' => $goods['category_type'],
  51. 'goods_category_ids' => $goods['goods_category_ids'],
  52. 'goods_category_id' => $goods['goods_category_id'],
  53. 'base_service_fee' => $goods['base_service_fee'],
  54. 'service_fee' => $item['paid_amount'],
  55. 'work_pay_status'=>WorkEnum::IS_PAY_STATUS,
  56. 'appointment_time' => time(),
  57. 'dispatch_time' => time(),
  58. 'receive_time' => time(),
  59. 'user_id'=>$item['user_id'],
  60. 'lon'=>'',
  61. 'lat'=>'',
  62. 'property_activity_id'=>0,
  63. 'user_equity_id'=>0,
  64. 'third_type'=>1,
  65. 'work_total'=>$item['paid_amount'],
  66. 'work_status' => 5,
  67. 'user_confirm_status' => 3,
  68. 'service_status' => 1,
  69. 'master_worker_id' => 7,
  70. 'remark' => '拼团单:'.$item['id'],
  71. 'user_equity_id' => $item['user_equity_id'],
  72. 'group_order_id' => $item['id'],
  73. 'third_type' => 0,
  74. ];
  75. $service_work = ServiceWork::create($work_data);
  76. //生成客户订单
  77. $data = [
  78. 'work_id'=> $service_work['id'],
  79. 'sn' => generate_sn(RechargeOrder::class, 'sn'),
  80. 'order_type'=>0,//服务订单
  81. 'order_terminal' => $item['order_terminal'],
  82. 'user_id' => $item['user_id'],
  83. 'pay_status' => $item['pay_status'],
  84. 'pay_way' => $item['pay_way'],
  85. 'order_total' => 0,
  86. 'order_amount' => 0,
  87. ];
  88. $order = RechargeOrder::create($data);
  89. //更新用户的权益卡剩余次数
  90. UserEquity::where('id', $item['user_equity_id'])->update(['number' => 0, 'update_time' => time()]);
  91. //记录用户的权益卡使用记录
  92. UserEquityLog::create([
  93. 'user_id' => $item['user_id'],
  94. 'number' => $goods['number'],
  95. 'user_equity_id' => $item['user_equity_id'],
  96. 'create_time' => time(),
  97. ]);
  98. }
  99. GroupOrder::where('id', $group_order_id)->update(['work_status' => 2]);
  100. Db::commit();
  101. // 任务执行完毕后删除任务
  102. $job->delete();
  103. return true;
  104. } catch (\Exception $e) {
  105. Db::rollback();
  106. Log::write("拼团订单批量生成服务工单异常:".$e->getMessage());
  107. // 任务执行失败,重试任务
  108. if ($job->attempts() > 3) {
  109. // 超过最大重试次数,删除任务
  110. $job->delete();
  111. } else {
  112. $job->release(10); // 10 秒后重试
  113. }
  114. return false;
  115. }
  116. }
  117. }