BonusHistory.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\store\model\user;
  4. use app\common\model\chef\ChefAreas;
  5. use app\common\model\user\BonusHistory as BonusHistoryModel;
  6. use app\common\library\helper;
  7. use app\common\model\User;
  8. use app\store\model\Shops;
  9. /**
  10. * 奖励金明细模型
  11. * Class BonusHistory
  12. * @package app\store\model\user
  13. */
  14. class BonusHistory extends BonusHistoryModel
  15. {
  16. /**
  17. * 获取上月达量奖励金
  18. */
  19. public static function lastMonthBonus($userId)
  20. {
  21. $data = self::where('user_id', $userId)->where('year_month', date("Ym", strtotime("-1 month")))->value('bonus_money');
  22. return helper::bcsub($data,0,2);
  23. }
  24. /**
  25. * 获取达量奖励总额
  26. * @param int $shopId 门店ID
  27. * @param int $type 类型 默认0 0-店老板-达量奖励 1-店内业绩合计-达量奖励
  28. * @return string
  29. */
  30. public static function bonusAmount($shopId, $type = 0)
  31. {
  32. if ($type == 2){
  33. $filter[] = ['role', '>=', User::SHOP_BOSS];
  34. } elseif ($type == 1) {
  35. $filter[] = ['role', '>', User::SHOP_BOSS];
  36. } else {
  37. $filter[] = ['role', '=', User::SHOP_BOSS];
  38. }
  39. /* if (empty($userIds)) {
  40. return '0.00';
  41. }*/
  42. $data = self::where('clearing_status', 1)->where($filter)
  43. ->where('shop_id',$shopId)->sum('bonus_money');
  44. return helper::bcsub($data,0,2);
  45. }
  46. public static function bonusList($userId){
  47. return self::field('year,month,bonus_money,create_time')
  48. ->where('user_id',$userId)
  49. ->where('clearing_status',1)->order('id','desc')
  50. ->paginate(15);
  51. }
  52. /**
  53. * 门店个人奖励金明细
  54. * @param $param
  55. * @return mixed
  56. * @author: zjwhust
  57. * @Time: 2022/5/13 9:13
  58. */
  59. public function shopBonusDetail($param){
  60. // 检索查询条件
  61. $filter = $this->getQueryFilter($param);
  62. // 获取数据列表
  63. $query = $this->alias('bonus')
  64. ->field("
  65. bonus.sales_volume,
  66. concat(bonus.year,'-',bonus.month) as date,
  67. bonus.bonus_ladder,
  68. bonus.bonus_money,
  69. bonus.bonus_rate,
  70. bonus.role,
  71. bonus.user_id,
  72. shops.shop_id,
  73. shops.shop_name,
  74. shops.city_id,
  75. areas.name,
  76. user.nick_name,
  77. user.mobile
  78. ")
  79. ->leftJoin('shops', 'shops.shop_id = bonus.shop_id')
  80. ->leftJoin('user', 'user.user_id = bonus.user_id')
  81. ->leftJoin('areas','shops.city_id=areas.id')
  82. ->where('shops.is_delete',0)
  83. ->where($filter)
  84. // ->order(['bonus.create_time' => 'desc'])
  85. // ->group('bonus.user_id,bonus.shop_id,bonus.role')
  86. ->paginate()->each(function($v) {
  87. $v['bonus_money'] = helper::bcsub($v['bonus_money'],0,2);
  88. });
  89. return $query;
  90. }
  91. /**
  92. * 门店个人奖励金列表
  93. * @param $param
  94. * @return mixed
  95. * @author: zjwhust
  96. * @Time: 2022/5/12 15:21
  97. */
  98. public function shopBonusList($param){
  99. // 检索查询条件
  100. $filter = $this->getQueryFilter($param);
  101. // 获取数据列表
  102. $query = $this->alias('bonus')
  103. ->field('
  104. sum(bonus.sales_volume) as sales_volume_total,
  105. sum(bonus.order_count) as order_count_total,
  106. sum(bonus.bonus_money) as bonus_money_total,
  107. bonus.role,
  108. bonus.user_id,
  109. shops.shop_id,
  110. shops.shop_name,
  111. shops.city_id,
  112. areas.name,
  113. user.nick_name,
  114. user.mobile
  115. ')
  116. ->leftJoin('shops', 'shops.shop_id = bonus.shop_id')
  117. ->leftJoin('user', 'user.user_id = bonus.user_id')
  118. ->leftJoin('areas','shops.city_id=areas.id')
  119. ->where('shops.is_delete',0)
  120. ->where($filter)
  121. // ->order(['bonus.create_time' => 'desc'])
  122. ->group('bonus.user_id,bonus.shop_id,bonus.role')
  123. ->paginate();
  124. return $query;
  125. }
  126. /**
  127. * 设置检索查询条件
  128. * @param array $param
  129. * @return array
  130. */
  131. private function getQueryFilter(array $param): array
  132. {
  133. // 默认参数
  134. $params = $this->setQueryDefaultValue($param, [
  135. ]);
  136. // 检索查询条件
  137. $filter = [];
  138. // 结算月份起止时间
  139. if (isset($param['betweenTime'])&&!empty($params['betweenTime'])){
  140. $times = between_time($param['betweenTime']);
  141. }else{
  142. $times['end_time'] = strtotime(date('Y-m-01 00:00:00')) - 1 ;//上月的最后一秒
  143. $times['start_time'] =strtotime(date('Y-m-01 00:00:00',strtotime('-1 month')));
  144. }
  145. $from = date('Ym',$times['start_time']);
  146. $to = date('Ym',$times['end_time']);
  147. $filter[] = ['bonus.year_month', '>=', $from];
  148. $filter[] = ['bonus.year_month', '<=', $to ];
  149. //角色ID
  150. if(isset($params['roleId'])&&$params['roleId']>0){
  151. $filter[] = ['bonus.role','=',$params['roleId']];
  152. }
  153. //会员昵称
  154. if (isset($params['nickName'])&&!empty($params['nickName'])) {
  155. $filter[] = ['user.nick_name', 'like', "%{$params['nickName']}%"];
  156. }
  157. //手机号码
  158. !empty($params['mobile']) && $filter[] = ['user.mobile', 'like', "%{$params['mobile']}%"];
  159. //用户ID
  160. if(isset($params['userId'])&&$params['userId']>0){
  161. $filter[] = ['bonus.user_id','=',$params['userId']];
  162. }
  163. //门店名称
  164. if(isset($params['shopName'])&&!empty($params['shopName'])){
  165. $filter[] = ['shops.shop_name','like', "%{$params['shopName']}%"];
  166. }
  167. //门店ID
  168. if(isset($params['shopId'])&&$params['shopId']>0){
  169. $filter[] = ['shops.shop_id','=',$params['shopId']];
  170. }
  171. //门店城市
  172. if(isset($params['cityId'])&&$params['cityId']>0){
  173. $filter[] = ['shops.city_id','=',$params['cityId']];
  174. }
  175. //门店城市名称
  176. if(isset($params['cityName'])&&!empty($params['cityName'])){
  177. $cityIds = ChefAreas::where('name','like','%'.$params['cityName'].'%')->where('level',2)->column('id');
  178. $filter[] = ['shops.city_id','in',$cityIds];
  179. }
  180. return $filter;
  181. }
  182. public function commerDetails($params){
  183. if (!empty($params['betweenTime'])){
  184. $times = between_time($params['betweenTime']);
  185. $times['start_time'] = intval(date('Ym',$times['start_time']));
  186. $times['end_time'] = intval(date('Ym',$times['end_time']));
  187. }
  188. if (isset($times['start_time'])){
  189. $where[] = ['bonus_history.year_month', '>=', $times['start_time']];
  190. $where[] = ['bonus_history.year_month', '<=', $times['end_time'] ];
  191. }
  192. $where[] = ['bonus_history.is_delete','=',0];
  193. $where[] = ['bonus_history.role','=',User::COMMISSION_USER];
  194. if (!empty($params['userId']) && $params['userId'] >0 )$where[] = ['bonus_history.user_id','=', $params['userId']];
  195. if (!empty($params['nickName']))$where[] = ['user.nick_name', 'like','%'.$params['nickName'].'%'];
  196. if (!empty($params['mobile']))$where[] = ['user.mobile', 'like','%'.trim($params['mobile']).'%'];
  197. if (!empty($params['sellerGrade']) && $params['sellerGrade'] >0)$where[] = ['user.seller_grade','=', $params['sellerGrade']];
  198. return self::alias('bonus_history')
  199. ->leftJoin('user user','bonus_history.user_id=user.user_id')
  200. ->where($where)
  201. ->field('`user`.nick_name,`user`.mobile,`user`.seller_grade,bonus_history.user_id,'.
  202. '`bonus_history`.`year`,`bonus_history`.`month`,CONVERT(`bonus_history`.`year_month`,CHAR) as `year_month`,'.//CONVERT(`bonus_history`.`year_month`,CHAR) as `year_month`,
  203. 'bonus_history.sales_volume,bonus_history.bonus_rate,bonus_history.bonus_money,bonus_history.bonus_ladder')
  204. ->paginate(15);
  205. }
  206. }