Горячая смена тарифного плана в середине месяца

Технические вопросы по UTM 5.0
Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Горячая смена тарифного плана в середине месяца

Сообщение Magnum72 »

Ограничения:
1) В ТП не должно быть двух и более услуг с одинаковым типом
Недоделал:
2) Написал переброс только услуг Периодической и передачи трафика, остальные у меня не используются, но по желанию можно довольно просто дописать.

строка запуска:

Код: Выделить всё

-a olympus_hot_change_tp -user_id 64077 -account_id 64115 -tariff_next 147 -tariff_link_id_find 64260
где tariff_link_id_find - Link ID текущего ТП у юзера

Код: Выделить всё

<?xml version="1.0"?>
<urfa>
  <parameter name="user_id"/>
  <parameter name="account_id"/>
  <parameter name="tariff_id"/>
  <parameter name="tariff_current"/>
  <parameter name="tariff_next"/>
  <parameter name="slink_id"/>
  <parameter name="service_id"/>
  <parameter name="service_type"/>
  <parameter name="discount_period_id"/>
  <parameter name="tariff_link_id"/>
  <parameter name="tariff_link_id_tmp"/>
  <parameter name="tariff_link_id_find"/>

<!-- Ishem diskontniy perion y starogo TP -->
  <call function="rpcf_get_user_tariffs"/>
  <for name="j" from="0" count="user_tariffs_size">
    <set dst="tariff_link_id_tmp" src="tariff_link_id_array" src_index="j"/>
    <set dst="discount_period_id_tmp" src="discount_period_id_array" src_index="j"/>
    <if variable="tariff_link_id_tmp" value="tariff_link_id_find" condition="eq">
      <set dst="discount_period_id" src="discount_period_id_tmp"/>
    </if>
  </for>

<!-- Sozdaem pustoy new TP -->
  <set dst="discount_period_id" src="discount_period_id_tmp"/>
  <set dst="tariff_current" src="tariff_next"/>
  <call function="rpcf_link_user_tariff"/>
<!-- Zapominaem ID new TP -->
  <set dst="tariff_link_id_tmp" src="tariff_link_id"/>


<!-- Ishem uslugi vhodiashie v old TP -->
  <call function="rpcf_get_all_services_for_user"/>
  <for name="i" from="0" count="slink_id_count">
    <set src="slink_id_array" src_index="i" dst="slink_id"/>
    <set src="service_type_array" src_index="i" dst="service_type"/>

<!-- Zapominaem dlia uslugi s tipom IP Traffic dannie esli ona iz nujnogo TP -->
    <if variable="service_type" value="3" condition="eq">
<!-- Ishem ID analogicnoy uslugi v new TP i zapolniaem ee -->
      <set dst="tariff_id" src="tariff_next"/>
      <call function="rpcf_get_tariff"/>
      <for name="u" from="0" count="services_count">
        <set src="service_type_array" src_index="i" dst="service_type_new"/>
        <set src="service_id_array" src_index="u" dst="service_id_new"/>
        <if variable="service_type_new" value="service_type" condition="eq">
          <call function="rpcf_get_iptraffic_service_link"/>
          <if variable="tariff_link_id" value="tariff_link_id_find" condition="eq">
            <call function="rpcf_delete_slink"/>
            <set dst="service_id" src="service_id_new"/>
            <set dst="tariff_link_id" src="tariff_link_id_tmp"/>
            <set dst="slink_id" value="0"/>
            <set dst="unabon" value="1"/>
            <set dst="unprepay" value="1"/>
            <set dst="start_date" value="now&#40;&#41;"/>
            <call function="rpcf_add_service_to_user"/>
          </if>
        </if>
      </for>
    </if>

<!-- Zapominaem dlia uslugi s tipom periodic service dannie esli ona iz nujnogo TP -->
    <if variable="service_type" value="2" condition="eq">
