TransferController.php 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2017/11/1/001
  6. * Time: 19:31
  7. */
  8. namespace backend\controllers;
  9. use backend\helpers\DateTimeHelper;
  10. use backend\helpers\PaginationHelper;
  11. use backend\helpers\ValidatorHelper;
  12. use backend\models\Member;
  13. use backend\models\Mt4Users;
  14. use backend\models\Transfer;
  15. use common\helpers\MtKit;
  16. use common\helpers\Utils;
  17. class TransferController extends BaseController
  18. {
  19. /**
  20. * xtrader首页数据-同名转账
  21. */
  22. public function actionTransfer()
  23. {
  24. $request = \Yii::$app->request;
  25. $member_id = $request->get('member_id');
  26. $member = Member::findOne(['id' => $member_id]);
  27. $login = $this->getMainLogin($member);
  28. $user = (new Mt4Users())->findByLogin($login);
  29. $logins = (new Member())->getLogins($member_id);
  30. $result = [
  31. 'member' => $member,
  32. 'user' => $user,
  33. 'logins' => $logins,
  34. ];
  35. return $this->outJson(1, $result);
  36. }
  37. /**
  38. * 同名转账列表
  39. */
  40. public function actionIndex()
  41. {
  42. $data = \Yii::$app->getRequest()->get();
  43. $data['type'] = isset($data['type']) ? trim($data['type']) : '';
  44. $data['from'] = isset($data['from']) ? trim($data['from']) : '';
  45. $data['member_id'] = isset($data['member_id']) ? trim($data['member_id']) : '';
  46. $data['inStartTime'] = isset($data['inStartTime']) ? trim($data['inStartTime']) : '';
  47. $data['inEndTime'] = isset($data['inEndTime']) ? trim($data['inEndTime']) : '';
  48. $data['page'] = isset($data['page']) ? max(intval($data['page']), 1) : 1;
  49. $data['pageSize'] = isset($data['pageSize']) ? intval($data['pageSize']) : 20;
  50. $data['orderBy'] = isset($data['orderBy']) ? trim($data['orderBy']) : 'id desc';
  51. $data['search'] = isset($data['search']) ? trim($data['search']) : '';
  52. $data = ValidatorHelper::validateData($data, [
  53. ['type', 'integer'],
  54. ['from', 'string'],
  55. ['member_id', 'integer'],
  56. ['inStartTime', 'integer'],
  57. ['inEndTime', 'integer'],
  58. ['page', 'integer', 'min' => 1],
  59. ['pageSize', 'integer', 'min' => 1],
  60. ['orderBy', 'string'],
  61. ], $errors);
  62. if ($data == false) {
  63. return $this->outJson(0, '', $errors);
  64. }
  65. $query = Transfer::find()->alias('t')
  66. ->select(['t.*','u.name', 'u.type as member_type'])
  67. ->innerJoin('crm_member u', 't.member_id = u.id')
  68. ->orderBy($data['orderBy']);
  69. // 按type获取列表
  70. $query->andFilterWhere(['t.type' => $data['type']]);
  71. if ($data['from'] == 'admin') {
  72. $query->andFilterWhere(['t.member_id' => $data['member_id']]);
  73. } else {
  74. $query->andWhere(['t.member_id' => $data['member_id']]);
  75. }
  76. $query->andFilterWhere(['>=', 't.in_time', $data['inStartTime']]);
  77. $query->andFilterWhere(['<', 't.in_time', $data['inEndTime']]);
  78. $query->andFilterWhere([
  79. 'or',
  80. ['like', 't.memo', $data['search']]
  81. ]);
  82. $result = PaginationHelper::queryPage($query, $data['page'], $data['pageSize']);
  83. if ($result['dataList']) {
  84. foreach ($result['dataList'] as $k => $v) {
  85. $result['dataList'][$k]['amount'] = Utils::formatFloatOrInt($v['amount']);
  86. }
  87. }
  88. return $this->outJson(1, $result);
  89. }
  90. /**
  91. * 审核同名转账
  92. */
  93. public function actionUpdateType()
  94. {
  95. $data = \Yii::$app->getRequest()->post();
  96. $data['id'] = isset($data['id']) ? (int)$data['id'] : 0;
  97. $data['type'] = isset($data['type']) ? (int)$data['type'] : '';
  98. $data['admin_name'] = isset($data['admin_name']) ? trim($data['admin_name']) : '';
  99. $info = Transfer::findOne(['id' => $data['id']]);
  100. if (!$info) {
  101. return $this->outJson(0, [], '该记录不存在');
  102. }
  103. if (isset($data['type']) && $info->type == 0) {
  104. $info->type = $data['type'];
  105. $data['admin_name'] != '' && $info->admin_name = $data['admin_name'];
  106. } else {
  107. return $this->outJson(0, [], '只有‘未审核’状态才可操作');
  108. }
  109. $rs = $info->update();
  110. if (!$rs) {
  111. return $this->outJson(0, [], '数据操作失败');
  112. }
  113. if ($data['type'] == 2) {
  114. $toLogin = $info->to_login;
  115. $fromLogin = $info->from_login;
  116. $amount = $info->amount;
  117. $wres = MtKit::withdrawal($fromLogin, $amount, "Withdrwal(Z$toLogin)");
  118. if ($wres) {
  119. MtKit::deposit($toLogin, $amount, "Deposit(Z$fromLogin)");
  120. }
  121. }
  122. return $this->outJson(1, ['id' => $info['id']], '操作成功');
  123. }
  124. /**
  125. * 获取某条记录的备注
  126. */
  127. public function actionMemo()
  128. {
  129. $data = \Yii::$app->getRequest()->get();
  130. $data['id'] = isset($data['id']) ? $data['id'] : 0;
  131. $transfer = Transfer::findOne(['id' => $data['id']]);
  132. return $this->outJson(1, $transfer);
  133. }
  134. /**
  135. * 修改某条记录的备注
  136. */
  137. public function actionMemoUpdate()
  138. {
  139. $data = \Yii::$app->getRequest()->post();
  140. $data['id'] = isset($data['id']) ? $data['id'] : 0;
  141. $data['memo'] = isset($data['memo']) ? $data['memo'] : '';
  142. $info = Transfer::findOne(['id' => $data['id']]);
  143. if (!$info) {
  144. return $this->outJson(0, [], '该记录不存在');
  145. }
  146. $info->memo = $data['memo'];
  147. $rs = $info->save();
  148. if (!$rs) {
  149. return $this->outJson(0, [], '数据操作失败');
  150. }
  151. return $this->outJson(1, ['id' => $info['id']], '操作成功');
  152. }
  153. /**
  154. * 申请同名转账
  155. */
  156. public function actionAddTransfer()
  157. {
  158. $request = \Yii::$app->request;
  159. if ($request->isPost) {
  160. $params = $request->post();
  161. $params['member_id'] = isset($params['member_id']) ? trim($params['member_id']) : '';
  162. $params['from_login'] = isset($params['flogin']) ? trim($params['flogin']) : '';
  163. $params['to_login'] = isset($params['tlogin']) ? trim($params['tlogin']) : '';
  164. $params['amount'] = isset($params['amount']) ? doubleval($params['amount']) : '';
  165. $params['type'] = isset($params['type']) ? intval($params['type']) : 0;
  166. if ($params['from_login'] == null) {
  167. return $this->outJson(0, [], '请选择账户');
  168. }
  169. if ($params['to_login'] == null) {
  170. return $this->outJson(0, [], '请选择账户');
  171. }
  172. if ($params['from_login'] == $params['to_login']) {
  173. return $this->outJson(0, [], '转出与转入账户相同');
  174. }
  175. if (empty($params['amount'])) {
  176. return $this->outJson(0, [], '请填写金额');
  177. }
  178. $isHave = false;
  179. $member = Member::find()->select('logins')->where(['id' => $params['member_id']])->asArray()->limit(1)->one();
  180. if ($member['logins']) {
  181. $mt4Login = explode(',', $member['logins']);
  182. if (in_array($params['from_login'], $mt4Login)) {
  183. $isHave = true;
  184. }
  185. }
  186. if (!$isHave) {
  187. return $this->outJson(0, [], '参数错误');
  188. }
  189. // 判断是否为同名账户,只有传入type参数的时候才判断
  190. if ($params['type']) {
  191. $isSameAccount = Member::isSameAccount($params['from_login'], $params['to_login'], $params['type']);
  192. if ($isSameAccount['code'] != 1) {
  193. return $this->outJson(0, [], $isSameAccount['message']);
  194. }
  195. }
  196. $transfer = Transfer::findOne(['member_id' => $params['member_id'], 'type' => 0]);
  197. if ($transfer) {
  198. return $this->outJson(0, [], '您还有未处理的申请记录,请等待审核');
  199. }
  200. $mt4User = (new Mt4Users())->findByLogin($params['from_login']);
  201. if (doubleval($mt4User['BALANCE']) < $params['amount']) {
  202. return $this->outJson(0, [], '余额不足');
  203. }
  204. $transfer = new Transfer();
  205. $transfer->setAttributes($params);
  206. $transfer->type = 0;
  207. $transfer->in_time = DateTimeHelper::microtime_float();
  208. if ($transfer->save()) {
  209. return $this->outJson(1, $transfer->getAttributes(), '提交成功');
  210. } else {
  211. $errors = $transfer->getErrors();
  212. if (!empty($errors)) {
  213. foreach ($errors as $key => $error) {
  214. if ($key == 'amount') {
  215. return $this->outJson(0, [], '金额必须是整数');
  216. }
  217. }
  218. }
  219. }
  220. } else {
  221. return $this->outJson(0, [], '参数传输格式错误');
  222. }
  223. }
  224. /**
  225. * 同名转账:转入账户是否属于转出账户的客户判断
  226. */
  227. public function actionIsIbUser()
  228. {
  229. $fromLogin = \Yii::$app->getRequest()->get('fromLogin');
  230. $toLogin = \Yii::$app->getRequest()->get('toLogin');
  231. $type = \Yii::$app->getRequest()->get('type');
  232. $isSameAccount = Member::isSameAccount($fromLogin, $toLogin, $type);
  233. $result['isSuccess'] = $isSameAccount['code'] == 1 ? true : false;
  234. $result['msg'] = $isSameAccount['message'];
  235. return $this->outJson(1, $result);
  236. }
  237. }