DeclarationLevel.php 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. <?php
  2. namespace common\models;
  3. use common\helpers\Cache;
  4. use Yii;
  5. /**
  6. * This is the model class for table "{{%DECLARATION_LEVEL}}".
  7. *
  8. * @property string $ID
  9. * @property string $LEVEL_NAME 级别名称
  10. * @property string $PERF 累计业绩
  11. * @property string $QY_PERCENT 区域津贴百分比
  12. * @property string $QY_TOUCH_CAP 对碰封顶
  13. * @property string $QY_BIG_CAP 大区封顶
  14. * @property int $FX_MIN_DEEP 复销奖拿奖最小层数
  15. * @property int $FX_MAX_DEEP 复销奖拿奖最大层数
  16. * @property string $FX_PERCENT 复销奖百分比
  17. * @property int $IS_ADJUST_GIFT 是否可调整礼包
  18. * @property int $IS_DEC 是否可以报单
  19. * @property int $SORT 级别排序
  20. * @property string $CREATE_ADMIN 创建人
  21. * @property string $UPDATE_ADMIN 更新人
  22. * @property int $CREATED_AT 创建时间
  23. * @property int $UPDATED_AT 更新时间
  24. * @property int $GL_ODD_DEEP_ONE 奇数代数(推荐1人)
  25. * @property int $GL_ODD_DEEP_TWO 奇数代数(推荐2人)
  26. * @property int $GL_ODD_DEEP_THREE 奇数代数(推荐3人)
  27. * @property int $INCOME_CAP 收入封顶
  28. */
  29. class DeclarationLevel extends \common\components\ActiveRecord
  30. {
  31. const YIN_ZUAN_LEVEL_ID = '67ABCCE20A9F5553E055736AECE8677A'; //'67ABCB8C1F7D5519E055736AECE8644D';
  32. const JIN_ZUAN_LEVEL_ID = '67ABCCE20A9F5553E055736AECE8644D';
  33. const VIP_LEVEL_ID = '67ABCE0ECE705575E055736AECE8644D';
  34. /**
  35. * @inheritdoc
  36. */
  37. public static function tableName()
  38. {
  39. return '{{%DECLARATION_LEVEL}}';
  40. }
  41. /**
  42. * @inheritdoc
  43. */
  44. public function rules()
  45. {
  46. return [
  47. [['LEVEL_NAME', 'CREATE_ADMIN', 'CREATED_AT'], 'required'],
  48. [['PERF', 'QY_PERCENT', 'QY_TOUCH_CAP', 'QY_BIG_CAP', 'FX_PERCENT', 'GL_ODD_DEEP_ONE', 'GL_ODD_DEEP_TWO', 'GL_ODD_DEEP_THREE', 'INCOME_CAP'], 'number'],
  49. [['FX_MIN_DEEP', 'FX_MAX_DEEP', 'IS_ADJUST_GIFT', 'IS_DEC', 'SORT', 'CREATED_AT', 'UPDATED_AT'], 'integer'],
  50. [['ID', 'CREATE_ADMIN', 'UPDATE_ADMIN'], 'string', 'max' => 32],
  51. [['LEVEL_NAME'], 'string', 'max' => 20],
  52. [['LEVEL_NAME'], 'unique'],
  53. [['ID'], 'unique'],
  54. ];
  55. }
  56. /**
  57. * @inheritdoc
  58. */
  59. public function attributeLabels()
  60. {
  61. return [
  62. 'ID' => 'ID',
  63. 'LEVEL_NAME' => '级别名称',
  64. 'PERF' => '累计业绩',
  65. 'QY_PERCENT' => '区域津贴百分比',
  66. 'QY_TOUCH_CAP' => '对碰封顶',
  67. 'QY_BIG_CAP' => '大区封顶',
  68. 'FX_MIN_DEEP' => '复销奖拿奖最小层数',
  69. 'FX_MAX_DEEP' => '复销奖拿奖最大层数',
  70. 'FX_PERCENT' => '复销奖百分比',
  71. 'IS_ADJUST_GIFT' => '是否可调整礼包',
  72. 'IS_DEC' => '是否可以报单',
  73. 'SORT' => '级别排序',
  74. 'CREATE_ADMIN' => '创建人',
  75. 'UPDATE_ADMIN' => '更新人',
  76. 'CREATED_AT' => '创建时间',
  77. 'UPDATED_AT' => '更新时间',
  78. 'GL_ODD_DEEP_ONE' => '奇数代数(推荐1人)',
  79. 'GL_ODD_DEEP_TWO' => '奇数代数(推荐2人)',
  80. 'GL_ODD_DEEP_THREE' => '奇数代数(推荐3人)',
  81. 'INCOME_CAP' => '收入封顶',
  82. ];
  83. }
  84. /**
  85. * 从缓存获取信息
  86. * @return array|mixed|\yii\db\ActiveRecord[]
  87. */
  88. public static function getFromCache(){
  89. $data = Yii::$app->cache->get(Cache::DEC_LEVEL_CONFIG_KEY);
  90. Yii::$app->cache->delete(Cache::DEC_LEVEL_CONFIG_KEY);
  91. if(!$data){
  92. // 获取信息
  93. $data = static::find()->where('1=1')->orderBy('PERF ASC, CREATED_AT ASC')->indexBy('ID')->asArray()->all();
  94. Yii::$app->cache->set(Cache::DEC_LEVEL_CONFIG_KEY, $data);
  95. }
  96. // i18n转换
  97. foreach ($data as &$item) {
  98. $item['LEVEL_NAME'] = Yii::t('ctx', $item['LANGUAGE_KEY']);
  99. }
  100. return $data;
  101. }
  102. // 获取最大的业绩信息
  103. public static function getMaxDecPref() {
  104. $data = static::find()
  105. ->where('1=1')
  106. ->orderBy('PERF DESC')
  107. ->indexBy('ID')
  108. ->asArray()
  109. ->one();
  110. return $data;
  111. }
  112. // 获取下一级业绩数据
  113. public static function getNextDecPref($perf) {
  114. $data = static::find()
  115. ->where('PERF>:PERF',
  116. [
  117. 'PERF'=>$perf,
  118. ]
  119. )
  120. ->orderBy('PERF ASC')
  121. ->indexBy('ID')
  122. ->asArray()
  123. ->one();
  124. return $data;
  125. }
  126. public static function getNextAll($perf){
  127. $data = static::find()
  128. ->where('PERF>:PERF',
  129. [
  130. 'PERF'=>$perf,
  131. ]
  132. )
  133. ->indexBy('ID')
  134. ->orderBy('SORT ASC')
  135. ->asArray()
  136. ->all();
  137. return $data;
  138. }
  139. /**
  140. * @return array|\yii\db\ActiveRecord[]
  141. */
  142. public static function getAllData(){
  143. $records = static::find()->where('1=1')->indexBy('ID')->orderBy('SORT ASC')->asArray()->all();
  144. foreach ($records as &$record) {
  145. $record['LEVEL_NAME'] = Yii::t('ctx', $record['LANGUAGE_KEY']);
  146. }
  147. return $records;
  148. }
  149. public static function getData(){
  150. $records = static::find()->where('STATUS=1')->orderBy('SORT ASC')->asArray()->all();
  151. foreach ($records as &$record) {
  152. $record['LEVEL_NAME'] = Yii::t('ctx', $record['LANGUAGE_KEY']);
  153. }
  154. return $records;
  155. }
  156. public static function getNextDecLv($decLvID)
  157. {
  158. $result = [];
  159. $decLv = static::find()->where('1=1')->indexBy('ID')->orderBy('SORT ASC')->asArray()->all();
  160. $current = $decLv[$decLvID]['SORT'] ?? '';
  161. foreach ($decLv as $id => $item) {
  162. if ($item['SORT'] == $current + 1) {
  163. $result = $item;
  164. break;
  165. }
  166. }
  167. return $result;
  168. }
  169. /**
  170. * 更新缓存
  171. * @return array|\yii\db\ActiveRecord[]
  172. */
  173. public static function updateToCache(){
  174. // 获取配置
  175. $data = static::find()->where('1=1')->orderBy('PERF ASC, CREATED_AT ASC')->asArray()->indexBy('ID')->all();
  176. Yii::$app->cache->set(Cache::DEC_LEVEL_CONFIG_KEY, $data);
  177. return $data;
  178. }
  179. /**
  180. * 通过排序获取级别
  181. * @param int $sort
  182. * @return mixed|\yii\db\ActiveRecord
  183. */
  184. public static function getLevelFromSort(int $sort){
  185. $empLevels = self::getFromCache();
  186. foreach($empLevels as $level){
  187. if($level['SORT'] == $sort){
  188. return $level;
  189. }
  190. }
  191. return [];
  192. }
  193. /**
  194. * 通过排序获取ID
  195. * @param int $sort
  196. * @return mixed
  197. */
  198. public static function getIdFromSort(int $sort){
  199. $level = self::getLevelFromSort($sort);
  200. return $level['ID'];
  201. }
  202. /**
  203. * 获取默认级别
  204. * @return mixed
  205. */
  206. public static function getDefaultLevelId(){
  207. return self::YIN_ZUAN_LEVEL_ID;
  208. }
  209. /**
  210. * 通过pv获取对应的报单级别
  211. * @param $pv
  212. * @return mixed
  213. */
  214. public static function getLevelIdFromPv($pv){
  215. $levelConfig = self::getFromCache();
  216. $result = self::getDefaultLevelId();
  217. foreach($levelConfig as $level){
  218. if($pv >= $level){
  219. $result = $level['ID'];
  220. }
  221. }
  222. return $result;
  223. }
  224. /**
  225. * 通过会员ID获取报单级别ID
  226. * @param $userId
  227. * @return mixed
  228. */
  229. public static function getLevelIdFromUserId($userId){
  230. $data = User::findOneAsArray('ID=:ID', [':ID'=>$userId], 'DEC_LV');
  231. return $data['DEC_LV'];
  232. }
  233. /**
  234. * 通过会员ID获得报单级别名称
  235. * @param $userId
  236. * @return string
  237. */
  238. public static function getLevelNameFromUserId($userId){
  239. $levelId = self::getLevelIdFromUserId($userId);
  240. $level = self::findOneAsArray('ID=:ID', [':ID'=>$levelId]);
  241. return $level ? $level['LEVEL_NAME'] : '';
  242. }
  243. /**
  244. * 通过ID获取报单级别名称
  245. * @param $levelId
  246. * @return mixed
  247. */
  248. public static function getNameById($levelId){
  249. $data = self::findOneAsArray('ID=:ID', [':ID'=>$levelId]);
  250. return $data['LEVEL_NAME'];
  251. }
  252. /**
  253. * 奖金参数
  254. */
  255. public static function getBonusConfig(){
  256. $allData = self::getAllData();
  257. $data = [];
  258. foreach ($allData as $value) {
  259. $data[$value['ID']]['label'] = $value['LEVEL_NAME'];
  260. $data[$value['ID']]['value'] = '【区域津贴】拿奖比例'.$value['QY_PERCENT'].'%,奖金封顶'.$value['QY_TOUCH_CAP'].'元/碰,大区封顶'.$value['QY_BIG_CAP'].'积分;【复销奖】最小层数'.$value['FX_MIN_DEEP'].',最大层数'.$value['FX_MAX_DEEP'].',拿奖比例'.$value['FX_PERCENT'].'%';
  261. }
  262. return $data;
  263. }
  264. }