<!-- Ishem ID analogicnoy uslugi v new TP i zapolniaem ee -->
      <set dst="tariff_id" src="tariff_next"/>
      <call function="rpcf_get_tariff"/>
      <for name="u" from="0" count="services_count">
        <set src="service_type_array" src_index="i" dst="service_type_new"/>
        <set src="service_id_array" src_index="u" dst="service_id_new"/>
        <if variable="service_type_new" value="service_type" condition="eq">
          <call function="rpcf_get_periodic_service_link"/>
          <if variable="tariff_link_id" value="tariff_link_id_find" condition="eq">
            <call function="rpcf_delete_slink"/>
            <set dst="service_id" src="service_id_new"/>
            <set dst="tariff_link_id" src="tariff_link_id_tmp"/>
            <set dst="slink_id" value="0"/>
            <set dst="is_unabon_period" value="1"/>
            <set dst="is_unprepay_period" value="1"/>
            <set dst="start_date" value="now&#40;&#41;"/>
            <call function="rpcf_add_service_to_user"/>
          </if>
        </if>
      </for>
    </if>
  </for>

<!-- Udaliaem old TP -->
  <set dst="tariff_link_id" src="tariff_link_id_find"/>
  <call function="rpcf_unlink_user_tariff"/>
</urfa>

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

получается что во время работы скрипта в какой-то момент времени ссылаются две тарифные связки...а зачем так? в этом какой-то смысл есть или это особенность такая?

Oleg_121
Сообщения: 81
Зарегистрирован: Пн апр 14, 2008 21:09

Сообщение Oleg_121 »

Не понятно что за значение tariff_link_id_find и как его получить с помощью URFA. Подскажите пожалуйста.

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

Oleg_121 писал(а):Не понятно что за значение tariff_link_id_find и как его получить с помощью URFA. Подскажите пожалуйста.
Ну можно очередной костыль написать конечно для поиска его, но вообще я вывожу пользователю все его ТП с помошью SQL запроса и запоминаю ID на который юзер кликнет.

Oleg_121
Сообщения: 81
Зарегистрирован: Пн апр 14, 2008 21:09

Сообщение Oleg_121 »

Тоесть это значение = "ID связки" в админке?

nma
Сообщения: 8
Зарегистрирован: Пн июл 16, 2007 16:37

Сообщение nma »

А на какой версии это работает?

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

мой вариант. мусор не чистил

/netup/utm5/bin/utm5_urfaclient -a moment_change_tp -account_id 1922 -tariff_current 73

Код: Выделить всё

<?xml version="1.0"?>

