Achievement.php 6.6 KB

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