Ситуация следующая, пытаюсь приспособить БГ под следующую схему.
Необходимо в последний день месяца заблокировать всех абонентов у кого нет средств, что бы перейти в следующий месяц.
Фишка именно в том, что обработка должна быть выполнена именно в последний день месяца а не 1 числа. Я написал небольшой скрипт, но тут момент, система мне выдает сумму которую она снимает у абонента в текущем месяце а не в следующем. А меня интересует сумма которая будет снята в следующем месяце.
Попробую детальней.
У абонента услуг подключенных на 100 руб. На счету 100 руб. 31 дек. я должен обработать увидеть что у абонента деньги есть и оставить его активным, либо если у него денег нет я его приостанавливаю. Теперь момент. Например в декабре услуг было подключено у абонента на 200 рублей. А с первого января уже на 100 рублей, например он отказался от одной из услуг. Скрипт мне все равно выдает сумму декабрьскую. Скрипт видя что услуг подключенных на 200 рублей, а на счету 100 блокирует абонента. Вопрос как получить сумму именно ту которую БГ начислит абоненту в январе.
Код:
import bitel.billing.server.util.*;
import bitel.billing.server.tariff.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.contract.bean.ContractManager;
import bitel.billing.server.contract.bean.Contract;
import bitel.billing.server.tariff.TariffTreeSet;
import bitel.billing.server.tariff.TariffModuleTree;
import bitel.billing.server.tariff.TariffRequest;
public void main( setup, con, conSlave )
{
      query = "select c.id from contract c join contract_module cm on c.id=cm.cid where (gr&1<<17)=0 and cid=22";
        firstDayByTextMonth = new GregorianCalendar();
        firstDayByTextMonth.add(Calendar.MONTH, 1);
        firstDayByTextMonth.set(Calendar.DAY_OF_MONTH, 1);
        print(new Date(firstDayByTextMonth.getTimeInMillis()));
        prep = con.prepareStatement(query);
        rs = prep.executeQuery();
      sum = 0;
        while (rs.next()) {
            cid = rs.getInt(1);
         //print("Обработка контракта c ид="+cid);
            prep2 = con.prepareStatement("select sid, col from npay_service_object_1 where cid=" + cid);
            rs2 = prep2.executeQuery();
            while (rs2.next()) {
                sid = rs2.getInt(1);
                col = rs2.getInt(2);
                if (col != 0) {
                    contract = new ContractManager(con).getContractByID(cid);
                    tts = new ContractManager(con).getRealtimeTariffTreeSet(cid, firstDayByTextMonth, "npay", 1, true);                
                    for (TariffModuleTree tree : tts.getTreeList(firstDayByTextMonth)) {
                        req_cost = new TariffRequest();
                        req_cost.setRequestParam("action", "calculate");
                        req_cost.setRequestParam("sid", sid);
                        req_cost.setRequestParam("month_days", 1);
                        req_cost.setRequestParam("period_days", 1);
                        req_cost.setRequestParam("time", firstDayByTextMonth);
                   req_cost.setRequestParam("date", firstDayByTextMonth);
                        tree.processRequest(req_cost);
                        cost = (Double) req_cost.getResponseParam("cost");
                        cost_type = req_cost.getResponseParam("cost_type");
                        req_calc_mode = new TariffRequest();
                        req_calc_mode.setRequestParam("action", "reset");
                        req_calc_mode.setRequestParam("sid", sid);
                        req_calc_mode.setRequestParam("time", firstDayByTextMonth);
                    req_calc_mode.setRequestParam("date", firstDayByTextMonth);
                        tree.processRequest(req_calc_mode);
                        calc_mode = (String) req_calc_mode.getResponseParam("calc_mode");
                        calc_type = req_calc_mode.getResponseParam("calc_type");
                        if (cost == null || calc_mode == null) {
                     error("Параметры абонплаты не найдены");
                        }
                   //print(cost);print(calc_mode);print(calc_type);print(cost_type);
                    sum = sum + cost * col;
                    }                
                }
            }
         print(cid+" - " +sum);
        }
}