forum.bitel.ru
http://forum.bitel.ru/

API для добавления прихода к договору (CRM)
http://forum.bitel.ru/viewtopic.php?f=19&t=9443
Страница 1 из 2

Автор:  Mikola [ 15 июл 2014, 17:21 ]
Заголовок сообщения:  API для добавления прихода к договору

Судя по описанию bitel.billing.server.contract.bean.BalanceUtils нет возможности добавлять приход. Единственное что приходит в голову это обновление таблици contract_balance.
Каким образом добавить приход к договору используя API BGBilling?

Автор:  Phricker [ 15 июл 2014, 17:23 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

PaymentManager

Автор:  stark [ 15 июл 2014, 17:53 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

Для какой версии ?

Вначале нужно добавить платеж в contract_payment с помощью PaymentManager, только потом обновлять баланс в contract_balance с помощью BalanceUtils

Вот тут есть пример.

Только там еще нужно событие кинуть в конце
Код:
  EventProcessor.getInstance().publish( new PaymentEvent( userID, payment, editMode ) );
  EventProcessor.getInstance().publish( new ContractBalanceChangedEvent( contract.getId(), balanceChange ) );       


В 6.1 желательно уже по-другому делать.

Автор:  skyb [ 15 июл 2014, 18:56 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

stark писал(а):
Для какой версии ?

Вначале нужно добавить платеж в contract_payment с помощью PaymentManager, только потом обновлять баланс в contract_balance с помощью BalanceUtils

Вот тут есть пример.

Только там еще нужно событие кинуть в конце
Код:
  EventProcessor.getInstance().publish( new PaymentEvent( userID, payment, editMode ) );
  EventProcessor.getInstance().publish( new ContractBalanceChangedEvent( contract.getId(), balanceChange ) );       


В 6.1 желательно уже по-другому делать.
так для 6.1 желательно с примерами

Автор:  Phricker [ 15 июл 2014, 19:11 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

viewtopic.php?p=76033#p76033

Автор:  stark [ 15 июл 2014, 22:22 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

Phricker писал(а):
http://forum.bitel.ru/viewtopic.php?p=76033#p76033

Нет..я имел ввиду вообще добавлять платеж через Web-сервис и думать об всех этих утилсах и событиях, пусть само внутри делается.

Автор:  Phricker [ 15 июл 2014, 22:23 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

А тогда пример ))) Что-то на ночь глядя не соображу.

Автор:  stark [ 15 июл 2014, 22:26 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

skyb писал(а):
]так для 6.1 желательно с примерами


http://bgbilling.ru/v6.1/javadoc/ru/bit ... rvice.html

Метод paymentUpdate.

Автор:  Mikola [ 16 июл 2014, 10:29 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

stark писал(а):
Для какой версии ?

Вначале нужно добавить платеж в contract_payment с помощью PaymentManager, только потом обновлять баланс в contract_balance с помощью BalanceUtils

Вот тут есть пример.

Только там еще нужно событие кинуть в конце
Код:
  EventProcessor.getInstance().publish( new PaymentEvent( userID, payment, editMode ) );
  EventProcessor.getInstance().publish( new ContractBalanceChangedEvent( contract.getId(), balanceChange ) );       


В 6.1 желательно уже по-другому делать.


Используем версию 6.0.

Спасибо! То, что доктор прописал!

Автор:  skyb [ 16 июл 2014, 15:29 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

stark писал(а):
skyb писал(а):
]так для 6.1 желательно с примерами


http://bgbilling.ru/v6.1/javadoc/ru/bit ... rvice.html

Метод paymentUpdate.

а, просто методы изменились?

Автор:  stark [ 16 июл 2014, 17:01 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

skyb писал(а):
stark писал(а):
skyb писал(а):
]так для 6.1 желательно с примерами


http://bgbilling.ru/v6.1/javadoc/ru/bit ... rvice.html

Метод paymentUpdate.

а, просто методы изменились?


Нет ..Это новый сервис, его не было в 6.0. Теперь платеж можно добавить так:

Код:
ServerContext context = ServerContext.get();   
PaymentService paymentService = context.getService( PaymentService.class, INET_MODULE_ID );
Payment payment = new Payment();
....
paymentService.updatePayment( payment, null);


И не нужны никакие PaymentManager, BalanceUtils и EventProcessor. Теперь это все внутри само делается.

Автор:  skyb [ 11 мар 2015, 08:01 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

что то не заводится
Код:
                         ServerContext context = ServerContext.get();
                         PaymentService paymentService = context.getService( PaymentService.class, 0 );
                         Payment p = new Payment();
                         p.setContractId(contract.getId());
                         p.setComment("Создан автоматически системой, при создании договора");
                         p.setTypeId(6);
                         p.setUserId(0);
                         p.setSum(new BigDecimal (balance));
                         paymentService.updatePayment(p, null);

Код:
  Сервер: вер. 6.1.1044 / 27.02.2015 16:23:14
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_80-ea


Вложения:
Выделение_399.png
Выделение_399.png [ 4.74 КБ | Просмотров: 20092 ]

Автор:  stark [ 11 мар 2015, 12:59 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

skyb писал(а):
что то не заводится
Код:
                         ServerContext context = ServerContext.get();
                         PaymentService paymentService = context.getService( PaymentService.class, 0 );
                         Payment p = new Payment();
                         p.setContractId(contract.getId());
                         p.setComment("Создан автоматически системой, при создании договора");
                         p.setTypeId(6);
                         p.setUserId(0);
                         p.setSum(new BigDecimal (balance));
                         paymentService.updatePayment(p, null);

Код:
  Сервер: вер. 6.1.1044 / 27.02.2015 16:23:14
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_80-ea


Потому что такого метода нет. Есть такой.

Автор:  skyb [ 12 мар 2015, 10:44 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

а можно примером, а то чет всеравно не взлетает :(

Автор:  stark [ 12 мар 2015, 11:42 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

skyb писал(а):
а можно примером, а то чет всеравно не взлетает :(

что именно не взлетает ? Ошибка какая-то выдается ? Какая ?

Автор:  dimOn [ 12 мар 2015, 13:23 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

skyb писал(а):
а то чет всеравно не взлетает :(
по предоставленной информации можно скзать - что-то неправильно делаете

Автор:  skyb [ 12 мар 2015, 13:52 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

Код:
ServerContext context = ServerContext.get();
                         PaymentService paymentService = context.getService( PaymentService.class, 0 );
                         Payment p = new Payment();
                         p.setContractId(contract.getId());
                         p.setComment("");
                         p.setTypeId(6);
                         p.setUserId(0);
                         p.setSum(new BigDecimal (balance));
                         java.util.List<java.lang.Integer>  pmt = paymentService.paymentUpdate(p, null);

Чет мне здается я херню какую то пишу

Автор:  skn [ 12 мар 2015, 13:58 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

и что этот код выдает?

Автор:  dimOn [ 12 мар 2015, 14:22 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

На каждый вопрос нужно задавать несколько дополнительных вопросов чтоле? Что не работает то? Стектрейс где?

Автор:  Phricker [ 12 мар 2015, 14:44 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

Вложение:
f27bd79383f99c5c0b38827f5f68080f.jpg
f27bd79383f99c5c0b38827f5f68080f.jpg [ 126.07 КБ | Просмотров: 20050 ]

Автор:  skyb [ 12 мар 2015, 20:26 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

платеж добавился, спасибо старку, так же он сказал как правильно подавать инфу, я ж как, че сказали (когда не знаю) то и делаю. всем спасибо

Автор:  skyb [ 02 апр 2015, 13:23 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

не закончили )))
Код:
import bitel.billing.common.TimeUtils;
import bitel.billing.server.contract.ContractRemover;
import bitel.billing.server.contract.bean.Contract;
import bitel.billing.server.contract.bean.ContractManager;
import bitel.billing.server.contract.bean.ContractParameterManager;
import bitel.billing.server.contract.bean.ContractPattern;
import bitel.billing.server.contract.bean.ContractPatternManager;
import bitel.billing.server.contract.bean.ContractTariff;
import bitel.billing.server.contract.bean.ContractTariffManager;
import bitel.billing.server.contract.bean.PaymentManager;
import ru.bitel.bgbilling.common.BGMessageException;
import ru.bitel.bgbilling.kernel.container.managed.ServerContext;
import ru.bitel.bgbilling.kernel.contract.balance.common.PaymentService;
import ru.bitel.bgbilling.kernel.contract.balance.common.bean.Payment;
import ru.bitel.bgbilling.kernel.event.EventProcessor;
import ru.bitel.bgbilling.kernel.event.events.ContractTariffUpdateEvent;
import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.kernel.tariff.server.event.ContractTariffChangedEvent;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import bitel.billing.server.phone.bean.ClientItem;
import bitel.billing.server.phone.bean.ClientItemManager;
import bitel.billing.server.util.PswdGen;
import bitel.billing.server.voiceip.bean.VoiceIpLoginManager;
import bitel.billing.server.voiceip.bean.VoiceIpLogin;
import java.util.Set;
import java.util.HashSet;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.sql.ResultSet;
import java.sql.Statement;

public class schedulerBase extends GlobalScriptBase {
   @Override
   public void execute(Setup setup1, ConnectionSet connectionSet2)
         throws Exception {
      int parent = 2;// категория ресурса предка
      int source = 1;// код источника
      int Tcid = -1;
      int VOICEIP_MID = 3;
      String hostname = "";
      String port = "";
      String username = "";
      String password = "";
      String dbname = "";
      Connection con = connectionSet2.getConnection();
      ContractManager cm = new ContractManager(con);
      ClientItemManager cim = new ClientItemManager(con, 5);
      Setup setup = Setup.getSetup();
      ServerContext context = new ServerContext(setup, 5, 0);
      ContractTariffManager ctm = new ContractTariffManager(con);
      ContractParameterManager cpm = new ContractParameterManager(con);
      Calendar calndar = Calendar.getInstance();
      Class.forName("org.postgresql.Driver");
      Connection c = DriverManager.getConnection("jdbc:postgresql://"
            + hostname + ":" + port + "/" + dbname, username, password);
      c.setAutoCommit(false);
      System.out.println("Opened database successfully");

      Statement stmt = c.createStatement();
      String query = "SELECT notification_id, status, tariff_id, template_id, balance, billing_lock_datetime, contract_number, number FROM billing.notification WHERE status = 'N'";
      ResultSet rs = stmt.executeQuery(query);

      while (rs.next()) {

         int id = rs.getInt(1);
         String status = rs.getString(2);
         int tariff_id = rs.getInt(3);
         //int tariff_id = 7;
         int template_id = rs.getInt(4);
         //int template_id = 3;
         BigDecimal balance = rs.getBigDecimal(5);
         // BigDecimal balance = new BigDecimal ("23");
         Date billing_lock_datetime = rs.getTimestamp(6);
         String contract_number = rs.getString(7);
         String number = rs.getString(8);
         // int person_id = rs.getInt(6);
         int person_id = 1;
         ContractPattern pattern = new ContractPatternManager(con)
               .getPattern(template_id);



         System.out.println("ID = " + id);
         System.out.println("status = " + status);
         System.out.println("tariff_id = " + tariff_id);
         System.out.println("template_id = " + template_id);
         System.out.println("balance = " + balance);
         System.out.println("billing_lock_datetime = "
               + billing_lock_datetime);
         System.out.println("contract_number = " + contract_number);
         System.out.println("number = " + number);
         System.out.println("");


         Statement uStmt = c.createStatement();
         Statement dStmt = c.createStatement();
         Contract contract = cm.createFromPattern(template_id,
               ContractPatternManager.getContractTitle(con, pattern,
                     calndar), calndar, PswdGen.generatePassword(7,
                     "0123456789"));
         cpm.updateStringParam(contract.getId(), VATS_ID,
               Integer.toString(person_id), 0);
         
         
         if (balance != null) {
         print("debug after if != null balance " + balance);
            ServerContext contextb = ServerContext.get();
            PaymentService paymentService = contextb.getService(
                  PaymentService.class, 0);
            Payment p = new Payment();
            p.setContractId(contract.getId());
            p.setComment("Создан автоматически системой, при создании договора");
            p.setTypeId(6);
            p.setUserId(0);
            p.setDate(new Date());
            p.setSum(balance);
            java.util.List<java.lang.Integer> pmt = paymentService.paymentUpdate(p, null);
            print("balance update " + balance);
         }
         
         
         print("title " + contract.getTitle() + "\n");
         int cid = contract.getId();
         // int cid = 1;
         String update_status = "UPDATE notification SET status = 'P' WHERE notification_id = "
               + id;
         String uBilling_lock_datetime = "UPDATE notification SET billing_lock_datetime = '"
               + TimeUtils.convertDateToTimestamp(new Date())
               + "' WHERE notification_id = " + id;
         String uContract_number = "UPDATE notification SET contract_number = '"
               + contract.getTitle() + "' WHERE notification_id = " + id;
         uStmt.executeUpdate(update_status);
         uStmt.executeUpdate(uBilling_lock_datetime);
         uStmt.executeUpdate(uContract_number);
         c.commit();
         String setNumber = " SELECT cid, nru.date2 FROM number_resource_5 AS nr " +
                        " LEFT JOIN number_resource_use_5 AS nru ON nru.resource_id = nr.id " +
                        " WHERE (nru.date2 IS NULL OR nru.date2 < NOW()) AND number = '"+number+"'";
         PreparedStatement contractPs = con.prepareStatement(setNumber);
            ResultSet contractRs = contractPs.executeQuery();
         while (contractRs.next()) {
            Tcid = contractRs.getInt(1);
            Date date2 = contractRs.getDate(2);
            print ("Tcid " + Tcid);
            if (Tcid > 0 && date2 != null )
            {
         ClientItem newPhone = new ClientItem();
         newPhone.setContractId(contract.getId());
         newPhone.setDate1(calndar);
         newPhone.setType(1);
         newPhone.setSourceId(1);
         ArrayList<String> phoneNumber = new ArrayList<String>();
         phoneNumber.add(number);
         newPhone.setClientNumbers(phoneNumber);
         cim.realUpdate(0, newPhone, true, context, true );
         cim.updateClientItem(newPhone);
         // создание логина voiceip
            VoiceIpLoginManager lm = new VoiceIpLoginManager(con, VOICEIP_MID);
            VoiceIpLogin login = new VoiceIpLogin();
            login.setCid( contract.getId() );
            login.setStatus( true );

            login.setPswd( "" );
            login.setDate1( calndar.getTime() );
            login.setComment( "" );
            login.setType(1);
         //
            login = lm.addLogin( login, Setup.getSetup().getModuleSetup(  VOICEIP_MID ) );
            //установка алиаса
            Set aliases = new HashSet();
            aliases.add( number + "-100" );
            lm.updateAliases( login.getId(), aliases );
            print("phone add ");
            }
            
            
         else if (Tcid <= 0 )
            {
         ClientItem newPhone = new ClientItem();
         newPhone.setContractId(contract.getId());
         newPhone.setDate1(calndar);
         newPhone.setType(1);
         newPhone.setSourceId(1);
         ArrayList<String> phoneNumber = new ArrayList<String>();
         phoneNumber.add(number);
         newPhone.setClientNumbers(phoneNumber);
         cim.realUpdate(0, newPhone, false, context, true );
         cim.updateClientItem(newPhone);
         // создание логина voiceip
            VoiceIpLoginManager lm = new VoiceIpLoginManager(con, VOICEIP_MID);
            VoiceIpLogin login = new VoiceIpLogin();
            login.setCid( contract.getId() );
            login.setStatus( true );

            login.setPswd( "" );
            login.setDate1( calndar.getTime() );
            login.setComment( "" );
            login.setType(1);
         //
            login = lm.addLogin( login, Setup.getSetup().getModuleSetup(  VOICEIP_MID ) );
            //установка алиаса
            Set aliases = new HashSet();
            aliases.add( number + "-100" );
            lm.updateAliases( login.getId(), aliases );
            print("phone add ");
            }
            
            else if (Tcid > 0 && date2 == null)
             {
                print("Ошибка, номер занят ");
             }

         }

         java.util.List<java.lang.String> ltp = pattern.getTariffPlanList();
         print("Befor TP " + ltp);
         if (ltp == null || ltp.isEmpty()) {
         print("TP ");
            ContractTariff t = new ContractTariff();
            t.setContractId(cid);
            t.setDate1(calndar);
            t.setTariffPlanId(tariff_id);
            t.setComment("Тариф назначился скриптом при создании договора в"
                  + new Date());
            ctm.updateContractTariff(t);
            EventProcessor.getInstance().publishAfterCommit(
                  new ContractTariffUpdateEvent(0, cid, t, true));
            EventProcessor.getInstance().publishAfterCommit(
                  new ContractTariffChangedEvent(cid));
         }


         ContractRemover cr = new ContractRemover(setup1, con, null);
         //cr.deleteContract(cid);


         String update_status_down = "UPDATE notification SET status = 'D' WHERE notification_id = "
               + id;
               dStmt.executeUpdate(update_status_down);
               c.commit();
               dStmt.close();
         System.out.println("balance = " + balance);

      rs.close();
      stmt.close();
      c.close();
      System.out.println("Operation done successfully");
   }

}

ошибка вылетает такая

Код:
04-02/09:51:04  INFO [pool-2-thread-1] CommonKernelEventProcessor - Process event cid:0; event:Event[ru.bitel.bgbilling.kernel.event.events.system.ContractCreateEvent] moduleId: 0; pluginId: no; cid: 0; scid: -1; userId: 0; timestamp: 1427957464415
04-02/09:51:04  INFO [pool-2-thread-1] CommonKernelEventProcessor - Process event cid:279; event:Event[ru.bitel.bgbilling.kernel.event.events.system.ContractCreateEvent] moduleId: 0; pluginId: no; cid: 279; scid: -1; userId: 0; timestamp: 1427957464454
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - ru.bitel.bgbilling.common.BGException: java.sql.SQLException: Can't call commit when autocommit=true
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at ru.bitel.bgbilling.kernel.contract.balance.server.PaymentServiceImpl.paymentUpdate(PaymentServiceImpl.java:241)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at ru.firstTelecom.global.schedulerBase.execute(schedulerBase.java:147)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at ru.bitel.bgbilling.kernel.script.server.bean.GlobalScriptInvoker.invoke(GlobalScriptInvoker.java:38)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at ru.bitel.bgbilling.kernel.script.server.GlobalScriptServiceImpl.executeGlobalScriptParams(GlobalScriptServiceImpl.java:83)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at ru.bitel.bgbilling.kernel.script.server.task.GlobalScriptTimer.executeJava(GlobalScriptTimer.java:88)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at ru.bitel.bgbilling.kernel.script.server.task.GlobalScriptTimer.executeTask(GlobalScriptTimer.java:55)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at ru.bitel.bgbilling.kernel.task.server.TaskBase.run(TaskBase.java:76)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at java.lang.Thread.run(Thread.java:745)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream - Caused by: java.sql.SQLException: Can't call commit when autocommit=true
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:925)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:922)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1741)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:334)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at ru.bitel.bgbilling.server.util.PoolGuardConnectionWrapper.commit(PoolGuardConnectionWrapper.java:74)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     at ru.bitel.bgbilling.kernel.contract.balance.server.PaymentServiceImpl.paymentUpdate(PaymentServiceImpl.java:218)
04-02/09:51:04 ERROR [pool-2-thread-1] LoggingPrintStream -     ... 9 more
04-02/09:51:04  INFO [pool-2-thread-1] GlobalScriptTimer - Task finished time=121 ms.


падает вот тут
Код:
java.util.List<java.lang.Integer> pmt = paymentService.paymentUpdate(p, null);

Автор:  dimOn [ 02 апр 2015, 13:29 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

нет полагаю вот здесь:
c.commit();
там же написано англицским по белому

зачем там коммиты то?

блин у меня половина сообщения пропала :facepalm:

Автор:  skyb [ 02 апр 2015, 13:32 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

dimOn писал(а):
нет полагаю вот здесь:
c.commit();
там же написано англицским по белому

зачем там коммиты то?

так а в начале написано
c.setAutoCommit(false);
записывать изменения нехотел если нет комитов

Автор:  dimOn [ 02 апр 2015, 13:40 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

так не для того коннекшена ругается же, непонятно пока.
autocommit=true ставится для родного коннекшена как раз, тока непонятно кто его коммитит
суммон Amir

Автор:  skyb [ 02 апр 2015, 13:44 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

dimOn писал(а):
так не для того коннекшена ругается же, непонятно пока.
autocommit=true ставится для родного коннекшена как раз, тока непонятно кто его коммитит
суммон Amir

комит закоментил, ошибка та же

Автор:  dimOn [ 02 апр 2015, 13:46 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

да не в нём дело, возможно, нопейсал уже.

Автор:  stark [ 02 апр 2015, 14:16 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

Из планировщика падает. Комитим мы его сами в сервисе, а в планировщике атокомит включен. Подумаем что с этим делать.
Если бы по событию этот скрипт запускался или вручную, то проблемы бы не было. Проблема именно в планировщике. Можно как вариант эту задачу поправить так чтобы они con-он с autocommit =false передавала. Наверное так и исправим, чтобы работало как при запуске глобального скрипта вручную. Правда боязно за вас, вы там в скриптах наворотите, а комиттов ставить не будете и там будут большие транзакции, которые будут вызывать deadlock-и на mysql. Представленный скрипт, кстати, яркий пример этого, тут никто не вызывает у нашего connection-а commit и все 100500 договоров создавать будет в одной транзакции(хотя в данном случае paymentUpdate будет комитить как раз :) ). Комиты в paymentUpdate решают одну проблему , которую бы по хорошему надо решать по другому и их убрать - это тоже решит данную проблему.

Автор:  skyb [ 02 апр 2015, 17:44 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

stark а подскажи что делать в данном скрипте чтоб он заработал? а то он не работает толком

Автор:  stark [ 03 апр 2015, 00:25 ]
Заголовок сообщения:  Re: API для добавления прихода к договору

skyb писал(а):
stark а подскажи что делать в данном скрипте чтоб он заработал? а то он не работает толком


пока ничего, проблема с нашей стороны..Как исправим - надо крипт оптимизировать(пока можно начать рефакторинга и вытащить общий код в функцию, чтобы потом в нескольких местах не исправлять).

Страница 1 из 2 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/