<urfa>
    <call function="rpcf_get_all_services_for_user" output="0">
        <parameter name="account_id" comment="User account ID"/>
   </call>
      <for name="w" from="0" count="size&#40;slink_id_array&#41;">
            <set dst="service_type" src="service_type_array" src_index="w"/>
            <set dst="slink_id" src="slink_id_array" src_index="w" />
            <if variable="service_type" value="3" condition="eq">
                <parameter name="slink_id" comment="service link ID"/>
                <call function="rpcf_get_iptraffic_service_link" output="0">
                </call>
            </if>
            <if variable="service_type" value="5" condition="eq">
                <parameter name="slink_id" comment="slink ID"/>
                <call function="rpcf_get_dialup_service_link" output="0">
                </call>
            </if>
            <call function="rpcf_delete_slink" output="0"/>
    </for>
        <call function="rpcf_get_user_by_account" output="0">
            <parameter name="account_id" comment="User account ID"/>
        </call>
        <set dst="need_block" value="0"/>
        <call function="rpcf_change_intstat_for_user">
        </call>
        <call function="rpcf_unlink_user_tariff" output="0">
            <parameter name="user_id" comment="User ID"/>
            <parameter name="account_id" comment="Account ID, default is basic account"/>
            <parameter name="tariff_link_id" comment="Tariff link ID to remove"/>
        </call>
    <set dst="tariff_link_id" value="0"/>
    <!--set src="tariff_next" dst="tariff_current"/-->
    <call function="rpcf_link_user_tariff" output="0">
        <parameter name="account_id" comment="Account ID, default is basic account"/>
        <parameter name="tariff_current" comment="Current discount period tariff"/>
        <parameter name="tariff_next" comment="Next discount period tariff, default is same as tariff_current"/>
        <parameter name="discount_period_id" comment="Discount period ID"/>
    </call>
    <set src="tariff_current" dst="tariff_id"/>
    <call function="rpcf_get_tariff" output="0"/>
    <for name="j" from="0" count="size&#40;service_id_array&#41;">
        <set src="link_by_default_array" src_index="j" dst="link_by_default"/>
        <if variable="link_by_default" value="1" condition="eq">
            <set dst="slink_id" value="0"/>
            <set src="service_id_array" src_index="j" dst="service_id"/>
            <set src="service_type_array" src_index="j" dst="service_type"/>
            <set src="service_cost_array" src_index="j" dst="service_cost"/>
            <set dst="return_type" value=""/>
            <if variable="service_type" value="1" condition="eq">
                <call function="rpcf_add_service_to_user">
                    <parameter name="discount_date" comment="Discount date for once service"/>
                </call>
            </if>
            <if variable="service_type" value="2" condition="eq">
                <call function="rpcf_add_service_to_user">
                    <parameter name="is_blocked" comment="Block type in numeric form"/>
                    <parameter name="discount_period_id" comment="Discount period ID"/>
                    <parameter name="start_date" comment="Service start date &#40;unix timestamp&#41;"/>
                    <parameter name="expire_date" comment="Service expire date &#40;unix timestamp&#41;"/>
                    <parameter name="unabon" value="1"/>
                    <parameter name="unprepay" comment="Decrease prepayed units in blocked state"/>
                </call>
            </if>
            <if variable="service_type" value="3" condition="eq">
                <call function="rpcf_add_service_to_user">
                    <parameter name="is_blocked" comment="Block type in numeric form"/>
                    <parameter name="discount_period_id" comment="Discount period ID"/>
                    <parameter name="start_date" comment="Service start date &#40;unix timestamp&#41;"/>
                    <parameter name="expire_date" comment="Service expire date &#40;unix timestamp&#41;"/>
                    <parameter name="unabon"/>
                    <parameter name="unprepay" comment="Decrease prepayed units in blocked state"/>
                    <parameter name="ip_address" comment="IP-address array for IP-traffic service"/>
                    <parameter name="mask" comment="IP mask array for IP-traffic service"/>
                    <parameter name="mac" comment="MAC address array for IP-traffic service"/>
                    <parameter name="iptraffic_login" comment="Service link login"/>
                    <parameter name="iptraffic_allowed_cid" comment="Allowed CID"/>
                    <parameter name="iptraffic_password" comment="Service link password"/>
                    <parameter name="ip_not_vpn" comment="1 if IP is not VPN, else 0"/>
                    <parameter name="dont_use_fw" comment="1 if don't use firewall, else 0"/>
                    <parameter name="router_id" comment="Router ID for each IP-address"/>
                    <parameter name="tclass_id" comment="TClass array for quotas"/>
                    <parameter name="quota" comment="Quotas array"/>
                </call>
            </if>
            <if variable="service_type" value="5" condition="eq">
                <set dst="dialup_login" src="login"/>
                <set dst="dialup_password" src="password"/>
                <if variable="dialup_login" value="" condition="ne">
                <call function="rpcf_add_service_to_user">
                    <parameter name="is_blocked" comment="Block type in numeric form"/>
                    <parameter name="discount_period_id" comment="Discount period ID"/>
                    <parameter name="start_date" comment="Service start date &#40;unix timestamp&#41;"/>
                    <parameter name="expire_date" comment="Service expire date &#40;unix timestamp&#41;"/>
                    <parameter name="unabon"/>
                    <parameter name="unprepay" comment="Decrease prepayed units in blocked state"/>
                    <parameter name="callback_enabled"/>
                    <parameter name="dialup_login" comment="Service link login"/>
                    <parameter name="dialup_allowed_cid" comment="Allowed CID"/>
                    <parameter name="dialup_allowed_csid" comment="Allowed CSID"/>
                    <parameter name="dialup_password" comment="Service link password"/>
                </call>
                </if>
            </if>
        </if>
    </for>


</urfa>

