OrderCollectService.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Bear
  5. * Date: 2018/10/23
  6. * Time: 上午10:28
  7. */
  8. namespace app\main\service;
  9. use app\common\model\OrdersCollect;
  10. use app\main\constants\AdminConstants;
  11. use think\Log;
  12. class OrderCollectService
  13. {
  14. //数据标识 自身
  15. const FLAG_SELF = 1;
  16. //数据标识 属下
  17. const FLAG_SUB = 2;
  18. //数据标识 全部
  19. const FLAG_ALL = 3;
  20. /**
  21. * @var OrderCollectService
  22. */
  23. protected static $self = NULL;
  24. /**
  25. * @return OrderCollectService
  26. */
  27. public static function instance()
  28. {
  29. if (self::$self == NULL) {
  30. self::$self = new self();
  31. }
  32. return self::$self;
  33. }
  34. /**
  35. * @return OrdersCollect
  36. */
  37. public function getOrdersCollectModel()
  38. {
  39. return model('OrdersCollect');
  40. }
  41. /**
  42. * 创建订单时添加数据统计
  43. * @param $admin_id
  44. * @param $is_vip
  45. * @param $channel_id
  46. * @param $group_id
  47. * @param $business
  48. * @param $is_activity
  49. */
  50. public function addCreateOrderCollect($user_id, $admin_id,$is_vip,$channel_id,$group_id,$business, $is_activity){
  51. $date = date('Ymd', time());
  52. //渠道商数据统计
  53. if($group_id == AdminConstants::ADMIN_GROUP_ID_CHANNEL){
  54. //添加渠道本身订单统计
  55. $this->addChannelOrdersCollect($user_id, self::FLAG_SELF,$date,$is_vip,$admin_id,$business, $is_activity);
  56. //添加渠道汇总订单统计
  57. $this->addChannelOrdersCollect($user_id, self::FLAG_ALL,$date,$is_vip,$admin_id,$business, $is_activity);
  58. }
  59. //代理商数据统计
  60. if($group_id == AdminConstants::ADMIN_GROUP_ID_AGENT){
  61. //添加代理商本身统计
  62. $this->addAgentOrdersCollect($user_id, self::FLAG_SELF,$date,$is_vip,$admin_id,$business, $is_activity);
  63. //添加代理商上级渠道下属统计
  64. $this->addChannelOrdersCollect($user_id, self::FLAG_SUB,$date,$is_vip,$channel_id,$business, $is_activity);
  65. //添加代理商上级渠道汇总统计
  66. $this->addChannelOrdersCollect($user_id, self::FLAG_ALL,$date,$is_vip,$channel_id,$business, $is_activity);
  67. }
  68. //添加管理员下属统计
  69. $this->addManagerOrdersCollect($user_id,self::FLAG_SUB,$date,$is_vip, $business, $is_activity);
  70. }
  71. /**
  72. * 添加代理商创建订单时数据统计
  73. * @param $user_id
  74. * @param $flag
  75. * @param $date
  76. * @param $is_vip
  77. * @param $admin_id
  78. * @param $business
  79. */
  80. private function addAgentOrdersCollect($user_id, $flag, $date, $is_vip, $admin_id, $business, $is_activity)
  81. {
  82. //代理商今日的数据
  83. $map_day = ['admin_id' => $admin_id, 'type' => 1, 'flag' => $flag, 'createdate' => $date, 'business_line'=>$business];
  84. try {
  85. $agentResDay = $this->getOrdersCollectModel()->where($map_day)->find();
  86. $user_count = OrderService::instance()->setOrderUserCountCache($user_id, $map_day, $is_vip, false)->data;
  87. if ($agentResDay) {
  88. if ($is_vip) { //VIP充值
  89. $update_data = [
  90. 'vip_recharge_orders_count' => ['exp', "`vip_recharge_orders_count`+1"],
  91. 'vip_recharge_user_count' => $user_count['user'],
  92. 'recharge_user_count'=>$user_count['total']
  93. ];
  94. } else { //普通充值
  95. $update_data = [
  96. 'normal_recharge_orders_count' => ['exp', "`normal_recharge_orders_count`+1"],
  97. 'normal_recharge_user_count' => $user_count['user'],
  98. 'recharge_user_count'=>$user_count['total']
  99. ];
  100. if (!$is_activity) {
  101. $update_data['kandian_recharge_orders_count'] = ['exp', "`kandian_recharge_orders_count`+1"];
  102. }
  103. }
  104. $this->getOrdersCollectModel()->where('id', $agentResDay->id)->update($update_data);
  105. } else {
  106. if ($is_vip) { //VIP充值
  107. $map_day['vip_recharge_orders_count'] = 1;
  108. $map_day['vip_recharge_user_count'] = $user_count['user'];
  109. $map_day['recharge_user_count'] = $user_count['total'];
  110. } else { //普通充值
  111. $map_day['normal_recharge_orders_count'] = 1;
  112. $map_day['normal_recharge_user_count'] = $user_count['user'];
  113. $map_day['recharge_user_count'] = $user_count['total'];
  114. if (!$is_activity) {
  115. $map_day['kandian_recharge_orders_count'] = 1;
  116. }
  117. }
  118. $this->getOrdersCollectModel()->insert($map_day);
  119. }
  120. } catch (\Exception $exception) {
  121. Log::error("添加代理订单统计(Flag:{$flag})数据错误:" . json_encode(['errcode' => $exception->getCode(), 'errmsg' => $exception->getMessage()]));
  122. }
  123. }
  124. /**
  125. * 添加渠道商创建订单时的数据统计
  126. * @param $user_id
  127. * @param $flag
  128. * @param $date
  129. * @param $is_vip
  130. * @param $admin_id
  131. */
  132. private function addChannelOrdersCollect($user_id, $flag,$date,$is_vip,$admin_id,$business, $is_activity){
  133. //渠道商今天自身的数据
  134. $map_day = ['admin_id' => $admin_id, 'type' => 1, 'flag' => $flag, 'createdate' => $date, 'business_line' => $business];
  135. try {
  136. $channelResDay = $this->getOrdersCollectModel()->where($map_day)->find();
  137. $user_count = OrderService::instance()->setOrderUserCountCache($user_id, $map_day, $is_vip, false)->data;
  138. if ($channelResDay) { //如果有渠道商今天自身的数据
  139. if ($is_vip) { //充值vip
  140. $update_data = [
  141. 'vip_recharge_orders_count' => ['exp', "`vip_recharge_orders_count`+1"],
  142. 'updatetime' => time(),
  143. 'vip_recharge_user_count' => $user_count['user'],
  144. 'recharge_user_count' => $user_count['total'],
  145. ];
  146. } else { //普通充值
  147. $update_data = [
  148. 'normal_recharge_orders_count' => ['exp', "`normal_recharge_orders_count`+1"],
  149. 'updatetime' => time(),
  150. 'normal_recharge_user_count' => $user_count['user'],
  151. 'recharge_user_count' => $user_count['total'],
  152. ];
  153. if (!$is_activity) {
  154. $update_data['kandian_recharge_orders_count'] = ['exp', "`kandian_recharge_orders_count`+1"];
  155. }
  156. }
  157. $this->getOrdersCollectModel()->where('id',$channelResDay->id)->update($update_data);
  158. } else { //渠道商自身当天的订单数据插入
  159. if ($is_vip) { //VIP充值
  160. $map_day['vip_recharge_orders_count'] = 1;
  161. $map_day['vip_recharge_user_count'] = $user_count['user'];
  162. $map_day['recharge_user_count'] = $user_count['total'];
  163. $map_day['createtime'] = time();
  164. $map_day['updatetime'] = time();
  165. } else { //普通充值
  166. $map_day['normal_recharge_orders_count'] = 1;
  167. $map_day['normal_recharge_user_count'] = $user_count['user'];
  168. $map_day['recharge_user_count'] = $user_count['total'];
  169. $map_day['createtime'] = time();
  170. $map_day['updatetime'] = time();
  171. if (!$is_activity) {
  172. $map_day['kandian_recharge_orders_count'] = 1;
  173. }
  174. }
  175. $map_day['business_line'] = $business;
  176. $this->getOrdersCollectModel()->insert($map_day);
  177. }
  178. } catch (\Exception $exception) {
  179. Log::error("添加渠道订单统计(Flag:{$flag})数据错误:".json_encode(['errcode' => $exception->getCode(), 'errmsg' => $exception->getMessage()]));
  180. }
  181. }
  182. /**
  183. * 添加管理员OrdersCollect统计
  184. * @param $user_id
  185. * @param $flag
  186. * @param $date
  187. * @param $is_vip
  188. * @param $business
  189. */
  190. private function addManagerOrdersCollect($user_id, $flag,$date,$is_vip,$business, $is_activity){
  191. $map_day = ['admin_id' => 0, 'type' => 1, 'flag' => $flag, 'createdate' => $date, 'business_line' => $business];
  192. //管理员今天下级的数据
  193. try {
  194. $manageResDay = $this->getOrdersCollectModel()->where($map_day)->find();
  195. $user_count = OrderService::instance()->setOrderUserCountCache($user_id, $map_day, $is_vip, false)->data;
  196. if ($manageResDay) { //更新管理员下级的数据
  197. if ($is_vip) {
  198. $this->getOrdersCollectModel()->update([
  199. 'vip_recharge_orders_count' => ['exp', "`vip_recharge_orders_count`+1"],
  200. 'id' => $manageResDay->id,
  201. 'vip_recharge_user_count' => $user_count['user'],
  202. 'recharge_user_count'=>$user_count['total']
  203. ]);
  204. } else {
  205. $update_data = [
  206. 'normal_recharge_orders_count' => ['exp', "`normal_recharge_orders_count`+1"],
  207. 'id' => $manageResDay->id,
  208. 'normal_recharge_user_count' => $user_count['user'],
  209. 'recharge_user_count'=>$user_count['total']
  210. ];
  211. if (!$is_activity) {
  212. $update_data['kandian_recharge_orders_count'] = ['exp', "`kandian_recharge_orders_count`+1"];
  213. }
  214. $this->getOrdersCollectModel()->update($update_data);
  215. }
  216. } else { //插入管理员下级的数据
  217. if ($is_vip) {
  218. $map_day['vip_recharge_orders_count'] = 1;
  219. $map_day['vip_recharge_user_count'] = $user_count['user'];
  220. $map_day['recharge_user_count'] = $user_count['total'];
  221. $this->getOrdersCollectModel()->insert($map_day);
  222. } else {
  223. $map_day['normal_recharge_orders_count'] = 1;
  224. $map_day['normal_recharge_user_count'] = $user_count['user'];
  225. $map_day['recharge_user_count'] = $user_count['total'];
  226. if (!$is_activity) {
  227. $map_day['kandian_recharge_orders_count'] = 1;
  228. }
  229. $this->getOrdersCollectModel()->insert($map_day);
  230. }
  231. }
  232. } catch (\Exception $exception) {
  233. Log::error("添加管理员订单统计(Flag:{$flag})数据错误:".json_encode(['errcode' => $exception->getCode(), 'errmsg' => $exception->getMessage()]));
  234. }
  235. }
  236. }