PushBaseDataToCalc.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: leo
  5. * Date: 2018/8/2
  6. * Time: 上午10:38
  7. */
  8. namespace common\helpers\bonus\Calc;
  9. use common\components\ActiveRecord;
  10. use common\models\CalcBonus;
  11. use common\models\CalcBonusBS;
  12. use common\models\CalcBonusQY;
  13. use common\models\EmployLevel;
  14. use common\models\forms\DeclarationForm;
  15. use common\models\PerfMonth;
  16. use common\models\PerfPeriod;
  17. use common\models\PerfStandard;
  18. use common\models\Period;
  19. class PushBaseDataToCalc extends BaseBusiness
  20. {
  21. const BASE_INFO_METHODS = [
  22. //--- 用户表
  23. 'user' => ['separately' => true, 'table' => 'AR_USER', 'field' => [
  24. 'ID',
  25. 'USER_NAME',
  26. 'REAL_NAME',
  27. 'CREATED_AT',
  28. 'STATUS',
  29. 'DEC_LV',
  30. 'EMP_LV',
  31. 'CROWN_LV',
  32. 'IS_DEC',
  33. 'DEC_ID',
  34. 'DEC_ROLE_ID',
  35. 'LAST_DEC_LV',
  36. 'IS_STUDIO',
  37. 'LAST_CROWN_LV',
  38. 'DELETED',
  39. ]],
  40. //--- 用户信息表
  41. 'userInfo' => ['table' => 'AR_USER_INFO', 'field' => [
  42. 'ID',
  43. 'USER_ID',
  44. 'USER_NAME',
  45. 'CON_UID',
  46. 'REC_UID',
  47. 'CREATED_AT',
  48. ]],
  49. //---配置表初始化数据见数据库是否开启管理奖,使用的是openbs进行控制
  50. 'config' => ['table' => 'AR_CONFIG', 'field' => [
  51. 'CONFIG_NAME',
  52. 'TITLE',
  53. 'UNIT',
  54. 'INPUT_TYPE',
  55. 'OPTIONS',
  56. 'VALUE',
  57. 'TYPE',
  58. 'SORT',
  59. 'CREATED_AT',
  60. 'UPDATED_AT',
  61. ]],
  62. //--- 报单级别配置表
  63. 'declarationLevel' => ['table' => 'AR_DECLARATION_LEVEL', 'field' => [
  64. 'ID',
  65. 'LEVEL_NAME',
  66. 'PERF',
  67. 'QY_PERCENT',
  68. 'QY_TOUCH_CAP',
  69. 'QY_BIG_CAP',
  70. 'SORT',
  71. 'CREATED_AT',
  72. 'INCOME_CAP',
  73. ]],
  74. //--- 级别配置表
  75. 'employLevel' => ['table' => 'AR_EMPLOY_LEVEL', 'field' => [
  76. 'ID',
  77. 'LEVEL_NAME',
  78. 'CREATED_AT',
  79. 'BS_PERCENT',
  80. 'LEVEL_SORT',
  81. 'TOURISM_PERCENT',
  82. 'GARAGE_PERCENT',
  83. 'ACHIEVE_PV',
  84. 'ACHIEVE_MEMBER_NUM',
  85. 'ACHIEVE_PERF_PV',
  86. ], 'alias' => [
  87. 'LEVEL_SORT' => 'SORT',
  88. ]],
  89. //--- 报单中心级别配置表
  90. 'decRole' => ['table' => 'AR_DEC_ROLE', 'field' => [
  91. 'ID',
  92. 'ROLE_NAME',
  93. 'FW_BONUS_PERCENT',
  94. 'SORT',
  95. 'CREATED_AT',
  96. ]],
  97. //--- 安置网络表
  98. 'userNetwork' => ['table' => 'AR_USER_NETWORK_NEW', 'field' => [
  99. 'ID',
  100. 'USER_ID',
  101. 'PARENT_UID',
  102. // 'LOCATION_TAG',
  103. 'RELATIVE_LOCATION',
  104. // 'TOP_UID',
  105. // 'TOP_DEEP',
  106. // 'PARENT_UIDS',
  107. 'CREATED_AT',
  108. // 'UPDATED_AT',
  109. ]],
  110. //--- 星级配置表
  111. 'starCrownLevel' => ['table' => 'AR_CROWN_LEVEL', 'field' => [
  112. 'ID',
  113. 'LEVEL_NAME',
  114. 'MIN_LEVEL_ID',
  115. 'LEVEL_SCORE',
  116. 'UPGRADE_SCORE',
  117. 'SORT',
  118. 'TOURISM_PERCENT',
  119. 'VILLA_PERCENT',
  120. 'GARAGE_PERCENT',
  121. 'CREATED_AT',
  122. ]],
  123. //--- 业绩单表
  124. 'perfOrder' => ['separately' => true, 'table' => 'AR_PERF_ORDER', 'field' => [
  125. 'ID',
  126. 'SN',
  127. // 'PERF_TYPE',
  128. 'DEC_TYPE',
  129. 'USER_ID',
  130. 'PV',
  131. 'PERIOD_NUM',
  132. 'CALC_MONTH',
  133. 'DEC_USER_ID',
  134. 'CREATED_AT',
  135. 'ORDER_AMOUNT',
  136. 'PAY_TYPE',
  137. 'FROM_TABLES',
  138. 'PAY_TYPE'
  139. ]],
  140. //--- 用户结余业绩表
  141. 'userPerf' => ['table' => 'AR_USER_PERF', 'field' => [
  142. 'ID',
  143. 'USER_ID',
  144. 'PV_PCS_ZC',
  145. 'PV_PCS_FX',
  146. 'PV_1L',
  147. 'PV_2L',
  148. 'PV_3L',
  149. 'PV_4L',
  150. 'PV_5L',
  151. 'CREATED_AT',
  152. 'PV_PSS',
  153. 'SURPLUS_1L',
  154. 'SURPLUS_1L_ZC',
  155. 'SURPLUS_1L_FX',
  156. 'SURPLUS_2L',
  157. 'SURPLUS_2L_ZC',
  158. 'SURPLUS_2L_FX',
  159. 'SURPLUS_3L',
  160. 'SURPLUS_3L_ZC',
  161. 'SURPLUS_3L_FX',
  162. 'SURPLUS_4L',
  163. 'SURPLUS_4L_ZC',
  164. 'SURPLUS_4L_FX',
  165. 'SURPLUS_5L',
  166. 'SURPLUS_5L_ZC',
  167. 'SURPLUS_5L_FX',
  168. 'PV_PSS_TOTAL',
  169. ]],
  170. //--- 团队奖明细表, 月节点的时候,需要将这个结算月的所有数据都同步过来
  171. 'calcBonusQy' => ['separately' => true, 'table' => 'AR_CALC_BONUS_QY', 'field' => [
  172. 'ID',
  173. 'USER_ID',
  174. 'LAST_DEC_LV',
  175. 'LAST_EMP_LV',
  176. 'LAST_CROWN_LV',
  177. 'LAST_STATUS',
  178. 'AMOUNT',
  179. 'PERIOD_NUM',
  180. 'CALC_YEAR',
  181. 'CALC_MONTH',
  182. 'LOGS',
  183. 'CREATED_AT',
  184. 'ORI_BONUS',
  185. 'RECONSUME_POINTS',
  186. 'MANAGE_TAX',
  187. 'ORI_CAPPED_BONUS_QY',
  188. 'IS_ACTIVE',
  189. 'HOPE_CROWN_LV',
  190. 'HOPE_BONUS',
  191. ]],
  192. //--- 用户结算月累计复消积分表,此表为新表,不传数据即代表没有扣除复消积分。 统计此结算月扣除的复消费积分总数,根据calc_bonus表 sum 一下复消积分字段即可。
  193. 'deductReconsume' => ['separately' => true, 'table' => 'AR_DEDUCT_RECONSUME', 'field' => [
  194. 'ID',
  195. 'USER_ID',
  196. 'CALC_MONTH',
  197. 'RECONSUME_POINTS_SUM',
  198. 'CREATED_AT',
  199. ]],
  200. //--- 期业绩表数据. 月节点的时候,计算月业绩,需要业务系统将ar_perf_period表此结算月的所有数据同步过来。
  201. 'perfPeriod' => ['separately' => true, 'table' => 'AR_PERF_PERIOD', 'field' => [
  202. 'ID',
  203. 'USER_ID',
  204. 'FX_AMOUNT_CASH',
  205. 'PV_PCS',
  206. 'PV_PCS_ZC',
  207. 'PV_PCS_FX',
  208. 'PV_PCS_FX_CASH',
  209. 'PV_PCS_FX_POINT',
  210. 'PV_1L',
  211. 'PV_1L_TOUCH',
  212. 'PV_1L_ZC',
  213. 'PV_1L_FX',
  214. 'PV_2L',
  215. 'PV_2L_TOUCH',
  216. 'PV_2L_ZC',
  217. 'PV_2L_FX',
  218. 'PV_3L',
  219. 'PV_3L_TOUCH',
  220. 'PV_3L_ZC',
  221. 'PV_3L_FX',
  222. 'PV_4L',
  223. 'PV_4L_TOUCH',
  224. 'PV_4L_ZC',
  225. 'PV_4L_FX',
  226. 'PV_5L',
  227. 'PV_5L_TOUCH',
  228. 'PV_5L_ZC',
  229. 'PV_5L_FX',
  230. 'SURPLUS_1L',
  231. 'SURPLUS_1L_ZC',
  232. 'SURPLUS_1L_FX',
  233. 'SURPLUS_2L',
  234. 'SURPLUS_2L_ZC',
  235. 'SURPLUS_2L_FX',
  236. 'SURPLUS_3L',
  237. 'SURPLUS_3L_ZC',
  238. 'SURPLUS_3L_FX',
  239. 'SURPLUS_4L',
  240. 'SURPLUS_4L_ZC',
  241. 'SURPLUS_4L_FX',
  242. 'SURPLUS_5L',
  243. 'SURPLUS_5L_ZC',
  244. 'SURPLUS_5L_FX',
  245. 'PERIOD_NUM',
  246. 'CALC_MONTH',
  247. 'CREATED_AT',
  248. 'PV_PSS',
  249. ]],
  250. //--- 期数配置表
  251. 'period' => ['separately' => true, 'table' => 'AR_PERIOD', 'field' => [
  252. 'ID',
  253. 'PERIOD_NUM',
  254. 'CALC_YEAR',
  255. 'CALC_MONTH',
  256. 'IS_MONTH',
  257. 'IS_PERFED',
  258. 'IS_CALCULATED',
  259. 'IS_PERFING',
  260. 'IS_CALCING',
  261. 'PERF_PERCENT',
  262. 'CALC_PERCENT',
  263. 'PERF_STARTED_AT',
  264. 'PERFED_AT',
  265. 'CALCULATE_STARTED_AT',
  266. 'CALCULATED_AT',
  267. 'CREATED_AT',
  268. ]],
  269. //--- 推荐网络表
  270. 'userRelation' => ['table' => 'AR_USER_RELATION_NEW', 'field' => [
  271. 'ID',
  272. 'USER_ID',
  273. 'PARENT_UID',
  274. 'TOP_DEEP',
  275. 'CREATED_AT',
  276. ]],
  277. ];
  278. public function __construct($periodNum)
  279. {
  280. parent::__construct($periodNum);
  281. }
  282. public function start(): array
  283. {
  284. try {
  285. //清除业务系统本地数据(业绩相关)
  286. $this->clearBusinessData();
  287. //清理计算服务系统的基本数据表
  288. $this->clearSyncCalcTableData();
  289. //从业务系统推送数据到计算服务系统
  290. $this->initializeBaseInfo();
  291. // $db = $this->_calc_db_name;
  292. //todo 更新进度
  293. // \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 1], 'PERIOD_NUM=:PERIOD_NUM', ['PERIOD_NUM' => $this->_periodNum])->execute();
  294. } catch (\Exception $e) {
  295. return $this->fail('msg:' . $e->getMessage() . 'line:' . $e->getLine());
  296. }
  297. return $this->success();
  298. }
  299. public function clearBusinessData()
  300. {
  301. // 周业绩
  302. PerfPeriod::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
  303. // 业绩单
  304. // PerfOrder::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
  305. // 删除活跃用户
  306. // PerfActiveUser::pageDeleteAll('PERIOD_NUM='.$this->_periodNum.' AND IS_SENT=0 ');
  307. // 月结时要清空的数据
  308. if ($this->_isCalcMonth) {
  309. // 月业绩表
  310. PerfMonth::pageDeleteAll("CALC_MONTH='{$this->_calcYearMonth}'");
  311. //达标业绩表
  312. PerfStandard::pageDeleteAll("CALC_MONTH='{$this->_calcYearMonth}'");
  313. }
  314. }
  315. /**
  316. * 清理配置中的数据表数据
  317. * @return array
  318. */
  319. public function clearSyncCalcTableData(): array
  320. {
  321. $db = $this->_calc_db_name;
  322. $res = [];
  323. foreach (self::BASE_INFO_METHODS as $method => $val) {
  324. if (\Yii::$app->$db->createCommand("TRUNCATE TABLE {$val['table']}")->execute() !== false) {
  325. $res[] = $val['table'];
  326. }
  327. }
  328. return $res;
  329. }
  330. public function initializeBaseInfo()
  331. {
  332. $db = $this->_calc_db_name;
  333. foreach (self::BASE_INFO_METHODS as $method => $val) {
  334. $table = self::BASE_INFO_METHODS[$method]['table'] ?? '';
  335. $fieldArray = self::BASE_INFO_METHODS[$method]['field'] ?? [];
  336. if (!empty($table) && !empty($fieldArray)) {
  337. if (!isset($val['separately'])) {
  338. $_offset = 0;
  339. A:
  340. if (isset($val['alias'])) {
  341. //如果业务表字段和计算服务表不同,则配置alias
  342. foreach ($val['alias'] as $org => $v) {
  343. $index = array_search($org, $fieldArray);
  344. $fieldArray[$index] = $v;
  345. }
  346. }
  347. $field = implode(',', $fieldArray);
  348. $model = 'common\models\\' . ucfirst($method);
  349. $data = $model::find()->select($field)->limit($this->_limit)->offset($_offset * $this->_limit)->asArray()->all();
  350. if (!empty($data)) {
  351. $_offset += 1;
  352. \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
  353. $data = null;
  354. goto A;
  355. }
  356. $data = null;
  357. } elseif (method_exists($this, $method) && $val['separately']) {
  358. $this->$method($table, $fieldArray, $db);
  359. }
  360. }
  361. }
  362. return true;
  363. }
  364. public function period($table, $fieldArray, $db)
  365. {
  366. $field = implode(',', $fieldArray);
  367. $data = Period::find()->select($field)
  368. ->where('PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM' => $this->_periodNum])
  369. ->asArray()->all();
  370. if (!empty($data)) {
  371. \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
  372. }
  373. return true;
  374. }
  375. public function user($table, $fieldArray, $db)
  376. {
  377. $field = '`' . implode('`, `', $fieldArray) . '`,null as LAST_EMP_LV';
  378. $fieldArray[] = 'LAST_EMP_LV';
  379. $_offset = 0;
  380. $forwardMonthPeriod = Period::find()
  381. ->where('IS_MONTH=1 AND PERIOD_NUM<:PERIOD_NUM', [':PERIOD_NUM' => $this->_periodNum])
  382. ->orderBy('PERIOD_NUM DESC')->asArray()->one();
  383. $forwardPeriodNum = $forwardMonthPeriod['PERIOD_NUM'];
  384. // $employeeLevelIds = CalcBonusBS::findAllAsArray(
  385. // 'PERIOD_NUM=:PERIOD_NUM ', [':PERIOD_NUM' => $forwardPeriodNum]
  386. // );
  387. $employeeLevelIds = CalcBonusBS::find()->where(
  388. 'PERIOD_NUM=:PERIOD_NUM ', [':PERIOD_NUM' => $forwardPeriodNum]
  389. )->select('USER_ID,LEVEL_ID')->asArray()->all();
  390. if (!empty($employeeLevelIds)) {
  391. $employeeLevelIds = array_column($employeeLevelIds, null, 'USER_ID'); // 当前蓝星奖计算(即管理奖) 的等级
  392. }
  393. $noLevelId = EmployLevel::NO_LEVEL_ID;
  394. user:
  395. $offset = $_offset * $this->_limit;
  396. $data = ActiveRecord::findBySql("SELECT $field from AR_USER limit $this->_limit offset $offset;")->asArray()->all();
  397. if (!empty($data)) {
  398. foreach ($data as $k => $v) {
  399. $data[$k]['LAST_EMP_LV'] = $noLevelId;
  400. if (isset($employeeLevelIds[$v['ID']])) {
  401. $data[$k]['LAST_EMP_LV'] = $employeeLevelIds[$v['ID']]['LEVEL_ID'] ?? 0;
  402. }
  403. }
  404. $_offset += 1;
  405. \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
  406. $data = null;
  407. goto user;
  408. }
  409. $data = null;
  410. $employeeLevelIds = null;
  411. return true;
  412. }
  413. public function calcBonusQy($table, $fieldArray, $db): bool
  414. {
  415. if (!$this->_isCalcMonth) {
  416. return true;
  417. }
  418. $periodNum = $this->_periodNum;
  419. $currentPeriod = Period::getInfoByPeriodNum($periodNum);
  420. //判断是否月节点
  421. if ($currentPeriod['IS_MONTH']) {
  422. $periodNum = Period::getCurrentMonthPeriodByPeriodNum($periodNum);
  423. }
  424. $field = implode(',', $fieldArray);
  425. $data = CalcBonusQY::find()->select($field)->where(['PERIOD_NUM' => $periodNum])->asArray()->all();
  426. \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
  427. $data = null;
  428. return true;
  429. }
  430. public function deductReconsume($table, $fieldArray, $db): bool
  431. {
  432. $data = CalcBonus::find()
  433. ->where('CALC_MONTH=:CALC_MONTH', [':CALC_MONTH' => $this->_calcYearMonth])
  434. ->select(['ID', 'USER_ID', 'CALC_MONTH', 'SUM(RECONSUME_POINTS)', 'CREATED_AT'])
  435. ->groupBy(['USER_ID'])->having(['>', 'SUM(RECONSUME_POINTS)', 0])
  436. ->asArray()
  437. ->all();
  438. if (!empty($data)) {
  439. \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
  440. }
  441. $data = null;
  442. return true;
  443. }
  444. public function perfPeriod($table, $fieldArray, $db): bool
  445. {
  446. if (!$this->_isCalcMonth) {
  447. return true;
  448. }
  449. $field = implode(',', $fieldArray);
  450. $data = PerfPeriod::find()
  451. ->where('CALC_MONTH=:CALC_MONTH', [':CALC_MONTH' => $this->_calcYearMonth])
  452. ->select($field)
  453. ->asArray()
  454. ->all();
  455. if (!empty($data)) {
  456. \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
  457. }
  458. $data = null;
  459. return true;
  460. }
  461. public function perfOrder($table, $fieldArray, $db): bool
  462. {
  463. $_offset = 0;
  464. perfOrder:
  465. $offset = $_offset * $this->_limit;
  466. $field = "ID,SN,DEC_TYPE, USER_ID,PV,
  467. PERIOD_NUM, CALC_MONTH,DEC_USER_ID,
  468. CREATED_AT,DEC_AMOUNT as ORDER_AMOUNT,PAY_TYPE,FROM_TABLES,PAY_TYPE";
  469. $data = ActiveRecord::findBySql("SELECT $field from AR_PERF_ORDER where PERIOD_NUM = $this->_periodNum limit $this->_limit offset $offset;")
  470. ->asArray()->all();
  471. if (!empty($data)) {
  472. $_offset += 1;
  473. $fieldArray = array_keys(current($data));
  474. \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
  475. $data = null;
  476. goto perfOrder;
  477. }
  478. $data = null;
  479. return true;
  480. }
  481. protected function decOrder($calcMonth, $offset = 0): bool
  482. {
  483. $field = "ID,ORDER_SN as SN,'ZC' as PERF_TYPE, TO_USER_ID as USER_ID,DEC_PV as PV,
  484. PERIOD_NUM, '$calcMonth' as CALC_MONTH,USER_ID as DEC_USER_ID,
  485. CREATED_AT,DEC_AMOUNT as ORDER_AMOUNT, PAID_WALLET as PAY_TYPE,'AR_DEC_ORDER'";
  486. $data = ActiveRecord::findBySql("SELECT $field from AR_DEC_ORDER;")
  487. ->where("PERIOD_NUM=:PERIOD_NUM AND IS_DEL=0 AND TYPE='ZC'", [':PERIOD_NUM' => $this->_periodNum])->asArray()->all();
  488. $this->perfOrderInsert($data);
  489. $data = null;
  490. return true;
  491. }
  492. protected function orderDec($calcMonth, $offset = 0): bool
  493. {
  494. $field = "od.ID,od.SN,'ZC' as TYPE,od.USER_ID,od.PAY_PV,
  495. od.PERIOD_NUM, '$calcMonth' as CALC_MONTH,
  496. u.DEC_ID as DEC_USER_ID,
  497. od.CREATED_AT,od.PAY_AMOUNT as ORDER_AMOUNT, od.PAY_TYPE,'AR_ORDER_DEC'";
  498. $data = ActiveRecord::findBySql("SELECT $field from AR_ORDER_DEC as od left join AR_USER as u on od.USER_ID=u.ID;")
  499. ->where("PERIOD_NUM=:PERIOD_NUM AND IS_DEL=0 AND TYPE='ZC'", [':PERIOD_NUM' => $this->_periodNum])->asArray()->all();
  500. $this->perfOrderInsert($data);
  501. $data = null;
  502. return true;
  503. }
  504. protected function order($calcMonth, $offset = 0): bool
  505. {
  506. $field = "od.ID,od.SN,'FX' as TYPE,od.USER_ID,od.PAY_PV,
  507. od.PERIOD_NUM, '$calcMonth' as CALC_MONTH,
  508. '' as DEC_USER_ID,
  509. od.CREATED_AT,od.PAY_AMOUNT as ORDER_AMOUNT, od.PAY_TYPE,'AR_ORDER'";
  510. $data = ActiveRecord::findBySql("SELECT $field from AR_ORDER as od;")
  511. ->where("PERIOD_NUM=:PERIOD_NUM AND IS_DELETE=0 AND ORDER_TYPE=:ORDER_TYPE",
  512. [':PERIOD_NUM' => $this->_periodNum, ':ORDER_TYPE' => DeclarationForm::TYPE_FX])
  513. ->asArray()->all();
  514. $this->perfOrderInsert($data);
  515. $data = null;
  516. return true;
  517. }
  518. protected function orderShop($calcMonth, $offset = 0): bool
  519. {
  520. $field = "od.ID,od.SN,'FX' as TYPE,od.USER_ID,od.PAY_PV,
  521. od.PERIOD_NUM, '$calcMonth' as CALC_MONTH,
  522. '' as DEC_USER_ID,
  523. od.CREATED_AT,od.PAY_AMOUNT as ORDER_AMOUNT, od.PAY_TYPE,'AR_ORDER_SHOP'";
  524. $data = ActiveRecord::findBySql("SELECT $field from AR_ORDER_SHOP as od;")
  525. ->where("PERIOD_NUM=:PERIOD_NUM AND IS_DELETE=0 AND ORDER_TYPE=:ORDER_TYPE",
  526. [':PERIOD_NUM' => $this->_periodNum, ':ORDER_TYPE' => DeclarationForm::TYPE_FX])
  527. ->asArray()->all();
  528. $this->perfOrderInsert($data);
  529. $data = null;
  530. return true;
  531. }
  532. /**
  533. * @param $data
  534. * @return void
  535. */
  536. private function perfOrderInsert($data): void
  537. {
  538. $db = $this->_calc_db_name;
  539. $table = self::BASE_INFO_METHODS['perfOrder']['table'] ?? '';
  540. $fieldArray = self::BASE_INFO_METHODS['perfOrder']['field'] ?? [];
  541. \Yii::$app->$db->createCommand()->batchInsert($table, $fieldArray, $data)->execute();
  542. }
  543. }