WriteOffCodeForm.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\alliance\models;
  8. use app\models\MdStaff;
  9. use app\models\VerifyCard;
  10. use app\models\VerifyCardAccount;
  11. use app\models\VerifyCardSale;
  12. use app\utils\ShareQrcode;
  13. use yii\base\Model;
  14. use app\models\VerifyCardLog;
  15. use app\models\Goods;
  16. use app\utils\QrCode as QrCodeForm;
  17. class WriteOffCodeForm extends Model
  18. {
  19. public $sale_id;
  20. public $_from;
  21. public function rules()
  22. {
  23. return [
  24. [['sale_id'],'integer'],
  25. [['_from'], 'string']
  26. ];
  27. }
  28. public function getQrcode(){
  29. $sale_log = VerifyCardSale::findOne($this->sale_id);
  30. $_from = $this->_from;
  31. $pic_url = VerifyCard::findOne($sale_log->verify_card_id)->pic_url;
  32. $account = VerifyCardAccount::findOne($sale_log->account_id)->account;
  33. $scene = "id={$this->sale_id}";
  34. $res = ShareQrcode::wxQrcode('user/write_off_card/card_write_card/card_write_card', $scene);
  35. $url_path = '';
  36. if (isset($res['code']) && $res['code'] == 0) {
  37. $url_path = $res['url_path'];
  38. }
  39. if ($_from === "app" ) {
  40. $scene = "user/write_off_card/card_write_card/card_write_card?id={$this->sale_id}";
  41. $save_name = md5("id={$this->sale_id}&account_id={$sale_log->account_id}&platform=app") . '.jpg';
  42. $wxapp_qrcode_file_path = \Yii::$app->runtimePath . '/image/' . $save_name;
  43. // $wxapp_qrcode_file_path = str_replace('http://', 'https://', \Yii::$app->request->hostInfo . '/runtime/image/' . $save_name);
  44. QrCodeForm::image($scene, 200, false, 'L', 'JPEG', 0, ['255,255,255', '0,0,0'], 1, false, $wxapp_qrcode_file_path);
  45. $url_path = str_replace('http://', 'https://', \Yii::$app->request->hostInfo . '/runtime/image/' . $save_name);
  46. }
  47. return [
  48. "code"=>0,
  49. "data"=>[
  50. "pic_url"=>$pic_url,
  51. "url_path"=>$url_path,
  52. "account"=>$account
  53. ]
  54. ];
  55. }
  56. public function clerkCard(){
  57. $t = \Yii::$app->db->beginTransaction();
  58. try {
  59. $user_id = get_saas_user_id();
  60. // $mdStaff = MdStaff::find()->where(['saas_user_id'=>$user_id,'is_delete'=>0])->one();
  61. // if(empty($mdStaff)){
  62. // throw new \Exception("非核销员与店长,不可核销");
  63. // }
  64. $sale_log = VerifyCardSale::findOne($this->sale_id);
  65. $card = VerifyCard::findOne($sale_log->verify_card_id);
  66. if ($sale_log->status == 1) {
  67. throw new \Exception("卡已兑换或核销");
  68. }
  69. if ($sale_log->end_time <= time()) {
  70. throw new \Exception("卡已过期,不能使用");
  71. }
  72. if ($card->type == 1) {
  73. if($sale_log->left_num > 0) {
  74. $sale_log->use_num = $sale_log->use_num + 1;
  75. $sale_log->left_num = $sale_log->left_num - 1;
  76. $sale_log->left_num == 0 && $sale_log->status = 1;
  77. $sale_log->save();
  78. }else{
  79. throw new \Exception("核销卡次数已用完");
  80. }
  81. } else if ($card->type == 2) {
  82. $sale_log->use_num = $sale_log->use_num + 1;
  83. $sale_log->left_num = $sale_log->left_num - 1;
  84. $sale_log->status = 1;
  85. $sale_log->save();
  86. } else {
  87. throw new \Exception("未知类型,卡不可用");
  88. }
  89. // 增加核销记录
  90. $log = new VerifyCardLog();
  91. $log->store_id = get_store_id();
  92. $log->sale_id = $this->sale_id;
  93. $log->shop_id = 0;
  94. $log->verify_person = 0;
  95. $log->saas_verify_person = $user_id;
  96. $log->user_id = $sale_log->user_id;
  97. $log->use_time = time();
  98. $log->type = VerifyCardLog::WRITE_TYPE_WRITE_OFF;
  99. $log->describe = $card->type == 1 ? '核销卡核销' : '礼品卡核销';
  100. $log->save();
  101. $t->commit();
  102. return [
  103. 'code' => 0,
  104. 'msg' => '核销完成',
  105. ];
  106. } catch (\Exception $e) {
  107. $t->rollBack();
  108. return [
  109. 'code'=>1,
  110. 'msg'=>$e->getMessage()
  111. ];
  112. }
  113. }
  114. public function getCard(){
  115. try {
  116. $user_id = get_saas_user_id();
  117. $mdStaff = MdStaff::find()->where(['saas_user_id'=>$user_id,'is_delete'=>0])->one();
  118. if(empty($mdStaff)){
  119. throw new \Exception("非核销员与店长,不可核销");
  120. }
  121. $sale_log = VerifyCardSale::findOne($this->sale_id);
  122. if($sale_log->status === 1){
  123. throw new \Exception("卡已失效");
  124. }
  125. $verifyCard = VerifyCard::findOne($sale_log->verify_card_id);
  126. $account = VerifyCardAccount::findOne($sale_log->account_id)->account;
  127. $goods_list = [];
  128. if ($verifyCard->type == 2) {
  129. $goods_list = Goods::find()
  130. ->where(['store_id' => get_store_id()])
  131. ->andWhere(['in', 'id', json_decode($verifyCard->goods_ids, true)])
  132. ->asArray()
  133. ->all();
  134. foreach ($goods_list as $k => $val) {
  135. $val['attr'] = json_decode($val['attr'], true);
  136. $goods_info = Goods::findOne($val['id']);
  137. $goods_list[$k]['attr_group_list'] = $goods_info->getAttrGroupList();
  138. }
  139. }
  140. return [
  141. "code"=>0,
  142. "data"=>[
  143. 'goods_list' => $goods_list,
  144. 'card_type' => $verifyCard->type,
  145. "pic_url"=>$verifyCard->pic_url,
  146. "bg_url"=>$verifyCard->bg_pic_url,
  147. "name"=>$verifyCard->name,
  148. "account"=>$account,
  149. "use_num"=>$sale_log->use_num,
  150. "left_num"=>$sale_log->left_num
  151. ],
  152. "msg"=>"成功",
  153. ];
  154. }catch (\Exception $e){
  155. return [
  156. "code"=>1,
  157. "msg"=>$e->getMessage()
  158. ];
  159. }
  160. }
  161. }