GoldRice.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. namespace app\common\model\member;
  3. use app\common\enum\member\GoldType;
  4. use app\common\model\BaseModel;
  5. use app\common\model\Order;
  6. use app\common\model\OrderGoods;
  7. use app\common\model\User;
  8. /**
  9. * 满件送赠品活动模型
  10. * @package app\store\model\coupon
  11. */
  12. class GoldRice extends BaseModel
  13. {
  14. // 全部
  15. const LIST_TYPE_ALL = 'all';
  16. // 收入
  17. const LIST_TYPE_IN = 'in';
  18. // 支出
  19. const LIST_TYPE_OUT = 'out';
  20. //审核状态
  21. const AUDIT_STATUS = [0=>'待审核',1=>'审核通过',2=>'审核不通过'];
  22. //类型 1收入 0支出
  23. const TYPE = [1=>'收入',0=>'支出'];
  24. protected $name = 'member_gold_rice';
  25. protected $append = [];
  26. /**
  27. * 详情
  28. * @param int $id
  29. * @return null|static
  30. */
  31. public static function detail(int $id,$with =[])
  32. {
  33. return self::get($id,$with);
  34. }
  35. //用户关联
  36. public function user(){
  37. return $this->hasOne(User::class,'user_id','user_id');
  38. }
  39. //订单关联
  40. public function order(){
  41. return $this->hasOne(Order::class,'order_no','order_no');
  42. }
  43. /**
  44. * 添加结构
  45. * @author: zjwhust
  46. * @Time: 2021/11/20 16:05
  47. */
  48. public static function add($userId,$orderNo,$name,$score,$type=1)
  49. {
  50. $data = [
  51. "user_id" => $userId,//持有用户id
  52. "name" => $name,//描述
  53. "order_no" => $orderNo,//订单编号
  54. "score" => $score,//分值(收入/支出的分值)
  55. "type" => $type,//类型 1收入 0支出
  56. ];
  57. self::create($data);
  58. }
  59. /**
  60. * 获取列表记录
  61. * @param string $dataType 类型
  62. * @param array $param
  63. * @return \think\Paginator
  64. * @throws \think\db\exception\DbException
  65. */
  66. public function getList(string $dataType = self::LIST_TYPE_ALL,array $param = [])
  67. {
  68. // 检索查询条件
  69. $filter = $this->getFilter($param);
  70. // 设置订单类型条件
  71. $dataTypeFilter = $this->getFilterDataType($dataType);
  72. return $this->where($dataTypeFilter)
  73. ->where($filter)
  74. ->order('id','desc')
  75. ->paginate();
  76. }
  77. /**
  78. * 获取查询条件
  79. * @param array $param
  80. * @return array
  81. */
  82. private function getFilter(array $param = [])
  83. {
  84. // 默认查询参数
  85. $params = $this->setQueryDefaultValue($param, ['userId' => 0]);
  86. // 检索查询条件
  87. $filter = [];
  88. $params['userId']>0 && $filter[] = ['user_id','=', $params['userId']];
  89. return $filter;
  90. }
  91. /**
  92. * 设置类型条件
  93. * @param string $dataType
  94. * @return array
  95. */
  96. private function getFilterDataType(string $dataType = self::LIST_TYPE_ALL): array
  97. {
  98. // 数据类型
  99. $filter = [];
  100. switch ($dataType) {
  101. case self::LIST_TYPE_ALL:
  102. $filter = [];
  103. break;
  104. case self::LIST_TYPE_IN:
  105. $filter = [
  106. ['type', '=', GoldType::IN],
  107. ];
  108. break;
  109. case self::LIST_TYPE_OUT:
  110. $filter = [
  111. ['type', '=', GoldType::OUT],
  112. ];
  113. break;
  114. }
  115. return $filter;
  116. }
  117. //操作在途金米粒的处理逻辑
  118. public static function refundGoldRiceRoad($order,$refund){
  119. if($refund['gold_rice_amount_output']>0){
  120. //减少在途金米粒
  121. User::setDecByField($refund['user_id'],'gold_rice_road',(int)$refund['gold_rice_amount_output']);
  122. //减少订单表里的gold_rice_amount_input字段数量
  123. (new Order)->setDec(['order_id'=>$refund['order_id']],'gold_rice_amount_input',(int)$refund['gold_rice_amount_output']);
  124. //写金米粒出账记录
  125. self::add($refund['user_id'],$order['order_no'],'退款扣减',(int)$refund['gold_rice_amount_output'],0);
  126. }
  127. //
  128. if($refund['gold_rice_amount']>0){
  129. //写金米粒入账记录
  130. GoldRice::add($refund['user_id'],$order['order_no'],'退款返还',$refund['gold_rice_amount'],1);
  131. //退还抵扣的金米粒
  132. User::setIncByField($refund['user_id'],'gold_rice',(int)$refund['gold_rice_amount']);
  133. }
  134. //减少orderGoods表里的获得金米粒数量
  135. // if($refund['order_goods_id']>0){//单商品退款
  136. // (new OrderGoods)->setDec(['order_goods_id'=>$refund['order_goods_id']],'gold_rice_amount_input',(int)$refund['gold_rice_amount']);
  137. // }else{//整单退款
  138. // OrderGoods::where('order_id',$refund['order_id'])->update(['gold_rice_amount_input'=>0]);//所有的订单商品获得的金米粒都清零
  139. // }
  140. }
  141. }