EmployLevel.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <?php
  2. namespace common\models;
  3. use common\helpers\Cache;
  4. use Yii;
  5. use yii\helpers\Json;
  6. /**
  7. * This is the model class for table "{{%EMPLOY_LEVEL}}".
  8. *
  9. * @property string $ID
  10. * @property string $LEVEL_NAME 级别名称
  11. * @property int $LOCATION_NUM 区数量
  12. * @property string $LOCATION_PERF 单区业绩
  13. * @property string $NEW_PERF 新增业绩
  14. * @property string $MIN_EMPLOY_LEVEL 几个区域内分别有几个最低什么聘级的会员
  15. * @property string $YC_PERCENT_ARR 育成津贴比例集合
  16. * @property string $CF_BASE_NUM 车房奖基数
  17. * @property string $CF_PERCENT 车房奖系数
  18. * @property string $LX_BASE_NUM 领袖奖奖基数
  19. * @property string $LX_PERCENT 领袖奖系数
  20. * @property int $SORT 排序
  21. * @property int $CREATED_AT 创建时间
  22. * @property int $UPDATED_AT 更新时间
  23. * @property string $CREATE_ADMIN 创建人
  24. * @property string $UPDATE_ADMIN 更新人
  25. * @property int $ICON_TYPE 图标类型
  26. * @property int $ICON_NUM 图标个数
  27. * @property int $RX_PERCENT 图标个数
  28. * @property string $OTHER_DEPART_PERF 去除最大部门,其它部门累计推荐业绩
  29. * @property int $MIN_EMPLOY_NUM 最小聘级的数量
  30. * @property string $LEVEL_SCORE 级别分数
  31. * @property string $UPGRADE_SCORE 升级分数
  32. */
  33. class EmployLevel extends \common\components\ActiveRecord
  34. {
  35. const NO_LEVEL_ID = '67BE1C6C21F81B32E055736AECE8644D';
  36. const JX_ZR_LEVEL_ID = 'E121497617216708615';
  37. const SHX_ZJ_LEVEL_ID = '67BE82019BE524CAE055736AECE8644D';
  38. CONST EMP_LEVEL_SORT = [
  39. 'NO_LEVEL' => 0,//无聘级
  40. 'JX_ZR_LEVEL' => 1,//见习主任
  41. 'ZR_LEVEL' => 2,//主任
  42. 'GJ_ZR_LEVEL' => 3,//高级主任
  43. 'JL_LEVEL' => 4,//经理
  44. 'GJ_JL_LEVEL' => 5,//高级经理
  45. 'ZJ_LEVEL' => 6,//总监
  46. 'GJ_ZJ_LEVEL' => 7,//高级总监
  47. 'SHX_ZJ_LEVEL' => 8,//首席总监
  48. ];
  49. /**
  50. * @inheritdoc
  51. */
  52. public static function tableName()
  53. {
  54. return '{{%EMPLOY_LEVEL}}';
  55. }
  56. /**
  57. * @inheritdoc
  58. */
  59. public function rules()
  60. {
  61. return [
  62. [['LEVEL_NAME', 'CREATED_AT', 'CREATE_ADMIN'], 'required'],
  63. [['LOCATION_NUM', 'SORT', 'CREATED_AT', 'UPDATED_AT', 'ICON_TYPE', 'ICON_NUM', 'MIN_EMPLOY_NUM'], 'integer'],
  64. [['LOCATION_PERF', 'NEW_PERF', 'CF_BASE_NUM', 'CF_PERCENT', 'LX_BASE_NUM', 'LX_PERCENT', 'RX_PERCENT', 'OTHER_DEPART_PERF', 'LEVEL_SCORE', 'UPGRADE_SCORE'], 'number'],
  65. [['ID', 'MIN_EMPLOY_LEVEL', 'CREATE_ADMIN', 'UPDATE_ADMIN'], 'string', 'max' => 32],
  66. [['LEVEL_NAME'], 'string', 'max' => 20],
  67. [['YC_PERCENT_ARR'], 'string', 'max' => 4000],
  68. [['LEVEL_NAME'], 'unique'],
  69. [['ID'], 'unique'],
  70. ];
  71. }
  72. /**
  73. * @inheritdoc
  74. */
  75. public function attributeLabels()
  76. {
  77. return [
  78. 'ID' => 'ID',
  79. 'LEVEL_NAME' => '级别名称',
  80. 'LOCATION_NUM' => '区数量',
  81. 'LOCATION_PERF' => '单区业绩',
  82. 'NEW_PERF' => '新增业绩',
  83. 'MIN_EMPLOY_LEVEL' => '几个区域内分别有几个最低什么聘级的会员',
  84. 'YC_PERCENT_ARR' => '育成津贴比例集合',
  85. 'CF_BASE_NUM' => '车房奖基数',
  86. 'CF_PERCENT' => '车房奖系数',
  87. 'LX_BASE_NUM' => '领袖奖奖基数',
  88. 'LX_PERCENT' => '领袖奖系数',
  89. 'SORT' => '排序',
  90. 'CREATED_AT' => '创建时间',
  91. 'UPDATED_AT' => '更新时间',
  92. 'CREATE_ADMIN' => '创建人',
  93. 'UPDATE_ADMIN' => '更新人',
  94. 'ICON_TYPE' => '图标类型',
  95. 'ICON_NUM' => '图标个数',
  96. 'RX_PERCENT' => '荣衔奖比例',
  97. 'OTHER_DEPART_PERF' => '去除最大部门,其它部门累计推荐业绩',
  98. 'LEVEL_SCORE' => '级别分数',
  99. 'UPGRADE_SCORE' => '升级分数',
  100. ];
  101. }
  102. /**
  103. * 获取全部级别以数字索引的方式展现
  104. * @return array|\yii\db\ActiveRecord[]
  105. */
  106. public static function getAllDataWithNumIndex(){
  107. $allData = static::find()->where('1=1')->orderBy('SORT ASC, CREATED_AT ASC')->indexBy('SORT')->asArray()->all();
  108. foreach($allData as $key=>$data){
  109. if($data['YC_PERCENT_ARR']){
  110. $allData[$key]['YC_PERCENT_ARR'] = Json::decode($data['YC_PERCENT_ARR']);
  111. } else{
  112. $allData[$key]['YC_PERCENT_ARR'] = [0,0,0,0,0,0,0,0,0,0];
  113. }
  114. }
  115. return $allData;
  116. }
  117. /**
  118. * 获取全部配置,把育成津贴奖金比例解成数组
  119. * @return array|\yii\db\ActiveRecord[]
  120. */
  121. public static function getAllData(){
  122. $allData = static::find()->where('1=1')->orderBy('SORT ASC, CREATED_AT ASC')->indexBy('ID')->asArray()->all();
  123. foreach($allData as $key=>$data){
  124. if($data['YC_PERCENT_ARR']){
  125. $allData[$key]['YC_PERCENT_ARR'] = Json::decode($data['YC_PERCENT_ARR']);
  126. } else{
  127. $allData[$key]['YC_PERCENT_ARR'] = [0,0,0,0,0,0,0,0,0,0];
  128. }
  129. }
  130. return $allData;
  131. }
  132. /**
  133. * 从缓存获取信息
  134. * @return array|mixed|\yii\db\ActiveRecord[]
  135. */
  136. public static function getFromCache(){
  137. $data = Yii::$app->cache->get(Cache::EMP_LEVEL_CONFIG_KEY);
  138. if(!$data){
  139. // 获取信息
  140. $data = self::getAllData();
  141. Yii::$app->cache->set(Cache::EMP_LEVEL_CONFIG_KEY, $data);
  142. }
  143. return $data;
  144. }
  145. /**
  146. * 更新缓存
  147. * @return array|\yii\db\ActiveRecord[]
  148. */
  149. public static function updateToCache(){
  150. // 获取配置
  151. $data = self::getAllData();
  152. Yii::$app->cache->set(Cache::EMP_LEVEL_CONFIG_KEY, $data);
  153. return $data;
  154. }
  155. /**
  156. * 通过排序获取级别
  157. * @param int $sort
  158. * @return mixed
  159. */
  160. public static function getLevelFromSort(int $sort){
  161. static $empLevels;
  162. if(!$empLevels){
  163. $empLevels = self::getFromCache();
  164. $empLevels = array_column($empLevels, null, 'sort');
  165. }
  166. return $empLevels[$sort];
  167. }
  168. /**
  169. * 通过排序获取ID
  170. * @param int $sort
  171. * @return mixed
  172. */
  173. public static function getIdFromSort(int $sort){
  174. $level = self::getLevelFromSort($sort);
  175. return $level['ID'];
  176. }
  177. /**
  178. * 获取默认级别
  179. * @return mixed
  180. */
  181. public static function getDefaultLevelId(){
  182. return self::NO_LEVEL_ID;
  183. }
  184. /**
  185. * 获取聘级的排序
  186. * @param $id
  187. * @return mixed
  188. */
  189. public static function getSortById($id){
  190. $empLevels = self::getFromCache();
  191. return $empLevels[$id]['SORT']??0;
  192. }
  193. /**
  194. * 是否合格高级经理及以上级别
  195. * @param $id
  196. * @return bool
  197. */
  198. public static function chkSenior($id) {
  199. if (self::getSortById($id) >= 2) return true;
  200. return false;
  201. }
  202. /**
  203. * 通过ID获取聘级名称
  204. * @param $levelId
  205. * @return mixed'
  206. */
  207. public static function getNameById($levelId){
  208. $data = self::findOneAsArray('ID=:ID', [':ID'=>$levelId]);
  209. return $data['LEVEL_NAME'];
  210. }
  211. /**
  212. * 奖金参数
  213. */
  214. public static function getBonusConfig(){
  215. $allData = self::getAllData();
  216. $data = [];
  217. foreach ($allData as $value) {
  218. $data[$value['ID']]['label'] = $value['LEVEL_NAME'];
  219. $data[$value['ID']]['value'] = '【育成津贴】按代数拿奖比例(%)'.implode(",",$value['YC_PERCENT_ARR']).';【车房养老奖】基数'.$value['CF_BASE_NUM'].',分工系数'.$value['CF_PERCENT'].';【领袖分红奖】基数'.$value['LX_BASE_NUM'].',分工系数'.$value['LX_PERCENT'];
  220. }
  221. return $data;
  222. }
  223. }