WriteOffCodeForm.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\client\models\v1;
  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. class WriteOffCodeForm extends Model
  17. {
  18. public $sale_id;
  19. public function rules()
  20. {
  21. return [
  22. [['sale_id'],'integer']
  23. ];
  24. }
  25. public function getQrcode(){
  26. $sale_log = VerifyCardSale::findOne($this->sale_id);
  27. $pic_url = VerifyCard::findOne($sale_log->verify_card_id)->pic_url;
  28. $account = VerifyCardAccount::findOne($sale_log->account_id)->account;
  29. $scene = "id:{$this->sale_id}";
  30. $res = ShareQrcode::wxQrcode('user/write_off_card/card_write_card/card_write_card', $scene);
  31. $url_path = '';
  32. if (isset($res['code']) && $res['code'] == 0) {
  33. $url_path = $res['url_path'];
  34. }
  35. return [
  36. "code"=>0,
  37. "data"=>[
  38. "pic_url"=>$pic_url,
  39. "url_path"=>$url_path,
  40. "account"=>$account
  41. ]
  42. ];
  43. }
  44. public function clerkCard(){
  45. $t = \Yii::$app->db->beginTransaction();
  46. try {
  47. $user_id = get_saas_user_id();
  48. $store_user_id = get_user_id();
  49. $mdStaff = MdStaff::find()->where(['saas_user_id'=>$user_id,'is_delete'=>0])->one();
  50. if(empty($mdStaff)){
  51. throw new \Exception("非核销员与店长,不可核销");
  52. }
  53. $sale_log = VerifyCardSale::findOne($this->sale_id);
  54. $card = VerifyCard::findOne($sale_log->verify_card_id);
  55. if ($sale_log->status == 1) {
  56. throw new \Exception("卡已兑换或核销");
  57. }
  58. if ($card->begin_time > time() && intval($card->date_type) === 2) {
  59. throw new \Exception("卡未到使用时间 不可使用");
  60. }
  61. if ($card->expire_day > 0 && $sale_log->end_time <= time()) {
  62. throw new \Exception("卡已过期,不能使用");
  63. }
  64. if ($card->type == 1) {
  65. if($sale_log->left_num > 0) {
  66. $sale_log->use_num = $sale_log->use_num + 1;
  67. $sale_log->left_num = $sale_log->left_num - 1;
  68. $sale_log->left_num == 0 && $sale_log->status = 1;
  69. $sale_log->save();
  70. } elseif($card->is_unlimited == 1) {
  71. /* begin 2025/07/28 09:21:50 id1267 判断是否为无限次核销卡 WPing丶 */
  72. $sale_log->use_num = $sale_log->use_num + 1;
  73. $sale_log->save();
  74. /* end */
  75. }else{
  76. throw new \Exception("核销卡次数已用完");
  77. }
  78. } else if ($card->type == 2) {
  79. $sale_log->use_num = $sale_log->use_num + 1;
  80. $sale_log->left_num = $sale_log->left_num - 1;
  81. $sale_log->status = 1;
  82. $sale_log->save();
  83. } else {
  84. throw new \Exception("未知类型,卡不可用");
  85. }
  86. // 增加核销记录
  87. $log = new VerifyCardLog();
  88. $log->store_id = get_store_id();
  89. $log->sale_id = $this->sale_id;
  90. $log->shop_id = $mdStaff->md_id;
  91. $log->verify_person = $store_user_id;
  92. $log->user_id = $sale_log->user_id;
  93. $log->use_time = time();
  94. $log->type = VerifyCardLog::WRITE_TYPE_WRITE_OFF;
  95. $log->describe = $card->type == 1 ? '核销卡核销' : '礼品卡核销';
  96. $log->save();
  97. $t->commit();
  98. return [
  99. 'code' => 0,
  100. 'msg' => '核销完成',
  101. ];
  102. } catch (\Exception $e) {
  103. $t->rollBack();
  104. return [
  105. 'code'=>1,
  106. 'msg'=>$e->getMessage()
  107. ];
  108. }
  109. }
  110. public function getCard(){
  111. try {
  112. $user_id = get_saas_user_id();
  113. $mdStaff = MdStaff::find()->where(['saas_user_id'=>$user_id,'is_delete'=>0])->one();
  114. if(empty($mdStaff)){
  115. throw new \Exception("非核销员与店长,不可核销");
  116. }
  117. $sale_log = VerifyCardSale::findOne($this->sale_id);
  118. if(intval($sale_log->status) !== 0){
  119. throw new \Exception("卡已失效");
  120. }
  121. $verifyCard = VerifyCard::findOne($sale_log->verify_card_id);
  122. $account = VerifyCardAccount::findOne($sale_log->account_id)->account;
  123. $goods_list = [];
  124. if ($verifyCard->type == 2) {
  125. $goods_list = Goods::find()
  126. ->where(['store_id' => get_store_id()])
  127. ->andWhere(['in', 'id', json_decode($verifyCard->goods_ids, true)])
  128. ->asArray()
  129. ->all();
  130. foreach ($goods_list as $k => $val) {
  131. $val['attr'] = json_decode($val['attr'], true);
  132. $goods_info = Goods::findOne($val['id']);
  133. $goods_list[$k]['attr_group_list'] = $goods_info->getAttrGroupList();
  134. }
  135. }
  136. return [
  137. "code"=>0,
  138. "data"=>[
  139. 'goods_list' => $goods_list,
  140. 'card_type' => $verifyCard->type,
  141. "pic_url"=>$verifyCard->pic_url,
  142. "bg_url"=>$verifyCard->bg_pic_url,
  143. "name"=>$verifyCard->name,
  144. "account"=>$account,
  145. "use_num"=>$sale_log->use_num,
  146. "left_num"=>$verifyCard->is_unlimited == 1 ? '无限次' : $sale_log->left_num,
  147. 'is_unlimited' => $verifyCard->is_unlimited,//2025年7月26日17:34:04 id1267开发内容:根据核销次数来判断是否是无限次卡(在规定时间内可无限次核销)
  148. ],
  149. "msg"=>"成功",
  150. ];
  151. }catch (\Exception $e){
  152. return [
  153. "code"=>1,
  154. "msg"=>$e->getMessage()
  155. ];
  156. }
  157. }
  158. }