公开完整前后端的代码

This commit is contained in:
Linus Torvalds
2026-02-26 19:22:38 +08:00
commit 193de8a34f
161 changed files with 17373 additions and 0 deletions

View File

@@ -0,0 +1,96 @@
package logic
import (
"errors"
"fmt"
"time"
"github.com/jackc/pgx/v5"
hutil "zsxyww.com/wts/handler/handlerUtilities"
"zsxyww.com/wts/model/sqlc"
)
// 可能返回的错误:
// ErrNoSuchTicket: 无此工单
// ErrNoSuchStaff: 无此网维成员
// ErrNewStatusInvalid: 工单新状态不符合逻辑
// ErrDataInconsistent: 数据库返回数据前后不一致
func AppendTrace(c *hutil.WtsCtx, op string, r AppendTraceParam) error {
ctx := c.Request().Context()
var opwid string
err := c.DB.DoQuery(ctx, op, func(q *sqlc.Queries) error {
//确认工单存在
t, err := q.GetTicket(ctx, r.Tid)
if err != nil {
if errors.Is(err, pgx.ErrNoRows) {
return hutil.NewWtsErr(ErrNoSuchTicket, err)
}
return hutil.NewUnknownErr(fmt.Errorf("AppendTrace::GetTicket数据库操作失败: %w", err))
}
//确认记录添加人的信息和有效性
w, err := q.GetUserByWX(ctx, op)
if err != nil {
if errors.Is(err, pgx.ErrNoRows) {
return hutil.NewWtsErr(ErrNoSuchStaff, err)
}
return hutil.NewUnknownErr(fmt.Errorf("AppendTrace::GetUserByWX数据库操作失败: %w", err))
}
if !w.Op {
opwid = "-2"
} else {
opw, err := q.GetStaffBySid(ctx, w.Sid.String)
if err != nil {
return hutil.NewUnknownErr(fmt.Errorf("AppendTrace::GetStaffBySid数据库操作失败: %w", err))
}
opwid = opw.Wid
}
//确认新状态是合乎逻辑的...
if r.NewStatus != "" {
if !isNewStatusValid(t.Status, r.NewStatus) {
return hutil.NewWtsErr(ErrNewStatusInvalid, nil)
}
}
tr, err := q.CreateTicketTrace(ctx, sqlc.CreateTicketTraceParams{
Tid: r.Tid,
UpdatedAt: timestamptzOpt(time.Now()),
Op: opwid,
NewStatus: wtsStatusOpt(string(r.NewStatus)),
NewPriority: wtsPriorityOpt(string(r.NewPriority)),
NewAppointment: dateOpt(r.NewAppointment),
NewCategory: wtsCategoryOpt(string(r.NewCategory)),
Remark: r.Remark,
})
if err != nil {
return hutil.NewUnknownErr(fmt.Errorf("AppendTrace::CreateTicketTrace数据库操作失败: %w", err))
}
if !((tr.Tid == r.Tid) &&
(tr.Op == opwid) &&
(tr.Remark == r.Remark) &&
((r.NewStatus == "" && !tr.NewStatus.Valid) || (tr.NewStatus.WtsStatus == r.NewStatus)) &&
((r.NewPriority == "" && !tr.NewPriority.Valid) || (tr.NewPriority.WtsPriority == r.NewPriority)) &&
((r.NewCategory == "" && !tr.NewCategory.Valid) || (tr.NewCategory.WtsCategory == r.NewCategory)) &&
((r.NewAppointment.IsZero() && !tr.NewAppointment.Valid) || (tr.NewAppointment.Time.Format(time.DateOnly) == r.NewAppointment.Format(time.DateOnly)))) {
return hutil.NewWtsErr(ErrDataInconsistent, nil)
}
return nil
})
return err
}
type AppendTraceParam struct {
Tid int32
NewStatus sqlc.WtsStatus
NewPriority sqlc.WtsPriority
NewAppointment time.Time
NewCategory sqlc.WtsCategory
Remark string
}