proto
Сообщения: 23
Зарегистрирован: Вт мар 11, 2008 12:42

Re: Горячая смена тарифного плана в середине месяца

Сообщение proto »

Magnum72 писал(а): ....
На последней версии UTM5
При запуске пишет:

Код: Выделить всё

./bin/utm5_urfaclient -a olympus_hot_change_tp -user_id 178 -account_id 181 -tariff_next 81 -tariff_link_id_find 7041
 Notice&#58; Sep 10 12&#58;57&#58;35 UTM5 Config&#58; Processing config file&#58; /netup/utm5/utm5_urfaclient.cfg
Processing action&#58; olympus_hot_change_tp
ERROR&#58; code 13 &#40;Permission denied&#41;
main.log:

Код: Выделить всё

 Info  &#58; Sep 10 12&#58;57&#58;36 RPCServer@0.0.0.0&#58; Client connecting&#58; 127.0.0.1&#58;64981
 Info  &#58; Sep 10 12&#58;57&#58;36 RPCConn&#58; Connection from&#58; 127.0.0.1&#58;64981
 Info  &#58; Sep 10 12&#58;57&#58;36 RPCConn<init@127.0.0.1>&#58; Access granted to <init@127.0.0.1> &#40;UID&#58; -1&#41;
 Info  &#58; Sep 10 12&#58;57&#58;36 RPCConn<init@127.0.0.1>&#58; Request for illegal function&#58; 0x00a2
 Warn  &#58; Sep 10 12&#58;57&#58;36 RPCConn<init@127.0.0.1>&#58; Session closed

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

Посмотрел как у Pulse, натолкнулся на мысль что можно сделать лучше:

Данный скрипт имеет ограничение:
1) В тарифном плане не должно быть 2 и более услуг с одинаковым типом. (например две передачи трафика, или два диалапа)
2) Доделать под услуги дело 5 минут (по аналогии с существующими), я не стал описывать те которые не использую для ускорения работы скрипта.

Запускать так:

Код: Выделить всё

-a olympus_hot_change_tp -account_id 11131 -tariff_current 151 -tariff_link_id_find 67077

Код: Выделить всё

