StoreDividendsForm.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. <?php
  2. namespace app\modules\alliance\models;
  3. use app\models\Order;
  4. use app\models\SaaSLeaguePriceLog;
  5. use app\models\SaasUser;
  6. use app\models\Store;
  7. use app\models\StoreDividendsCycle;
  8. use app\models\StoreDividendsCycleSub;
  9. use app\models\StoreDividendsUser;
  10. use app\models\StoreDividendsUserIntegralLog;
  11. use app\models\StoreDividendsUserLeagueLog;
  12. use yii\base\Model;
  13. class StoreDividendsForm extends Model
  14. {
  15. public $saas_user;
  16. public $role;
  17. public $store_id;
  18. public $league_price;
  19. const ROLE_USER = 0;
  20. const ROLE_STORE = 1;
  21. public function rules()
  22. {
  23. return [
  24. [['store_id'], 'integer'],
  25. [['league_price'], 'number']
  26. ];
  27. }
  28. public function index() {
  29. $saas_user = $this->saas_user;
  30. $role = $this->role;
  31. $store_id = $this->store_id;
  32. $role_id = $saas_user->id;
  33. if ($role === self::ROLE_USER) {
  34. //头部信息
  35. $user_info = [
  36. 'avatar' => $saas_user->avatar,
  37. 'mobile' => $saas_user->mobile,
  38. 'name' => $saas_user->name,
  39. ];
  40. //联盟券余额
  41. $league_price = $saas_user->league_price;
  42. } else {
  43. $store = Store::findOne($store_id);
  44. $user_info = [
  45. 'logo' => $store->logo,
  46. 'address' => $store->address,
  47. 'name' => $store->name,
  48. ];
  49. //联盟券余额
  50. $league_price = $store->league_price;
  51. $role_id = $store->id;
  52. }
  53. //积分金额
  54. $storeDividendsUser = StoreDividendsUser::findOne(['role' => $role, 'role_id' => $role_id]);
  55. $integral_price = $storeDividendsUser ? $storeDividendsUser->dividends_integral : 0;
  56. $dividends_price = $storeDividendsUser ? $storeDividendsUser->league_price : 0;
  57. //上期分红
  58. $last_league_price = StoreDividendsUserLeagueLog::find()->where(['dividends_user_id' => $storeDividendsUser->id])
  59. ->orderBy('id desc')
  60. ->select('league_price')->scalar() ?: '0.00';
  61. return [
  62. 'code' => 0,
  63. 'msg' => '',
  64. 'data' => [
  65. 'user_info' => $user_info,
  66. 'league_price' => $league_price,
  67. 'integral_price' => $integral_price,
  68. 'last_league_price' => $last_league_price,
  69. 'dividends_price' => $dividends_price
  70. ]
  71. ];
  72. }
  73. //分红积分
  74. public function integralLog() {
  75. $saas_user = $this->saas_user;
  76. $role = $this->role;
  77. $store_id = $this->store_id;
  78. $role_id = $saas_user->id;
  79. if ($role === self::ROLE_STORE) {
  80. $store = Store::findOne($store_id);
  81. $role_id = $store->id;
  82. }
  83. $storeDividendsUser = StoreDividendsUser::findOne(['role' => $role, 'role_id' => $role_id]);
  84. if (!$storeDividendsUser) {
  85. return [
  86. 'code' => 0,
  87. 'msg' => '用户不存在',
  88. 'data' => [
  89. 'list' => []
  90. ]
  91. ];
  92. }
  93. $query = StoreDividendsUserIntegralLog::find()->alias('dl')
  94. ->leftJoin(['o' => Order::tableName()],
  95. 'dl.order_id = o.id AND dl.order_type <> ' . StoreDividendsCycleSub::ORDER_TYPE_FACE)
  96. ->leftJoin(['sco' => \app\plugins\scanCodePay\models\Order::tableName()],
  97. 'dl.order_id = sco.id AND dl.order_type = ' . StoreDividendsCycleSub::ORDER_TYPE_FACE)
  98. ->where(['dl.dividends_user_id' => $storeDividendsUser->id])
  99. ->orderBy('dl.id desc')
  100. ->select('dl.dividends_integral, dl.created_at, dl.order_type, o.order_no, o.pay_price,
  101. sco.order_no sco_order_no, sco.total_price as sc_total_price, sco.coupon_sub_price');
  102. $list = pagination_make($query);
  103. foreach ($list['list'] as &$item) {
  104. $item['name'] = $role === self::ROLE_STORE ? '用户下单' : '商城购物';
  105. $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
  106. //如果是当面付
  107. if ($item['order_type'] == StoreDividendsCycleSub::ORDER_TYPE_FACE) {
  108. $item['order_no'] = $item['sco_order_no'];
  109. $item['pay_price'] = bcsub($item['sc_total_price'], $item['coupon_sub_price'], 2);
  110. }
  111. }
  112. return [
  113. 'code' => 0,
  114. 'msg' => '',
  115. 'data' => [
  116. 'list' => $list
  117. ]
  118. ];
  119. }
  120. //分红明细
  121. public function leagueLog() {
  122. $saas_user = $this->saas_user;
  123. $store_id = $this->store_id;
  124. $role = $this->role;
  125. $storeDividendsUser = StoreDividendsUser::findOne(['role' => StoreDividendsUser::ROLE_STORE, 'role_id' => $store_id]);
  126. if ($role === self::ROLE_USER) {
  127. $storeDividendsUser = StoreDividendsUser::findOne(['role' => StoreDividendsUser::ROLE_USER, 'role_id' => $saas_user->id]);
  128. }
  129. if (!$storeDividendsUser) {
  130. return [
  131. 'code' => 0,
  132. 'msg' => '用户不存在',
  133. 'data' => [
  134. 'list' => []
  135. ]
  136. ];
  137. }
  138. $query = StoreDividendsUserLeagueLog::find()->alias('dl')
  139. ->leftJoin(['dc' => StoreDividendsCycle::tableName()], 'dl.dividends_cycle_id = dc.id')
  140. ->where(['>', 'dl.league_price', 0])->andWhere(['dl.dividends_user_id' => $storeDividendsUser->id])
  141. ->select('dl.id, dl.league_price, dl.created_at, dc.name, dc.id as cycle_id')
  142. ->orderBy('dl.id desc');
  143. $list = pagination_make($query);
  144. foreach ($list['list'] as &$item) {
  145. $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
  146. }
  147. return [
  148. 'code' => 0,
  149. 'msg' => '',
  150. 'data' => [
  151. 'list' => $list
  152. ]
  153. ];
  154. }
  155. public function leagueDetailLog() {
  156. if ($this->role === self::ROLE_USER) {
  157. $saas_user = $this->saas_user;
  158. $query = SaaSLeaguePriceLog::find()->alias('lpl')
  159. ->leftJoin(['su' => SaasUser::tableName()], 'su.id = lpl.saas_user_id')
  160. ->where(['lpl.role' => SaaSLeaguePriceLog::ROLE_USER, 'lpl.is_delete' => 0, 'lpl.saas_user_id' => $saas_user->id]);
  161. } else {
  162. $store_id = $this->store_id;
  163. $query = SaaSLeaguePriceLog::find()->alias('lpl')
  164. ->leftJoin(['s' => Store::tableName()], 's.id = lpl.store_id')
  165. ->where(['lpl.role' => SaaSLeaguePriceLog::ROLE_STORE, 'lpl.is_delete' => 0, 'lpl.store_id' => $store_id]);
  166. }
  167. $query->andWhere(['>', 'lpl.league_price', 0])->select('lpl.id, lpl.type, lpl.league_price, lpl.send_or_take_type, lpl.addtime')
  168. ->orderBy('lpl.id DESC');
  169. $list = pagination_make($query);
  170. foreach ($list['list'] as $index => &$item) {
  171. $item['send_or_take_type'] = intval($item['send_or_take_type']);
  172. $item['created_at'] = date('Y-m-d H:i:s', $item['addtime']);
  173. $item['type_text'] = SaaSLeaguePriceLog::getTypeStr($item['type']);
  174. unset($list['list'][$index]['addtime']);
  175. }
  176. return [
  177. 'code' => 0,
  178. 'msg' => '',
  179. 'data' => $list
  180. ];
  181. }
  182. /**
  183. * 商城联盟券转赠给自身
  184. */
  185. public function selfLeagueSend() {
  186. $saas_user = $this->saas_user;
  187. $saas_user = SaasUser::findOne($saas_user->id);
  188. $league_price = $this->league_price;
  189. $store_id = $this->store_id;
  190. $store = Store::findOne($store_id);
  191. if (!$store) {
  192. return [
  193. 'code' => 1,
  194. 'msg' => '店铺不存在'
  195. ];
  196. }
  197. if ($league_price <= 0) {
  198. return [
  199. 'code' => 1,
  200. 'msg' => '提交联盟券金额不正确'
  201. ];
  202. }
  203. if ($store->league_price < $league_price) {
  204. return [
  205. 'code' => 1,
  206. 'msg' => '当前店铺联盟券金额不足'
  207. ];
  208. }
  209. $before = $store->league_price;
  210. $store->updateCounters(['league_price' => -floatval($league_price)]);
  211. \app\models\SaaSLeaguePriceLog::setLeaguePriceLog(
  212. $store->id,
  213. $saas_user->id,
  214. $league_price,
  215. $before,
  216. \app\models\SaaSLeaguePriceLog::TYPE_SEND,
  217. \app\models\SaaSLeaguePriceLog::TAKE_TYPE,
  218. \app\models\SaaSLeaguePriceLog::ROLE_STORE
  219. );
  220. $before = $saas_user->league_price;
  221. $saas_user->updateCounters(['league_price' => floatval($league_price)]);
  222. $id = 0;
  223. \app\models\SaaSLeaguePriceLog::setLeaguePriceLog(
  224. $store->id,
  225. $saas_user->id,
  226. $league_price,
  227. $before,
  228. \app\models\SaaSLeaguePriceLog::TYPE_SEND,
  229. \app\models\SaaSLeaguePriceLog::SEND_TYPE,
  230. \app\models\SaaSLeaguePriceLog::ROLE_USER,
  231. 0,
  232. $id
  233. );
  234. return [
  235. 'code' => 0,
  236. 'msg' => '提交成功'
  237. ];
  238. }
  239. }