SystemMiddleOpenBox.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. /**
  3. * 会员订单相关队列
  4. */
  5. namespace jobs;
  6. use app\common\model\BoxMidHandleModel;
  7. use app\common\model\ShopGoodsModel;
  8. use app\common\model\ShopOrderModel;
  9. use app\common\model\YgOrderModel;
  10. use think\facade\Db;
  11. use utils\Queue;
  12. class SystemMiddleOpenBox extends BaseJob
  13. {
  14. protected $model = null;
  15. public function __construct (BoxMidHandleModel $model)
  16. {
  17. $this->model = $model;
  18. }
  19. public function SystemHandleBox ()
  20. {
  21. Db::startTrans();
  22. try {
  23. $this->recordBoxAppointToMiddle();
  24. Db::commit();
  25. }catch (\Exception $e){
  26. Db::rollback();
  27. Db::name('failed_jobs')->save(['connection'=>'redis', 'queue'=>'aa', 'payload'=>'aa', 'failed_at'=>sr_getcurtime(time()), 'attempts'=>2, 'exception'=>$e->getMessage()]);
  28. return false;
  29. }
  30. $redis = new \think\cache\driver\Redis();
  31. $redis->connect('127.0.0.1', 6379);
  32. $redis->set('has_handle_mapping',0);
  33. return true;
  34. }
  35. protected function recordBoxAppointToMiddle($input, $output){
  36. $list = Db::name('box_record')->where('status', 1)->select()->toArray();
  37. $mid_arrs = [];
  38. $r_ids = [];
  39. $cur_time = sr_getcurtime(time());
  40. foreach ($list as $key=>$val){
  41. $total_goodsbox = $val['box10'] + $val['box20'] + $val['box30'] + $val['box40'];
  42. $r_goodsids = '';
  43. // 如果有空盒
  44. if ($val['num'] > $total_goodsbox){
  45. for ($i=0;$i < $val['num']-$total_goodsbox;$i++){
  46. $mid_arrs[] = [
  47. 'h_sn'=>createdHandleOrderSn(),
  48. 'uid'=>$val['uid'],
  49. 'rid'=>$val['id'],
  50. 'goods_id'=>0,
  51. 'create_time'=>$cur_time,
  52. 'box_type'=>0,
  53. 'goods_price'=>0,
  54. 'pay_type'=>$val['pay_type']
  55. ];
  56. }
  57. }
  58. // if (1 == 1){
  59. // sr_throw();
  60. // }
  61. // 其他盒子
  62. $box_arrs = [10, 20, 30, 40];
  63. foreach ($box_arrs as $key1=>$val1){
  64. $key_string = strval('box'.$val1);
  65. $box_goodsnum = $val[$key_string];
  66. $model = new ShopGoodsModel();
  67. $goods_arr = $model
  68. ->where('box_type', $val1)
  69. ->where('goods_type', 2)
  70. ->field('goods_id,box_type,goods_img,price,goods_name')
  71. ->page(1, 20)
  72. ->select();
  73. // ->select();
  74. // sr_throw(json_encode($goods_arr));
  75. if ($box_goodsnum > 0){
  76. // 如果后期要调整 取值 直接 排序 goods_arr
  77. for ($i = 0; $i < $box_goodsnum;$i++){
  78. $rand_num = mt_rand(0, count($goods_arr)-1);
  79. $goods = $goods_arr[$rand_num];
  80. $mid_arrs[] = [
  81. 'h_sn'=>createdHandleOrderSn(),
  82. 'uid'=>$val['uid'],
  83. 'rid'=>$val['id'],
  84. 'goods_id'=>$goods['goods_id'],
  85. 'create_time'=>$cur_time,
  86. 'box_type'=>$val1,
  87. 'goods_price'=>$goods['price'],
  88. 'pay_type'=>$val['pay_type']
  89. ];
  90. $r_goodsids .= ((empty($r_goodsids)?'':',').$goods['goods_id']);
  91. }
  92. }
  93. }
  94. Db::name('box_record')->where('id', $val['id'])->save([
  95. 'status'=>2,
  96. 'goods_ids'=>$r_goodsids
  97. ]);
  98. }
  99. $model = new BoxMidHandleModel();
  100. $model->insertAll($mid_arrs);
  101. }
  102. }