Achievement.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <?php
  2. namespace addons\qingdong\model;
  3. use think\Model;
  4. use traits\model\SoftDelete;
  5. /**
  6. * 业绩目标
  7. */
  8. class Achievement Extends Model {
  9. use SoftDelete;
  10. // 表名,不含前缀
  11. protected $name = 'qingdong_achievement';
  12. // 开启自动写入时间戳字段
  13. protected $autoWriteTimestamp = 'int';
  14. // 定义时间戳字段名
  15. protected $createTime = 'createtime';
  16. protected $updateTime = 'updatetime';
  17. protected $deleteTime = 'deletetime';
  18. /**
  19. * 获取员工年目标
  20. * @param $year
  21. * @return false
  22. */
  23. public static function getStaffYearAchievement($year) {
  24. $staff = Staff::info();
  25. $result = self::where(['year' => $year, 'type' => 3, 'obj_id' => $staff->id, 'status' => 1])->find();
  26. if (empty($result)) {
  27. $model = new self();
  28. $model->save(['year' => $year, 'type' => 3, 'obj_id' => $staff->id, 'status' => 1]);
  29. $result = self::where(['year' => $year, 'type' => 3, 'obj_id' => $staff->id, 'status' => 1])->find();
  30. }
  31. return $result->toArray();
  32. }
  33. /**
  34. * 获取团队年目标
  35. * @param $year
  36. * @return false
  37. */
  38. public static function getTeamYearAchievement($year) {
  39. $staff = Staff::info();
  40. $result = self::where(['year' => $year, 'type' => 4, 'obj_id' => $staff->id, 'status' => 1])->find();
  41. if (empty($result)) {
  42. $model = new self();
  43. $model->save(['year' => $year, 'type' => 4, 'obj_id' => $staff->id, 'status' => 1]);
  44. $result = self::where(['year' => $year, 'type' => 4, 'obj_id' => $staff->id, 'status' => 1])->find();
  45. }
  46. return $result->toArray();
  47. }
  48. /**
  49. * 获取团队年目标
  50. * @param $year
  51. * @return false
  52. */
  53. public static function getCompanyYearAchievement($year) {
  54. $staff = Staff::info();
  55. $result = self::where(['year' => $year, 'type' => 1, 'status' => 1])->find();
  56. if (empty($result)) {
  57. $model = new self();
  58. $model->save(['year' => $year, 'type' => 1, 'status' => 1]);
  59. $result = self::where(['year' => $year, 'type' => 1, 'status' => 1])->find();
  60. }
  61. return $result->toArray();
  62. }
  63. /**
  64. * 获取员工当月业绩目标
  65. * @desc 备注
  66. * @update_date 2021/4/17 更新时间
  67. */
  68. public static function getStaffAchievement($startDate,$endDate,$status) {
  69. $staff = Staff::info();
  70. $field='';
  71. $startDate=strtotime($startDate);
  72. $endDate=strtotime($endDate);
  73. for ($i = $startDate; $i <= $endDate;) {
  74. $field .= ($field ? '+' : '') . self::getMonthField(date('Y-m-d',$i));
  75. $i = strtotime('+1 month',$i);
  76. }
  77. return self::where([
  78. 'year' => date('Y', $startDate),
  79. 'status' => $status,
  80. 'type' => 3,
  81. 'obj_id' => $staff->id,
  82. ])->field($field.' as achievement')->find();
  83. }
  84. /**
  85. * 获取团队业绩
  86. * @desc 备注
  87. * @update_date 2021/4/17 更新时间
  88. * @author zhangwei
  89. */
  90. public static function getTeamAchievement($date) {
  91. $staff = Staff::info();
  92. $field = self::getMonthField($date);
  93. return self::where([
  94. 'year' => date('Y', strtotime($date)),
  95. 'type' => 4,
  96. 'obj_id' => $staff->id
  97. ])->value($field) ?? 0;
  98. }
  99. /**
  100. * 获取公司业绩
  101. * @desc 备注
  102. * @update_date 2021/4/17 更新时间
  103. * @author zhangwei
  104. */
  105. public static function getCompanyAchievement($startDate, $endDate,$status)
  106. {
  107. $staff = Staff::info();
  108. $field = '';
  109. $startDate=strtotime($startDate);
  110. $endDate=strtotime($endDate);
  111. for ($i = $startDate; $i <= $endDate;) {
  112. $field .= ($field ? '+' : '') . self::getMonthField(date('Y-m-d',$i));
  113. $i = strtotime('+1 month',$i);
  114. }
  115. return self::where([
  116. 'year' => date('Y', $startDate),
  117. 'type' => 1,
  118. 'status' => $status,
  119. ])->field($field . ' as achievement')->find();
  120. }
  121. /**
  122. * 员工
  123. * @return \think\model\relation\HasOne
  124. */
  125. public function staff() {
  126. return $this->hasOne(Staff::class, 'id', 'obj_id')->field('id,name,img');
  127. }
  128. /**
  129. * 获取月字段
  130. */
  131. public static function getMonthField($date) {
  132. $m = date('m', strtotime($date));
  133. switch ($m) {
  134. case 1:
  135. $field = 'january';
  136. break;
  137. case 2:
  138. $field = 'february';
  139. break;
  140. case 3:
  141. $field = 'march';
  142. break;
  143. case 4:
  144. $field = 'april';
  145. break;
  146. case 5:
  147. $field = 'may';
  148. break;
  149. case 6:
  150. $field = 'june';
  151. break;
  152. case 7:
  153. $field = 'july';
  154. break;
  155. case 8:
  156. $field = 'august';
  157. break;
  158. case 9:
  159. $field = 'september';
  160. break;
  161. case 10:
  162. $field = 'october';
  163. break;
  164. case 11:
  165. $field = 'november';
  166. break;
  167. case 12:
  168. $field = 'december';
  169. break;
  170. }
  171. return $field;
  172. }
  173. /**
  174. * 根据字段获取月数字
  175. */
  176. public static function getFieldMonth($field) {
  177. switch ($field) {
  178. case 'january':
  179. $date = '01';
  180. break;
  181. case 'february':
  182. $date = '02';
  183. break;
  184. case 'march':
  185. $date = '03';
  186. break;
  187. case 'april':
  188. $date = '04';
  189. break;
  190. case 'may':
  191. $date = '05';
  192. break;
  193. case 'june':
  194. $date = '06';
  195. break;
  196. case 'july':
  197. $date = '07';
  198. break;
  199. case 'august':
  200. $date = '08';
  201. break;
  202. case 'september':
  203. $date = '09';
  204. break;
  205. case 'october':
  206. $date = '10';
  207. break;
  208. case 'november':
  209. $date = '11';
  210. break;
  211. case 'december':
  212. $date = '12';
  213. break;
  214. default:
  215. return false;
  216. }
  217. return $date;
  218. }
  219. }