etreschenkov 2025-07-08 18:38:30 +03:00
parent 4e50f77576
commit 5f24eba895
7 changed files with 144 additions and 4 deletions

View file

@ -0,0 +1,51 @@
package ru.spcex.clearing.backendapi.controller.queue.session;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import java.util.concurrent.ExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController;
import ru.spcex.clearing.backendapi.controller.request.cud.session.ContinueSessionAction;
import ru.spcex.clearing.backendapi.controller.response.BasicSpcexResponse;
import ru.spcex.clearing.backendapi.controller.response.cud.CudResponse;
import ru.spcex.clearing.backendapi.service.IOperator;
import ru.spcex.clearing.platform.messaging.domain.Consts;
@Controller
@RequestMapping("/session")
public class SessionController extends AbstractQueueController {
protected final Logger log = LoggerFactory.getLogger(getClass());
public SessionController(IOperator operator) {
super(operator);
}
@ApiOperation(value = "Continue session")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)})
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public CudResponse repeatSession(
@ApiParam(value = "Параметры команды в JSON формате.", required = true)
@RequestBody ContinueSessionAction continueSessionAction) throws ExecutionException, InterruptedException {
return processRequest(Consts.REPEAT_SESSION, continueSessionAction);
}
@ApiOperation(value = "Continue session")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)})
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public CudResponse continueSession(
@ApiParam(value = "Параметры команды в JSON формате.", required = true)
@RequestBody ContinueSessionAction continueSessionAction) throws ExecutionException, InterruptedException {
return processRequest(Consts.CONTINUE_SESSION, continueSessionAction);
}
}

View file

@ -0,0 +1,33 @@
package ru.spcex.clearing.backendapi.controller.request.cud.session;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.backendapi.domain.actions.IAction;
import ru.spcex.clearing.platform.messaging.domain.ActionType;
import ru.spcex.clearing.platform.messaging.domain.cud.session.SessionActionRequest;
public class ContinueSessionAction implements IAction<SessionActionRequest> {
@ApiModelProperty(value = "Идентификатор задачи", example = "ADBC")
@JsonProperty
public Long id;
@Override
public SessionActionRequest toRequest() {
SessionActionRequest request = new SessionActionRequest();
request.setSessionId(this.id);
return request;
}
@Override
public ActionType getActionType() {
return ActionType.SYSTEM;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}

View file

@ -1,6 +1,6 @@
{
"version": "3.19.244.135",
"version": "3.19.250.136",
"enums": {
@ -6229,7 +6229,33 @@
"type": 12,"dbname": "Код статуса","name": "Наименование статуса","shortname": "Статус","searchable": true,"sortable": true,"visible": true,"link": "workflowStatus"
}
]
,"actions":[
{"method":"post",
"destination": "REPT",
"name": "Продолжение сессии c текущего шага",
"fields": [
{"code": "id",
"type": 1,"name": "Идентификатор записи","shortname": "ID","link": "session","required": true,"linkCode": "id"
}
]
}
,
{"method":"post",
"destination": "NEXT",
"name": "Продолжение сессии cо следующего шага",
"fields": [
{"code": "id",
"type": 1,"name": "Идентификатор записи","shortname": "ID","link": "session","required": true,"linkCode": "id"
}
]
}
]
}
,
"sTrades": {

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--?xml-stylesheet type="text/xsl" href="\..\corp-reports\src\data\meta\meta.server.xslt"?-->
<meta version="3.19.244.135">
<meta version="3.19.250.136">
<!-- _xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" _xsi:noNamespaceSchemaLocation="file:///E:/d/projects/meta/from/meta.xsd" -->
<!--Здесь словари-->
<enums>
@ -1442,6 +1442,14 @@
<section type="12" dbname="Код наименования секции" name="Наименование секции" shortname="Секция" searchable="true" sortable="true" visible="true" link="section"/>
<sessionType type="12" dbname="Код типа клиринговой сессии" name="Тип клиринговой сессии" shortname="Тип" searchable="true" sortable="true" visible="true" link="sessionType"/>
<workflowStatus type="12" dbname="Код статуса" name="Наименование статуса" shortname="Статус" searchable="true" sortable="true" visible="true" link="workflowStatus"/>
<actions>
<post destination="REPT" name="Продолжение сессии c текущего шага">
<id type="1" name="Идентификатор записи" shortname="ID" link="session" required="true" linkCode="id"/>
</post>
<post destination="NEXT" name="Продолжение сессии cо следующего шага">
<id type="1" name="Идентификатор записи" shortname="ID" link="session" required="true" linkCode="id"/>
</post>
</actions>
</session>
<sTrades name="Сделки из Торговой системы" class="ru.clearing.classes.statics.data.misc.STrades" table="s_trades">
<id type="1" name="Идентификатор записи" shortname="ID" searchable="true" sortable="true"/>

View file

@ -29,6 +29,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistryChangeSt
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistryReturnDepositRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistrySplitDepositActionRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.session.SessionActionRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.STradesImportedRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumerV2;
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
@ -129,9 +130,12 @@ public class EventsReceiver extends QueueConsumerV2 implements InitializingBean
return null;
})
.forDestination(Task.startOfClearing.topic(), callbacks::put);
callback(Object.class)
callback(SessionActionRequest.class)
.setConsumer(o -> stateMachineWrapper.sendEvent(SsnEvent.CONTINUE))
.forDestination("continue-state-session", callbacks::put);
.forDestination(Consts.CONTINUE_SESSION, callbacks::put);
callback(SessionActionRequest.class)
.setConsumer(o -> stateMachineWrapper.sendEvent(SsnEvent.REPEAT))
.forDestination(Consts.REPEAT_SESSION, callbacks::put);
callback(PIClearingOutbondActionNewRequest.class)
.setFunction(pmtOutboundService::sendOutBoundPayment)

View file

@ -162,6 +162,8 @@ public interface Consts {
String SDF56_PROCESS = "sdf56-process";
String CONTINUE_SESSION_BN_FIRST_PART = "sdf57-process";
String CONTINUE_SESSION_BN_SECOND_PART = "sdf13-process";
String CONTINUE_SESSION = "continue-session";
String REPEAT_SESSION = "repeat-session";
String KILL_SESSION = "kill-session";
String FORCE_STOP_SESSION = "force-stop-session";
String SWT_EXPORTER = "swt-exporter";

View file

@ -0,0 +1,16 @@
package ru.spcex.clearing.platform.messaging.domain.cud.session;
import com.fasterxml.jackson.annotation.JsonProperty;
public class SessionActionRequest {
@JsonProperty
private Long sessionId;
public Long getSessionId() {
return sessionId;
}
public void setSessionId(Long sessionId) {
this.sessionId = sessionId;
}
}