RefreshOrderCollect.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?php
  2. namespace app\admin\command;
  3. use think\Config;
  4. use think\console\Command;
  5. use think\console\Input;
  6. use think\console\input\Option;
  7. use think\console\Output;
  8. use think\Db;
  9. use think\Env;
  10. use think\Log;
  11. use think\Request;
  12. class RefreshOrderCollect extends Command
  13. {
  14. protected function configure()
  15. {
  16. $this->setName('RefreshOrderCollect')
  17. ->addOption('current_time', 'c', Option::VALUE_OPTIONAL, '时间节点:2019-08-11', null)
  18. ->setDescription('刷新转移渠道商订单统计表');
  19. }
  20. protected function execute(Input $input, Output $output)
  21. {
  22. Request::instance()->module('admin'); //cli模式下无法获取到当前的项目模块,手动指定一下
  23. $mainSlaveDbConfig = $this->getMainSlaveDbConfig();
  24. try {
  25. $configModel = model('Config');
  26. $config = $configModel->getConfigSiteArr();
  27. $change_ids = $config['change_ids'] ?? '';
  28. if (empty($change_ids)) {
  29. Log::info("转移渠道id为空,程序结束");
  30. return false;
  31. }
  32. Log::info('转移渠道商:' . $change_ids);
  33. $aChangeIds = explode(',', $change_ids);
  34. $strTime = $input->getOption('current_time');
  35. if ($strTime === null) {
  36. $beginTime = strtotime(date('Y-m-d', strtotime('yesterday')));
  37. $endTime = strtotime(date('Y-m-d 23:59:59', strtotime('yesterday')));
  38. } else {
  39. $beginTime = strtotime($strTime);
  40. if ($beginTime === false) {
  41. Log::info("current_time 参数格式错误");
  42. return false;
  43. }
  44. $endTime = strtotime($strTime . ' 23:59:59');
  45. }
  46. $currentDay = date('Ymd', $beginTime);
  47. Log::info(sprintf('订单时间段:%s ~ %s', date('Y-m-d H:i:s', $beginTime), date('Y-m-d H:i:s', $endTime)));
  48. $sql = <<<SQL
  49. SELECT `admin_id` AS `admin_id`, sum(money) AS `sum_money`, sum(money_benefit) AS `sum_money_benefit`
  50. FROM `orders` force index(createtime)
  51. WHERE `admin_id` IN
  52. ($change_ids)
  53. AND `state` = '1'
  54. AND (`createtime` between $beginTime AND $endTime)
  55. GROUP BY `admin_id`;
  56. SQL;
  57. if (Config::get('polardb.orders_apply_polardb')) {
  58. $orderResult = Db::connect(Config::get('polardb'))->query($sql);
  59. } else {
  60. $orderResult = Db::connect($mainSlaveDbConfig)->query($sql);
  61. }
  62. $selfOrderCollectResult = model('OrdersCollect')->whereIn('admin_id', $aChangeIds)
  63. ->where('type', '1')
  64. ->where('flag', '1')
  65. ->where('createdate', $currentDay)
  66. ->field(['id', 'admin_id', 'recharge_money', 'recharge_money_benefit'])
  67. ->select();
  68. $allOrderCollectResult = model('OrdersCollect')->whereIn('admin_id', $aChangeIds)
  69. ->where('type', '1')
  70. ->where('flag', '3')
  71. ->where('createdate', $currentDay)
  72. ->field(['id', 'admin_id', 'recharge_money', 'recharge_money_benefit'])
  73. ->select();
  74. $updateSelfData = [];
  75. $updateAllData = [];
  76. foreach ($orderResult as $oRes) {
  77. foreach ($selfOrderCollectResult as $socRes) {
  78. if ($oRes['admin_id'] == $socRes['admin_id']) {
  79. $adminId = $oRes['admin_id'];
  80. $subOrderMoney = $oRes['sum_money'] - $socRes['recharge_money'];
  81. $subMoneyBenefit = $oRes['sum_money_benefit'] - $socRes['recharge_money_benefit'];
  82. Log::info(sprintf('self result: adminId:%s,subOrderMoney:%s,subMoneyBenefit:%s', $adminId,
  83. $subOrderMoney, $subMoneyBenefit));
  84. if ($subOrderMoney != 0 || $subMoneyBenefit != 0) {
  85. $updateSelfData[$adminId] = [
  86. 'id' => $socRes['id'],
  87. 'money' => $oRes['sum_money'],
  88. 'money_benefit' => $oRes['sum_money_benefit'],
  89. 'old_money' => $socRes['recharge_money'],
  90. 'old_money_benefit' => $socRes['recharge_money_benefit'],
  91. ];
  92. break;
  93. }
  94. }
  95. }
  96. foreach ($allOrderCollectResult as $aocRes) {
  97. if ($oRes['admin_id'] == $aocRes['admin_id']) {
  98. $adminId = $oRes['admin_id'];
  99. $subOrderMoney = $oRes['sum_money'] - $aocRes['recharge_money'];
  100. $subMoneyBenefit = $oRes['sum_money_benefit'] - $aocRes['recharge_money_benefit'];
  101. Log::info(sprintf('all result: adminId:%s,subOrderMoney:%s,subMoneyBenefit:%s', $adminId,
  102. $subOrderMoney, $subMoneyBenefit));
  103. if ($subOrderMoney != 0 || $subMoneyBenefit != 0) {
  104. $updateAllData[$adminId] = [
  105. 'id' => $aocRes['id'],
  106. 'money' => $oRes['sum_money'],
  107. 'money_benefit' => $oRes['sum_money_benefit'],
  108. 'old_money' => $aocRes['recharge_money'],
  109. 'old_money_benefit' => $aocRes['recharge_money_benefit'],
  110. ];
  111. break;
  112. }
  113. }
  114. }
  115. }
  116. foreach ($updateSelfData as $adminId => $item) {
  117. Log::info(sprintf('订单统计表,id:%s,old_money:%s,new_money:%s,old_money_benefit:%s,new_money_benefit:%s',
  118. $item['id'], $item['old_money'], $item['money'], $item['old_money_benefit'],
  119. $item['money_benefit']));
  120. model('OrdersCollect')->where('id', $item['id'])
  121. ->update([
  122. 'recharge_money' => $item['money'],
  123. 'recharge_money_benefit' => $item['money_benefit']
  124. ]);
  125. }
  126. foreach ($updateAllData as $admin => $item) {
  127. Log::info(sprintf('订单统计表,id:%s,old_money:%s,new_money:%s,old_money_benefit:%s,new_money_benefit:%s',
  128. $item['id'], $item['old_money'], $item['money'], $item['old_money_benefit'],
  129. $item['money_benefit']));
  130. model('OrdersCollect')->where('id', $item['id'])
  131. ->update([
  132. 'recharge_money' => $item['money'],
  133. 'recharge_money_benefit' => $item['money_benefit']
  134. ]);
  135. }
  136. Log::info('程序结束');
  137. } catch (\Exception $e) {
  138. Log::error($e->getMessage() . ' ' . $e->getTraceAsString());
  139. }
  140. }
  141. /**
  142. * 获取主库的从库配置 从库不存在返回主库
  143. * @return array
  144. */
  145. private function getMainSlaveDbConfig()
  146. {
  147. $hostArr = explode(',', Env::get('database.admin_hostname'));
  148. $portArr = explode(',', Env::get('database.admin_hostport', '3306,3306'));
  149. //默认主库
  150. $mainDbConfig = array_merge(Config::get("database"), ['hostname' => $hostArr[0], 'hostport' => $portArr[0]]);
  151. if (count($hostArr) >= 2) {
  152. //从库
  153. $mainDbConfig = array_merge(Config::get("database"),
  154. ['hostname' => $hostArr[1], 'hostport' => $portArr[1]]);
  155. }
  156. return $mainDbConfig;
  157. }
  158. }