OrdersCollectUpdateService.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Bear
  5. * Date: 2019/9/12
  6. * Time: 下午7:31
  7. */
  8. namespace app\main\service;
  9. use app\main\constants\OrderContents;
  10. use app\main\constants\UserConstants;
  11. use app\main\model\object\OrdersCollectObject;
  12. use app\main\model\object\ReturnObject;
  13. use think\Config;
  14. use think\Db;
  15. use think\Env;
  16. /**
  17. * Class OrdersCollectUpdateService
  18. * @package app\main\service
  19. */
  20. class OrdersCollectUpdateService extends BaseService
  21. {
  22. private static $self = NULL;
  23. /**
  24. * @var int 截止时间
  25. */
  26. public $end_time;
  27. /**
  28. * @return $this|OrdersCollectUpdateService
  29. */
  30. public static function instance()
  31. {
  32. if (self::$self == NULL) {
  33. self::$self = new self();
  34. self::$self->end_time = time();
  35. }
  36. return self::$self;
  37. }
  38. /**
  39. * 设置时间
  40. * @param $time
  41. */
  42. public function setCurrentTime($time)
  43. {
  44. $this->end_time = $time;
  45. }
  46. /**
  47. * 获取昨日有数据的账号
  48. * @param $flag
  49. * @return ReturnObject
  50. */
  51. public function getAdminIdsToUpdate($flag)
  52. {
  53. $admin_ids = OrderService::instance()->getOrderCollectModel()
  54. ->where('createdate', date('Ymd', $this->end_time))
  55. ->where('type', OrderContents::ORDER_COLLECT_TYPE_DAY)
  56. ->where('flag', $flag)
  57. ->group('admin_id')
  58. ->column('admin_id');
  59. return $this->setData($admin_ids)->getReturn();
  60. }
  61. /**
  62. * 获取月度汇总
  63. * @param $type
  64. * @param $flag
  65. * @param $admin_ids
  66. * @return ReturnObject
  67. */
  68. public function getOrderCollectData($type, $flag, $admin_ids)
  69. {
  70. $fields = [
  71. 'admin_id',
  72. 'business_line',
  73. 'IFNULL(sum(recharge_money),0)' => 'recharge_money',
  74. 'IFNULL(sum(recharge_money_benefit),0)' => 'recharge_money_benefit',
  75. 'IFNULL(sum(normal_recharge_orders_count),0)' => 'normal_recharge_orders_count',
  76. 'IFNULL(sum(normal_recharge_orders),0)' => 'normal_recharge_orders',
  77. 'IFNULL(sum(normal_recharge_money),0)' => 'normal_recharge_money',
  78. 'IFNULL(sum(normal_recharge_money_benefit),0)' => 'normal_recharge_money_benefit',
  79. 'IFNULL(sum(normal_recharge_guide_orders),0)' => 'normal_recharge_guide_orders',
  80. 'IFNULL(sum(noraml_recharge_guide_money),0)' => 'noraml_recharge_guide_money',
  81. 'IFNULL(sum(noraml_recharge_guide_money_benefit),0)' => 'noraml_recharge_guide_money_benefit',
  82. 'IFNULL(sum(vip_recharge_orders_count),0)' => 'vip_recharge_orders_count',
  83. 'IFNULL(sum(vip_recharge_orders),0)' => 'vip_recharge_orders',
  84. 'IFNULL(sum(vip_recharge_money),0)' => 'vip_recharge_money',
  85. 'IFNULL(sum(vip_recharge_money_benefit),0)' => 'vip_recharge_money_benefit',
  86. 'IFNULL(sum(vip_recharge_guide_orders),0)' => 'vip_recharge_guide_orders',
  87. 'IFNULL(sum(vip_recharge_guide_money),0)' => 'vip_recharge_guide_money',
  88. 'IFNULL(sum(vip_recharge_guide_money_benefit),0)' => 'vip_recharge_guide_money_benefit',
  89. 'IFNULL(sum(kandian_recharge_orders_count),0)' => 'kandian_recharge_orders_count',
  90. 'IFNULL(sum(kandian_recharge_orders),0)' => 'kandian_recharge_orders',
  91. 'IFNULL(sum(split_money),0)' => 'split_money',
  92. ];
  93. $query = OrderService::instance()->getOrderCollectModel();
  94. //查询月度统计数计
  95. if ($type == OrderContents::ORDER_COLLECT_TYPE_MONTH) {
  96. $from = date('Ym01', $this->end_time);
  97. $to = date('Ymd', $this->end_time);
  98. $query
  99. ->whereBetween('createdate', "$from,$to")
  100. ->whereIn('admin_id', $admin_ids)
  101. ->where('type', OrderContents::ORDER_COLLECT_TYPE_DAY);
  102. //查询汇总数据
  103. } else {
  104. $query->where('type', OrderContents::ORDER_COLLECT_TYPE_MONTH)
  105. ->whereIn('admin_id', $admin_ids);
  106. }
  107. $data = $query->where('flag', $flag)
  108. ->field($fields)
  109. ->group('admin_id,business_line')
  110. ->select();
  111. $return = [];
  112. if ($data) {
  113. foreach ($data as $item) {
  114. $collect = (new OrdersCollectObject())->bind($item->getData());
  115. $collect->type = $type;
  116. $collect->flag = $flag;
  117. $return[] = $collect;
  118. }
  119. }
  120. return $this->setData($return)->getReturn();
  121. }
  122. /**
  123. * 数据更新
  124. * @param $list
  125. */
  126. public function insertOrUpdateCollect($list)
  127. {
  128. foreach ($list as $item) {
  129. $check = OrderService::instance()->getOrderCollectModel()->mkParamsForCheck($item);
  130. $data = OrderService::instance()->getOrderCollectModel()->where($check)->field('id')->find();
  131. if (!$data) {
  132. try{
  133. $insert = OrderService::instance()->getOrderCollectModel()->mkParamsForInsert($item);
  134. $result = OrderService::instance()->getOrderCollectModel()->insert($insert);
  135. if ($result) {
  136. LogService::debug('订单统计新增完成:' . json_encode($insert, JSON_UNESCAPED_UNICODE));
  137. } else {
  138. LogService::error('订单统计新增失败:' . json_encode($insert, JSON_UNESCAPED_UNICODE));
  139. }
  140. continue;
  141. }catch (\Exception $e) {
  142. LogService::exception($e);
  143. }
  144. }
  145. $update = OrderService::instance()->getOrderCollectModel()->mkParamsForUpdate($item);
  146. $result = OrderService::instance()->getOrderCollectModel()->update($update, $check);
  147. if ($result) {
  148. LogService::debug('订单统计更新完成:' . json_encode($update, JSON_UNESCAPED_UNICODE) . json_encode($check, JSON_UNESCAPED_UNICODE));
  149. } else {
  150. LogService::error('订单统计更新失败:' . json_encode($update, JSON_UNESCAPED_UNICODE) . json_encode($check, JSON_UNESCAPED_UNICODE));
  151. }
  152. }
  153. }
  154. /**
  155. * 获取统计时期
  156. * @param $type
  157. * @return ReturnObject
  158. */
  159. public function getCreateDate($type)
  160. {
  161. $date = date('Ym01', $this->end_time);
  162. if ($type == OrderContents::ORDER_COLLECT_TYPE_TOTAL) {
  163. $date = '20180101';
  164. }
  165. return $this->setData($date)->getReturn();
  166. }
  167. }