UserBillDao.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\common\dao\user;
  12. use app\common\dao\BaseDao;
  13. use app\common\model\BaseModel;
  14. use app\common\model\user\UserBill;
  15. /**
  16. * Class UserBillDao
  17. * @package app\common\dao\user
  18. * @author xaboy
  19. * @day 2020/6/22
  20. */
  21. class UserBillDao extends BaseDao
  22. {
  23. /**
  24. * @return BaseModel
  25. * @author xaboy
  26. * @day 2020-03-30
  27. */
  28. protected function getModel(): string
  29. {
  30. return UserBill::class;
  31. }
  32. /**
  33. * @param array $where
  34. * @param $data
  35. * @return int
  36. * @throws \think\db\exception\DbException
  37. * @author xaboy
  38. * @day 2020/6/22
  39. */
  40. public function updateBill(array $where, $data)
  41. {
  42. return UserBill::getDB()->where($where)->limit(1)->update($data);
  43. }
  44. /**
  45. * @param $time
  46. * @return \think\Collection
  47. * @throws \think\db\exception\DataNotFoundException
  48. * @throws \think\db\exception\DbException
  49. * @throws \think\db\exception\ModelNotFoundException
  50. * @author xaboy
  51. * @day 2020/6/22
  52. */
  53. public function getTimeoutBrokerageBill($time)
  54. {
  55. return UserBill::getDB()->where('create_time', '<=', $time)->where('category', 'brokerage')
  56. ->whereIn('type', ['order_one', 'order_two'])->with('user')->where('status', 0)->select();
  57. }
  58. public function getTimeoutIntegralBill($time)
  59. {
  60. return UserBill::getDB()->where('create_time', '<=', $time)->where('category', 'integral')
  61. ->where('type', 'lock')->with('user')->where('status', 0)->select();
  62. }
  63. public function getTimeoutMerchantMoneyBill($time)
  64. {
  65. return UserBill::getDB()->where('create_time', '<=', $time)->where('category', 'mer_computed_money')->where('type','order')
  66. ->where('status', 0)->select();
  67. }
  68. public function refundMerchantMoney($order_id, $type, $mer_id)
  69. {
  70. return UserBill::getDB()->where('link_id', $order_id)->where('mer_id', $mer_id)
  71. ->where('category', 'mer_refund_money')->where('type', $type)->sum('number');
  72. }
  73. public function merchantLickMoney($merId = null)
  74. {
  75. $lst = UserBill::getDB()->where('category', 'mer_lock_money')->when($merId, function ($query, $val) {
  76. $query->where('mer_id', $val);
  77. })->where('status', 0)->select()->toArray();
  78. $lockMoney = 0;
  79. if (count($lst)) {
  80. $lockMoney = -1 * UserBill::getDB()->whereIn('link_id', array_column($lst, 'link_id'))
  81. ->where('category', 'mer_refund_money')->sum('number');
  82. }
  83. foreach ($lst as $bill) {
  84. $lockMoney = bcadd($lockMoney, $bill['number'], 2);
  85. }
  86. $lockMoney = bcadd($lockMoney, UserBill::getDB()
  87. ->where('category', 'mer_computed_money')->when($merId, function ($query, $val) {
  88. $query->where('mer_id', $val);
  89. })->where('status', 0)->where('type', 'order')->sum('number'), 2);
  90. return $lockMoney;
  91. }
  92. /**
  93. * @param $uid
  94. * @return float
  95. * @author xaboy
  96. * @day 2020/6/22
  97. */
  98. public function lockBrokerage($uid)
  99. {
  100. $lst = UserBill::getDB()->where('category', 'brokerage')
  101. ->whereIn('type', ['order_one', 'order_two'])->where('uid', $uid)->where('status', 0)->field('link_id,number')->select()->toArray();
  102. $refundPrice = 0;
  103. if (count($lst)) {
  104. $refundPrice = -1 * UserBill::getDB()->whereIn('link_id', array_column($lst, 'link_id'))->where('uid', $uid)
  105. ->where('category', 'brokerage')->whereIn('type', ['refund_two', 'refund_one'])->sum('number');
  106. }
  107. foreach ($lst as $bill) {
  108. $refundPrice = bcadd($refundPrice, $bill['number'], 2);
  109. }
  110. return $refundPrice;
  111. }
  112. public function lockIntegral($uid = null, $order_id = null)
  113. {
  114. $lst = UserBill::getDB()->where('category', 'integral')
  115. ->where('type', 'lock')->when($order_id, function ($query, $order_id) {
  116. $query->where('link_id', $order_id);
  117. })->when($uid, function ($query, $uid) {
  118. $query->where('uid', $uid);
  119. })->where('status', 0)->field('link_id,number')->select()->toArray();
  120. $lockIntegral = 0;
  121. if (count($lst)) {
  122. $lockIntegral = -1 * UserBill::getDB()->whereIn('link_id', array_column($lst, 'link_id'))->where('uid', $uid)
  123. ->where('category', 'integral')->where('type', 'refund_lock')->sum('number');
  124. }
  125. foreach ($lst as $bill) {
  126. $lockIntegral = bcadd($lockIntegral, $bill['number'], 0);
  127. }
  128. return $lockIntegral;
  129. }
  130. public function deductionIntegral($uid)
  131. {
  132. return UserBill::getDB()->where('uid', $uid)
  133. ->where('category', 'integral')->where('type', 'deduction')->sum('number');
  134. }
  135. public function totalGainIntegral($uid)
  136. {
  137. return UserBill::getDB()->where('uid', $uid)
  138. ->where('category', 'integral')->where('pm', 1)->whereNotIn('type', ['refund', 'cancel'])->sum('number');
  139. }
  140. /**
  141. * @param $uid
  142. * @return float
  143. * @author xaboy
  144. * @day 2020/6/22
  145. */
  146. public function totalBrokerage($uid)
  147. {
  148. return bcsub(UserBill::getDB()->where('category', 'brokerage')
  149. ->whereIn('type', ['order_one', 'order_two'])->where('uid', $uid)->sum('number'),
  150. UserBill::getDB()->where('uid', $uid)
  151. ->where('category', 'brokerage')->whereIn('type', ['refund_two', 'refund_one'])->sum('number'), 2);
  152. }
  153. /**
  154. * @param $uid
  155. * @return float
  156. * @author xaboy
  157. * @day 2020/6/22
  158. */
  159. public function yesterdayBrokerage($uid)
  160. {
  161. return getModelTime(UserBill::getDB()->where('category', 'brokerage')
  162. ->whereIn('type', ['order_one', 'order_two'])->where('uid', $uid), 'yesterday')->sum('number');
  163. }
  164. /**
  165. * @param array $where
  166. * @return \think\db\BaseQuery
  167. * @author xaboy
  168. * @day 2020/6/22
  169. */
  170. public function search(array $where)
  171. {
  172. return UserBill::getDB()
  173. ->when(isset($where['now_money']) && in_array($where['now_money'], [0, 1, 2]), function ($query) use ($where) {
  174. if ($where['now_money'] == 0)
  175. $query->where('category', 'now_money')->whereIn('type', ['pay_product', 'recharge', 'sys_inc_money', 'sys_dec_money', 'brokerage', 'presell', 'refund']);
  176. else if ($where['now_money'] == 1)
  177. $query->where('category', 'now_money')->whereIn('type', ['pay_product', 'sys_dec_money', 'presell']);
  178. else if ($where['now_money'] == 2)
  179. $query->where('category', 'now_money')->whereIn('type', ['recharge', 'sys_inc_money', 'brokerage', 'refund']);
  180. })
  181. ->when(isset($where['uid']) && $where['uid'] !== '', function ($query) use ($where) {
  182. $query->where('uid', $where['uid'])->where('mer_id', 0);
  183. })
  184. ->when(isset($where['pm']) && $where['pm'] !== '', function ($query) use ($where) {
  185. $query->where('pm', $where['pm']);
  186. })
  187. ->when(isset($where['category']) && $where['category'] !== '', function ($query) use ($where) {
  188. $query->where('category', $where['category']);
  189. })
  190. ->when(isset($where['status']) && $where['status'] !== '', function ($query) use ($where) {
  191. $query->where('status', $where['status']);
  192. })
  193. ->when(isset($where['date']) && $where['date'] !== '', function ($query) use ($where) {
  194. getModelTime($query, $where['date'], 'create_time');
  195. })
  196. ->when(isset($where['day']) && $where['day'] !== '', function ($query) use ($where) {
  197. $query->whereDay('create_time', $where['day']);
  198. })
  199. ->when(isset($where['month']) && $where['month'] !== '', function ($query) use ($where) {
  200. $query->whereMonth('create_time', $where['month']);
  201. })
  202. ->when(isset($where['type']) && $where['type'] !== '', function ($query) use ($where) {
  203. $data = explode('/', $where['type'], 2);
  204. if (count($data) > 1) {
  205. $query->where('category', $data[0])->where('type', $data[1]);
  206. } else {
  207. $query->where('type', $where['type']);
  208. }
  209. })
  210. ->when(isset($where['mer_id']) && $where['mer_id'] !== '', function ($query) use ($where) {
  211. $query->where('mer_id', $where['mer_id']);
  212. })
  213. ->when(isset($where['link_id']) && $where['link_id'] !== '', function ($query) use ($where) {
  214. $query->where('link_id', $where['link_id']);
  215. });
  216. }
  217. public function userNowMoneyIncTotal($uid)
  218. {
  219. return $this->search(['uid' => $uid, 'now_money' => 2])->sum('number');
  220. }
  221. public function searchJoin(array $where)
  222. {
  223. return UserBill::getDB()->alias('a')->leftJoin('User b', 'a.uid = b.uid')
  224. ->field('a.bill_id,a.pm,a.title,a.number,a.balance,a.mark,a.create_time,a.status,b.nickname,a.uid,a.category')
  225. ->when(isset($where['mer_id']) && $where['mer_id'] !== '', function ($query) use ($where) {
  226. $query->where('a.mer_id', $where['mer_id']);
  227. })
  228. ->when(isset($where['type']) && $where['type'] !== '', function ($query) use ($where) {
  229. $data = explode('/', $where['type'], 2);
  230. if (count($data) > 1) {
  231. $query->where('a.category', $data[0])->where('type', $data[1]);
  232. } else {
  233. $query->where('a.type', $where['type']);
  234. }
  235. })
  236. ->when(isset($where['date']) && $where['date'] !== '', function ($query) use ($where) {
  237. getModelTime($query, $where['date'], 'a.create_time');
  238. })
  239. ->when(isset($where['keyword']) && $where['keyword'] !== '', function ($query) use ($where) {
  240. $query->whereLike('a.uid|b.nickname|a.title', "%{$where['keyword']}%");
  241. })
  242. ->when(isset($where['category']) && $where['category'] !== '', function ($query) use ($where) {
  243. $query->where('a.category', $where['category']);
  244. })->where('category', '<>', 'sys_brokerage');
  245. }
  246. public function refundBrokerage($order_id, $uid)
  247. {
  248. return UserBill::getDB()->where('link_id', $order_id)->where('uid', $uid)
  249. ->where('category', 'brokerage')->whereIn('type', ['refund_two', 'refund_one'])->sum('number');
  250. }
  251. public function refundIntegral($order_id, $uid)
  252. {
  253. return UserBill::getDB()->where('link_id', $order_id)->where('uid', $uid)
  254. ->where('category', 'integral')->where('type', 'refund_lock')->sum('number');
  255. }
  256. public function validIntegral($uid, $start, $end)
  257. {
  258. $lst = UserBill::getDB()->where('category', 'integral')
  259. ->where('type', 'lock')->whereBetween('create_time', [$start, $end])->where('uid', $uid)->where('status', 1)->field('link_id,number')->select()->toArray();
  260. $integral = 0;
  261. if (count($lst)) {
  262. $integral = -1 * UserBill::getDB()->whereIn('link_id', array_column($lst, 'link_id'))->where('uid', $uid)
  263. ->where('category', 'integral')->where('type', 'refund_lock')->sum('number');
  264. }
  265. foreach ($lst as $bill) {
  266. $integral = bcadd($integral, $bill['number'], 0);
  267. }
  268. $integral2 = UserBill::getDB()->where('uid', $uid)->whereBetween('create_time', [$start, $end])
  269. ->where('category', 'integral')->where('pm', 1)->whereNotIn('type', ['lock', 'refund'])->sum('number');
  270. $integral3 = UserBill::getDB()->where('uid', $uid)->whereBetween('create_time', [$start, $end])
  271. ->where('category', 'integral')->where('type', 'sys_dec')->sum('number');
  272. return (int)max(bcsub(bcadd($integral, $integral2, 0), $integral3, 0), 0);
  273. }
  274. }