Advertisement
Guest User

Untitled

a guest
Apr 26th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.13 KB | None | 0 0
  1. package sx.register.de.egisso.raf.tasks;
  2.  
  3. import sx.common.MsgBean;
  4. import sx.datastore.SXId;
  5. import sx.datastore.SXObj;
  6. import sx.datastore.meta.SXClass;
  7. import sx.datastore.params.SXObjListParams;
  8. import sx.datastore.params.SXUpdateObjParams;
  9. import sx.datastore.utils.SXCriteria;
  10. import sx.register.de.egisso.EGISSO;
  11. import sx.register.de.egisso.raf.beans.DeEgissoRafClientPackage;
  12. import sx.register.de.egisso.raf.beans.DeEgissoRafPackage;
  13. import sx.scheduler.SXTask;
  14. import sx.services.routing.org.OrgRoutingService;
  15. import sx.services.routing.org.bean.OrgRouting;
  16. import sx.services.routing.rcp.RPCParamsExecutor;
  17. import sx.services.routing.rcp.RPCParamsExecutorFactory;
  18.  
  19. import java.util.Collections;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.stream.Collectors;
  23.  
  24. /**
  25.  * Задача отправки ответов пакетов обмена фактами
  26.  */
  27. public class EgissoRafClientPackageProtocolMassSendTask extends SXTask {
  28.   @Override
  29.   protected MsgBean execute() {
  30.     Map<Boolean, List<SXId>> completed = new SXObjListParams(DeEgissoRafClientPackage.CLASS_NAME)
  31.         .setGetLinkedObjects(false).setActualizeObjTitle(false).setDefaultAttrCollection(SXClass.KEY_ATTRS)
  32.         .addCondition(DeEgissoRafClientPackage.Attribute.PACKAGE_STATUS, DeEgissoRafClientPackage.PackageStatus.SENDING.getCode(), SXCriteria.EQUAL)
  33.         .getListOfSXObj()
  34.         .stream()
  35.         .map(SXObj::getId)
  36.         .collect(Collectors.partitioningBy(this::getFile));
  37.  
  38.     addMessage(String.format("Успешно обработано %s пакетов", completed.getOrDefault(Boolean.TRUE, Collections.emptyList()).size()));
  39.     addMessage(String.format("Обработано с ошибками %s пакетов", completed.getOrDefault(Boolean.FALSE, Collections.emptyList()).size()));
  40.     return null;
  41.   }
  42.  
  43.   private Boolean getFile(SXId rafClientPackageId) {
  44.     DeEgissoRafClientPackage rafClientPackage = EGISSO.getRafManager().getClientPackage(rafClientPackageId)
  45.         .orElseThrow(() -> new IllegalStateException("Пакет обмена фактами назначения ЕГИССО не получен"));
  46.  
  47.     if (rafClientPackage.getResponseFileId() == null) {
  48.       // TODO: 25.04.2019 дописать сообщение о том, что файл не сформирован
  49.       addMessage(String.format("Пакет [%s]: Файл ответа не сформирован", rafClientPackage.getId()));
  50.       return false;
  51.     }
  52.  
  53.     OrgRouting orgRouting = OrgRoutingService.getInstance().getOrgRoutingByOrgGuid(rafClientPackage.getOsznGuid());
  54.     if (orgRouting == null) {
  55.       // TODO: 25.04.2019 Маршрутизация не настроена
  56.       addMessage(String.format("Пакет [%s]: Не настроена маршрутизация", rafClientPackage.getId()));
  57.       return false;
  58.     }
  59.  
  60.     RPCParamsExecutor rpcParamsExecutor = RPCParamsExecutorFactory.getInstance().getExecuter(orgRouting.getOsznId());
  61.     SXObj remotePackage;
  62.     try {
  63.       remotePackage = getRemotePackage(rpcParamsExecutor, rafClientPackage);
  64.     } catch (Exception e) {
  65.       // TODO: 25.04.2019 Ошибка поиска пакета фактов
  66.       addMessage(String.format("Пакет [%s]: Ошибка поиска пакета фактов", rafClientPackage.getId()));
  67.       return false;
  68.     }
  69.  
  70.     if (remotePackage.getId() == null) {
  71.       // TODO: 25.04.2019 Не найден пакет фактов
  72.       addMessage(String.format("Пакет [%s]: Не найден пакет фактов", rafClientPackage.getId()));
  73.       return false;
  74.     }
  75.  
  76.     String remoteFile;
  77.     try {
  78.       remoteFile = rpcParamsExecutor.createFile(rafClientPackage.getResponseFileId());
  79.     } catch (Exception e) {
  80.       // TODO: 25.04.2019 Ошибка отправки пакета
  81.       addMessage(String.format("Пакет [%s]: Ошибка отправки пакета", rafClientPackage.getId()));
  82.       return false;
  83.     }
  84.  
  85.     if (remoteFile == null) {
  86.       // TODO: 25.04.2019 Пакет ответа не отправлен
  87.       addMessage(String.format("Пакет [%s]: Пакет ответа не отправлен", rafClientPackage.getId()));
  88.       return false;
  89.     }
  90.  
  91.     try {
  92.       updateRafPackage(rpcParamsExecutor, remotePackage, remoteFile);
  93.     } catch (Exception e) {
  94.       // TODO: 25.04.2019 Ошибка обновления пакета фактов
  95.       addMessage(String.format("Пакет [%s]: Ошибка обновления пакета фактов", rafClientPackage.getId()));
  96.       return false;
  97.     }
  98.  
  99.     updateRafClientPackage(rafClientPackage);
  100.     return true;
  101.   }
  102.  
  103.   private SXObj getRemotePackage(RPCParamsExecutor rpcParamsExecutor, DeEgissoRafClientPackage rafClientPackage) throws Exception {
  104.     return rpcParamsExecutor.executeByFirstObject(
  105.         SXObjListParams.newInstance(DeEgissoRafPackage.CLASS_NAME)
  106.             .setGetLinkedObjects(false).setActualizeObjTitle(false).setDefaultAttrCollection(SXClass.KEY_ATTRS)
  107.             .addCondition(
  108.                 DeEgissoRafPackage.Attribute.GUID,
  109.                 rafClientPackage.getPackageId()
  110.                     .getObj(false, DeEgissoRafPackage.Attribute.GUID)
  111.                     .getStringAttr(DeEgissoRafPackage.Attribute.GUID)
  112.             )
  113.     );
  114.   }
  115.  
  116.   private void updateRafPackage(RPCParamsExecutor rpcParamsExecutor, SXObj remotePackage, String remoteFile) throws Exception {
  117.     rpcParamsExecutor.execute(
  118.         SXUpdateObjParams.newInstance(remotePackage.getId())
  119.             .setUpdateReadOnlyAttr(true)
  120.             .setAttrValue(DeEgissoRafPackage.Attribute.PACKAGE_STATUS, DeEgissoRafPackage.PackageStatus.RESPONSE_RECEIVED.getCode())
  121.             .setAttrValue(DeEgissoRafPackage.Attribute.RESPONSE_FILE, remoteFile)
  122.     );
  123.   }
  124.  
  125.   private void updateRafClientPackage(DeEgissoRafClientPackage rafClientPackage) {
  126.     SXUpdateObjParams.newInstance(rafClientPackage.getId())
  127.         .setUpdateReadOnlyAttr(true)
  128.         .setAttrValue(DeEgissoRafClientPackage.Attribute.PACKAGE_STATUS, DeEgissoRafClientPackage.PackageStatus.PROCESSED.getCode())
  129.         .updateObj();
  130.   }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement