Карточки заявок обновляются сами: отпечаток состояния, перерисовка без ручного обновления, индикатор «обновляется автоматически»
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -11,7 +11,9 @@ package lkgateway
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"hash/fnv"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
@@ -22,6 +24,48 @@ type LiveStatus struct {
|
||||
Text string `json:"text"` // чего ждём / чем закончилось
|
||||
Kind string `json:"kind"` // wait | warn | ok | bad
|
||||
Active bool `json:"active"` // в работе: страница продолжает опрашивать
|
||||
Sig string `json:"sig,omitempty"` // отпечаток состояния: изменился — карточка перерисовывается
|
||||
}
|
||||
|
||||
// liveSig — короткий отпечаток всего, что показывает карточка: сменился — страница обновляется.
|
||||
func liveSig(parts ...any) string {
|
||||
raw, _ := json.Marshal(parts)
|
||||
h := fnv.New64a()
|
||||
_, _ = h.Write(raw)
|
||||
return strconv.FormatUint(h.Sum64(), 36)
|
||||
}
|
||||
|
||||
// liveOutgoing — состояние исходящего перевода с отпечатком карточки.
|
||||
func liveOutgoing(c ClaimView) LiveStatus {
|
||||
st := liveOutgoingState(c)
|
||||
guid := string(c.M2MGUID)
|
||||
var quik []*QuikLink
|
||||
var depoL *DepoLink
|
||||
var watch *OrderWatch
|
||||
if guid != "" {
|
||||
quik = globalQuikLinks.ForGUID(guid)
|
||||
if globalDepoLinks != nil {
|
||||
depoL = globalDepoLinks.Get(guid)
|
||||
}
|
||||
if globalOrderWatch != nil {
|
||||
watch = globalOrderWatch.Get(guid)
|
||||
}
|
||||
}
|
||||
st.Sig = liveSig(st.Text, c.Status, c.UpdatedAt, sendFailGet(guid), quik, depoL, watch)
|
||||
return st
|
||||
}
|
||||
|
||||
// liveIncoming — состояние входящего перевода с отпечатком карточки.
|
||||
func liveIncoming(it *IncomingTransfer) LiveStatus {
|
||||
st := liveIncomingState(it)
|
||||
if it != nil {
|
||||
var watch *OrderWatch
|
||||
if globalOrderWatch != nil {
|
||||
watch = globalOrderWatch.Get(it.GUID)
|
||||
}
|
||||
st.Sig = liveSig(st.Text, it, watch)
|
||||
}
|
||||
return st
|
||||
}
|
||||
|
||||
// form16Snapshot — черновики и подачи поручений 16 по всем сделкам одним обходом входящего
|
||||
@@ -49,8 +93,8 @@ func form16Snapshot() map[string]*OutgoingDeal {
|
||||
return m
|
||||
}
|
||||
|
||||
// liveOutgoing — состояние исходящего перевода: сделка M2M + депозитарное поручение 16.
|
||||
func liveOutgoing(c ClaimView) LiveStatus {
|
||||
// liveOutgoingState — состояние исходящего перевода: сделка M2M + депозитарное поручение 16.
|
||||
func liveOutgoingState(c ClaimView) LiveStatus {
|
||||
guid := string(c.M2MGUID)
|
||||
var depo *OutgoingDeal
|
||||
if guid != "" && c.Status == "confirmed" { // каталог нужен только на этапе депо-исполнения
|
||||
@@ -110,8 +154,8 @@ func liveOutgoing(c ClaimView) LiveStatus {
|
||||
return LiveStatus{Text: russianState(c.Status), Kind: "wait"}
|
||||
}
|
||||
|
||||
// liveIncoming — состояние входящего перевода: наше решение, затем поручение 16/1.
|
||||
func liveIncoming(it *IncomingTransfer) LiveStatus {
|
||||
// liveIncomingState — состояние входящего перевода: наше решение, затем поручение 16/1.
|
||||
func liveIncomingState(it *IncomingTransfer) LiveStatus {
|
||||
if it == nil {
|
||||
return LiveStatus{}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user