ImportController.php 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: xiaohuitu
  5. * Date: 2020/2/18
  6. * Time: 6:36 PM
  7. */
  8. namespace console\controllers;
  9. use common\helpers\Cache;
  10. use common\helpers\Excel;
  11. use common\helpers\snowflake\SnowFake;
  12. use common\helpers\user\Info;
  13. use common\models\Declaration;
  14. use common\models\DeclarationLevel;
  15. use common\models\DecOrder;
  16. use common\models\ImportScore;
  17. use common\models\Order;
  18. use common\models\OrderShop;
  19. use common\models\PerfMonth;
  20. use common\models\PerfPeriod;
  21. use common\models\TmpAreaNetwork;
  22. use common\models\TmpDeleteUser;
  23. use common\models\TmpFreezeUser;
  24. use common\models\TmpOldNetwork;
  25. use common\models\TmpOldNetworkAll;
  26. use common\models\TmpOldNetworkError;
  27. use common\models\TmpOldNetworkReplenish;
  28. use common\models\TmpOldUser;
  29. use common\models\User;
  30. use common\models\UserInfo;
  31. use common\models\UserMove;
  32. use common\models\UserNetwork;
  33. use common\models\UserReg;
  34. use common\models\UserRelation;
  35. use console\models\ImportForm;
  36. use yii\base\BaseObject;
  37. class ImportController extends BaseController
  38. {
  39. const LIMIT = 1000;
  40. CONST EXCEL_TABLE_USER_FIELD = [
  41. '序号' => 'SORT',
  42. '会员编号' => 'USER_NAME',
  43. '会员姓名' => 'REAL_NAME',
  44. '推荐人编号' => 'REC_USER_NAME',
  45. '推荐人姓名' => 'REC_REAL_NAME',
  46. '安置人编号' => 'NET_USER_NAME',
  47. '安置人姓名' => 'NET_REAL_NAME',
  48. ];
  49. CONST EXCEL_TABLE_NETWORK_FIELD = [
  50. '会员编号' => 'USER_NAME',
  51. '会员名称' => 'REAL_NAME',
  52. '推荐人编号' => 'PARENT_USER_NAME',
  53. '推荐人名称' => 'PARENT_REAL_NAME',
  54. '安置人编号' => 'NET_USER_NAME',
  55. '安置人名称' => 'NET_REAL_NAME',
  56. ];
  57. CONST EXCEL_TABLE_POINTS_FIELD = [
  58. '会员编号' => 'USER_NAME',
  59. '会员姓名' => 'REAL_NAME',
  60. '会员级别' => 'LEVEL_NAME',
  61. '会员荣衔' => 'EMP_LEVEL_NAME',
  62. '总奖金' => 'BONUS_TOTAL',
  63. '原总奖金' => 'ORI_BONUS_TOTAL',
  64. '基础积分' => 'BASE_SCORE',
  65. '级别积分' => 'LEVEL_SCORE',
  66. '升级积分' => 'UPGRADE_SCORE',
  67. '总积分' => 'TOTAL_SCORE',
  68. ];
  69. const TOP_USER_NAME = 'Q94839185';
  70. const TOP_REAL_NAME = '齐长青';
  71. const IMPORT_CACHE_SORT_KEY = 'console:importCacheSortKey';
  72. /**
  73. * @param string $fileName
  74. * @param int $rowCount
  75. * @param int $startRow
  76. * @throws \yii\base\Exception
  77. */
  78. public function actionOldUser($fileName, $rowCount=1000, $startRow=1)
  79. {
  80. $excel = new Excel();
  81. $result = $excel->pageImportDataByExcelFile($fileName, $rowCount, $startRow, self::LIMIT);
  82. $insertData = [];
  83. foreach ($result as $everyData) {
  84. if( !$everyData ) continue;
  85. $oneInsertData = [];
  86. foreach ($everyData as $key => $value) {
  87. if( !isset(self::EXCEL_TABLE_USER_FIELD[$key]) ) continue;
  88. $oneInsertData[self::EXCEL_TABLE_USER_FIELD[$key]] = $value;
  89. }
  90. $insertData[] = $oneInsertData;
  91. unset($oneInsertData, $everyData);
  92. }
  93. // var_dump($insertData);die;
  94. TmpOldUser::batchInsert($insertData);
  95. unset($insertData);
  96. echo sprintf("【%s】导入成功".PHP_EOL, $fileName);
  97. }
  98. /**
  99. * @param string $fileName
  100. * @param int $rowCount
  101. * @param int $startRow
  102. * @throws \yii\base\Exception
  103. */
  104. public function actionOldNetwork($fileName, $rowCount=1000, $startRow=1)
  105. {
  106. ini_set('memory_limit','512M');
  107. $pageCount = ceil($rowCount/self::LIMIT);
  108. $excel = new Excel();
  109. for($page=1;$page<=$pageCount;$page++) {
  110. $newStartRow = $startRow + self::LIMIT * ($page - 1);
  111. $result = $excel->pageImportDataByExcelFile($fileName, $rowCount, $newStartRow, self::LIMIT);
  112. $insertData = [];
  113. foreach ($result as $sort => $everyData) {
  114. if( !$everyData ) continue;
  115. $oneInsertData = [];
  116. $oneInsertData['SORT'] = $newStartRow + $sort;
  117. foreach ($everyData as $key => $value) {
  118. if( !isset(self::EXCEL_TABLE_NETWORK_FIELD[$key]) ) continue;
  119. $oneInsertData[self::EXCEL_TABLE_NETWORK_FIELD[$key]] = $value;
  120. }
  121. //判断用户表中是否已经存在该会员
  122. $one = UserInfo::find()->select(["ID", "USER_NAME"])->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$oneInsertData['USER_NAME']])->asArray()->one();
  123. if( $one ){
  124. echo '会员编号'.$oneInsertData['USER_NAME'].'已存在'.PHP_EOL;
  125. continue;
  126. }
  127. if( $oneInsertData['NET_USER_NAME'] === self::TOP_USER_NAME ) {
  128. $oneInsertData['NET_DEEP'] = 1;
  129. $oneInsertData['REC_DEEP'] = 1;
  130. }else {
  131. $oneInsertData['NET_DEEP'] = 0;
  132. $oneInsertData['REC_DEEP'] = 0;
  133. }
  134. if($oneInsertData['NET_USER_NAME']==NULL) {
  135. $oneInsertData['NET_USER_NAME'] = '';
  136. $oneInsertData['NET_REAL_NAME'] = $oneInsertData['NET_REAL_NAME'] ?? '';
  137. echo '用户编号'.$oneInsertData['USER_NAME'].'的接点人为空'.PHP_EOL;
  138. }
  139. if($oneInsertData['PARENT_USER_NAME']==NULL) {
  140. $oneInsertData['PARENT_USER_NAME'] = '';
  141. $oneInsertData['PARENT_REAL_NAME'] = $oneInsertData['PARENT_REAL_NAME'] ?? '';
  142. echo '用户编号'.$oneInsertData['USER_NAME'].'的推荐人为空'.PHP_EOL;
  143. }
  144. //更正tmp_old_network表中的错误数据
  145. // $importOne = TmpOldNetwork::find()->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$oneInsertData['USER_NAME']])->asArray()->one();
  146. // if( $importOne ) {
  147. // echo $oneInsertData['USER_NAME'] . PHP_EOL;
  148. // TmpOldNetwork::updateAll([
  149. // 'PARENT_USER_NAME' => $oneInsertData['PARENT_USER_NAME'],
  150. // 'PARENT_REAL_NAME' => $oneInsertData['PARENT_REAL_NAME'],
  151. // 'NET_USER_NAME' => $oneInsertData['NET_USER_NAME'],
  152. // 'NET_REAL_NAME' => $oneInsertData['NET_REAL_NAME']
  153. // ], 'ID=:ID', ['ID'=>$importOne['ID']]);
  154. // }else {
  155. // $insertData[] = $oneInsertData;
  156. // }
  157. //
  158. // unset($importOne);
  159. $insertData[] = $oneInsertData;
  160. unset($oneInsertData, $everyData);
  161. }
  162. if( $insertData ) TmpOldNetwork::batchInsert($insertData);
  163. unset($newStartRow, $insertData);
  164. echo sprintf("文件:【%s】页数:【%s】导入成功".PHP_EOL, $fileName, $page);
  165. }
  166. }
  167. //计算导入会员中顶点的开拓深度
  168. public function actionUpdateRecTopDeep($startPage=1) {
  169. $numCount = TmpOldNetwork::find()->where("1=1")->orderBy("SORT ASC")->count("ID");
  170. $pageCount = ceil($numCount/self::LIMIT);
  171. for ($page=$startPage;$page<=$pageCount;$page++) {
  172. $pageList = TmpOldNetwork::find()->where("1=1")->orderBy("SORT ASC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  173. foreach ($pageList as $pageData) {
  174. $one = TmpOldNetwork::find()->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['PARENT_USER_NAME']])->asArray()->one();
  175. if( !$one ) {
  176. //推荐人不在导入会员中 获取深度
  177. $userInfoOne = UserInfo::find()->select(['USER_NAME', 'RELATION_DEEP'])->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['PARENT_USER_NAME']])->asArray()->one();
  178. if( !$userInfoOne ) {
  179. echo sprintf("在系统中未找到推荐人,会员编号: 【%s】,推荐人编号:【%s】" . PHP_EOL, $pageData['USER_NAME'], $pageData['PARENT_USER_NAME']);
  180. unset($one, $userInfoOne);
  181. continue;
  182. }
  183. TmpOldNetwork::updateAll(['REC_DEEP'=>$userInfoOne['RELATION_DEEP']+1], 'ID=:ID', ['ID'=>$pageData['ID']]);
  184. unset($userInfoOne);
  185. }
  186. unset($pageData,$one);
  187. }
  188. unset($pageList);
  189. }
  190. unset($numCount, $pageCount);
  191. }
  192. public function actionUpdateNetTopDeep($startPage=1) {
  193. $numCount = TmpOldNetwork::find()->where("1=1")->orderBy("SORT ASC")->count("ID");
  194. $pageCount = ceil($numCount/self::LIMIT);
  195. for ($page=$startPage;$page<=$pageCount;$page++) {
  196. $pageList = TmpOldNetwork::find()->where("1=1")->orderBy("SORT ASC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  197. foreach ($pageList as $pageData) {
  198. $one = TmpOldNetwork::find()->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['NET_USER_NAME']])->asArray()->one();
  199. if( !$one ) {
  200. //安置人不在导入会员中 获取深度
  201. $userInfoOne = UserInfo::find()->select(['USER_NAME', 'NETWORK_DEEP'])->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['NET_USER_NAME']])->asArray()->one();
  202. if( !$userInfoOne ) {
  203. echo sprintf("在系统中未找到安置人,会员编号: 【%s】,安置人编号:【%s】" . PHP_EOL, $pageData['USER_NAME'], $pageData['NET_USER_NAME']);
  204. unset($one, $userInfoOne);
  205. continue;
  206. }
  207. //更新深度
  208. TmpOldNetwork::updateAll(['NET_DEEP'=>$userInfoOne['NETWORK_DEEP']+1], 'ID=:ID', ['ID'=>$pageData['ID']]);
  209. unset($userInfoOne);
  210. }
  211. unset($pageData,$one);
  212. }
  213. unset($pageList);
  214. }
  215. unset($numCount, $pageCount);
  216. }
  217. /**
  218. * 更新安置深度
  219. * @param int $deep
  220. * @return int
  221. */
  222. public function actionUpdateNetDeep($deep=1) {
  223. echo sprintf("更新安置深度开始,当前安置深度为【%s】".PHP_EOL, $deep);
  224. $list = TmpOldNetwork::find()->where('NET_DEEP=:NET_DEEP', ['NET_DEEP'=>$deep])->asArray()->all();
  225. if( !$list ) return $deep;
  226. foreach ($list as $data) {
  227. // echo $data['USER_NAME'] . PHP_EOL;
  228. TmpOldNetwork::updateAll([
  229. 'NET_DEEP' => $deep + 1,
  230. ], 'NET_USER_NAME=:NET_USER_NAME', ['NET_USER_NAME'=>$data['USER_NAME']]);
  231. unset($data);
  232. }
  233. unset($list);
  234. return $this->actionUpdateNetDeep($deep+1);
  235. }
  236. /**
  237. * 更新安置深度
  238. * @param int $startDeep
  239. * @param int $endDeep
  240. * @return bool
  241. */
  242. public function actionUpdateNetDeepTwo($startDeep=1, $endDeep=10) {
  243. for( $deep=$startDeep;$deep<=$endDeep;$deep++ ) {
  244. $deep = $this->actionUpdateNetDeep($deep);
  245. }
  246. return true;
  247. }
  248. /**
  249. * 更新推荐深度
  250. * @param int $deep
  251. * @return int
  252. */
  253. public function actionUpdateRecDeep($deep=1) {
  254. echo sprintf("更新推荐深度开始,当前推荐深度为【%s】".PHP_EOL, $deep);
  255. $list = TmpOldNetwork::find()->where('REC_DEEP=:REC_DEEP', ['REC_DEEP'=>$deep])->asArray()->all();
  256. if( !$list ) return $deep;
  257. foreach ($list as $data) {
  258. TmpOldNetwork::updateAll([
  259. 'REC_DEEP' => $deep + 1,
  260. ], 'PARENT_USER_NAME=:PARENT_USER_NAME', ['PARENT_USER_NAME'=>$data['USER_NAME']]);
  261. unset($data);
  262. }
  263. unset($list);
  264. return $this->actionUpdateRecDeep($deep+1);
  265. }
  266. /**
  267. * 更新推荐深度
  268. * @param int $startDeep
  269. * @param int $endDeep
  270. * @return bool
  271. */
  272. public function actionUpdateRecDeepTwo($startDeep=1, $endDeep=10) {
  273. for( $deep=$startDeep;$deep<=$endDeep;$deep++ ) {
  274. $deep = $this->actionUpdateRecDeep($deep);
  275. }
  276. return true;
  277. }
  278. /**
  279. * 清空缓存
  280. */
  281. public function actionClearCache() {
  282. $importForm = new ImportForm();
  283. $importForm->clearInfoCache();
  284. echo "清空完成" . PHP_EOL;
  285. }
  286. public function actionOnlineUser($startPage=1) {
  287. //加入顶点信息
  288. $importForm = new ImportForm();
  289. //从old_network中获取所有的会员信息
  290. $numCount = TmpOldNetwork::find()->where("1=1")->orderBy("NET_DEEP ASC, REC_DEEP ASC, SORT ASC")->count("ID");
  291. $pageCount = ceil($numCount/self::LIMIT);
  292. for ($page=$startPage;$page<=$pageCount;$page++) {
  293. $pageList = TmpOldNetwork::find()->where("1=1")->orderBy("NET_DEEP ASC, REC_DEEP ASC, SORT ASC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  294. foreach ($pageList as $pageData) {
  295. $importForm->addOnlineUser($pageData);
  296. unset($pageData,$userData);
  297. }
  298. unset($pageList);
  299. echo sprintf("导入【用户】数据,总页数【%s】,当前页数:【%s】导入成功".PHP_EOL, $pageCount, $page);
  300. }
  301. unset($db, $numCount, $pageCount);
  302. }
  303. /**
  304. * 写入用户缓存数据
  305. * @param int $startPage
  306. */
  307. public function actionAddUserCache($startPage=1) {
  308. $importForm = new ImportForm();
  309. $importForm->clearCache();
  310. $numCount = User::find()->where("1=1")->orderBy("ID DESC")->count("ID");
  311. $pageCount = ceil($numCount/self::LIMIT);
  312. for ($page=$startPage;$page<=$pageCount;$page++) {
  313. $pageList = User::find()->select(['ID', 'USER_NAME'])->where("1=1")->orderBy("ID DESC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  314. foreach ($pageList as $pageData) {
  315. $importForm->cacheUserId($pageData['USER_NAME'], $pageData['ID']);
  316. unset($pageData);
  317. }
  318. unset($pageList);
  319. echo sprintf("写入用户缓存数据,总页数【%s】,当前页数:【%s】写入成功".PHP_EOL, $pageCount, $page);
  320. }
  321. }
  322. //写userinfo及关系表
  323. public function actionOnlineInfo($startPage=1 ,$startStatus=true,$startUserName=NULL) {
  324. //从old_network中获取所有的会员信息
  325. $numCount = TmpOldNetwork::find()->where("1=1")->orderBy("NET_DEEP ASC, REC_DEEP ASC, SORT ASC")->count("ID");
  326. // $db = \Yii::$app->db;
  327. $pageCount = ceil($numCount/self::LIMIT);
  328. for ($page=$startPage;$page<=$pageCount;$page++) {
  329. $pageList = TmpOldNetwork::find()->where("1=1")->orderBy("NET_DEEP ASC, REC_DEEP ASC, SORT ASC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  330. // $transaction = $db->beginTransaction();
  331. $importForm = new ImportForm();
  332. // try {
  333. foreach ($pageList as $pageData) {
  334. if( !$startStatus && $pageData["USER_NAME"] === $startUserName )
  335. {
  336. $startStatus = true;
  337. }
  338. if( !$startStatus ) continue;
  339. $importForm->addOnlineInfo($pageData);
  340. }
  341. // $transaction->commit();
  342. // }catch (\Exception $e) {
  343. // $transaction->rollBack();
  344. //
  345. // echo $e->getTraceAsString();die;
  346. // }
  347. unset($pageList);
  348. echo sprintf("导入【关系】数据,总页数【%s】,页数:【%s】导入成功".PHP_EOL, $pageCount, $page);
  349. }
  350. unset($db, $numCount, $pageCount);
  351. }
  352. //写推荐关系表
  353. public function actionOnlineRelation($startPage=1 ,$startStatus=true,$startUserName=NULL) {
  354. //从old_network中获取所有的会员信息
  355. $numCount = TmpOldNetwork::find()->where("1=1")->orderBy("REC_DEEP ASC, SORT ASC")->count("ID");
  356. $pageCount = ceil($numCount/self::LIMIT);
  357. for ($page=$startPage;$page<=$pageCount;$page++) {
  358. $pageList = TmpOldNetwork::find()->where("1=1")->orderBy("REC_DEEP ASC, SORT ASC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  359. $transaction = \Yii::$app->db->beginTransaction();
  360. try {
  361. foreach ($pageList as $pageData) {
  362. if( !$startStatus && $pageData["USER_NAME"] === $startUserName )
  363. {
  364. $startStatus = true;
  365. }
  366. if( !$startStatus ) continue;
  367. //会员ID
  368. $userId = Info::getUserIdByUserName($pageData['USER_NAME']);
  369. //推荐人ID
  370. $userInfoRec = UserInfo::find()->select(['USER_ID'])->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['PARENT_USER_NAME']])->asArray()->one();
  371. $recUid = $userInfoRec['USER_ID'];
  372. //推荐关系
  373. $conRelationInfo = UserRelation::findOneAsArray(['USER_ID'=>$recUid]);
  374. if( !$conRelationInfo ) {
  375. throw new Exception('推荐人'.$pageData['PARENT_USER_NAME'].'不存在');
  376. }
  377. //修改深度
  378. $deep = $conRelationInfo['TOP_DEEP'] + 1;
  379. UserInfo::updateAll([
  380. "RELATION_DEEP" => $deep,
  381. ], "USER_ID='{$userId}'");
  382. // 加入推荐网络关系
  383. $insertData = [
  384. 'ID' => SnowFake::instance()->generateId(),
  385. "USER_ID" => $userId,
  386. "PARENT_UID" => $recUid,
  387. "TOP_UID" => $conRelationInfo['TOP_UID'],
  388. "TOP_DEEP" => $deep,
  389. "PARENT_UIDS" => $conRelationInfo['PARENT_UIDS'] . ',' . $recUid,
  390. "CREATED_AT" => time(),
  391. ];
  392. UserRelation::insertOne($insertData);
  393. if(!UserInfo::updateAllCounters(['REC_NUM'=>1], "USER_ID=:USER_ID", [':USER_ID'=>$recUid])){
  394. throw new Exception('会员开拓关系下级节点数量更新失败');
  395. }
  396. unset($userId,$userInfoRec,$recUid,$conRelationInfo,$deep,$insertData);
  397. }
  398. $transaction->commit();
  399. }catch (\Exception $e) {
  400. $transaction->rollBack();
  401. echo $e->getMessage();die;
  402. }
  403. unset($pageList);
  404. echo sprintf("导入【关系】数据,总页数【%s】,页数:【%s】导入成功".PHP_EOL, $pageCount, $page);
  405. }
  406. unset($db, $numCount, $pageCount);
  407. }
  408. /**
  409. * 检测排序
  410. * @param int $startPage
  411. */
  412. public function actionCheckSort($startPage=1){
  413. \Yii::$app->redis->del(self::IMPORT_CACHE_SORT_KEY);
  414. $numCount = User::find()->where("1=1")->orderBy("ID DESC")->count("ID");
  415. $pageCount = ceil($numCount/self::LIMIT);
  416. for ($page=$startPage;$page<=$pageCount;$page++) {
  417. $pageList = User::find()->select(['ID', 'USER_NAME'])->where("1=1")->orderBy("ID DESC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  418. foreach ($pageList as $pageData) {
  419. \Yii::$app->redis->hSet(self::IMPORT_CACHE_SORT_KEY, $pageData['USER_NAME'], 1);
  420. unset($pageData);
  421. }
  422. unset($pageList);
  423. // echo sprintf("写入用户缓存数据,总页数【%s】,当前页数:【%s】写入成功".PHP_EOL, $pageCount, $page);
  424. }
  425. unset($numCount);
  426. $numCount = TmpOldNetwork::find()->where("1=1")->orderBy("NET_DEEP ASC, REC_DEEP ASC, SORT ASC")->count("ID");
  427. $pageCount = ceil($numCount/self::LIMIT);
  428. for ($page=$startPage;$page<=$pageCount;$page++) {
  429. $pageList = TmpOldNetwork::find()->where("1=1")->orderBy("NET_DEEP ASC, REC_DEEP ASC, SORT ASC")->offset(($page - 1) * self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  430. foreach ($pageList as $pageData) {
  431. $recStatus = \Yii::$app->redis->hGet(self::IMPORT_CACHE_SORT_KEY, $pageData['PARENT_USER_NAME']);
  432. $netStatus = \Yii::$app->redis->hGet(self::IMPORT_CACHE_SORT_KEY, $pageData['NET_USER_NAME']);
  433. if( !$recStatus || !$netStatus ) {
  434. echo sprintf("用户编号: %s,用户姓名:%s,推荐人编号:%s,推荐人姓名:%s,安置人编号:%s,安置人姓名:%s" . PHP_EOL, $pageData['USER_NAME'], $pageData['REAL_NAME'], $pageData['PARENT_USER_NAME'], $pageData['PARENT_REAL_NAME'], $pageData['NET_USER_NAME'], $pageData['NET_REAL_NAME']);
  435. TmpOldNetworkError::insertOne($pageData);
  436. TmpOldNetwork::deleteAll('ID=:ID', ['ID'=>$pageData['ID']]);
  437. }
  438. unset($recStatus, $netStatus);
  439. \Yii::$app->redis->hSet(self::IMPORT_CACHE_SORT_KEY, $pageData['USER_NAME'], 1);
  440. unset($pageData);
  441. }
  442. unset($pageList);
  443. // echo sprintf("写入导入缓存数据,总页数【%s】,当前页数:【%s】写入成功".PHP_EOL, $pageCount, $page);
  444. }
  445. }
  446. public function actionCheckErrorSort() {
  447. $numCount = TmpOldNetwork::find()->where("1=1")->orderBy("SORT ASC")->count("ID");
  448. $pageCount = ceil($numCount/self::LIMIT);
  449. for ($page=1;$page<=$pageCount;$page++) {
  450. $pageList = TmpOldNetwork::find()->where("1=1")->orderBy("SORT ASC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  451. foreach ($pageList as $pageData) {
  452. //查询这个人的推荐人和接点人是否在当前表中
  453. $one = TmpOldNetwork::find()->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['PARENT_USER_NAME']])->asArray()->one();
  454. if( !$one ) {
  455. $userInfoOne = UserInfo::find()->select(['USER_NAME', 'RELATION_DEEP', 'NETWORK_DEEP'])->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['PARENT_USER_NAME']])->asArray()->one();
  456. if( !$userInfoOne ) {
  457. TmpOldNetworkError::insertOne($pageData);
  458. TmpOldNetwork::deleteAll('ID=:ID', ['ID'=>$pageData['ID']]);
  459. echo 'REC ERROR' . $pageData['USER_NAME'] . PHP_EOL;
  460. unset($one, $userInfoOne);
  461. continue;
  462. }
  463. unset($userInfoOne);
  464. }
  465. unset($one);
  466. if( $pageData['PARENT_USER_NAME'] !== $pageData['NET_USER_NAME'] ) {
  467. //接点人
  468. $one = TmpOldNetwork::find()->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['NET_USER_NAME']])->asArray()->one();
  469. if( !$one ) {
  470. $userInfoOne = UserInfo::find()->select(['USER_NAME', 'RELATION_DEEP', 'NETWORK_DEEP'])->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['NET_USER_NAME']])->asArray()->one();
  471. if( !$userInfoOne ) {
  472. TmpOldNetworkError::insertOne($pageData);
  473. TmpOldNetwork::deleteAll('ID=:ID', ['ID'=>$pageData['ID']]);
  474. echo 'NET ERROR' . $pageData['USER_NAME'] . PHP_EOL;
  475. unset($one, $userInfoOne);
  476. continue;
  477. }
  478. unset($userInfoOne);
  479. }
  480. unset($one);
  481. }
  482. unset($pageData);
  483. }
  484. unset($pageList);
  485. }
  486. }
  487. /**
  488. * 为上级增加数量
  489. * @param int $startPage
  490. */
  491. public function actionUpdateParentNum($startPage=1){
  492. $numCount = UserInfo::find()->select('USER_ID,CON_UID,REC_UID')->where("1=1")->orderBy("ID DESC")->count("ID");
  493. $pageCount = ceil($numCount/self::LIMIT);
  494. for ($page=$startPage;$page<=$pageCount;$page++) {
  495. $pageList = UserInfo::find()->select('USER_ID,CON_UID,REC_UID')->where("1=1")->orderBy("ID DESC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  496. foreach ($pageList as $pageData) {
  497. if($pageData['CON_UID']){
  498. UserInfo::updateAllCounters(['CON_NUM'=> 1], "USER_ID=:USER_ID", [':USER_ID'=>$pageData['CON_UID']]);
  499. }
  500. if($pageData['REC_UID']){
  501. UserInfo::updateAllCounters(['REC_NUM'=> 1], "USER_ID=:USER_ID", [':USER_ID'=>$pageData['REC_UID']]);
  502. }
  503. unset($pageData);
  504. }
  505. unset($pageList);
  506. echo sprintf("导入【关系】数据,总页数【%s】,页数:【%s】导入成功".PHP_EOL, $pageCount, $page);
  507. }
  508. unset($numCount, $pageCount);
  509. }
  510. //删除未写入完整的用户信息
  511. public function actionDeleteUserInfo($userName) {
  512. //从User中获取会员ID
  513. $userData = User::find()->select(['ID'])->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$userName])->asArray()->one();
  514. if( !$userData ) {
  515. return true;
  516. }
  517. UserInfo::deleteAll("USER_ID='{$userData['ID']}'");
  518. $netInfo = UserNetwork::find()->where('USER_ID=:USER_ID', ['USER_ID'=>$userData['ID']])->asArray()->one();
  519. if($netInfo){
  520. UserNetwork::deleteAll("USER_ID='{$userData['ID']}'");
  521. }
  522. $recInfo = UserNetwork::find()->where('USER_ID=:USER_ID', ['USER_ID'=>$userData['ID']])->asArray()->one();
  523. if($recInfo){
  524. UserRelation::deleteAll("USER_ID='{$userData['ID']}'");
  525. }
  526. echo sprintf("删除用户【%s】,成功".PHP_EOL, $userName);
  527. unset($userData,$netInfo,$recInfo);
  528. }
  529. /**
  530. * 按深度更新期数
  531. * @param int $startDeep
  532. */
  533. public function actionUpdatePeriod($startDeep=1) {
  534. for( $deep=$startDeep;$deep<=515;$deep++ ) {
  535. UserNetwork::updateAll(['PERIOD_NUM'=>103], 'TOP_DEEP='.$deep);
  536. UserRelation::updateAll(['PERIOD_NUM'=>103], 'TOP_DEEP='.$deep);
  537. echo sprintf("更新【期数】数据,当前深度为【%s】成功".PHP_EOL, $deep);
  538. }
  539. }
  540. /**
  541. * 写入用户信息缓存数据
  542. * @param int $startPage
  543. */
  544. public function actionAddUserInfoCache($startPage=1) {
  545. $importForm = new ImportForm();
  546. $importForm->clearInfoCache();
  547. $numCount = UserInfo::find()->where("1=1")->orderBy("ID DESC")->count("ID");
  548. $pageCount = ceil($numCount/self::LIMIT);
  549. for ($page=$startPage;$page<=$pageCount;$page++) {
  550. $pageList = UserInfo::find()->select(['USER_ID', 'USER_NAME', 'CON_UID', 'REC_UID'])->where("1=1")->orderBy("ID DESC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  551. foreach ($pageList as $pageData) {
  552. $importForm->cacheUserInfo($pageData['USER_ID'], $pageData);
  553. unset($pageData);
  554. }
  555. unset($pageList);
  556. echo sprintf("写入用户缓存数据,总页数【%s】,当前页数:【%s】写入成功".PHP_EOL, $pageCount, $page);
  557. }
  558. }
  559. /**
  560. * 获取最终父顶点
  561. * @param string $userName
  562. * @return bool
  563. */
  564. public function actionFindParent($userName='H15678858') {
  565. echo $userName . PHP_EOL;
  566. // $circleData = [
  567. // 'H19546931',
  568. // 'H52702897',
  569. // 'H71350536',
  570. // 'H15116023',
  571. // ];
  572. // if( in_array($userName, $circleData) ) {
  573. // return true;
  574. // }
  575. // unset($circleData);
  576. $data = TmpOldNetwork::find()->select(['NET_USER_NAME'])->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$userName])->asArray()->one();
  577. if( !$data ) {
  578. return true;
  579. }
  580. unset($userName);
  581. $this->actionFindParent($data['NET_USER_NAME']);
  582. }
  583. public function actionFindRecParent($userName='A14998649') {
  584. echo $userName . PHP_EOL;
  585. $data = TmpOldNetworkAll::find()->select(['PARENT_USER_NAME'])->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$userName])->asArray()->one();
  586. if( !$data ) {
  587. return true;
  588. }
  589. unset($userName);
  590. $this->actionFindRecParent($data['PARENT_USER_NAME']);
  591. }
  592. public function actionGetNextUser($page=1) {
  593. $hitUserName = 'D17173496';
  594. $pageList = TmpOldNetwork::find()->where("1=1")->orderBy("NET_DEEP ASC, REC_DEEP ASC, SORT ASC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  595. $key = 0;
  596. $hit = false;
  597. foreach ($pageList as $key => $pageData) {
  598. if( $pageData['USER_NAME'] === $hitUserName ) {
  599. $hit = true;
  600. break;
  601. }
  602. }
  603. if( $hit ) {
  604. echo 'hit' . PHP_EOL;
  605. $hitKey = $key+1;
  606. if( isset($pageList[$hitKey]) ) {
  607. echo sprintf("hit user is %s" . PHP_EOL, $pageList[$hitKey]['USER_NAME']);
  608. }else {
  609. echo sprintf("hit user is %s first one" . PHP_EOL, $page+1);
  610. }
  611. }else {
  612. echo 'no hit' . PHP_EOL;
  613. }
  614. }
  615. //超出点位验证
  616. public function actionFindNetPoint($startPage=1) {
  617. $numCount = TmpOldNetwork::find()->select(["NET_USER_NAME"])->where("1=1")->orderBy("ID DESC")->count("ID");
  618. $pageCount = ceil($numCount/self::LIMIT);
  619. for ($page=$startPage;$page<=$pageCount;$page++) {
  620. $pageList = TmpOldNetwork::find()->select(['NET_USER_NAME'])->where("1=1")->orderBy("ID DESC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  621. foreach ($pageList as $pageData) {
  622. $location = TmpOldNetwork::find()->where('NET_USER_NAME=:NET_USER_NAME', ['NET_USER_NAME'=>$pageData['NET_USER_NAME']])->count();
  623. $userId = Info::getUserIdByUserName($pageData['NET_USER_NAME']);
  624. if($userId){
  625. $location2 = UserInfo::find()->where('CON_UID=:CON_UID', ['CON_UID'=>$userId])->count();
  626. }else{
  627. $location2=0;
  628. }
  629. $points = $location + $location2;
  630. if($points>3){
  631. echo sprintf("安置人编号【%s】,点位数:【%s】超出".PHP_EOL, $pageData['NET_USER_NAME'], $points);
  632. }
  633. unset($pageData,$location,$location2,$points);
  634. }
  635. unset($pageList);
  636. echo sprintf("查询安置人点位,总页数【%s】,当前页数:【%s】完成".PHP_EOL, $pageCount, $page);
  637. }
  638. unset($numCount, $pageCount);
  639. }
  640. //接点人是否存在
  641. public function actionFindNetUser($startPage=1) {
  642. $numCount = TmpOldNetwork::find()->select(["NET_USER_NAME"])->where("1=1")->orderBy("ID DESC")->count("ID");
  643. $pageCount = ceil($numCount/self::LIMIT);
  644. $i=0;
  645. for ($page=$startPage;$page<=$pageCount;$page++) {
  646. $pageList = TmpOldNetwork::find()->select(['NET_USER_NAME'])->where("1=1")->orderBy("ID DESC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  647. foreach ($pageList as $pageData) {
  648. $jiedian2 = TmpOldNetwork::find()->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['NET_USER_NAME']])->count();
  649. if(!$jiedian2){
  650. $one = User::find()->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['NET_USER_NAME']])->asArray()->one();
  651. $i++;
  652. // $deep = $one['NETWORK_DEEP'];
  653. // TmpOldNetwork::updateAll([
  654. // 'NET_DEEP' => $deep+1
  655. // ], 'USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['USER_NAME']]);
  656. //echo sprintf("安置人编号【%s】,导入数据中存在".PHP_EOL, $pageData['NET_USER_NAME']);
  657. if(!$one) {
  658. echo sprintf("安置人编号【%s】,系统与导入数据中都不存在" . PHP_EOL, $pageData['NET_USER_NAME'], $one['NETWORK_DEEP']);
  659. }
  660. }
  661. unset($pageData,$location,$location2,$points);
  662. }
  663. unset($pageList);
  664. echo sprintf("查询安置人是否存在,总页数【%s】,当前页数:【%s】完成".PHP_EOL, $pageCount, $page);
  665. }
  666. echo $i;
  667. unset($numCount, $pageCount);
  668. }
  669. //推荐人是否存在
  670. public function actionFindRecUser($startPage=1) {
  671. $numCount = TmpOldNetwork::find()->select(["PARENT_USER_NAME"])->where("1=1")->orderBy("ID DESC")->count("ID");
  672. $pageCount = ceil($numCount/self::LIMIT);
  673. $i=0;
  674. for ($page=$startPage;$page<=$pageCount;$page++) {
  675. $pageList = TmpOldNetwork::find()->select(['PARENT_USER_NAME'])->where("1=1")->orderBy("ID DESC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  676. foreach ($pageList as $pageData) {
  677. $jiedian2 = TmpOldNetwork::find()->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['PARENT_USER_NAME']])->count();
  678. if(!$jiedian2){
  679. $one = User::find()->where('USER_NAME=:USER_NAME', ['USER_NAME'=>$pageData['PARENT_USER_NAME']])->asArray()->one();
  680. $i++;
  681. if(!$one) {
  682. echo sprintf("推荐人编号【%s】,系统与导入数据中都不存在" . PHP_EOL, $pageData['PARENT_USER_NAME']);
  683. }
  684. }
  685. unset($pageData,$location,$location2,$points);
  686. }
  687. unset($pageList);
  688. echo sprintf("查询推荐人是否存在,总页数【%s】,当前页数:【%s】完成".PHP_EOL, $pageCount, $page);
  689. }
  690. echo $i;
  691. unset($numCount, $pageCount);
  692. }
  693. //导出会员及推荐人、级别信息
  694. public function actionGetAllUser($startPage=1) {
  695. $numCount = User::find()->where("1=1")->orderBy("ID DESC")->count("ID");
  696. $pageCount = ceil($numCount/self::LIMIT);
  697. echo sprintf("会员编号,会员姓名,推荐人,手机号,级别,密文密码".PHP_EOL);
  698. for ($page=$startPage;$page<=$pageCount;$page++) {
  699. $pageList = User::find()->select(["ID","USER_NAME","PASSWORD_HASH","REAL_NAME","MOBILE","DEC_LV"])->where("1=1")->orderBy("ID DESC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  700. foreach ($pageList as $pageData) {
  701. //报单级别
  702. $decLevel = DeclarationLevel::find()->where('ID=:ID', ['ID'=>$pageData['DEC_LV']])->asArray()->one();
  703. $decLvName = $decLevel['LEVEL_NAME']??'';
  704. //推荐人
  705. $recUser = UserInfo::find()->select(["REC_UID"])->where('USER_ID=:USER_ID', ['USER_ID'=>$pageData['ID']])->asArray()->one();
  706. $recName = Info::getUserNameByUserId($recUser['REC_UID']);
  707. //输出
  708. echo sprintf("【%s】,%s,%s,%s,%s,【%s】".PHP_EOL, $pageData['USER_NAME'], $pageData['REAL_NAME'], $recName, $pageData['MOBILE'], $decLvName, $pageData['PASSWORD_HASH']);
  709. unset($pageData,$decLevel,$decLvName,$recUser,$recName);
  710. }
  711. unset($pageList);
  712. echo sprintf("导出会员信息,总页数【%s】,当前页数:【%s】完成".PHP_EOL, $pageCount, $page);
  713. }
  714. unset($numCount, $pageCount);
  715. }
  716. public function actionPerfMonth($startPage=1) {
  717. $numCount = PerfMonth::find()->where("CALC_MONTH='202007'")->orderBy("ID ASC")->count("ID");
  718. $pageCount = ceil($numCount/self::LIMIT);
  719. echo sprintf("会员编号,个人业绩,月新增团队业绩,月累计团队业绩".PHP_EOL);
  720. for ($page=$startPage;$page<=$pageCount;$page++) {
  721. $pageList = PerfMonth::find()->select('USER_ID,PV_PCS,PV_PSS,PV_PSS_TOTAL')->where("CALC_MONTH='202007'")->orderBy("ID ASC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  722. foreach ($pageList as $pageData) {
  723. $userName = Info::getUserNameByUserId($pageData['USER_ID']);
  724. echo sprintf("%s,%s,%s,%s" . PHP_EOL, $userName, $pageData['PV_PCS'], $pageData['PV_PSS'], $pageData['PV_PSS_TOTAL']);
  725. unset($pageData,$userName);
  726. }
  727. unset($pageList);
  728. echo sprintf("导出会员业绩信息,总页数【%s】,当前页数:【%s】完成".PHP_EOL, $pageCount, $page);
  729. }
  730. unset($numCount, $pageCount);
  731. }
  732. //根据条件判断会员激活状态
  733. public function actionEditUserStatus($startPage=1) {
  734. $numCount = User::find()->where("1=1")->orderBy("ID DESC")->count("ID");
  735. $pageCount = ceil($numCount/self::LIMIT);
  736. for ($page=$startPage;$page<=$pageCount;$page++) {
  737. $pageList = User::find()->select(["ID","STATUS","USER_NAME"])->where("1=1")->orderBy("ID DESC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  738. foreach ($pageList as $pageData) {
  739. // 下单金额/推荐人数
  740. $orderAmount = Order::find()->where('USER_ID=:USER_ID', [':USER_ID' => $pageData['ID']])->SUM('ORDER_AMOUNT');
  741. $orderShopAmount = OrderShop::find()->where('USER_ID=:USER_ID', [':USER_ID' => $pageData['ID']])->SUM('ORDER_AMOUNT');
  742. $amount = $orderAmount + $orderShopAmount;
  743. $recNum = intval(DecOrder::find()->where('REC_USER_ID=:REC_USER_ID', [':REC_USER_ID' => $pageData['ID']])->count());
  744. if ($amount < 300 && $recNum==0) {
  745. //修改为冻结状态
  746. User::updateAll([
  747. 'STATUS' => 0
  748. ], 'ID=:ID', ['ID' => $pageData['ID']]);
  749. echo sprintf("修改会员编号【%s】状态冻结" . PHP_EOL, $pageData['USER_NAME']);
  750. }
  751. unset($pageData,$orderAmount,$orderShopAmount,$amount,$recNum);
  752. }
  753. unset($pageList);
  754. echo sprintf("修改会员状态,总页数【%s】,当前页数:【%s】完成".PHP_EOL, $pageCount, $page);
  755. }
  756. unset($numCount, $pageCount);
  757. }
  758. public function actionUsernameUpper($startPage=1) {
  759. $numCount = User::find()->where("1=1")->orderBy("ID ASC")->count("ID");
  760. $i = 0;
  761. $j = 0;
  762. $pageCount = ceil($numCount/self::LIMIT);
  763. for ($page=$startPage;$page<=$pageCount;$page++) {
  764. $pageList = User::find()->where("1=1")->orderBy("ID ASC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  765. foreach ($pageList as $pageData) {
  766. //含中文会员编号跳过
  767. if (preg_match("/([\x81-\xfe][\x40-\xfe])/", $pageData['USER_NAME'], $match)) {
  768. continue;
  769. }
  770. //会员编号字母转大写
  771. $username = strtoupper($pageData['USER_NAME']);
  772. if($pageData['USER_NAME']===$username) continue;
  773. $one = User::find()->where("USER_NAME='".$username."' and ID!='".$pageData['ID']."'")->asArray()->one();
  774. if( !$one ) {
  775. User::updateAll(['USER_NAME'=> $username], 'ID=:ID', ['ID'=>$pageData['ID']]);
  776. $j++;
  777. echo sprintf("修改会员编号成功,会员编号: 【%s】,会员ID:【%s】" . PHP_EOL, $username, $pageData['ID']);
  778. }else{
  779. $i++;
  780. echo sprintf("会员编号重复,会员编号: 【%s】,会员ID:【%s】" . PHP_EOL, $username, $pageData['ID']);
  781. }
  782. unset($pageData,$one);
  783. }
  784. unset($pageList);
  785. echo sprintf("修改会员编号,总页数【%s】,当前页数:【%s】完成".PHP_EOL, $pageCount, $page);
  786. }
  787. echo $i.'=='.$j;
  788. unset($numCount, $pageCount);
  789. }
  790. public function actionUserinfoUpper($startPage=1) {
  791. $numCount = UserInfo::find()->where("1=1")->orderBy("ID ASC")->count("ID");
  792. $i = 0;
  793. $j = 0;
  794. $pageCount = ceil($numCount/self::LIMIT);
  795. for ($page=$startPage;$page<=$pageCount;$page++) {
  796. $pageList = UserInfo::find()->where("1=1")->orderBy("ID ASC")->offset(($page-1)*self::LIMIT)->limit(self::LIMIT)->asArray()->all();
  797. foreach ($pageList as $pageData) {
  798. //含中文会员编号跳过
  799. if (preg_match("/([\x81-\xfe][\x40-\xfe])/", $pageData['USER_NAME'], $match)) {
  800. continue;
  801. }
  802. //会员编号字母转大写
  803. $username = strtoupper($pageData['USER_NAME']);
  804. if($pageData['USER_NAME']===$username) continue;
  805. $one = UserInfo::find()->where("USER_NAME='".$username."' and ID!='".$pageData['ID']."'")->asArray()->one();
  806. if( !$one ) {
  807. UserInfo::updateAll(['USER_NAME'=> $username], 'ID=:ID', ['ID'=>$pageData['ID']]);
  808. $j++;
  809. echo sprintf("修改会员编号成功,会员编号: 【%s】,会员ID:【%s】" . PHP_EOL, $username, $pageData['USER_ID']);
  810. }else{
  811. $i++;
  812. echo sprintf("会员编号重复,会员编号: 【%s】,会员ID:【%s】" . PHP_EOL, $username, $pageData['USER_ID']);
  813. }
  814. unset($pageData,$one);
  815. }
  816. unset($pageList);
  817. echo sprintf("修改会员编号,总页数【%s】,当前页数:【%s】完成".PHP_EOL, $pageCount, $page);
  818. }
  819. echo $i.'=='.$j;
  820. unset($numCount, $pageCount);
  821. }
  822. /**
  823. * 导入积分数据
  824. * @param $fileName
  825. * @param int $rowCount
  826. * @param int $startRow
  827. * @throws \Exception
  828. */
  829. public function actionPointsData($fileName, $rowCount=1000, $startRow=1)
  830. {
  831. $excel = new Excel();
  832. $result = $excel->pageImportDataByExcelFile($fileName, $rowCount, $startRow, self::LIMIT);
  833. $insertData = [];
  834. foreach ($result as $everyData) {
  835. if( !$everyData ) continue;
  836. $oneInsertData = [];
  837. foreach ($everyData as $key => $value) {
  838. if( !isset(self::EXCEL_TABLE_POINTS_FIELD[$key]) ) continue;
  839. $oneInsertData[self::EXCEL_TABLE_POINTS_FIELD[$key]] = $value;
  840. }
  841. $user = Info::getBaseUserByUserName($oneInsertData['USER_NAME']);
  842. if ( !$user ) {
  843. throw new \Exception(sprintf("用户【%s】不存在", $oneInsertData['USER_NAME']));
  844. }
  845. $oneInsertData['USER_ID'] = $user['ID'];
  846. $insertData[] = $oneInsertData;
  847. unset($oneInsertData, $everyData);
  848. }
  849. // var_dump($insertData);die;
  850. ImportScore::batchInsert($insertData);
  851. unset($insertData);
  852. echo sprintf("【%s】导入成功".PHP_EOL, $fileName);
  853. }
  854. }