MoneyDetailServer.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?php
  2. namespace App\Servers;
  3. use App\Models\Member;
  4. use App\Models\MoneyDetail;
  5. use App\Models\MoneyRecord;
  6. use App\Models\ShopBean;
  7. use App\Models\ShopUser;
  8. /**
  9. * 订单管理
  10. * Class OrderServer
  11. * @package App\Servers
  12. */
  13. class MoneyDetailServer
  14. {
  15. private $type_arr = [
  16. 1 => '余额',
  17. ];
  18. private $type_key = [
  19. 1 => 'money',
  20. ];
  21. private $add_reduce_arr = [
  22. 1 => '增加',
  23. 0 => '减少',
  24. ];
  25. private $status_arr = [
  26. 1 => '消费金订单抵扣',
  27. 2 => '商城购买',
  28. 3 => '线下消费',
  29. 4 => '兑换商品',
  30. 5 => '奖励',
  31. 6 => '分销佣金',//订单分佣
  32. 7 => '佣金',//门店分佣
  33. 8 => '支付返现',//门店分佣
  34. 9 => '余额提现',//门店分佣
  35. 10 => '退货/退款',//门店分佣
  36. 11 => '线下代理收益',//线下订单佣金
  37. 12 => '购买返现',//线上订单佣金
  38. 13 => '返现',//进货订单平台返现
  39. 14 => '驳回',//提现驳回
  40. 15 => '闲置交易',//提现驳回
  41. 16 => '分销返现',//提现驳回
  42. 17 => '线上代理收益',//提现驳回
  43. 18 => '进货返现',//提现驳回
  44. 19 => '账户合并',//账户合并变动金额、消费金、公益豆
  45. ];
  46. private $water_type = [
  47. 1 => [
  48. ['water_key' => '2', 'water_name' => '商城购买'],
  49. ['water_key' => '6', 'water_name' => '分销佣金'],
  50. // ['water_key' => '7', 'water_name' => '佣金'],
  51. ['water_key' => '11', 'water_name' => '线下代理收益'],
  52. ['water_key' => '15', 'water_name' => '闲置交易'],
  53. ['water_key' => '16', 'water_name' => '分销返现'],
  54. ['water_key' => '17', 'water_name' => '线上代理收益'],
  55. ['water_key' => '18', 'water_name' => '进货返现'],
  56. ['water_key' => '12', 'water_name' => '购买返现'],
  57. ['water_key' => '8', 'water_name' => '支付返现'],
  58. ['water_key' => '9', 'water_name' => '提现'],
  59. ['water_key' => '10', 'water_name' => '退款'],
  60. ]
  61. ];
  62. static private $server = null;
  63. private function __construct()
  64. {
  65. }
  66. /**
  67. * 创建对象
  68. * @return MoneyDetailServer
  69. */
  70. static function creatServer()
  71. {
  72. if (empty(self::$server)) self::$server = new MoneyDetailServer();
  73. return self::$server;
  74. }
  75. /**
  76. * @param $reduce
  77. * @return string
  78. */
  79. public function getAddReduceArr($reduce)
  80. {
  81. return empty($this->add_reduce_arr[$reduce]) ? '' : $this->add_reduce_arr[$reduce];
  82. }
  83. /**
  84. * @return string[]
  85. */
  86. public function getStatus()
  87. {
  88. return $this->status_arr;
  89. }
  90. /**
  91. * @param $status
  92. * @return array|string
  93. */
  94. public function getStatusArr($status)
  95. {
  96. return empty($this->status_arr[$status]) ? '' : $this->status_arr[$status];
  97. }
  98. /**
  99. * 获取消费类型
  100. * @param $type
  101. * @return array|\string[][]
  102. */
  103. public function getWaterType($type)
  104. {
  105. return empty($this->water_type[$type]) ? [] : $this->water_type[$type];
  106. }
  107. /**
  108. * 获取订单类型
  109. * @param $type
  110. * @return array|string
  111. */
  112. public function getTypeArr($type)
  113. {
  114. return empty($this->type_arr[$type]) ? '' : $this->type_arr[$type];
  115. }
  116. /**
  117. * @return string[]
  118. */
  119. public function getType()
  120. {
  121. return $this->type_arr;
  122. }
  123. /**
  124. * 会员余额变动
  125. * @param $type
  126. * @param $status
  127. * @param $price
  128. * @param $addReduce
  129. * @param $m_id
  130. * @param $mark
  131. * @param int $fromID
  132. * @param int $shop_id
  133. * @param int $level
  134. * @return MoneyDetail|false|\Illuminate\Database\Eloquent\Model
  135. */
  136. public function write($type, $status, $price, $addReduce, $m_id, $mark = '', $fromID = 0, $shop_id = 0, $level = 0)
  137. {
  138. $money_mode = Member::where('id', $m_id)->select(['id', 'money'])->first();
  139. if (empty($money_mode)) {
  140. return false;
  141. }
  142. $money_mode->increment('money', $price);
  143. $detail = MoneyDetail::create(
  144. [
  145. 'type' => $type, // 货币类型
  146. 'status' => $status, // 来源
  147. 'price' => $price, // 数目
  148. 'add_reduce' => $addReduce, // 增加 | 减少
  149. 'm_id' => $m_id, // 被操作会员ID
  150. 'mark' => $mark, // 备注
  151. 'shop_id' => $shop_id, // 备注
  152. 'source_id' => $fromID, // 操作员备注
  153. 'level' => $level, // 操作员备注
  154. 'remainder' => sprintf("%.2f", ($addReduce == 0 ? $price * -1 : $price) + $remainder),// 剩余数目
  155. ]
  156. );
  157. MemberServer::creatServer()->delMemberCache($m_id);
  158. return $detail->{'id'};
  159. }
  160. /**
  161. * 验证会员余额是否充足
  162. * @param $m_id
  163. * @param $money
  164. * @return bool
  165. */
  166. function verifyMoney($m_id, $money)
  167. {
  168. $type_key = $this->type_key[1];
  169. $balance = Member::where('id', $m_id)->select(['id', 'money', 'benefit_money', 'consume_money'])->value($type_key);
  170. return ($balance >= $money) ? true : false;
  171. }
  172. /**
  173. * 获取会员余额
  174. * @param $m_id
  175. * @param $type
  176. * @param $shop_id
  177. * @return mixed
  178. */
  179. function getMoney($m_id, $type=1)
  180. {
  181. if (empty($this->type_key[$type])) return 0;
  182. $type_key = $this->type_key[$type];
  183. $balance = Member::where('id', $m_id)->value($type_key);
  184. $balance = CommonServer::creatServer()->setFormatNum($balance);
  185. return $balance;
  186. }
  187. /**
  188. * 获取收支
  189. * @param $m_id
  190. * @param $type
  191. * @param $date_arr
  192. * @return array
  193. */
  194. function getMoneyIncome($m_id, $type, $date_arr)
  195. {
  196. $where = [['m_id', $m_id], ['type', $type]];
  197. $income = MoneyDetail::where($where)->where('add_reduce', 1)->whereBetween('created_at', $date_arr)->sum('price');
  198. $expenses = MoneyDetail::where($where)->where('add_reduce', 0)->whereBetween('created_at', $date_arr)->sum('price');
  199. return ['income' => $income, 'expenses' => $expenses];
  200. }
  201. }