123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- <?php
- namespace addons\qingdongams\model;
- use think\Model;
- use traits\model\SoftDelete;
- /**
- * 业绩目标
- */
- class Achievement Extends Model {
- use SoftDelete;
- // 表名,不含前缀
- const CONTRACT_TYPE = 1;
- const RECEIVABLES_TYPE = 2;//业绩
- const CUSTOMER_TYPE = 3;//回款
- const VISIT_TYPE = 4;//获客
- const WORKORDER_TYPE = 5;//拜访
- // 表名,不含前缀
- protected $name = 'qingdongams_achievement';
- // 开启自动写入时间戳字段
- protected $autoWriteTimestamp = 'int';
- // 定义时间戳字段名
- protected $createTime = 'createtime';
- protected $updateTime = 'updatetime';
- protected $deleteTime = 'deletetime';
- /**
- * 获取员工年目标
- * @param $year
- * @return false
- */
- public static function getStaffYearAchievement($year) {
- $staff = Staff::info();
- $result = self::where(['year' => $year, 'type' => 3, 'obj_id' => $staff->id, 'status' => 1])->find();
- if (empty($result)) {
- $model = new self();
- $model->save(['year' => $year, 'type' => 3, 'obj_id' => $staff->id, 'status' => 1]);
- $result = self::where(['year' => $year, 'type' => 3, 'obj_id' => $staff->id, 'status' => 1])->find();
- }
- return $result->toArray();
- }
- /**
- * 获取团队年目标
- * @param $year
- * @return false
- */
- public static function getTeamYearAchievement($year) {
- $staff = Staff::info();
- $result = self::where(['year' => $year, 'type' => 4, 'obj_id' => $staff->id, 'status' => 1])->find();
- if (empty($result)) {
- $model = new self();
- $model->save(['year' => $year, 'type' => 4, 'obj_id' => $staff->id, 'status' => 1]);
- $result = self::where(['year' => $year, 'type' => 4, 'obj_id' => $staff->id, 'status' => 1])->find();
- }
- return $result->toArray();
- }
- /**
- * 获取团队年目标
- * @param $year
- * @return false
- */
- public static function getCompanyYearAchievement($year) {
- $staff = Staff::info();
- $result = self::where(['year' => $year, 'type' => 1, 'status' => 1])->find();
- if (empty($result)) {
- $model = new self();
- $model->save(['year' => $year, 'type' => 1, 'status' => 1]);
- $result = self::where(['year' => $year, 'type' => 1, 'status' => 1])->find();
- }
- return $result->toArray();
- }
- /**
- * 获取员工当月业绩目标
- * @desc 备注
- * @update_date 2021/4/17 更新时间
- */
- public static function getStaffAchievement($startDate,$endDate,$status) {
- $staff = Staff::info();
- $field='';
- $startDate=strtotime($startDate);
- $endDate=strtotime($endDate);
- for ($i = $startDate; $i <= $endDate;) {
- $field .= ($field ? '+' : '') . self::getMonthField(date('Y-m-d',$i));
- $i = strtotime('+1 month',$i);
- }
- return self::where([
- 'year' => date('Y', $startDate),
- 'status' => $status,
- 'type' => 3,
- 'obj_id' => $staff->id,
- ])->field($field.' as achievement')->find();
- }
- /**
- * 获取团队业绩
- * @desc 备注
- * @update_date 2021/4/17 更新时间
- * @author zhangwei
- */
- public static function getTeamAchievement($date) {
- $staff = Staff::info();
- $field = self::getMonthField($date);
- return self::where([
- 'year' => date('Y', strtotime($date)),
- 'type' => 4,
- 'obj_id' => $staff->id
- ])->value($field) ?? 0;
- }
- /**
- * 获取公司业绩
- * @desc 备注
- * @update_date 2021/4/17 更新时间
- * @author zhangwei
- */
- public static function getCompanyAchievement($startDate, $endDate,$status)
- {
- $staff = Staff::info();
- $field = '';
- $startDate=strtotime($startDate);
- $endDate=strtotime($endDate);
- for ($i = $startDate; $i <= $endDate;) {
- $field .= ($field ? '+' : '') . self::getMonthField(date('Y-m-d',$i));
- $i = strtotime('+1 month',$i);
- }
- return self::where([
- 'year' => date('Y', $startDate),
- 'type' => 1,
- 'status' => $status,
- ])->field($field . ' as achievement')->find();
- }
- /**
- * 获取员工的目标
- * @desc 备注
- * @update_date 2021/4/17 更新时间
- * @author zhangwei
- */
- public static function getStaffTeamAchievement($startDate, $endDate, $staff, $status = 1, $type = 2)
- {
- $field = '';
- $startDate = strtotime($startDate);
- $endDate = strtotime($endDate);
- for ($i = $startDate; $i <= $endDate;) {
- $field .= ($field ? '+' : '') . self::getMonthField(date('Y-m-d', $i));
- $i = strtotime('+1 month', $i);
- }
- $row = self::where([
- 'year' => date('Y', $startDate),
- 'type' => $type,
- 'status' => $status,
- 'obj_id' => $staff->id,
- ])->field($field . ' as achievement')->find();
- return $row['achievement'] ?? 0;
- }
- /**
- * 员工
- * @return \think\model\relation\HasOne
- */
- public function staff() {
- return $this->hasOne(Staff::class, 'id', 'obj_id')->field('id,name,img');
- }
- /**
- * 获取月字段
- */
- public static function getMonthField($date) {
- $m = date('m', strtotime($date));
- switch ($m) {
- case 1:
- $field = 'january';
- break;
- case 2:
- $field = 'february';
- break;
- case 3:
- $field = 'march';
- break;
- case 4:
- $field = 'april';
- break;
- case 5:
- $field = 'may';
- break;
- case 6:
- $field = 'june';
- break;
- case 7:
- $field = 'july';
- break;
- case 8:
- $field = 'august';
- break;
- case 9:
- $field = 'september';
- break;
- case 10:
- $field = 'october';
- break;
- case 11:
- $field = 'november';
- break;
- case 12:
- $field = 'december';
- break;
- }
- return $field;
- }
- /**
- * 根据字段获取月数字
- */
- public static function getFieldMonth($field) {
- switch ($field) {
- case 'january':
- $date = '01';
- break;
- case 'february':
- $date = '02';
- break;
- case 'march':
- $date = '03';
- break;
- case 'april':
- $date = '04';
- break;
- case 'may':
- $date = '05';
- break;
- case 'june':
- $date = '06';
- break;
- case 'july':
- $date = '07';
- break;
- case 'august':
- $date = '08';
- break;
- case 'september':
- $date = '09';
- break;
- case 'october':
- $date = '10';
- break;
- case 'november':
- $date = '11';
- break;
- case 'december':
- $date = '12';
- break;
- default:
- return false;
- }
- return $date;
- }
- }
|