AdminKlTest.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Bear
  5. * Date: 2019/8/23
  6. * Time: 下午2:43
  7. */
  8. use app\common\library\Ip;
  9. use app\common\library\Redis;
  10. use app\main\constants\PayConstants;
  11. use app\main\service\AdminKlService;
  12. use app\main\service\AdminService;
  13. use app\main\service\UserService;
  14. use think\Config;
  15. class AdminKlTest extends TestInit
  16. {
  17. public function testConfig()
  18. {
  19. $qds_ids = model('admin_config')->where('is_blacklist', 0)->column('admin_id');
  20. $agent_ids = model('admin_extend')
  21. ->alias('ae')
  22. ->join('admin_config ac', 'ae.create_by=ac.admin_id')
  23. ->where('ac.is_blacklist', 0)
  24. ->column('ae.admin_id');
  25. $all_ids = implode(',', array_merge($qds_ids, $agent_ids));
  26. $data = model('orders')
  27. ->where('state', \app\main\constants\OrderContents::ORDER_STATE_PAID)
  28. ->where('NOT FIND_IN_SET(IF(deduct=1,resource_id,admin_id),"' . $all_ids . '")')
  29. ->field([
  30. 'FROM_UNIXTIME(createtime,"%Y-%m-%d")' => '日期',
  31. 'sum(IF(deduct=1,1,0))' => '扣单',
  32. 'count(1)' => '总单',
  33. 'sum(IF(deduct=1,money,0))' => '扣金额',
  34. 'sum(money)' => '总金额',
  35. ])->group('FROM_UNIXTIME(createtime,"%Y-%m-%d")')
  36. ->select();
  37. var_dump($data);
  38. }
  39. public function testOrderKL()
  40. {
  41. $_SERVER['HTTP_X_FORWARDED_FOR'] = '103.121.164.210';
  42. Ip::ip();
  43. $admin_id = 1734;
  44. $order_data = [
  45. 'day' => 0,
  46. 'user_id' => 60007,
  47. 'book_id' => '1',
  48. ];
  49. $oAdminKl = new \app\main\model\object\AdminKl();
  50. $oAdminKl->admin_id = $admin_id;
  51. $oAdminKl->business_line = PayConstants::BUSINESS_APP;
  52. $oAdminKl->is_blacklist = '0';
  53. AdminService::instance()->insertOrUpdateAdminKl($oAdminKl);
  54. $admin_config = AdminService::instance()->getAdminKlModel()->getAdminKl($admin_id);
  55. $result = AdminKlService::instance()->orderKL($admin_id, $admin_id, $order_data, false);
  56. $this->assertFalse($result->data);
  57. $oAdminKl->is_blacklist = '1';
  58. AdminService::instance()->insertOrUpdateAdminKl($oAdminKl);
  59. $result = AdminKlService::instance()->orderKL($admin_id, $admin_id, $order_data, false);
  60. $this->assertFalse($result->data);
  61. }
  62. public function testChannelCacheMoney()
  63. {
  64. $admin_id = 1734;
  65. AdminKlService::instance(PayConstants::BUSINESS_APP);
  66. $key = implode(':', ['KAM', AdminKlService::instance()->cache_param, $admin_id, date('dH')]);
  67. $money = 0.3;
  68. $before = Redis::instance()->get($key);
  69. $order_no = uniqid();
  70. AdminKlService::instance(PayConstants::BUSINESS_APP)->addChannelOrderMoneyCache($admin_id, $money, $order_no);
  71. $after = Redis::instance()->get($key);
  72. $this->assertTrue($before + $money * 100 == $after);
  73. }
  74. public function testChannelCacheMoneyDeduct()
  75. {
  76. $admin_id = 1734;
  77. AdminKlService::instance(PayConstants::BUSINESS_APP);
  78. $key = implode(':', ['KDM', AdminKlService::instance()->cache_param, $admin_id, date('dH')]);
  79. $money = 0.3;
  80. $before = Redis::instance()->get($key);
  81. $order_no = uniqid();
  82. AdminKlService::instance(PayConstants::BUSINESS_APP)->addChannelOrderMoneyCache($admin_id, $money, $order_no, true);
  83. $after = Redis::instance()->get($key);
  84. $this->assertTrue($before + $money * 100 == $after);
  85. }
  86. /**
  87. * 验证忽略信息
  88. */
  89. public function testIgnore()
  90. {
  91. $user_id = 6015;
  92. $admin_id = 1734;
  93. $ip = '103.121.164.210';
  94. $_SERVER['HTTP_X_FORWARDED_FOR'] = $ip;
  95. $recentPay = 'UPT:' . $user_id;
  96. $user_create_pay_key = 'UCPT:' . $user_id;
  97. Ip::ip();
  98. $province = Ip::province();
  99. Redis::instance()->sRemove("ALI:{$admin_id}", $province);
  100. $aIp = explode('.', $ip);
  101. Redis::instance()->sRemove("KIP:{$aIp[0]}.{$aIp[1]}",$ip);
  102. var_dump(Redis::instance()->sIsMember("KIP:{$aIp[0]}.{$aIp[1]}",$ip));
  103. var_dump(\app\common\utility\WhiteList::checkedIpWhite($ip));
  104. Redis::instance()->delete($recentPay);
  105. Redis::instance()->delete($user_create_pay_key);
  106. UserService::instance()
  107. ->getUserModel()
  108. ->setConnect($user_id)
  109. ->update(['is_white' => 0], ['id' => $user_id]);
  110. $data = UserService::instance()
  111. ->getUserModel()->getUserInfo($user_id, true);
  112. var_dump($data);
  113. exit;
  114. $order_data = [
  115. 'day' => 0,
  116. 'user_id' => $user_id,
  117. 'book_id' => '11000000034',
  118. ];
  119. $user_id = $order_data['user_id'];
  120. AdminKlService::instance(PayConstants::BUSINESS_APP);
  121. //最近一小时内的充值用户
  122. Redis::instance()->setex($recentPay, time(), 60);
  123. $result = AdminKlService::instance()->checkIgnore($admin_id, $admin_id, $order_data, 'Title', false);
  124. $this->assertFalse($result->data);
  125. Redis::instance()->del($recentPay);
  126. Redis::instance()->setex($user_create_pay_key, time(), 60);
  127. $result = AdminKlService::instance()->checkIgnore($admin_id, $admin_id, $order_data, 'Title', false);
  128. $this->assertFalse($result->data);
  129. Redis::instance()->del($user_create_pay_key);
  130. Redis::instance()->sAdd("KIP:{$aIp[0]}.{$aIp[1]}", $_SERVER['HTTP_X_FORWARDED_FOR']);
  131. $result = AdminKlService::instance()->checkIgnore($admin_id, $admin_id, $order_data, 'Title', false);
  132. $this->assertFalse($result->data);
  133. Redis::instance()->sRemove("KIP:{$aIp[0]}.{$aIp[1]}", $_SERVER['HTTP_X_FORWARDED_FOR']);
  134. UserService::instance()
  135. ->getUserModel()
  136. ->setConnect($order_data['user_id'])
  137. ->update(['is_white' => 1], ['id' => $order_data['user_id']]);
  138. UserService::instance()
  139. ->getUserModel()->getUserInfo($order_data['user_id'], true);
  140. $result = AdminKlService::instance()->checkIgnore($admin_id, $admin_id, $order_data, 'Title', false);
  141. $this->assertFalse($result->data);
  142. //
  143. UserService::instance()
  144. ->getUserModel()
  145. ->setConnect($order_data['user_id'])
  146. ->update(['is_white' => 0], ['id' => $order_data['user_id']]);
  147. UserService::instance()
  148. ->getUserModel()->getUserInfo($order_data['user_id'], true);
  149. $result = AdminKlService::instance()->checkIgnore($admin_id, $admin_id, $order_data, 'Title', false);
  150. $this->assertFalse($result->data);
  151. Redis::instance()->sRemove("ALI:{$admin_id}", $province);
  152. $result = AdminKlService::instance()->checkIgnore($admin_id, $admin_id, $order_data, 'Title', false);
  153. $this->assertFalse($result->data);
  154. Redis::instance()->sRemove("ALI:{$admin_id}", $province);
  155. $result = AdminKlService::instance()->checkIgnore($admin_id, $admin_id, $order_data, 'Title', false);
  156. $this->assertFalse($result->data);
  157. $order_data['book_id'] = 1;
  158. UserService::instance()
  159. ->getUserModel()
  160. ->setConnect($order_data['user_id'])
  161. ->update(['kandian' => 0], ['id' => $order_data['user_id']]);
  162. UserService::instance()
  163. ->getUserModel()->getUserInfo($order_data['user_id'], true);
  164. $result = AdminKlService::instance()->checkIgnore($admin_id, $admin_id, $order_data, 'Title', false);
  165. $this->assertTrue($result->data);
  166. }
  167. public function testKlRate()
  168. {
  169. $admin_id = 1734;
  170. $user_id = 60007;
  171. $admin_config = AdminService::instance()->getAdminKlModel()->getAdminKl($admin_id);
  172. AdminKlService::instance(PayConstants::BUSINESS_APP);
  173. AdminKlService::instance()->checkIsDeductThreshold($admin_id, $admin_config, $user_id);
  174. $before_time = AdminKlService::instance()->getBeforeTwentyFourTime();
  175. foreach ($before_time as $val) {
  176. $key = AdminKlService::instance()->getOrderPayMoneyKey(true, $admin_id, $val)->data;
  177. Redis::instance()->del($key);
  178. $klkey = AdminKlService::instance()->getOrderPayMoneyKey(false, $admin_id, $val)->data;
  179. Redis::instance()->del($klkey);
  180. }
  181. $money = 50;
  182. $kl_money = 300;
  183. $key = AdminKlService::instance()->getOrderPayMoneyKey(true, $admin_id, $val)->data;
  184. Redis::instance()->set($key, $money);
  185. $klkey = AdminKlService::instance()->getOrderPayMoneyKey(false, $admin_id, $val)->data;
  186. Redis::instance()->set($klkey, $kl_money);
  187. if (isset($admin_config['kl_rate'])) {
  188. $kl_rate = floatval($admin_config['kl_rate']) ? $admin_config['kl_rate'] : Config::get('site.kl_rate_app');
  189. } else {
  190. $kl_rate = Config::get('site.kl_rate_app');
  191. }
  192. $result = AdminKlService::instance()->checkIsDeductThreshold($admin_id, $admin_config, $user_id);
  193. if ($money / $kl_money > $kl_rate) {
  194. $this->assertFalse($result->data);
  195. } else {
  196. $this->assertTrue($result->data);
  197. }
  198. }
  199. public function testCounter()
  200. {
  201. $admin_id = 1734;
  202. $admin_config = AdminService::instance()->getAdminKlModel()->getAdminKl($admin_id);
  203. AdminKlService::instance(PayConstants::BUSINESS_APP);
  204. //normal
  205. $nor_key = implode(':', ['KCN', AdminKlService::instance(PayConstants::BUSINESS_APP)->cache_param, $admin_id]);
  206. $normal_index = Config::get('site.normal_num_app');
  207. if (!empty($admin_config['normal_num'])) {
  208. $normal_index = $admin_config['normal_num'];
  209. }
  210. Redis::instance()->set($nor_key, $normal_index);
  211. $data = AdminKlService::instance()->getDeductionCounter($admin_id, false, $is_transfer = false, $is_incr = false);
  212. $this->assertTrue($data->data == $normal_index);
  213. $data = AdminKlService::instance()->getDeductionCounter($admin_id, false, $is_transfer = false, $is_incr = true);
  214. $this->assertTrue($data->data == $normal_index + 1);
  215. $vip_key = implode(':', ['KAN', AdminKlService::instance(PayConstants::BUSINESS_APP)->cache_param, $admin_id]);
  216. $vip_index = Config::get('site.vip_num_app');
  217. if (!empty($admin_config['vip_num'])) {
  218. $vip_index = $admin_config['vip_num'];
  219. }
  220. Redis::instance()->set($vip_key, $vip_index);
  221. $data = AdminKlService::instance()->getDeductionCounter($admin_id, false, $is_transfer = false, $is_incr = false);
  222. $this->assertTrue($data->data == $vip_index);
  223. $data = AdminKlService::instance()->getDeductionCounter($admin_id, false, $is_transfer = false, $is_incr = true);
  224. $this->assertTrue($data->data == $vip_index + 1);
  225. }
  226. public function testGetKlMoney()
  227. {
  228. echo AdminKlService::instance(PayConstants::BUSINESS_WECHAT)->getChannelOrderPayMoney('1734',true);
  229. }
  230. }