Изменение суммы лимита определенной группе договоров
Материал из 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."); } }