VerifyIndexForm.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  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\AccountLog;
  9. use app\models\Goods;
  10. use app\models\SaasUser;
  11. use app\models\Store;
  12. use app\models\VerifyCard;
  13. use app\models\VerifyCardSale;
  14. use app\models\Order;
  15. use app\utils\OrderNo;
  16. use app\models\User;
  17. use app\models\Recharge;
  18. use app\models\Shop;
  19. use app\models\Address;
  20. use app\models\VerifyCardAccount;
  21. use app\models\VerifyCardLog;
  22. use app\models\Video;
  23. use Think\Verify;
  24. use yii\base\BaseObject;
  25. use yii\base\Model;
  26. use app\models\Md;
  27. class VerifyIndexForm extends Model
  28. {
  29. public $store_id;
  30. public $user_id;
  31. public $saas_id;
  32. public $status;
  33. public $id;
  34. public $verify_card_id;
  35. public $account;
  36. public $cardpwd;
  37. public $sale_id;
  38. public $order_no;
  39. public $card_info;
  40. public $created_at;
  41. public $sale_time;
  42. public $end_time;
  43. public function rules()
  44. {
  45. return [
  46. [['verify_card_id','store_id'], 'integer'],
  47. [['status'], 'safe']
  48. ];
  49. }
  50. /**
  51. * 卡券领取
  52. */
  53. public function receive()
  54. {
  55. if (!$this->validate()) {
  56. return [
  57. 'code' => 1,
  58. 'msg' => $this->getErrorSummary(false)[0]
  59. ];
  60. }
  61. $saas_id = get_saas_user_id();
  62. $verifyCard = VerifyCard::find(['id'=>$this->verify_card_id,'is_business'=>1])->asArray()->one();
  63. if(!$verifyCard) {
  64. return [
  65. 'code' => 1,
  66. 'msg' => '卡券不存在',
  67. ];
  68. }
  69. $verifyInfo = VerifyCardSale::find()->where(['saas_id'=>$saas_id,'verify_card_id'=>$this->verify_card_id])->one();
  70. if ($verifyInfo && $verifyInfo->id > 0) {
  71. return [
  72. 'code' => 1,
  73. 'msg' => '您已领取过'
  74. ];
  75. }
  76. $info = $this->generateAccount($verifyCard);
  77. if($info && $info['account_id'] > 0){
  78. $verify_form = new VerifyCardSale();
  79. $verify_form->store_id = $verifyCard['store_id'];
  80. $verify_form->user_id = 0;
  81. $verify_form->saas_id = $saas_id;
  82. $verify_form->verify_card_id = $this->verify_card_id;
  83. $verify_form->left_num = 1;
  84. $verify_form->account_id = $info['account_id'];
  85. $verify_form->sale_time = time();
  86. if ($verifyCard['date_type'] == 1) {
  87. $verify_form->end_time = time() + $verifyCard['expire_day'] * (3600*24);
  88. } else {
  89. $verify_form->end_time = $verifyCard['end_time'];
  90. }
  91. if($verify_form->save() ) {
  92. return [
  93. 'code' => 0,
  94. 'msg' => '领取成功'
  95. ];
  96. }else{
  97. return [
  98. 'code' => 1,
  99. 'msg' => '领取失败'
  100. ];
  101. }
  102. }
  103. }
  104. /**
  105. * 转换日期格式为date
  106. */
  107. public function dateFormat($date)
  108. {
  109. return date('Y-m-d', $date);
  110. }
  111. // 生成卡密
  112. public function generateAccount($verifyInfo)
  113. {
  114. $account = new VerifyCardAccount();
  115. $account->store_id = $verifyInfo['store_id'];
  116. $account->card_id = $verifyInfo['id'];
  117. $account->account = 'TX'. mt_rand(10000000, 99999999);
  118. $account->password = $this->makeCardPassword();
  119. $account->status = VerifyCardAccount::STATUS_UNUSED;
  120. $account->save();
  121. if($account->id > 0){
  122. $count = VerifyCardAccount::find()->where([
  123. 'store_id' => $verifyInfo['store_id'],
  124. 'card_id' => $verifyInfo['id'],
  125. ])->count();
  126. $verifyCard = VerifyCard::findOne($verifyInfo['id']);
  127. $verifyCard->num = $count;
  128. $verifyCard->save();
  129. return [
  130. 'code' => 0,
  131. 'account_id' => $account->id
  132. ];
  133. }else{
  134. return [
  135. 'code' => 1,
  136. 'account_id' => 0
  137. ];
  138. }
  139. }
  140. // 生成卡密
  141. public function makeCardPassword()
  142. {
  143. $code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  144. $rand = $code[rand(0, 25)]
  145. . strtoupper(dechex(date('m')))
  146. . date('d') . substr(time(), -5)
  147. . substr(microtime(), 2, 5)
  148. . sprintf('%02d', rand(0, 99));
  149. for (
  150. $a = md5($rand, true),
  151. $s = '0123456789ABCDEFGHIJKLMNOPQRSTUV',
  152. $d = '',
  153. $f = 0;
  154. $f < 8;
  155. $g = ord($a[$f]),
  156. $d .= $s[($g ^ ord($a[$f + 8])) - $g & 0x1F],
  157. $f++
  158. ) ;
  159. return $d;
  160. }
  161. public function search()
  162. {
  163. if (!$this->validate()) {
  164. return [
  165. 'code' => 1,
  166. 'msg' => $this->getErrorSummary(false)[0]
  167. ];
  168. }
  169. // 获取可以使用的核销卡
  170. $verifySale = VerifyCardSale::find()
  171. ->where(['saas_id' => $this->saas_id,'status' => 0])
  172. ->andWhere(['is_delete' => 0])
  173. ->asArray()
  174. ->all();
  175. // 更新个人核销卡使用状态
  176. foreach ($verifySale as &$val) {
  177. // 核销卡详情
  178. $verifycard = VerifyCard::findOne(['id' => $val['verify_card_id'], 'is_delete' => VerifyCard::IS_DELETE_NO ,'is_business'=>1]);
  179. if ($verifycard['date_type'] == 1) {
  180. // 有效期
  181. $expire_day = $verifycard['expire_day'] * 24 * 60 * 60;
  182. if ($expire_day > 0) { // 永久有效不更新
  183. // expire_day天后的日期
  184. $expire = intval($val['created_at']) + $expire_day; // 过期时间
  185. if (time() > $expire) {
  186. if ($verifycard['type'] == 5) {
  187. VerifyCardSale::updateAll(['status' => 1, 'video_status' => 1], 'id=' . $val['id']);
  188. } else {
  189. VerifyCardSale::updateAll(['status' => 1], 'id=' . $val['id']);
  190. }
  191. }
  192. }
  193. }
  194. if ($verifycard['date_type'] == 2) {
  195. if (time() > intval($verifycard['end_time'])) {
  196. if ($verifycard['type'] == 5) {
  197. VerifyCardSale::updateAll(['status' => 1, 'video_status' => 1], 'id=' . $val['id']);
  198. } else {
  199. VerifyCardSale::updateAll(['status' => 1], 'id=' . $val['id']);
  200. }
  201. }
  202. }
  203. }
  204. // 商盟核销卡不能转赠
  205. // if ($this->status == 2) {
  206. // $arr = [];
  207. // $verifylog = VerifyCardLog::find()->where(['user_id' => $this->user_id, 'type' => VerifyCardLog::WRITE_TYPE_GIVE])->groupBy('sale_id')->asArray()->all();
  208. // foreach ($verifylog as &$val) {
  209. // $arr[] = $val['sale_id'];
  210. // }
  211. // $list = VerifyCardSale::find()->where(['store_id' => $this->store_id])
  212. // ->andWhere(['in', 'id' , $arr])
  213. // ->orderBy('sale_time desc')
  214. // ->asArray()
  215. // ->all();
  216. // }
  217. if ($this->status == 1) {
  218. $list = VerifyCardSale::find()->alias('vcs')
  219. ->leftJoin(['vc' => VerifyCard::tableName()], 'vcs.verify_card_id = vc.id')
  220. ->where(['vcs.saas_id' => $this->saas_id])
  221. ->andWhere(['in', 'vcs.status', [1,2]])
  222. ->andWhere(['<>', 'vcs.is_delete', 1])
  223. ->orderBy('vcs.sale_time desc')
  224. ->select('vcs.*, vc.type')
  225. ->asArray()
  226. ->all();
  227. foreach ($list as $key => $value) {
  228. if ($value['type'] == 5 && $value['video_status'] == 0) {
  229. unset($list[$key]);
  230. }
  231. }
  232. $list = array_values($list);
  233. } else {
  234. // 获取核销卡列表
  235. $list = VerifyCardSale::find()->alias('vcs')
  236. ->leftJoin(['vc' => VerifyCard::tableName()], 'vcs.verify_card_id = vc.id')
  237. ->where(['vcs.saas_id' => $this->saas_id])
  238. ->andWhere('vcs.status=0 or (vc.type=5 and vcs.status=1 and vcs.video_status=0)')
  239. ->orderBy('vcs.sale_time desc')
  240. ->select('vcs.*, vc.type')
  241. ->asArray()
  242. ->all();
  243. }
  244. foreach ($list as &$val) {
  245. $cardinfo = VerifyCard::findOne(['id' => $val['verify_card_id']]);
  246. $val['name'] = $cardinfo['name'];
  247. $val['expire_day'] = $cardinfo['expire_day'];
  248. $val['begin_time'] = $cardinfo['begin_time'] == 0 ? '' : $this->dateFormat($cardinfo['begin_time']);
  249. $val['date_type'] = $cardinfo['date_type'];
  250. $val['type'] = $cardinfo['type'];
  251. $val['pic_url'] = $cardinfo['pic_url'];
  252. $val['bg_pic_url'] = $cardinfo['bg_pic_url'];
  253. $val['created_at'] = $val['created_at'] == 0 ? '' : $this->dateFormat($val['created_at']);
  254. $val['updated_at'] = $val['updated_at'] == 0 ? '' : $this->dateFormat($val['updated_at']);
  255. $val['sale_time'] = $val['sale_time'] == 0 ? '' : date("Y-m-d H:i:s", $val['sale_time']);
  256. $val['end_time'] = $val['end_time'] == 0 ? '' : $this->dateFormat($val['end_time']);
  257. }
  258. return [
  259. 'code' => 0,
  260. 'msg' => 'success',
  261. 'data' => $list,
  262. 'num' => count($list),
  263. ];
  264. }
  265. public function log()
  266. {
  267. if (!$this->validate()) {
  268. return [
  269. 'code' => 1,
  270. 'msg' => $this->getErrorSummary(false)[0]
  271. ];
  272. }
  273. if ($this->id) {
  274. // $sale_card_info['coupon_money'] = $sale_info->use_num * $verify_card_info->money; 核销总金额
  275. // 使用记录
  276. $log_info = VerifyCardLog::find()->where([
  277. 'saas_verify_person' => $this->saas_id,
  278. 'is_delete' => 0,
  279. 'sale_id' => $this->id
  280. //'store_id' => $this->store_id
  281. ])->orderBy('use_time desc')->asArray()->all();
  282. } else {
  283. $log_info = VerifyCardLog::find()->where([
  284. 'saas_verify_person' => $this->saas_id,
  285. 'is_delete' => 0
  286. //'store_id' => $this->store_id
  287. ])->orderBy('use_time desc')->asArray()->all();
  288. }
  289. foreach ($log_info as &$item) {
  290. // 门店信息
  291. // $shop_info = Md::find()->select('name')->where([
  292. // 'id' => $item['shop_id'],
  293. // 'is_delete' => 0
  294. // ])->one();
  295. //$item['shop_name'] = $shop_info ? $shop_info['name'] : '未知';
  296. $item['use_time'] = $item['use_time'] == 0 ? '' : date("Y-m-d H:i:s", $item['use_time']);
  297. // if (!empty($item['shop_id'])) {
  298. // $user = User::findOne($item['verify_person']);
  299. $SaasUser = SaasUser::findOne($item['saas_verify_person']);
  300. // $item['verify_person'] = $SaasUser->name;
  301. // } else {
  302. $item['shop'] = "";
  303. $item['verify_person'] = $SaasUser->name;
  304. //}
  305. }
  306. return [
  307. 'code' => 0,
  308. 'msg' => 'success',
  309. 'data' => [
  310. 'log_list' => $log_info
  311. ],
  312. 'num' => count($log_info)
  313. ];
  314. }
  315. /**
  316. * 卡券详情
  317. * @return array
  318. */
  319. public function detail()
  320. {
  321. if (!$this->validate()) {
  322. return [
  323. 'code' => 1,
  324. 'msg' => $this->getErrorSummary(false)[0]
  325. ];
  326. }
  327. $sale_info = VerifyCardSale::find()->where([
  328. 'id' => $this->sale_id,
  329. ])->asArray()->one();
  330. //查询核销卡信息
  331. $verify_card_info = VerifyCard::find()->where([
  332. 'id' => $sale_info['verify_card_id'],
  333. ])->asArray()->one();
  334. $account_info = VerifyCardAccount::findOne($sale_info['account_id']);
  335. $sale_info['card_info'] = [
  336. 'user' => $account_info->account,
  337. 'password' => $account_info->password
  338. ];
  339. // // 是否可以转赠
  340. // $is_can_give = true;
  341. // if (time() >= $sale_info['end_time']) {
  342. // $is_can_give = false;
  343. // }
  344. // if ($sale_info['status'] == 1 || $sale_info['status'] == 2) {
  345. // $is_can_give = false;
  346. // }
  347. // if ($verify_card_info['is_give'] == 0) {
  348. // $is_can_give = false;
  349. // }
  350. //商盟核销卡不能转赠
  351. $is_can_give = false;
  352. $sale_info['is_can_give'] = intval($is_can_give);
  353. $sale_info['sale_time'] = $sale_info['sale_time'] == 0 ? '' : $this->dateFormat($sale_info['sale_time']);
  354. $sale_info['end_time'] = $sale_info['end_time'] == 0 ? '' : $this->dateFormat($sale_info['end_time']);
  355. $sale_info['created_at'] = $sale_info['created_at'] == 0 ? '' : $this->dateFormat($sale_info['created_at']);
  356. $sale_info['updated_at'] = $sale_info['updated_at'] == 0 ? '' : $this->dateFormat($sale_info['updated_at']);
  357. $verify_card_info['begin_time'] = $verify_card_info['begin_time'] == 0 ? '' : $this->dateFormat($verify_card_info['begin_time']);
  358. $verify_card_info['end_time'] = $verify_card_info['end_time'] == 0 ? '' : $this->dateFormat($verify_card_info['end_time']);
  359. $verify_card_info['created_at'] = $verify_card_info['created_at'] == 0 ? '' : $this->dateFormat($verify_card_info['created_at']);
  360. $verify_card_info['updated_at'] = $verify_card_info['updated_at'] == 0 ? '' : $this->dateFormat($verify_card_info['updated_at']);
  361. $verify_card_info['goods_ids'] = json_decode($verify_card_info['goods_ids']);
  362. $verify_card_info['video_ids'] = json_decode($verify_card_info['video_ids']);
  363. $sale_info['verify_card_info'] = $verify_card_info;
  364. //\Yii::warning($sale_info);
  365. $arr = [];
  366. //if (get_md_id() == "-1" || !get_md_id()) {
  367. $store_info = Store::findOne($sale_info['store_id']);
  368. $arr['coordinate'] = $store_info->coordinate;
  369. $arr['address'] = $store_info->address;
  370. $arr['name'] = $store_info->name;
  371. $arr['mobile'] = $store_info->contact_tel;
  372. // } else {
  373. // $md = Md::find()->where(['store_id' => get_store_id(), 'md' => get_md_id()])->one();
  374. // $arr['coordinate'] = [
  375. // $md->latitude,
  376. // $md->longitude
  377. // ];
  378. // $arr['address'] = $md->address;
  379. // $arr['name'] = $md->name;
  380. // }
  381. return [
  382. 'code' => 0,
  383. 'msg' => 'success',
  384. 'data' => [
  385. 'list' => $sale_info,
  386. 'store_info' => $arr
  387. ],
  388. ];
  389. }
  390. /**
  391. * 删除核销卡(更新状态)
  392. */
  393. public function delVerifyCard() {
  394. if ($this->id) {
  395. $verifysale = VerifyCardSale::findOne(['id' => $this->id]);
  396. if (!$verifysale) {
  397. return [];
  398. }
  399. $verifysale->is_delete = VerifyCardSale::IS_DELETE_YES;
  400. $verifysale->status = 2;
  401. $verifysale->save();
  402. return [
  403. 'code' => 0,
  404. 'msg' => '删除成功'
  405. ];
  406. }
  407. }
  408. public function getVerifyLog()
  409. {
  410. if (!$this->validate()) {
  411. return [
  412. 'code' => 1,
  413. 'msg' => $this->getErrorSummary(false)[0]
  414. ];
  415. }
  416. if ($this->sale_id) {
  417. $sale = VerifyCardSale::findOne($this->sale_id);
  418. if (!$sale) {
  419. return [
  420. 'code' => 1,
  421. 'msg' => '卡券不存在',
  422. ];
  423. }
  424. // $logs = VerifyCardLog::find()->alias('vcl')
  425. // ->leftJoin(['md' => Md::tableName()], 'vcl.shop_id = md.id')->where([
  426. // 'vcl.store_id' => $this->store_id,
  427. // 'vcl.sale_id' => $this->sale_id,
  428. // 'vcl.is_delete' => 0,
  429. // 'vcl.type' => VerifyCardLog::WRITE_TYPE_WRITE_OFF
  430. // ])->select('vcl.use_time, md.name as md_name')->asArray()->all();
  431. $logs = VerifyCardLog::find()->alias('vcl')
  432. ->leftJoin(['s' => Store::tableName()], 'vcl.store_id = s.id')->where([
  433. 'vcl.store_id' => $sale->store_id,
  434. 'vcl.sale_id' => $this->sale_id,
  435. 'vcl.is_delete' => 0,
  436. 'vcl.type' => VerifyCardLog::WRITE_TYPE_WRITE_OFF
  437. ])->select('vcl.use_time, s.name as store_name')->asArray()->all();
  438. return [
  439. 'code' => 0,
  440. 'data' => $logs,
  441. ];
  442. }
  443. return [
  444. 'code' => 1,
  445. 'msg' => '缺少参数',
  446. ];
  447. }
  448. }