feat: 添加工单操作历史的状态记录。
This commit is contained in:
parent
d4dd4ffb65
commit
2a7d71a806
@ -3,6 +3,8 @@ package dashboard
|
||||
import (
|
||||
"ferry/pkg/service"
|
||||
"ferry/tools/app"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
@ -16,11 +18,23 @@ func InitData(c *gin.Context) {
|
||||
err error
|
||||
count map[string]int // 工单数量统计
|
||||
ranks []service.Ranks
|
||||
submit map[string][]interface{}
|
||||
startTime string
|
||||
endTime string
|
||||
)
|
||||
|
||||
startTime = c.DefaultQuery("start_time", "")
|
||||
endTime = c.DefaultQuery("end_time", "")
|
||||
|
||||
if startTime == "" || endTime == "" {
|
||||
// 默认为最近7天的数据
|
||||
startTime = fmt.Sprintf("%s 00:00:00", time.Now().AddDate(0, 0, -6).Format("2006-01-02"))
|
||||
endTime = fmt.Sprintf("%s 23:59:59", time.Now().Format("2006-01-02"))
|
||||
}
|
||||
|
||||
statistics := service.Statistics{
|
||||
StartTime: "",
|
||||
EndTime: "",
|
||||
StartTime: startTime,
|
||||
EndTime: endTime,
|
||||
}
|
||||
|
||||
// 查询工单类型数据统计
|
||||
@ -37,8 +51,18 @@ func InitData(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 工单提交数据统计
|
||||
submit, err = statistics.DateRangeStatistics()
|
||||
if err != nil {
|
||||
app.Error(c, -1, err, "工单提交数据统计失败")
|
||||
return
|
||||
}
|
||||
|
||||
// 工单处理人统计
|
||||
|
||||
app.OK(c, map[string]interface{}{
|
||||
"count": count,
|
||||
"ranks": ranks,
|
||||
"submit": submit,
|
||||
}, "")
|
||||
}
|
||||
|
@ -215,6 +215,7 @@ func UnityWorkOrder(c *gin.Context) {
|
||||
Processor: userInfo.NickName,
|
||||
ProcessorId: tools.GetUserId(c),
|
||||
Remarks: "手动结束工单。",
|
||||
Status: 2,
|
||||
})
|
||||
|
||||
tx.Commit()
|
||||
@ -225,6 +226,7 @@ func UnityWorkOrder(c *gin.Context) {
|
||||
// 转交工单
|
||||
func InversionWorkOrder(c *gin.Context) {
|
||||
var (
|
||||
cirHistoryValue []process.CirculationHistory
|
||||
err error
|
||||
workOrderInfo process.WorkOrderInfo
|
||||
stateList []map[string]interface{}
|
||||
@ -232,6 +234,7 @@ func InversionWorkOrder(c *gin.Context) {
|
||||
currentState map[string]interface{}
|
||||
userInfo system.SysUser
|
||||
currentUserInfo system.SysUser
|
||||
costDurationValue int64
|
||||
params struct {
|
||||
WorkOrderId int `json:"work_order_id"`
|
||||
NodeId string `json:"node_id"`
|
||||
@ -306,6 +309,22 @@ func InversionWorkOrder(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 流转历史写入
|
||||
err = orm.Eloquent.Model(&cirHistoryValue).
|
||||
Where("work_order = ?", params.WorkOrderId).
|
||||
Find(&cirHistoryValue).
|
||||
Order("create_time desc").Error
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return
|
||||
}
|
||||
for _, t := range cirHistoryValue {
|
||||
if t.Source != currentState["id"].(string) {
|
||||
costDuration := time.Since(t.CreatedAt.Time)
|
||||
costDurationValue = int64(costDuration) / 1000 / 1000 / 1000
|
||||
}
|
||||
}
|
||||
|
||||
// 添加转交历史
|
||||
tx.Create(&process.CirculationHistory{
|
||||
Title: workOrderInfo.Title,
|
||||
@ -315,6 +334,8 @@ func InversionWorkOrder(c *gin.Context) {
|
||||
Processor: currentUserInfo.NickName,
|
||||
ProcessorId: tools.GetUserId(c),
|
||||
Remarks: fmt.Sprintf("此阶段负责人已转交给《%v》", userInfo.NickName),
|
||||
Status: 2, // 其他
|
||||
CostDuration: costDurationValue,
|
||||
})
|
||||
|
||||
tx.Commit()
|
||||
|
@ -17,9 +17,10 @@ type CirculationHistory struct {
|
||||
Source string `gorm:"column:source; type: varchar(128)" json:"source" form:"source"` // 源节点ID
|
||||
Target string `gorm:"column:target; type: varchar(128)" json:"target" form:"target"` // 目标节点ID
|
||||
Circulation string `gorm:"column:circulation; type: varchar(128)" json:"circulation" form:"circulation"` // 流转ID
|
||||
Status int `gorm:"column:status; type: int(11)" json:"status" form:"status"` // 流转状态 1 同意, 0 拒绝, 2 其他
|
||||
Processor string `gorm:"column:processor; type: varchar(45)" json:"processor" form:"processor"` // 处理人
|
||||
ProcessorId int `gorm:"column:processor_id; type: int(11)" json:"processor_id" form:"processor_id"` // 处理人ID
|
||||
CostDuration string `gorm:"column:cost_duration; type: varchar(128)" json:"cost_duration" form:"cost_duration"` // 处理时长
|
||||
CostDuration int64 `gorm:"column:cost_duration; type: int(11)" json:"cost_duration" form:"cost_duration"` // 处理时长
|
||||
Remarks string `gorm:"column:remarks; type: longtext" json:"remarks" form:"remarks"` // 备注
|
||||
}
|
||||
|
||||
|
@ -272,6 +272,7 @@ func CreateWorkOrder(c *gin.Context) (err error) {
|
||||
Circulation: "新建",
|
||||
Processor: nameValue,
|
||||
ProcessorId: userInfo.UserId,
|
||||
Status: 2, // 其他
|
||||
}).Error
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
|
@ -30,8 +30,8 @@ func NewStatistics(startTime string, endTime string) *Statistics {
|
||||
}
|
||||
}
|
||||
|
||||
// 查询周统计数据
|
||||
func WeeklyStatistics() (statisticsData map[string][]interface{}, err error) {
|
||||
// 查询范围统计数据
|
||||
func (s *Statistics) DateRangeStatistics() (statisticsData map[string][]interface{}, err error) {
|
||||
var (
|
||||
datetime string
|
||||
total int
|
||||
@ -120,7 +120,7 @@ func WeeklyStatistics() (statisticsData map[string][]interface{}, err error) {
|
||||
}
|
||||
|
||||
// 查询工单提交排名
|
||||
func SubmitRanking() (submitRankingData map[string][]interface{}, err error) {
|
||||
func (s *Statistics) SubmitRanking() (submitRankingData map[string][]interface{}, err error) {
|
||||
var (
|
||||
userId int
|
||||
username string
|
||||
@ -198,8 +198,6 @@ func (s *Statistics) WorkOrderCount(c *gin.Context) (countList map[string]int, e
|
||||
return
|
||||
}
|
||||
|
||||
// 查询指定范围内的提交工单折线图统计
|
||||
|
||||
// 查询指定范围内的提交工单排名数据
|
||||
func (s *Statistics) WorkOrderRanks() (ranks []Ranks, err error) {
|
||||
ranks = make([]Ranks, 0)
|
||||
@ -207,6 +205,7 @@ func (s *Statistics) WorkOrderRanks() (ranks []Ranks, err error) {
|
||||
err = orm.Eloquent.Model(&process.WorkOrderInfo{}).
|
||||
Joins("left join p_process_info on p_process_info.id = p_work_order_info.process").
|
||||
Select("p_process_info.name as name, count(p_work_order_info.id) as total").
|
||||
Where("p_work_order_info.create_time between ? and ?", s.StartTime, s.EndTime).
|
||||
Group("p_work_order_info.process").
|
||||
Order("total desc").
|
||||
Limit(10).
|
||||
|
@ -53,15 +53,6 @@ type Handle struct {
|
||||
tx *gorm.DB
|
||||
}
|
||||
|
||||
// 时间格式化
|
||||
func fmtDuration(d time.Duration) string {
|
||||
d = d.Round(time.Minute)
|
||||
h := d / time.Hour
|
||||
d -= h * time.Hour
|
||||
m := d / time.Minute
|
||||
return fmt.Sprintf("%02d小时 %02d分钟", h, m)
|
||||
}
|
||||
|
||||
// 会签
|
||||
func (h *Handle) Countersign(c *gin.Context) (err error) {
|
||||
var (
|
||||
@ -423,7 +414,7 @@ func (h *Handle) HandleWorkOrder(
|
||||
relatedPersonList []int
|
||||
cirHistoryValue []process.CirculationHistory
|
||||
cirHistoryData process.CirculationHistory
|
||||
costDurationValue string
|
||||
costDurationValue int64
|
||||
sourceEdges []map[string]interface{}
|
||||
targetEdges []map[string]interface{}
|
||||
condExprStatus bool
|
||||
@ -534,13 +525,13 @@ func (h *Handle) HandleWorkOrder(
|
||||
"id": h.targetStateValue["id"].(string),
|
||||
}
|
||||
|
||||
switch h.targetStateValue["clazz"] {
|
||||
// 排他网关
|
||||
case "exclusiveGateway":
|
||||
sourceEdges, err = h.processState.GetEdge(h.targetStateValue["id"].(string), "source")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
switch h.targetStateValue["clazz"] {
|
||||
case "exclusiveGateway": // 排他网关
|
||||
breakTag:
|
||||
for _, edge := range sourceEdges {
|
||||
edgeCondExpr := make([]map[string]interface{}, 0)
|
||||
@ -588,15 +579,8 @@ func (h *Handle) HandleWorkOrder(
|
||||
err = errors.New("所有流转均不符合条件,请确认。")
|
||||
return
|
||||
}
|
||||
// 并行/聚合网关
|
||||
case "parallelGateway":
|
||||
case "parallelGateway": // 并行/聚合网关
|
||||
// 入口,判断
|
||||
sourceEdges, err = h.processState.GetEdge(h.targetStateValue["id"].(string), "source")
|
||||
if err != nil {
|
||||
err = fmt.Errorf("查询流转信息失败,%v", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
targetEdges, err = h.processState.GetEdge(h.targetStateValue["id"].(string), "target")
|
||||
if err != nil {
|
||||
err = fmt.Errorf("查询流转信息失败,%v", err.Error())
|
||||
@ -777,7 +761,7 @@ func (h *Handle) HandleWorkOrder(
|
||||
for _, t := range cirHistoryValue {
|
||||
if t.Source != h.stateValue["id"] {
|
||||
costDuration := time.Since(t.CreatedAt.Time)
|
||||
costDurationValue = fmtDuration(costDuration)
|
||||
costDurationValue = int64(costDuration) / 1000 / 1000 / 1000
|
||||
}
|
||||
}
|
||||
|
||||
@ -799,6 +783,7 @@ func (h *Handle) HandleWorkOrder(
|
||||
Circulation: circulationValue,
|
||||
Processor: currentUserInfo.NickName,
|
||||
ProcessorId: tools.GetUserId(c),
|
||||
Status: flowProperties,
|
||||
CostDuration: costDurationValue,
|
||||
Remarks: remarks,
|
||||
}
|
||||
@ -843,6 +828,7 @@ func (h *Handle) HandleWorkOrder(
|
||||
ProcessorId: tools.GetUserId(c),
|
||||
Circulation: "结束",
|
||||
Remarks: "工单已结束",
|
||||
Status: 2, // 其他状态
|
||||
}).Error
|
||||
if err != nil {
|
||||
h.tx.Rollback()
|
||||
|
Loading…
x
Reference in New Issue
Block a user