<?xml version="1.0"?>
<urfa>
  <parameter name="user_id"/>
  <parameter name="account_id"/>
  <parameter name="slink_id"/>
  <parameter name="discount_period_id"/>
  <parameter name="is_blocked"/>
  <parameter name="discount_date"/>
  <parameter name="tariff_link_id"/>
  <parameter name="tariff_current"/>
  <parameter name="tariff_next"/>
  <parameter name="start_date"/>
  <parameter name="expire_date"/>
  <parameter name="unabon"/>
  <parameter name="unprepay"/>
  <parameter name="is_blocked"/>
  <parameter name="ip_address"/>
  <parameter name="mask"/>
  <parameter name="mac"/>
  <parameter name="iptraffic_login"/>
  <parameter name="iptraffic_allowed_cid"/>
  <parameter name="iptraffic_password"/>
  <parameter name="ip_not_vpn"/>
  <parameter name="dont_use_fw"/>
  <parameter name="router_id"/>
  <parameter name="tclass_id"/>
  <parameter name="quota"/>
  <parameter name="callback_enabled"/>
  <parameter name="dialup_login"/>
  <parameter name="dialup_allowed_cid"/>
  <parameter name="dialup_allowed_csid"/>
  <parameter name="dialup_password"/>
  <parameter name="tariff_link_id_find"/>
  <parameter name="lock_per_srv" value="0"/>
  <parameter name="lock_ip_srv" value="0"/>

  <call function="rpcf_get_all_services_for_user"/>
  <for name="w" from="0" count="size&#40;slink_id_array&#41;">
    <set dst="service_type" src="service_type_array" src_index="w"/>
    <set dst="slink_id" src="slink_id_array" src_index="w" />

    <if variable="service_type" value="2" condition="eq">
      <if variable="lock_per_srv" value="1" condition="ne">
        <call function="rpcf_get_periodic_service_link"/>
        <if variable="tariff_link_id" value="tariff_link_id_find" condition="eq">
          <set dst="lock_per_srv" value="1"/>
          <call function="rpcf_delete_slink"/>
        </if>
      </if>
    </if>

    <if variable="service_type" value="3" condition="eq">
        <remove name="ip_address"/>
        <remove name="mask"/>
        <remove name="mac"/>
        <remove name="iptraffic_login"/>
        <remove name="iptraffic_password"/>
        <remove name="iptraffic_allowed_cid"/>
        <remove name="ip_not_vpn"/>
        <remove name="dont_use_fw"/>
        <remove name="router_id"/>
        <remove name="tclass_id"/>
        <remove name="tclass_name"/>
        <remove name="quota"/>
      <if variable="lock_ip_srv" value="1" condition="ne">
        <call function="rpcf_get_iptraffic_service_link"/>
        <if variable="tariff_link_id" value="tariff_link_id_find" condition="eq">
          <set dst="lock_ip_srv" value="1"/>
          <call function="rpcf_delete_slink"/>
        </if>
      </if>
    </if>
  </for>

  <call function="rpcf_get_user_by_account"/>

  <set dst="tariff_link_id" src="tariff_link_id_find"/>
  <call function="rpcf_unlink_user_tariff"/>

  <set dst="tariff_link_id" value="0"/>
  <call function="rpcf_link_user_tariff"/>

  <set dst="tariff_id" src="tariff_current"/>
  <call function="rpcf_get_tariff"/>
  <for name="j" from="0" count="size&#40;services_count&#41;">
    <set src="link_by_default_array" src_index="j" dst="link_by_default"/>
    <if variable="link_by_default" value="1" condition="eq">
      <set dst="slink_id" value="0"/>
      <set src="service_id_array" src_index="j" dst="service_id"/>
      <set src="service_type_array" src_index="j" dst="service_type"/>
      <set src="service_cost_array" src_index="j" dst="service_cost"/>
      <set dst="return_type" value="integer_return"/>
      <set dst="unabon" value="1"/>
      <set dst="unprepay" value="1"/>
      <set dst="start_date" value="now&#40;&#41;"/>
      <call function="rpcf_add_service_to_user"/>
    </if>
  </for>
</urfa>

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

чот не получается, услуга ip-трафик не привязывается на новом тарифе

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

В новом ТП у аналогичной услуге стоит галочка "Подключать по умолчанию" ?

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

да стоят галочки

bear
Сообщения: 498
Зарегистрирован: Чт ноя 15, 2007 11:53

Сообщение bear »

тож не получилось, только у меня вообще ни одна услуга не подключилась
в тарифе их 2
Коммутированный доступ
Передача IP-трафика

Хотя тариф сам по себе поменялся

Код: Выделить всё

./utm5_urfaclient -a olympus_hot_change_tp -account_id 69 -tariff_current 16 -tariff_link_id_find 28194
 Notice&#58; Nov 05 17&#58;44&#58;27 UTM5 Config&#58; Processing config file&#58; /netup/utm5/utm5_urfaclient.cfg
Processing action&#58; olympus_hot_change_tp
Mandatory parameter dialup_login value not specified
ERROR&#58; Mandatory parameter value not specified

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

bear писал(а):тож не получилось, только у меня вообще ни одна услуга не подключилась
в тарифе их 2
Коммутированный доступ
Передача IP-трафика

Хотя тариф сам по себе поменялся

Код: Выделить всё

./utm5_urfaclient -a olympus_hot_change_tp -account_id 69 -tariff_current 16 -tariff_link_id_find 28194
 Notice&#58; Nov 05 17&#58;44&#58;27 UTM5 Config&#58; Processing config file&#58; /netup/utm5/utm5_urfaclient.cfg
Processing action&#58; olympus_hot_change_tp
Mandatory parameter dialup_login value not specified
ERROR&#58; Mandatory parameter value not specified
У меня вроде сервис диалапа не описан в скрипте, его надо доделать

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

Pulse писал(а):чот не получается, услуга ip-трафик не привязывается на новом тарифе
А скрипт запущенный с -debug что говорит

Ответить