Изменение суммы лимита определенной группе договоров

Материал из BiTel WiKi

Перейти к: навигация, поиск

Скрипт меняет лимит договорам в определенной группе Предварительно скрипт удаляет все задачи по восстановлению временного лимита, на том договоре на котором будет происходить смена лимита.

package ru.ellcom.test;
 
import bitel.billing.server.contract.bean.LimitChangeTask;
import bitel.billing.server.contract.bean.LimitManager;
import ru.bitel.bgbilling.kernel.container.managed.ServerContext;
import ru.bitel.bgbilling.kernel.event.events.LimitChangedEvent;
import ru.bitel.bgbilling.kernel.event.events.system.SystemLimitChangedEvent;
import ru.bitel.bgbilling.kernel.module.common.bean.User;
import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
 
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
 
public class ChangeLimitTest
        extends GlobalScriptBase {
    @Override
    public void execute(Setup setup, ConnectionSet connectionSet)
            throws Exception {
        print("Start");
        long timeStart = System.currentTimeMillis();
 
        int groupId = 1; //ID группы
        int count = 0;
        BigDecimal limit = new BigDecimal(-10000000); //Сумма установленного лимита
        String comment = "Лимит выставленный скриптом";
 
        Connection con = connectionSet.getConnection();
        LimitManager lm = new LimitManager(con);
        ServerContext context = ServerContext.get();
 
        String query = " SELECT c.id FROM contract AS c WHERE gr&(1<<" + groupId + ") > 0";
        PreparedStatement ps = con.prepareStatement(query);
        ResultSet rs = ps.executeQuery();
 
        while (rs.next()) {
            int cid = rs.getInt("c.id");
            List<LimitChangeTask> taskList = lm.getContractMoveTasks(cid);
            for (LimitChangeTask task : taskList) {
                lm.deleteMoveTaskAndLog(task.getId(), task.getContractId(), task.getUserId());
            }
 
            lm.updateContractLimit(User.USER_SERVER, limit, cid, comment, "");
            context.publishAfterCommit(new SystemLimitChangedEvent(cid, limit));
            context.publishAfterCommit(new LimitChangedEvent(cid, limit));
            count++;
        }
        rs.close();
        ps.close();
        long timeEnd = System.currentTimeMillis();
        print("Count = " + count);
        print("Process time: " + (timeEnd - timeStart) / 1000 + " s.");
 
    }
}
Личные инструменты