TaxUserAuth.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  1. <?php
  2. namespace addons\AvoidTax\common\models;
  3. use yii\data\Pagination;
  4. /**
  5. * This is the model class for table "{{%addons_tax_user_auth}}".
  6. *
  7. * @property int $id
  8. * @property int|null $user_id
  9. * @property string|null $accountId
  10. * @property int|null $mall_id
  11. * @property string|null $name 姓名
  12. * @property string|null $id_card_no 身份证
  13. * @property string|null $mobile 手机号码
  14. * @property int|null $status 1未认证2已认证
  15. * @property int|null $default
  16. * @property string|null $id_card_front 身份证正面
  17. * @property string|null $id_card_back 身份证反面
  18. * @property string|null $auth_url 实名认证连接
  19. * @property int|null $created_at
  20. * @property int|null $updated_at
  21. * @property string|null $sign_data
  22. * @property string|null $remark
  23. */
  24. class TaxUserAuth extends \yii\db\ActiveRecord
  25. {
  26. const STATUS_NOT = 1; // 未签约
  27. const STATUS_WAIT = 2; // 签约中
  28. const STATUS_OK = 3; // 已签约
  29. const STATUS_UNBIND = 4; // 已解绑
  30. /**
  31. * {@inheritdoc}
  32. */
  33. public static function tableName()
  34. {
  35. return '{{%addons_tax_user_auth}}';
  36. }
  37. /**
  38. * {@inheritdoc}
  39. */
  40. public function rules()
  41. {
  42. return [
  43. [['user_id', 'mall_id', 'status', 'created_at', 'updated_at', 'default'], 'integer'],
  44. [['id_card_front', 'id_card_back'], 'string'],
  45. [['name', 'id_card_no', 'mobile', 'account', 'accountId', 'flowId'], 'string', 'max' => 64],
  46. [['auth_url', 'sign_data'], 'safe'],
  47. ];
  48. }
  49. /**
  50. * {@inheritdoc}
  51. */
  52. public function attributeLabels()
  53. {
  54. return [
  55. 'id' => 'ID',
  56. 'user_id' => 'User ID',
  57. 'mall_id' => 'Mall ID',
  58. 'accountId' => 'work user id',
  59. 'name' => '姓名',
  60. 'id_card_no' => '身份证',
  61. 'mobile' => '手机号码',
  62. 'default' => '默认',
  63. 'status' => '1未认证2已认证',
  64. 'id_card_front' => '身份证正面',
  65. 'id_card_back' => '身份证反面',
  66. 'auth_url' => '实名认证连接',
  67. 'created_at' => 'Created At',
  68. 'updated_at' => 'Updated At',
  69. 'sign_data' => '签约信息',
  70. 'remark' => '签约错误信息',
  71. ];
  72. }
  73. /**
  74. * @return ActiveQueryInterface the relational query object.
  75. */
  76. public function getUser()
  77. {
  78. return $this->hasOne(User::class, ['id' => 'user_id']);
  79. }
  80. /**
  81. * 获取授权用户
  82. *
  83. * @param int $mall_id
  84. * @param int $user_id
  85. * @param int $status
  86. * @return static|null
  87. */
  88. public static function findAuthUser($mall_id, $user_id, $status = self::STATUS_WAIT)
  89. {
  90. return self::find()->where(compact('status', 'mall_id', 'user_id'))->one();
  91. }
  92. /**
  93. * 获取用户
  94. *
  95. * @param int $mall_id
  96. * @param int $user_id
  97. * @param int|null $status
  98. * @return static|null
  99. */
  100. public static function getAccountUser($mall_id, $user_id, $status = null)
  101. {
  102. return self::find()
  103. ->where(compact('mall_id', 'user_id'))
  104. ->andFilterWhere(['status' => $status])->orderBy('id desc')->one();
  105. }
  106. /**
  107. * 获取授权用户列表
  108. *
  109. * @param int $user_id
  110. * @param int $status
  111. * @return array
  112. */
  113. public static function findAuthUserList($user_id, $status = self::STATUS_WAIT): array
  114. {
  115. return self::find()
  116. ->select('mobile,name,id_card_no,user_id')
  117. ->where(['user_id' => $user_id, 'status' => $status])
  118. ->indexBy('user_id')
  119. ->asArray()
  120. ->all();
  121. }
  122. /**
  123. * 添加用户
  124. *
  125. * @param int $mall_id
  126. * @param int $user_id
  127. * @param string $accountId
  128. * @return boolean
  129. */
  130. public static function addAuthUser($mall_id, $user_id, string $accountId = ""): bool
  131. {
  132. $model = self::find()->where(['mall_id' => $mall_id, 'user_id' => $user_id])->one();
  133. if (empty($model)) {
  134. $model = new self();
  135. }
  136. $model->status = self::STATUS_WAIT;
  137. $model->mall_id = $mall_id;
  138. $model->user_id = $user_id;
  139. $model->accountId = $accountId;
  140. $model->created_at = time();
  141. $res = $model->save();
  142. return !$res ? false : $model;
  143. }
  144. /**
  145. * 签约成功
  146. *
  147. * @param int $auth_id
  148. * @param array $update
  149. * @return boolean
  150. */
  151. public static function signOk($auth_id, $update = []): bool
  152. {
  153. $auth = static::find()->select('user_id')->where(['id' => $auth_id])->one();
  154. $update['status'] = self::STATUS_OK;
  155. $update['updated_at'] = time();
  156. $update['default'] = (int)static::isSetDefault($auth->user_id);
  157. return self::updateAll($update, ['id' => $auth_id]);
  158. }
  159. /**
  160. * 查询是否设置默认
  161. *
  162. * @param integer $uid
  163. * @return boolean
  164. */
  165. public static function isSetDefault(int $uid)
  166. {
  167. return static::find()->where(['user_id' => $uid, 'default' => 1])->count() > 0
  168. ? false
  169. : true;
  170. }
  171. /**
  172. * 签约失败
  173. *
  174. * @param int $auth_id
  175. * @param array $update
  176. * @return boolean
  177. */
  178. public static function signFail($auth_id, $update = []): bool
  179. {
  180. $update['status'] = self::STATUS_WAIT;
  181. $update['updated_at'] = time();
  182. return self::updateAll($update, ['id' => $auth_id]);
  183. }
  184. /**
  185. * 当前用户ID是否签约
  186. *
  187. * @param integer $mall_id
  188. * @param integer $user_id
  189. * @return boolean
  190. */
  191. public static function uidIsSign(int $mall_id, int $user_id)
  192. {
  193. return static::find()
  194. ->select('id')
  195. ->where(['user_id' => $user_id, 'mall_id' => $mall_id, 'status' => self::STATUS_OK])
  196. ->one() ? true : false;
  197. }
  198. /**
  199. * 获取分页数据
  200. *
  201. * @param integer $page
  202. * @param integer $limit
  203. * @param callable $callback
  204. * @param string $order_by
  205. * @return array
  206. */
  207. public static function getPageList(
  208. int $page, int $limit, callable $callback, string $order_by = 'id'
  209. ) :array
  210. {
  211. $model = static::find();
  212. if (!empty($callback)) call_user_func($callback, $model);
  213. $pagination = new Pagination(['totalCount' => $model->count(), 'pageSize' => $limit]);
  214. $model->limit($pagination->limit)->offset($pagination->offset);
  215. $list = $model->asArray()->orderBy($order_by)->all();
  216. $data['list'] = $list;
  217. $data['page_count'] = $pagination->pageCount;
  218. $data['current_page'] = $page + 1;
  219. return $data;
  220. }
  221. /**
  222. * 查询用户
  223. *
  224. * @param integer $mall_id
  225. * @param integer $id
  226. * @return static|null
  227. */
  228. public static function getUserByIdAndMallId(int $mall_id, int $id)
  229. {
  230. return static::find()
  231. ->where(['mall_id' => $mall_id, 'id' => $id])
  232. ->one();
  233. }
  234. /**
  235. * 修改账号
  236. *
  237. * @param string $mobile
  238. * @param string|null $account
  239. * @return boolean
  240. */
  241. public function changeMobile(string $mobile, $account = '')
  242. {
  243. $this->mobile = $mobile;
  244. $this->account = $account;
  245. return $this->save();
  246. }
  247. /**
  248. * 身份信息获取
  249. *
  250. * @param integer $mall_id
  251. * @param string $idcard
  252. * @param string $name
  253. * @return static|null
  254. */
  255. public static function getAutnByIdcardAndName(int $mall_id, string $idcard, string $name)
  256. {
  257. return static::find()
  258. ->where(['id_card_no' => $idcard, 'name' => $name, 'mall_id' => $mall_id, 'status' => static::STATUS_OK])
  259. ->one();
  260. }
  261. /**
  262. * ID查询一条认证记录
  263. *
  264. * @param integer $mall_id
  265. * @param integer $id
  266. * @return static|array|null
  267. */
  268. public static function getOkAuthById(int $mall_id, int $id)
  269. {
  270. return static::find()
  271. ->where(['mall_id' => $mall_id, 'id' => $id, 'status' => static::STATUS_OK])
  272. ->one();
  273. }
  274. /**
  275. * 生成一条新的记录
  276. *
  277. * @param integer $user_id
  278. * @return boolean
  279. */
  280. public function createNewAuth(int $user_id, string $mobile)
  281. {
  282. $model = new static;
  283. $model->user_id = $user_id;
  284. $model->accountId = $this->accountId;
  285. $model->flowId = $this->flowId;
  286. $model->mall_id = $this->mall_id;
  287. $model->name = $this->name;
  288. $model->id_card_no = $this->id_card_no;
  289. $model->mobile = $mobile;
  290. $model->status = $this->status;
  291. $model->id_card_front = $this->id_card_front;
  292. $model->id_card_back = $this->id_card_back;
  293. $model->auth_url = $this->auth_url;
  294. $model->sign_data = $this->sign_data;
  295. $model->default = 0;
  296. $model->remark = $this->remark;
  297. $model->created_at = $model->updated_at = time();
  298. return $model->save();
  299. }
  300. /**
  301. * 获取mallID全部已经
  302. *
  303. * @param integer $mall_id
  304. * @return array|static[]
  305. */
  306. public static function getAllAuthUsers(int $mall_id)
  307. {
  308. return static::find()
  309. ->where(['mall_id' => $mall_id, 'status' => static::STATUS_OK])
  310. ->all();
  311. }
  312. /**
  313. * 获取用户的认证列表
  314. *
  315. * @param integer $mall_id
  316. * @param integer $user_id
  317. * @return void
  318. */
  319. public static function getUserAuthList(int $mall_id, int $user_id)
  320. {
  321. return static::find()
  322. ->where(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => static::STATUS_OK])
  323. ->select(['id', 'user_id', 'mall_id', 'name', 'id_card_no as id_card', 'mobile', 'status', 'default'])
  324. ->asArray()
  325. ->all();
  326. }
  327. /**
  328. * 获取
  329. *
  330. * @param integer $mall_id
  331. * @param integer $id
  332. * @return static|null
  333. */
  334. public static function getAuthById(int $mall_id, int $id)
  335. {
  336. return static::find()
  337. ->where(['mall_id' => $mall_id, 'id' => $id])
  338. ->one();
  339. }
  340. /**
  341. * @param integer $mall_id
  342. * @param integer $user_id
  343. * @return boolean
  344. */
  345. public static function setNotDefault(int $mall_id, int $user_id)
  346. {
  347. return static::updateAll(
  348. ['default' => 0],
  349. ['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => static::STATUS_OK]
  350. );
  351. }
  352. /**
  353. * @return boolean
  354. */
  355. public function setDefault()
  356. {
  357. $this->default = 1;
  358. return $this->save();
  359. }
  360. /**
  361. * 获取默认的签约信息
  362. *
  363. * @param integer $mall_id
  364. * @param integer $user_id
  365. * @return static|null
  366. */
  367. public static function getDefaultSignInfo(int $mall_id, int $user_id)
  368. {
  369. return static::find()
  370. ->select(['id', 'user_id', 'mall_id', 'name', 'id_card_no as id_card', 'mobile', 'account', 'status', 'default'])
  371. ->where(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => static::STATUS_OK, 'default' => 1])
  372. ->asArray()
  373. ->one();
  374. }
  375. /**
  376. * 通过name mobile idcard获取用户已签约信息
  377. *
  378. * @param integer $user_id
  379. * @param string $name
  380. * @param string $mobile
  381. * @param string $idcard
  382. * @return static|null
  383. */
  384. public static function getSignByNMI(int $user_id, string $name, string $mobile, string $idcard)
  385. {
  386. return static::find()
  387. ->where([
  388. 'user_id' => $user_id,
  389. 'name' => $name,
  390. 'mobile' => $mobile,
  391. 'id_card_no' => $idcard,
  392. 'status' => static::STATUS_OK
  393. ])
  394. ->one();
  395. }
  396. /**
  397. * 获取用户一天内未完成签约的列表
  398. *
  399. * @param int $mall_id 商城ID
  400. * @param int $user_id 会员ID
  401. * @return array[static]
  402. **/
  403. public static function getUserNotAuthListByOneDay(int $mall_id, int $user_id)
  404. {
  405. return static::find()
  406. ->where(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => static::STATUS_WAIT])
  407. ->andWhere(['>', 'created_at', bcsub(time(), 86400)])
  408. ->all();
  409. }
  410. /**
  411. * 当前用户信息是否正在等待签约
  412. *
  413. * @param int $uid
  414. * @param string $name
  415. * @param string $mobile
  416. * @param string $id_card
  417. * @return boolean
  418. **/
  419. public static function isSignWait(int $uid, string $name, string $mobile, string $id_card)
  420. {
  421. return static::find()
  422. ->select('id')
  423. ->where([
  424. 'user_id' => $uid,
  425. 'name' => $name,
  426. 'mobile' => $mobile,
  427. 'id_card_no' => $id_card,
  428. 'status' => static::STATUS_WAIT
  429. ])
  430. ->one() ? true : false;
  431. }
  432. /**
  433. * 解绑
  434. *
  435. * @return boolean
  436. */
  437. public function unbind()
  438. {
  439. $this->status = static::STATUS_UNBIND;
  440. return $this->save();
  441. }
  442. }