RechargeForm.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\admin\models;
  8. use app\models\Level;
  9. use app\models\RcCommissionLog;
  10. use app\models\Recharge;
  11. use app\models\ReOrder;
  12. use app\models\SaasUser;
  13. use app\models\User;
  14. use yii\base\Model;
  15. class RechargeForm extends Model
  16. {
  17. public $id;
  18. public $store_id;
  19. public $pay_price;
  20. public $send_price;
  21. public $name;
  22. public $order_no;
  23. public $sort;
  24. public $user_id;
  25. public $is_delete;
  26. public $phone;
  27. public $send_integral;
  28. //搜索
  29. public $search_key;
  30. public $search_is_show;
  31. public $referral_commission;
  32. public $level_one_bonus;
  33. public $level_two_bonus;
  34. public $level_up;
  35. public $assign_member;
  36. public $target_type;
  37. const SCENARIO_ADD = 'add';
  38. const SCENARIO_EDIT = 'edit';
  39. const SCENARIO_DEL = 'del';
  40. const SCENARIO_LIST = 'list';
  41. /**
  42. * {@inheritdoc}
  43. */
  44. public function rules()
  45. {
  46. return [
  47. [['store_id', 'is_delete', 'sort', 'send_integral', 'level_up'], 'integer'],
  48. [['pay_price', 'send_price', 'level_one_bonus', 'level_two_bonus'], 'number'],
  49. [['name',], 'string', 'max' => 255],
  50. [['referral_commission',], 'string'],
  51. ['pay_price', 'compare', 'compareValue' => 0.01, 'operator' => '>='],
  52. ['is_delete', 'default', 'value'=> Recharge::IS_DELETE_NO],
  53. [['name', 'pay_price', 'send_price', 'sort'],'required', 'on'=> [self::SCENARIO_ADD, self::SCENARIO_EDIT]],
  54. [['id'],'required', 'on'=> [self::SCENARIO_DEL, self::SCENARIO_EDIT]],
  55. ['search_key', 'string', 'on' => self::SCENARIO_LIST]
  56. ];
  57. }
  58. /**
  59. * {@inheritdoc}
  60. */
  61. public function attributeLabels()
  62. {
  63. return [
  64. 'id' => 'ID',
  65. 'store_id' => 'Store ID',
  66. 'pay_price' => '支付金额',
  67. 'send_price' => '赠送金额',
  68. 'name' => '充值名称',
  69. 'is_delete' => 'Is Delete',
  70. 'sort' => '权重',
  71. 'send_integral' => '赠送积分',
  72. ];
  73. }
  74. public function scenarios()
  75. {
  76. $scenarios = parent::scenarios();
  77. return $scenarios;
  78. }
  79. public function saveRecharge()
  80. {
  81. if ($this->validate()) {
  82. $t = \Yii::$app->db->beginTransaction();
  83. if ($this->scenario == self::SCENARIO_EDIT) {
  84. $model = Recharge::findOne(['id' => $this->id]);
  85. } else {
  86. $model = new Recharge();
  87. }
  88. $model->attributes = $this->attributes;
  89. if (!$model->save()) {
  90. $t->rollBack();
  91. return [
  92. 'code' => 1,
  93. 'msg' => $model->getErrorSummary(false)[0]
  94. ];
  95. }
  96. $t->commit();
  97. return [
  98. 'code' => 0,
  99. 'msg' => '保存成功'
  100. ];
  101. } else {
  102. // 验证失败:$errors 是一个包含错误信息的数组
  103. return [
  104. 'code' => 1,
  105. "msg" => $this->getErrorSummary(false)[0]
  106. ];
  107. }
  108. }
  109. public function searchRecharge()
  110. {
  111. $levelType = Level::find()->where(['store_id' => get_store_id(), 'is_delete' => Level::NOT_DELETE])->asArray()->all();
  112. $query = Recharge::find();
  113. $query->where(['is_delete' => Recharge::IS_DELETE_NO, 'store_id' => $this->store_id])->orderBy("sort desc,id desc");
  114. // 搜索
  115. if ($this->search_key) {
  116. $query->andWhere(['like', 'name', $this->search_key]);
  117. }
  118. $list = pagination_make($query);
  119. foreach ($list['list'] as &$val) {
  120. $val['created_at'] = date('Y-m-d H:i:s', $val['created_at']);
  121. $referral_commission = json_decode($val['referral_commission'], true);
  122. if (is_array($referral_commission) && !empty($referral_commission)) {
  123. $combined_values = '';
  124. foreach ($referral_commission as $commission) {
  125. $combined_values .= $commission['value'] . ',';
  126. }
  127. $combined_values = rtrim($combined_values, ',');
  128. $val['referral_commission_number'] = $combined_values;
  129. }
  130. $assignMembers = [];
  131. $members = (json_decode($val['assign_member'], true));
  132. foreach ((array)$members as $memberId) {
  133. foreach ($levelType as $type) {
  134. if ($memberId == $type['level']) {
  135. $assignMembers[] = $type['name'];
  136. break;
  137. } else if ($memberId == 0) {
  138. $assignMembers[] = '所有人';
  139. break;
  140. }
  141. }
  142. }
  143. $val['assign_member_names'] = implode(', ', $assignMembers);
  144. foreach ($levelType as $type) {
  145. if ($val['level_up'] == $type['level']) {
  146. $val['level_up_name'] = $type['name'];
  147. break;
  148. }
  149. if ($val['level_up'] == 0) {
  150. $val['level_up_name'] = '无';
  151. break;
  152. }
  153. }
  154. }
  155. $recharge_setting = RechargeSettingForm::getRechargeSettingList();
  156. return [
  157. 'code' => 0,
  158. 'msg' => 'success',
  159. 'data' => [
  160. 'data' => $list['list'],
  161. 'recharge_setting' => $recharge_setting,
  162. 'pageNo' => $list['pageNo'],
  163. 'level_type' => $levelType,
  164. 'totalCount' => $list['totalCount']
  165. ]
  166. ];
  167. }
  168. public function delRecharge()
  169. {
  170. if ($this->validate()) {
  171. $t = \Yii::$app->db->beginTransaction();
  172. if ($this->scenario !== self::SCENARIO_DEL) {
  173. return [
  174. 'code' => 1,
  175. 'msg' => '删除失败'
  176. ];
  177. }
  178. $model = Recharge::findOne(['id' => $this->id]);
  179. $model->is_delete = Recharge::IS_DELETE_YES;
  180. if (!$model || !$model->save()) {
  181. $t->rollBack();
  182. return [
  183. 'code' => 1,
  184. 'msg' => $model->getErrorSummary(false)[0]
  185. ];
  186. }
  187. $t->commit();
  188. return [
  189. 'code' => 0,
  190. 'msg' => '删除成功'
  191. ];
  192. // 所有输入数据都有效 all inputs are valid
  193. } else {
  194. // 验证失败:$errors 是一个包含错误信息的数组
  195. return [
  196. 'code' => 1,
  197. "msg" => $this->getErrorSummary(false)[0]
  198. ];
  199. }
  200. }
  201. public static function getRechargeList()
  202. {
  203. return Recharge::find()->where(['is_delete' => Recharge::IS_DELETE_NO])->orderBy(['sort desc,id desc'])->select('*')->asArray()->all();
  204. }
  205. public function search()
  206. {
  207. $query = RcCommissionLog::find()
  208. ->alias('l')
  209. ->leftJoin(['u' => User::tableName()], 'l.user_id = u.id')
  210. ->leftJoin(['ro' => ReOrder::tableName()], 'l.order_id = ro.id')
  211. ->select([
  212. 'l.*',
  213. 'u.avatar_url',
  214. 'u.binding',
  215. 'u.nickname',
  216. 'ro.order_no',
  217. 'ro.pay_price',
  218. 'ro.send_price',
  219. ])
  220. ->andWhere(['ro.is_delete' => 0])
  221. ->orderBy(['l.id' => SORT_DESC]);
  222. if ($this->store_id > 0) {
  223. $query->andWhere(['ro.store_id' => $this->store_id]);
  224. }
  225. if ($this->user_id > 0) {
  226. $query->andWhere(['ro.user_id' => $this->user_id]);
  227. }
  228. if ($this->name) {
  229. $query->andWhere(['like', 'u.nickname', $this->name]);
  230. }
  231. if ($this->phone) {
  232. $query->andWhere(['like', 'u.binding', $this->phone]);
  233. }
  234. if ($this->order_no) {
  235. $query->andWhere(['like', 'ro.order_no', $this->order_no]);
  236. }
  237. $data = pagination_make($query);
  238. $data['data'] = $data['list'];
  239. unset($data['list']);
  240. $rechargeMap = Recharge::find()->where(['store_id' => $this->store_id])->indexBy('id')->all();
  241. foreach ($data['data'] as &$item) {
  242. $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
  243. if (isset($rechargeMap[$item['recharge_id']])) {
  244. $item['recharge_name'] = $rechargeMap[$item['recharge_id']]['name'];
  245. }
  246. if ($item['bind_type'] == 2) {
  247. $item['parent_id_two'] = $item['parent_id'];
  248. $item['amount_two'] = $item['amount'];
  249. }
  250. if (!empty($item['parent_id']) && $item['bind_type'] == 1) {
  251. $user = User::findOne($item['parent_id']);
  252. if ($user && !empty($user['binding'])) {
  253. $saasUser = SaasUser::findOne(['mobile' => $user['binding']]);
  254. if ($saasUser) {
  255. $item['superior_nickname'] = $saasUser['name'];
  256. }
  257. }
  258. $userTwo = User::findOne($user['parent_id']);
  259. if ($userTwo && !empty($userTwo['binding'])) {
  260. $saasUser = SaasUser::findOne(['mobile' => $userTwo['binding']]);
  261. if ($saasUser) {
  262. $item['superior_nickname_two'] = $saasUser['name'];
  263. }
  264. }
  265. }
  266. if (!empty($item['parent_id_two']) && $item['bind_type'] == 2) {
  267. $userTwo = User::findOne($item['parent_id_two']);
  268. if ($userTwo && !empty($userTwo['binding'])) {
  269. $saasUser = SaasUser::findOne(['mobile' => $userTwo['binding']]);
  270. if ($saasUser) {
  271. $item['superior_nickname_two'] = $saasUser['name'];
  272. }
  273. }
  274. $find = RcCommissionLog::findOne(['order_id' => $item['order_id'], 'user_id' => $item['user_id'], 'bind_type' => 1]);
  275. $user = User::findOne($find['parent_id']);
  276. if ($user && !empty($user['binding'])) {
  277. $saasUser = SaasUser::findOne(['mobile' => $user['binding']]);
  278. if ($saasUser) {
  279. $item['superior_nickname'] = $saasUser['name'];
  280. }
  281. }
  282. }
  283. $item['level_one_bonus'] = ($item['bind_type'] == 1 && $item['type'] != 21) ? $item['amount'] : 0;
  284. $item['level_two_bonus'] = ($item['bind_type'] == 2) ? $item['amount_two'] : 0;
  285. $item['referral_commission'] = ($item['type'] == 21) ? $item['amount'] : 0;
  286. }
  287. return [
  288. 'code' => 0,
  289. 'data' => $data,
  290. 'sql' => $query->createCommand()->getRawSql(),
  291. ];
  292. }
  293. }