123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- package knowledge_approve
- import (
- "encoding/json"
- "eta_gn/eta_api/models/knowledge"
- knowledge_approve "eta_gn/eta_api/models/knowledge_approve"
- "eta_gn/eta_api/models/knowledge_approve/request"
- "eta_gn/eta_api/models/knowledge_approve/response"
- "eta_gn/eta_api/utils"
- "fmt"
- "time"
- )
- // GetKnowledgeResourceApproveFlowList 获取知识资源审批流列表
- func GetKnowledgeResourceApproveFlowList(condition string, pars []interface{}, startSize, pageSize int) (items []*response.KnowledgeResourceApproveFlowItem, total int, msg string, err error) {
- total, err = knowledge_approve.GetKnowledgeResourceApproveFlowCountByCondition(condition, pars)
- if err != nil {
- msg = "获取审批流程列表失败"
- return
- }
- if total == 0 {
- items = make([]*response.KnowledgeResourceApproveFlowItem, 0)
- return
- }
- flowList, err := knowledge_approve.GetKnowledgeResourceApproveFlowByCondition(condition, pars, startSize, pageSize)
- if err != nil {
- msg = "获取审批流程列表失败"
- return
- }
- items = toKnowledgeResourceApproveFlowItem(flowList)
- return
- }
- // SaveKnowledgeResourceApproveFlow 保存审批流
- func SaveKnowledgeResourceApproveFlow(flow *request.KnowledgeResourceApproveFlowSaveReq) (ok bool, msg string, err error) {
- obj := new(knowledge.KnowledgeClassify)
- classifyInfo, err := obj.GetClassifyById(flow.ClassifyId)
- if err != nil {
- if utils.IsErrNoRow(err) {
- msg = "保存审批流失败, 分类不存在"
- return
- }
- msg = "保存审批流失败"
- return
- }
- if flow.KnowledgeResourceApproveFlowId == 0 {
- tmp, er := knowledge_approve.GetKnowledgeResourceApproveFlowByClassifyId(flow.ClassifyId)
- if er != nil && !utils.IsErrNoRow(er) {
- msg = "保存审批流失败"
- err = er
- return
- }
- if tmp != nil && tmp.KnowledgeResourceApproveFlowId > 0 {
- msg = "保存审批流失败, 分类下已存在审批流"
- err = fmt.Errorf("分类下已存在审批流")
- return
- }
- t := &knowledge_approve.KnowledgeResourceApproveFlow{
- FlowName: flow.FlowName,
- ClassifyId: flow.ClassifyId,
- ClassifyName: classifyInfo.ClassifyName,
- CurrVersion: 1,
- CreateTime: time.Now(),
- ModifyTime: time.Now(),
- }
- knowledgeFlowNodeItems := make([]*knowledge_approve.KnowledgeResourceApproveNode, 0)
- for _, node := range flow.Nodes {
- knowledgeFlowNode := new(knowledge_approve.KnowledgeResourceApproveNode)
- knowledgeFlowNode.ApproveType = node.ApproveType
- knowledgeFlowNode.CurrVersion = t.CurrVersion
- userBytes, er := json.Marshal(node.Users)
- if er != nil {
- err = er
- msg = "保存审批流失败"
- return
- }
- knowledgeFlowNode.Users = string(userBytes)
- knowledgeFlowNode.CreatedTime = time.Now()
- knowledgeFlowNodeItems = append(knowledgeFlowNodeItems, knowledgeFlowNode)
- }
- err = t.Add(knowledgeFlowNodeItems)
- if err != nil {
- msg = "保存审批流失败"
- return
- }
- ok = true
- } else {
- resFlow, er := knowledge_approve.GetKnowledgeResourceApproveFlowById(flow.KnowledgeResourceApproveFlowId)
- if er != nil {
- msg = "保存审批流失败"
- err = er
- return
- }
- ok, err = CheckDeleteKnowledgeResourceApproveFlow(resFlow.KnowledgeResourceApproveFlowId)
- if err != nil {
- msg = "保存审批流失败"
- return
- }
- if !ok {
- msg = "保存审批流失败, 存在还未审批的报告"
- return
- }
- var updateCols []string
- if resFlow.FlowName != flow.FlowName {
- resFlow.FlowName = flow.FlowName
- updateCols = append(updateCols, "flow_name")
- }
- resFlow.CurrVersion += 1
- resFlow.ModifyTime = time.Now()
- updateCols = append(updateCols, "modify_time", "curr_version")
- knowledgeFlowNodeItems := make([]*knowledge_approve.KnowledgeResourceApproveNode, 0)
- for _, node := range flow.Nodes {
- knowledgeFlowNode := new(knowledge_approve.KnowledgeResourceApproveNode)
- knowledgeFlowNode.ApproveType = node.ApproveType
- knowledgeFlowNode.CurrVersion = resFlow.CurrVersion
- userBytes, er := json.Marshal(node.Users)
- if er != nil {
- err = er
- msg = "保存审批流失败"
- return
- }
- knowledgeFlowNode.Users = string(userBytes)
- knowledgeFlowNode.CreatedTime = time.Now()
- knowledgeFlowNodeItems = append(knowledgeFlowNodeItems, knowledgeFlowNode)
- }
- err = resFlow.Update(updateCols, knowledgeFlowNodeItems)
- if err != nil {
- msg = "保存审批流失败"
- return
- }
- ok = true
- }
- return
- }
- // GetKnowledgeResourceApproveFlowDetail 获取审批流详情
- func GetKnowledgeResourceApproveFlowDetail(flowId int) (detail *response.KnowledgeResourceApproveFlowDetailResp, msg string, err error) {
- flowInfo, err := knowledge_approve.GetKnowledgeResourceApproveFlowById(flowId)
- if err != nil {
- msg = "获取审批流详情失败"
- return
- }
- flowNodes, err := knowledge_approve.GetKnowledgeResourceApproveNodeByFlowIdAndVersionId(flowId, flowInfo.CurrVersion)
- if err != nil {
- msg = "获取审批流详情失败"
- return
- }
- detail, err = FormatFlowAndNodesItem2Detail(flowInfo, flowNodes)
- if err != nil {
- msg = "获取审批流详情失败"
- return
- }
- return
- }
- // DeleteKnowledgeResourceApproveFlow 删除审批流
- func DeleteKnowledgeResourceApproveFlow(flowId int) (ok bool, msg string, err error) {
- ok, err = CheckDeleteKnowledgeResourceApproveFlow(flowId)
- if err != nil {
- if utils.IsErrNoRow(err) {
- msg = "删除审批流失败, 审批流不存在"
- return
- }
- msg = "删除审批流失败"
- return
- }
- if !ok {
- msg = "删除审批流失败, 存在还未审批的报告"
- return
- }
- t := &knowledge_approve.KnowledgeResourceApproveFlow{
- KnowledgeResourceApproveFlowId: flowId,
- }
- err = t.Delete()
- if err != nil {
- msg = "删除审批流失败"
- return
- }
- ok = true
- return
- }
- // CheckDeleteKnowledgeResourceApproveFlow 检查是否可以删除审批流
- func CheckDeleteKnowledgeResourceApproveFlow(flowId int) (ok bool, err error) {
- flowInfo, err := knowledge_approve.GetKnowledgeResourceApproveFlowById(flowId)
- if err != nil {
- return
- }
- // 检查是否存在还未审批的知识资源
- approveList, err := knowledge_approve.GetKnowledgeResourceApproveByFlowIdAndVersionId(flowInfo.KnowledgeResourceApproveFlowId, flowInfo.CurrVersion)
- if err != nil {
- return
- }
- for _, v := range approveList {
- if v.State == KnowledgeResourceApproveStateApproving {
- return false, nil
- }
- }
- ok = true
- return
- }
- func toKnowledgeResourceApproveFlowItem(src []*knowledge_approve.KnowledgeResourceApproveFlow) (res []*response.KnowledgeResourceApproveFlowItem) {
- res = make([]*response.KnowledgeResourceApproveFlowItem, 0, len(src))
- for _, item := range src {
- res = append(res, &response.KnowledgeResourceApproveFlowItem{
- KnowledgeResourceApproveFlowId: item.KnowledgeResourceApproveFlowId,
- FlowName: item.FlowName,
- ClassifyId: item.ClassifyId,
- ClassifyName: item.ClassifyName,
- CurrVersion: item.CurrVersion,
- CreateTime: item.CreateTime.Format(utils.FormatDateTime),
- ModifyTime: item.ModifyTime.Format(utils.FormatDateTime),
- })
- }
- return
- }
- func FormatFlowAndNodesItem2Detail(flowItem *knowledge_approve.KnowledgeResourceApproveFlow, nodeItems []*knowledge_approve.KnowledgeResourceApproveNode) (detail *response.KnowledgeResourceApproveFlowDetailResp, err error) {
- if flowItem == nil {
- return
- }
- detail = new(response.KnowledgeResourceApproveFlowDetailResp)
- detail.KnowledgeResourceApproveFlowId = flowItem.KnowledgeResourceApproveFlowId
- detail.FlowName = flowItem.FlowName
- detail.ClassifyId = flowItem.ClassifyId
- detail.CreateTime = utils.TimeTransferString(utils.FormatDateTime, flowItem.CreateTime)
- detail.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, flowItem.ModifyTime)
- detail.Nodes = make([]*response.KnowledgeResourceApproveNodeItem, 0)
- for _, v := range nodeItems {
- t, e := FormatKnowledgeResourceApproveNode2Item(v)
- if e != nil {
- err = fmt.Errorf("format node err: %s", e.Error())
- return
- }
- detail.Nodes = append(detail.Nodes, t)
- }
- return
- }
- func ModifyKnowledgeResourceApproveFlowClassify(classifyId int, classifyName string) (err error) {
- flow, err := knowledge_approve.GetKnowledgeResourceApproveFlowByClassifyId(classifyId)
- if err != nil && !utils.IsErrNoRow(err) {
- return
- }
- if utils.IsErrNoRow(err) {
- err = nil
- return
- }
- if classifyName != "" && flow.ClassifyName != classifyName {
- err = knowledge_approve.UpdateFlowClassifyName(classifyId, classifyName)
- }
- return
- }
|