forum.bitel.ru http://forum.bitel.ru/ |
|
updateAddressParam [6.2] http://forum.bitel.ru/viewtopic.php?f=19&t=10509 |
Страница 1 из 1 |
Автор: | borin [ 13 май 2015, 19:29 ] |
Заголовок сообщения: | updateAddressParam [6.2] |
Добрый день! Пытаюсь обновить адрес у договора: Код: ContractAddressParamValue addressValue = new ContractAddressParamValue(); addressValue.setHouseId(161); addressValue.setFlat("5"); addressValue.setFloor(1); addressValue.setComment("Коммент"); addressValue.setPod(1); addressValue.setRoom("12"); cpm.updateAddressParam(bgContract.getId(), PARAM_ADDRESS, addressValue, USER_ID); Ноо для того чтоб адрес отобразился в клиенте bgbilling нужно: Код: addressValue.setAddress("Тут сформированная строка адреса"); Сформировать эту строку можно, через AddressUtils.getAddress, сформировав AddressStruct. Может есть способ проще сформировать AddressStruct??? |
Автор: | skn [ 14 май 2015, 03:40 ] |
Заголовок сообщения: | Re: updateAddressParam [6.2] |
нету ![]() как вариант вызвать Акшен UpdateAddressInfo |
Автор: | skyb [ 14 май 2015, 09:27 ] |
Заголовок сообщения: | Re: updateAddressParam [6.2] |
skn писал(а): нету ![]() как вариант вызвать Акшен UpdateAddressInfo с примерами бы =) |
Автор: | stark [ 14 май 2015, 13:15 ] |
Заголовок сообщения: | Re: updateAddressParam [6.2] |
skyb писал(а): skn писал(а): нету ![]() как вариант вызвать Акшен UpdateAddressInfo с примерами бы =) Action не очень удобно вызывать из нашего кода. Проще оставить пока как есть. Когда-нибудь мы переделаем это на Web-сервисы, будет проще. |
Автор: | borin [ 14 май 2015, 14:05 ] |
Заголовок сообщения: | Re: updateAddressParam [6.2] |
stark писал(а): skyb писал(а): skn писал(а): нету ![]() как вариант вызвать Акшен UpdateAddressInfo с примерами бы =) Action не очень удобно вызывать из нашего кода. Проще оставить пока как есть. Когда-нибудь мы переделаем это на Web-сервисы, будет проще. Эээх пичаль, беда. Буду формировать через AddressUtils значит, думал что раз в клиенте эта строка формируется, то и метод есть который данную строку формирует. |
Автор: | borin [ 14 май 2015, 16:24 ] |
Заголовок сообщения: | Re: updateAddressParam [6.2] |
Так к сведению, объект Street не возвращает индекс, который нужен при создании дома. Хотя в табличке address_street он хранится. |
Автор: | skn [ 14 май 2015, 17:44 ] |
Заголовок сообщения: | Re: updateAddressParam [6.2] |
borin писал(а): Так к сведению, объект Street не возвращает индекс, который нужен при создании дома. Хотя в табличке address_street он хранится. это устаревшее поле, сейчас индекс храниться в параметрах справочника улиц |
Автор: | borin [ 14 май 2015, 17:53 ] |
Заголовок сообщения: | Re: updateAddressParam [6.2] |
skn писал(а): borin писал(а): Так к сведению, объект Street не возвращает индекс, который нужен при создании дома. Хотя в табличке address_street он хранится. это устаревшее поле, сейчас индекс храниться в параметрах справочника улиц Не вопрос пусть даже и так, но формируя строку для setAddress, нам этот индекс надо откуда-то вытащить, а вариант всего один, запрос к базе, потому что ни House, ни Street не возвращают его. |
Автор: | skn [ 14 май 2015, 18:26 ] |
Заголовок сообщения: | Re: updateAddressParam [6.2] |
borin писал(а): skn писал(а): borin писал(а): Так к сведению, объект Street не возвращает индекс, который нужен при создании дома. Хотя в табличке address_street он хранится. это устаревшее поле, сейчас индекс храниться в параметрах справочника улиц Не вопрос пусть даже и так, но формируя строку для setAddress, нам этот индекс надо откуда-то вытащить, а вариант всего один, запрос к базе, потому что ни House, ни Street не возвращают его. index это свойство объекта AddressHouse вы его где и как получаете? |
Автор: | borin [ 14 май 2015, 18:49 ] |
Заголовок сообщения: | Re: updateAddressParam [6.2] |
skn писал(а): borin писал(а): skn писал(а): borin писал(а): Так к сведению, объект Street не возвращает индекс, который нужен при создании дома. Хотя в табличке address_street он хранится. это устаревшее поле, сейчас индекс храниться в параметрах справочника улиц Не вопрос пусть даже и так, но формируя строку для setAddress, нам этот индекс надо откуда-то вытащить, а вариант всего один, запрос к базе, потому что ни House, ни Street не возвращают его. index это свойство объекта AddressHouse вы его где и как получаете? Ну как то вот так получилось. Может конечно, не те методы использую. Код: private void updateAddress(Setup setup1, Connection connection, ContractParameterManager cpm, Contract bgContract, AtirraContract atirraContract) throws Exception {
String streetShort = atirraContract.getStreetShort(); String streetName = atirraContract.getStreetName(); String houseStr = atirraContract.getHouseNo(); Integer qFlat = atirraContract.getqFlat(); Integer houseNo = 0; String houseFrac = ""; if (houseStr.matches("^[0-9]+$")){ houseNo = Integer.parseInt(houseStr); } else { houseFrac = houseStr.replaceAll("^[0-9]+", ""); try{ houseNo = Integer.parseInt(houseStr.replaceAll(houseFrac + "$", "")); } catch (Exception e){ // действий не требуется } } Street bgStreet = getStreet(streetShort, streetName); String postIndex = getStreetIndex(connection, bgStreet.getId()); House bgHouse = getHouse(bgStreet.getId(), houseNo, houseFrac, qFlat, postIndex); AddressStruct addressStruct = new AddressStruct(); addressStruct.setCity(bgHouse.getCityTitle()); addressStruct.setStreet(bgStreet.getTitle()); addressStruct.setHouseId(bgHouse.getId()); addressStruct.setHouse(bgHouse.getHouseFrac()); addressStruct.setIndex(bgHouse.getPostIndex()); addressStruct.setFlat(atirraContract.getFlatNo()); addressStruct.setFloor(atirraContract.getFloor()); addressStruct.setPod(atirraContract.getPorch()); addressStruct.setRoom(""); ContractAddressParamValue addressValue = new ContractAddressParamValue(); addressValue.setHouseId(bgHouse.getId()); addressValue.setFlat(atirraContract.getFlatNo()); addressValue.setFloor(Integer.parseInt(atirraContract.getFloor())); addressValue.setPod(Integer.parseInt(atirraContract.getPorch())); addressValue.setRoom(""); addressValue.setAddress(AddressUtils.getAddress(setup1.getBundlePreferences(), addressStruct, null)); cpm.updateAddressParam(bgContract.getId(), PARAM_ADDRESS, addressValue, USER_ID); } private Street getStreet(String atirraStreetShort, String atirraStreetName) throws Exception { if (atirraStreetShort.equals("мкр-н")) atirraStreetShort = "мкр."; String streetName = atirraStreetShort + " " + atirraStreetName; ServerContext context = ServerContext.get(); AddressService addressService = context.getService(AddressService.class, 0); List<Street> streets = addressService.streetList(CITY_ID, streetName); if (streets.size() == 1){ return streets.get(0); } else { throw new Exception(streetName + " не существует."); } } private String getStreetIndex(Connection connection, Integer streetId) throws SQLException { String index = ""; String query = "SELECT p_index FROM address_street WHERE id=?"; PreparedStatement ps = connection.prepareStatement(query); ps.setInt(1, streetId); ResultSet rs = ps.executeQuery(); rs.next(); if (rs.getRow() == 1){ index = rs.getString("p_index"); } rs.close(); ps.close(); return index; } private House getHouse(Integer streetId, Integer houseNo, String houseFrac, Integer qFlat, String postIndex) throws BGException { ServerContext context = ServerContext.get(); AddressService addressService = context.getService(AddressService.class, 0); List<House> houses = addressService.houseList(CITY_ID, 0, streetId, 0, houseNo, houseFrac, null); if (houses.size() == 1){ return houses.get(0); } else { House house = new House(); house.setHouse(houseNo); house.setFrac(houseFrac); house.setStreetId(streetId); house.setAmount(qFlat); house.setPostIndex(postIndex); addressService.houseUpdate(house); return house; } } |
Автор: | skn [ 14 май 2015, 19:25 ] |
Заголовок сообщения: | Re: updateAddressParam [6.2] |
вы используете объекты из плагина cladr, а параметры договора используют bitel.billing.server.admin.bean.AddressHouse |
Автор: | borin [ 15 май 2015, 12:22 ] |
Заголовок сообщения: | Re: updateAddressParam [6.2] |
skn писал(а): вы используете объекты из плагина cladr, а параметры договора используют bitel.billing.server.admin.bean.AddressHouse Что то появилось больше вопросов чем ответов: 1) Индекс - поясните по этому полю. В клиенте BGBilling индекс указывается в двух местах, первое Адрес-Улицы, второе Адрес-дома. При создании дома клиент BGBilling автоматически подставляет этот индекс, видимо берет его из справочника улиц. При создании дома через API нужен индекс!!! 2) Если нужно использовать AddressHouse, то для манипулирования используем класс AddressManager, но он не рабочий. Не смог добавить дом через него: Код: public class TestAddress extends GlobalScriptBase { final Integer CITY_ID = 2; @Override public void execute(Setup setup, ConnectionSet connectionSet) throws Exception { Connection connection = connectionSet.getConnection(); AddressManager addressManager = new AddressManager(connection, setup); AddressHouse addressHouse = new AddressHouse(); addressHouse.setStreetId(137); addressHouse.setAmount(10); addressHouse.setHouse(25); addressHouse.setFrac("A"); addressHouse.setDate(new Date()); addressManager.addHouse(addressHouse); } } Получаю: Код: java.sql.SQLException: No value specified for parameter 10 Смотрю AddressManager.class, ищу метод addHouse Код: public void addHouse(AddressHouse house) { try { String e = "INSERT INTO address_house ( areaid, quarterid, streetid, house, frac, box_index, amount, comment, dt) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; PreparedStatement ps = this.con.prepareStatement(e); byte idx = 1; int var7 = idx + 1; ps.setInt(idx, house.getAreaId()); ps.setInt(var7++, house.getQuarterId()); ps.setInt(var7++, house.getStreetId()); ps.setInt(var7++, house.getHouse()); ps.setString(var7++, house.getFrac()); ps.setString(var7++, house.getBoxIndex()); ps.setInt(var7++, house.getAmount()); ps.setString(var7++, house.getComment()); ps.setDate(var7, TimeUtils.convertDateToSqlDate(house.getDate())); ps.executeUpdate(); int houseId = ServerUtils.lastInsertId(this.con); house.setId(houseId); ps.close(); } catch (Exception var6) { var6.printStackTrace(); } } Параметров 10, а устанавливается всего 9 значений. 3) Вообще так и не понял как через AddressManager, найти id улицы по наименованию, как найти дом по id улицы и наименованию дома. 4) И чтоб AdressHouse вернул индекс, его ведь нужно туда добавить. Но при создании дома получить индекс улицы можно только через обращение к БД. Через API это не сделать. Ну или я не нашел как. |
Автор: | skn [ 15 май 2015, 19:43 ] |
Заголовок сообщения: | Re: updateAddressParam [6.2] |
1-2) пофиксили AddressManager.addHouse(...) 3) получить id по названию нельзя, можно получить список через AddressManager.searchStreetList и если вернулась одна запись из нее взять id 4) в редакторе, при добавление дома, индекс не подставляется по умолчанию, там реализован механизм, по которому при вводе номера дома, индекс ищется в плагине Кладр, раньше была возможность индекс задавать в параметре улицы в формате диапазон_домов1:индек1;диапазон_домов2:индек2 и т.д. Поле индекс у улицы не используется. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |