GenRealRiceCards.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. namespace app\store\model\card;
  3. use app\common\model\card\GenRealRiceCards as GenRealRiceCardsModel;
  4. use think\facade\Db;
  5. /**
  6. * 米卡面额模型
  7. * @package app\common\model
  8. */
  9. class GenRealRiceCards extends GenRealRiceCardsModel
  10. {
  11. protected $name = 'gen_real_rice_cards';
  12. /**
  13. * 生成兑换码
  14. * @param $data
  15. * @return bool
  16. */
  17. public function addCodes($data){
  18. $bathLength = 2000;
  19. $m = new self();
  20. $new = ['rice_card_id'=>$data['riceCardId'],'amount'=>$data['amount'],'sale_channel'=>$data['saleChannel']];
  21. //起始卡号
  22. $codeM = new RealRiceCardList();
  23. $cardNum = intval($codeM->alias('rr')->leftJoin('rice_card rc','rr.rice_card_id=rc.id')
  24. ->where('rc.type',$data['type'])
  25. ->max('card_number'));
  26. $cardNum = $data['type']==3?(($cardNum == 0)?600000000:$cardNum):(($cardNum == 0)?700000000:$cardNum);
  27. $riceCardM = new RiceCard();
  28. $riceCard = $riceCardM->where('id',$data['riceCardId'])->find()->toArray();
  29. //dd($riceCard['type']);
  30. Db::startTrans();
  31. try{
  32. $res = $m->create($new);
  33. $id = $res->id??0;
  34. $remainAmount = $data['amount'];
  35. $times = ceil($remainAmount/$bathLength);
  36. if ($riceCard['type'] == 2){//电子现金卡要2开头的八位数字
  37. for($i=0;$i<$times;$i++){
  38. $codes = [];
  39. if ($remainAmount >= $bathLength){
  40. $redeemCodes = gen_number8($bathLength,'2');
  41. for($j=0;$j<$bathLength;$j++){
  42. $codes[] = ['rice_card_id'=>$data['riceCardId'],'gen_real_rice_card_id'=>$id,'card_number'=>$redeemCodes[$j],'redeem_code'=>$redeemCodes[$j]];
  43. }
  44. $codeM->addBatch($codes);
  45. }
  46. if ($remainAmount > 0 && $remainAmount<$bathLength){
  47. $redeemCodes = gen_number8($bathLength,'2');
  48. for($j=0;$j<$remainAmount;$j++){
  49. $codes[] = ['rice_card_id'=>$data['riceCardId'],'gen_real_rice_card_id'=>$id,'card_number'=>$redeemCodes[$j],'redeem_code'=>$redeemCodes[$j]];
  50. }
  51. $codeM->addBatch($codes);
  52. }
  53. $remainAmount -= $bathLength;
  54. }
  55. }else{
  56. $st = $riceCard['type'] == 3?'5':'7';
  57. for($i=0;$i<$times;$i++){
  58. $codes = [];
  59. if ($remainAmount >= $bathLength){
  60. //$redeemCodes = gen_rand8($bathLength);
  61. $redeemCodes = gen_number8($bathLength,$st);
  62. for($j=0;$j<$bathLength;$j++){
  63. $codes[] = ['rice_card_id'=>$data['riceCardId'],'gen_real_rice_card_id'=>$id,'card_number'=>++$cardNum,'redeem_code'=>$redeemCodes[$j]];
  64. }
  65. $codeM->addBatch($codes);
  66. }
  67. if ($remainAmount > 0 && $remainAmount<$bathLength){
  68. //$redeemCodes = gen_rand8($remainAmount);
  69. $redeemCodes = gen_number8($bathLength,$st);
  70. for($j=0;$j<$remainAmount;$j++){
  71. $codes[] = ['rice_card_id'=>$data['riceCardId'],'gen_real_rice_card_id'=>$id,'card_number'=>++$cardNum,'redeem_code'=>$redeemCodes[$j]];
  72. }
  73. $codeM->addBatch($codes);
  74. }
  75. $remainAmount -= $bathLength;
  76. }
  77. }
  78. Db::commit();
  79. }catch (\Exception $e) {
  80. // 回滚事务
  81. Db::rollback();
  82. log_record(__METHOD__.$e->getMessage(),'error');
  83. return false;
  84. }
  85. return true;
  86. }
  87. public function getAllList($params){
  88. $filter = $this->getQueryFilter($params);
  89. $m = $this->alias('gc')->leftJoin('rice_card rc','gc.rice_card_id=rc.id');
  90. if (count($filter)){
  91. $m = $m->where($filter);
  92. }
  93. return $m->field('gc.id,gc.rice_card_id,gc.amount,gc.sale_channel,gc.create_time,rc.type,rc.name,rc.expire_day,rc.describe')
  94. ->order('gc.id','desc')->paginate(15);
  95. }
  96. //查询
  97. public function getQueryFilter($param){
  98. $filter = [];
  99. if(isset($param['name']) && $param['name']){
  100. $filter[] = ['rc.name','like','%'.$param['name'].'%'];
  101. }
  102. if(isset($param['type']) && $param['type'] > 0){
  103. $filter[] = ['rc.type','=',$param['type']];
  104. }
  105. // 创建时间
  106. if (!empty($param['createTime'])) {
  107. $times = between_time($param['createTime']);
  108. $filter[] = ['gc.create_time', '>=', $times['start_time']];
  109. $filter[] = ['gc.create_time', '<', $times['end_time'] + 86400];
  110. }
  111. return $filter;
  112. }
  113. }