Beispiel #1
0
 public function actionSceneId()
 {
     $sql = 'select scene_id, count(*) as c from wx_staff where scene_id != 0 group by scene_id having c > 1 order by c desc';
     $rows = \Yii::$app->db->createCommand($sql)->queryAll();
     foreach ($rows as $row) {
         //            echo $row['scene_id'] . ': ' . $row['c'] . PHP_EOL;
         $staffs = MStaff::findAll(['scene_id' => $row['scene_id']]);
         $cat_staffs = [];
         foreach ($staffs as $staff) {
             $cat_staffs[$staff->cat][] = $staff;
         }
         $cat_staffs['individual'] = [];
         if (!empty($cat_staffs[MStaff::SCENE_CAT_IN])) {
             $cat_staffs['individual'] = array_merge($cat_staffs['individual'], $cat_staffs[MStaff::SCENE_CAT_IN]);
         }
         if (!empty($cat_staffs[MStaff::SCENE_CAT_OUT])) {
             $cat_staffs['individual'] = array_merge($cat_staffs['individual'], $cat_staffs[MStaff::SCENE_CAT_OUT]);
         }
         if (!empty($cat_staffs[MStaff::SCENE_CAT_FAN])) {
             $cat_staffs['individual'] = array_merge($cat_staffs['individual'], $cat_staffs[MStaff::SCENE_CAT_FAN]);
         }
         $first = null;
         foreach ($cat_staffs['individual'] as $individual_staff) {
             if (null === $first) {
                 $first = $individual_staff;
                 continue;
             }
             if ($individual_staff->openid == $first->openid) {
                 echo "duplicate staff! " . $individual_staff->openid . ' ' . $individual_staff->name . PHP_EOL;
                 $individual_staff->delete();
             }
         }
         if (empty($cat_staffs[MStaff::SCENE_CAT_OFFICE])) {
         } else {
             if (count($cat_staffs[MStaff::SCENE_CAT_OFFICE]) > 1) {
                 $all_offices = [];
                 $first = null;
                 foreach ($cat_staffs[MStaff::SCENE_CAT_OFFICE] as $cat_staff) {
                     echo $cat_staff->scene_id . $cat_staff->name . PHP_EOL;
                     if (null === $first) {
                         $first = $cat_staff;
                         $all_offices[] = $first;
                         continue;
                     }
                     if ($cat_staff->office_id == $first->office_id) {
                         echo "duplicate staff! " . $cat_staff->office_id . ' ' . $cat_staff->name . PHP_EOL;
                         $cat_staff->delete();
                     } else {
                         $cat_staff->scene_id = MStaff::newSceneId($cat_staff->gh_id);
                         $cat_staff->save(false);
                         echo 'change OFFICE sceneid: ' . $cat_staff->name . ' ' . $first->scene_id . ' -> ' . $cat_staff->scene_id . PHP_EOL;
                         $all_offices[] = $cat_staff;
                     }
                 }
                 $musers = MUser::findAll(['scene_pid' => $first->scene_id]);
                 foreach ($musers as $muser) {
                     $cnt = count($all_offices);
                     $index = rand(0, $cnt - 1);
                     echo 'change USER belongto: ' . $muser->nickname . ' ' . $muser->belongto . ' -> ' . $all_offices[$index]->office_id . PHP_EOL;
                     $muser->belongto = $all_offices[$index]->office_id;
                     $muser->scene_pid = $all_offices[$index]->scene_id;
                     $muser->save(false);
                 }
             } else {
                 $cat_staff = $cat_staffs[MStaff::SCENE_CAT_OFFICE][0];
                 echo $cat_staff->scene_id . $cat_staff->name . PHP_EOL;
                 $musers = MUser::findAll(['scene_pid' => $cat_staff->scene_id]);
                 foreach ($musers as $muser) {
                     echo 'change USER belongto: ' . $muser->nickname . ' ' . $muser->belongto . ' -> ' . $cat_staff->office_id . PHP_EOL;
                     $muser->belongto = $cat_staff->office_id;
                     $muser->save(false);
                 }
             }
             foreach ($cat_staffs['individual'] as $individual_staff) {
                 $individual_staff->scene_id = MStaff::newSceneId($individual_staff->gh_id);
                 $individual_staff->save(false);
                 echo 'change INDIVIDUAL sceneid: ' . $individual_staff->name . ' ' . $cat_staff->scene_id . ' -> ' . $individual_staff->scene_id . PHP_EOL;
             }
         }
     }
 }