소스 검색

feature(项目审批):
1、项目审批后添加审批实例字段保存
2、创建项目审批拒绝删除项目

ZZH-wl 2 년 전
부모
커밋
487e41ab4f

+ 1 - 1
opms_admin/app/service/sys_user.go

@@ -472,7 +472,7 @@ func (s *UserService) UpdateUser(req *model.EditUserReq) (err error) {
 
 // ResetUserPwd 重置用户密码
 func (s *UserService) ResetUserPwd(req *model.SysResetPwdReq) error {
-	// todo:校验用户是否有修改权限
+	// 校验用户是否有修改权限
 	arr := garray.NewStrArrayFrom(s.CxtUser.Roles, true)
 	if !arr.Contains("SysAdmin") {
 		return myerrors.TipsError("权限不足")

+ 8 - 6
opms_libary/plugin/dingtalk/workflow/workflow.go

@@ -4,6 +4,7 @@ import (
 	"dashoo.cn/opms_libary/plugin/dingtalk/base"
 	"dashoo.cn/opms_libary/plugin/dingtalk/context"
 	"encoding/json"
+	"fmt"
 	"github.com/gogf/gf/frame/g"
 )
 
@@ -13,19 +14,19 @@ const (
 	RevokeProcessInstanceUrl = "/v1.0/workflow/processInstances/terminate"
 )
 
-//Workflow OA审批
+// Workflow OA审批
 type Workflow struct {
 	base.Base
 }
 
-//NewWorkflow init
+// NewWorkflow init
 func NewWorkflow(context *context.Context) *Workflow {
 	material := new(Workflow)
 	material.Context = context
 	return material
 }
 
-//QuerySchemaByProcessCode 获取表单 schema
+// QuerySchemaByProcessCode 获取表单 schema
 func (w *Workflow) QuerySchemaByProcessCode(processCode string) (response QuerySchemaByProcessCodeResponse, err error) {
 	resp, _ := w.HTTPGetWithAccessToken(QuerySchemasUrl, g.Map{"processCode": processCode})
 	if err != nil {
@@ -35,17 +36,18 @@ func (w *Workflow) QuerySchemaByProcessCode(processCode string) (response QueryS
 	return response, err
 }
 
-//StartProcessInstance 发起审批实例
+// StartProcessInstance 发起审批实例
 func (w *Workflow) StartProcessInstance(request *StartProcessInstanceRequest) (response StartProcessInstanceResponse, err error) {
 	resp, _ := w.HTTPPostJSONWithAccessToken(StartProcessInstanceUrl, request)
 	if err != nil {
 		return
 	}
+	fmt.Println("StartProcessInstanceResp:", string(resp))
 	err = json.Unmarshal(resp, &response)
 	return response, err
 }
 
-//QueryProcessInstanceDetail 获取单个审批实例详情
+// QueryProcessInstanceDetail 获取单个审批实例详情
 func (w *Workflow) QueryProcessInstanceDetail(instId string) (response QueryProcessInstanceResponse, err error) {
 	resp, err := w.HTTPGetWithAccessToken(StartProcessInstanceUrl, g.Map{"processInstanceId": instId})
 	if err != nil {
@@ -55,7 +57,7 @@ func (w *Workflow) QueryProcessInstanceDetail(instId string) (response QueryProc
 	return
 }
 
-//RevokeProcessInstance 撤销审批实例
+// RevokeProcessInstance 撤销审批实例
 func (w *Workflow) RevokeProcessInstance(instId, remark, userId string) (response RevokeProcessInstanceResponse, err error) {
 	resp, err := w.HTTPGetWithAccessToken(RevokeProcessInstanceUrl,
 		g.Map{"processInstanceId": instId,

+ 9 - 3
opms_parent/app/dao/proj/internal/proj_business.go

@@ -46,7 +46,9 @@ type projBusinessColumns struct {
 	NboPhase                  string // 项目阶段(暂不起用)
 	NboSource                 string // 项目来源
 	NboBudget                 string // 项目预算
+	ApproType                 string // 审批类型
 	ApproStatus               string // 审批状态(10待提交20审批中30审批通过40审批退回60审批拒绝)
+	ApproInstanceId           string // 审批实例ID
 	ContactId                 string // 关联联系人
 	ContactName               string // 联系人姓名
 	ContactPostion            string // 联系人岗位
@@ -93,8 +95,8 @@ type projBusinessColumns struct {
 	DealerSalesId             string // 关联经销商销售
 	DealerSalesName           string // 经销商销售人员
 	DealerSalesContact        string // 经销商销售电话/微信
-	Accendant                 string // 维护部门及人员
 	CustomerIntentionFactory  string // 客户倾向厂家
+	Accendant                 string // 维护部门及人员
 	ProjConversionTime        string // 项目转化时间
 	ProjConversionReason      string // 项目转化原因
 	Remark                    string // 备注
@@ -131,7 +133,9 @@ var (
 			NboPhase:                  "nbo_phase",
 			NboSource:                 "nbo_source",
 			NboBudget:                 "nbo_budget",
+			ApproType:                 "appro_type",
 			ApproStatus:               "appro_status",
+			ApproInstanceId:           "appro_instance_id",
 			ContactId:                 "contact_id",
 			ContactName:               "contact_name",
 			ContactPostion:            "contact_postion",
@@ -178,8 +182,8 @@ var (
 			DealerSalesId:             "dealer_sales_id",
 			DealerSalesName:           "dealer_sales_name",
 			DealerSalesContact:        "dealer_sales_contact",
-			Accendant:                 "accendant",
 			CustomerIntentionFactory:  "customer_intention_factory",
+			Accendant:                 "accendant",
 			ProjConversionTime:        "proj_conversion_time",
 			ProjConversionReason:      "proj_conversion_reason",
 			Remark:                    "remark",
@@ -218,7 +222,9 @@ func NewProjBusinessDao(tenant string) ProjBusinessDao {
 			NboPhase:                  "nbo_phase",
 			NboSource:                 "nbo_source",
 			NboBudget:                 "nbo_budget",
+			ApproType:                 "appro_type",
 			ApproStatus:               "appro_status",
+			ApproInstanceId:           "appro_instance_id",
 			ContactId:                 "contact_id",
 			ContactName:               "contact_name",
 			ContactPostion:            "contact_postion",
@@ -265,8 +271,8 @@ func NewProjBusinessDao(tenant string) ProjBusinessDao {
 			DealerSalesId:             "dealer_sales_id",
 			DealerSalesName:           "dealer_sales_name",
 			DealerSalesContact:        "dealer_sales_contact",
-			Accendant:                 "accendant",
 			CustomerIntentionFactory:  "customer_intention_factory",
+			Accendant:                 "accendant",
 			ProjConversionTime:        "proj_conversion_time",
 			ProjConversionReason:      "proj_conversion_reason",
 			Remark:                    "remark",

+ 1 - 1
opms_parent/app/handler/contract/ctr_contract.go

@@ -108,7 +108,7 @@ func (c *CtrContract) Commit(ctx context.Context, req *model.CtrContractCommitRe
 	if err != nil {
 		return err
 	}
-	_, err = s.Commit(ctx, req)
+	err = s.Commit(ctx, req)
 	if err != nil {
 		return err
 	}

+ 3 - 1
opms_parent/app/model/proj/internal/proj_business.go

@@ -27,7 +27,9 @@ type ProjBusiness struct {
 	NboPhase                  string      `orm:"nbo_phase"                   json:"nboPhase"`                  // 项目阶段(暂不起用)
 	NboSource                 string      `orm:"nbo_source"                  json:"nboSource"`                 // 项目来源
 	NboBudget                 float64     `orm:"nbo_budget"                  json:"nboBudget"`                 // 项目预算
+	ApproType                 string      `orm:"appro_type"                  json:"approType"`                 // 审批类型
 	ApproStatus               string      `orm:"appro_status"                json:"approStatus"`               // 审批状态(10待提交20审批中30审批通过40审批退回60审批拒绝)
+	ApproInstanceId           string      `orm:"appro_instance_id"           json:"approInstanceId"`           // 审批实例ID
 	ContactId                 int         `orm:"contact_id"                  json:"contactId"`                 // 关联联系人
 	ContactName               string      `orm:"contact_name"                json:"contactName"`               // 联系人姓名
 	ContactPostion            string      `orm:"contact_postion"             json:"contactPostion"`            // 联系人岗位
@@ -74,8 +76,8 @@ type ProjBusiness struct {
 	DealerSalesId             int         `orm:"dealer_sales_id"             json:"dealerSalesId"`             // 关联经销商销售
 	DealerSalesName           string      `orm:"dealer_sales_name"           json:"dealerSalesName"`           // 经销商销售人员
 	DealerSalesContact        string      `orm:"dealer_sales_contact"        json:"dealerSalesContact"`        // 经销商销售电话/微信
-	Accendant                 string      `orm:"accendant"                   json:"accendant"`                 // 维护部门及人员
 	CustomerIntentionFactory  string      `orm:"customer_intention_factory"  json:"customerIntentionFactory"`  // 客户倾向厂家
+	Accendant                 string      `orm:"accendant"                   json:"accendant"`                 // 维护部门及人员
 	ProjConversionTime        *gtime.Time `orm:"proj_conversion_time"        json:"projConversionTime"`        // 项目转化时间
 	ProjConversionReason      string      `orm:"proj_conversion_reason"      json:"projConversionReason"`      // 项目转化原因
 	Remark                    string      `orm:"remark"                      json:"remark"`                    // 备注

+ 1 - 0
opms_parent/app/model/proj/proj_business.go

@@ -17,6 +17,7 @@ type ProjBusiness internal.ProjBusiness
 
 type ProjBusinessSearchReq struct {
 	NboName         string `json:"nboName"`         // 项目名称
+	CustId          int    `json:"custId"`          // 客户名称
 	CustName        string `json:"custName"`        // 客户名称
 	SaleName        string `json:"saleName"`        // 销售姓名
 	NboType         string `json:"nboType"`         // 项目类别(A类B类C类)

+ 15 - 15
opms_parent/app/service/contract/ctr_contract.go

@@ -482,43 +482,43 @@ func (s CtrContractService) Add(ctx context.Context, req *model.CtrContractAddRe
 
 var ContractApplyProcessCode = "PROC-7057E20A-2066-4644-9B35-9331E4DA912C" // 创建合同
 
-func (s CtrContractService) Commit(ctx context.Context, req *model.CtrContractCommitReq) (int64, error) {
+func (s CtrContractService) Commit(ctx context.Context, req *model.CtrContractCommitReq) error {
 	validErr := gvalid.CheckStruct(ctx, req, nil)
 	if validErr != nil {
-		return 0, myerrors.TipsError(validErr.Current().Error())
+		return myerrors.TipsError(validErr.Current().Error())
 	}
 	if !(req.ContractModel == "大数模板" || req.ContractModel == "客户模板") {
-		return 0, myerrors.TipsError("合同模板不合法")
+		return myerrors.TipsError("合同模板不合法")
 	}
 	if !(req.Terms == "接纳全部条款" || req.Terms == "不接纳全部条款") {
-		return 0, myerrors.TipsError("条款情况不合法")
+		return myerrors.TipsError("条款情况不合法")
 	}
 	if req.PayTerms == "" {
-		return 0, myerrors.TipsError("付款条件不能为空")
+		return myerrors.TipsError("付款条件不能为空")
 	}
 	if len(req.File) == 0 {
-		return 0, myerrors.TipsError("附件不能为空")
+		return myerrors.TipsError("附件不能为空")
 	}
 
 	ent, err := s.Dao.Where("id = ?", req.Id).One()
 	if err != nil {
-		return 0, err
+		return err
 	}
 	if ent == nil {
-		return 0, myerrors.TipsError(fmt.Sprintf("合同不存在: %d", req.Id))
+		return myerrors.TipsError(fmt.Sprintf("合同不存在: %d", req.Id))
 	}
 
 	fileinfoByte, err := json.Marshal(req.File)
 	if err != nil {
-		return 0, err
+		return err
 	}
 
 	workflowSrv, err := workflowService.NewFlowService(ctx)
 	if err != nil {
-		return 0, err
+		return err
 	}
 	bizCode := strconv.Itoa(ent.Id)
-	workflowId, err := workflowSrv.StartProcessInstance(bizCode, "30", "", &workflow.StartProcessInstanceRequest{
+	_, err = workflowSrv.StartProcessInstance(bizCode, "30", "", &workflow.StartProcessInstanceRequest{
 		ProcessCode: &ContractApplyProcessCode,
 		FormComponentValues: []*workflow.StartProcessInstanceRequestFormComponentValues{
 			{
@@ -560,13 +560,13 @@ func (s CtrContractService) Commit(ctx context.Context, req *model.CtrContractCo
 		},
 	})
 	if err != nil {
-		return 0, err
+		return err
 	}
 
 	_, err = s.Dao.Where("id = ?", ent.Id).Data(map[string]interface{}{
 		"appro_status": 20,
 	}).Update()
-	return workflowId, err
+	return err
 }
 
 // var spaceId = "21042518430"
@@ -606,7 +606,7 @@ func (s CtrContractService) CommitWithFile(ctx context.Context, formData *multip
 		return fmt.Errorf("钉钉上传文件异常 %s", err.Error())
 	}
 
-	_, err = s.Commit(ctx, &model.CtrContractCommitReq{
+	err = s.Commit(ctx, &model.CtrContractCommitReq{
 		Id:            contractId,
 		ContractModel: formData.Value["contractModel"],
 		Terms:         formData.Value["terms"],
@@ -678,7 +678,7 @@ func (s CtrContractService) CommitWithFileUrl(ctx context.Context, req *model.Ct
 		return err
 	}
 
-	_, err = s.Commit(ctx, &model.CtrContractCommitReq{
+	err = s.Commit(ctx, &model.CtrContractCommitReq{
 		Id:            req.Id,
 		ContractModel: req.ContractModel,
 		Terms:         req.Terms,

+ 67 - 30
opms_parent/app/service/proj/business.go

@@ -57,6 +57,9 @@ func (p *businessService) GetList(req *model.ProjBusinessSearchReq) (total int,
 	if req.NboName != "" {
 		db = db.WhereLike("proj."+p.Dao.C.NboName, "%"+req.NboName+"%")
 	}
+	if req.CustId != 0 { // 客户-项目记录 查看已删除的项目记录
+		db = db.Where("proj."+p.Dao.C.CustId, req.CustId).Unscoped()
+	}
 	if req.CustName != "" {
 		db = db.WhereLike("proj."+p.Dao.C.CustName, "%"+req.CustName+"%")
 	}
@@ -267,10 +270,11 @@ func (p *businessService) Create(req *model.AddProjBusinessReq) (err error) {
 		_, err = p.CreateProjBusinessDynamics(tx, dynamics, business)
 		// 审批流
 		workflowSrv, _ := workflowService.NewFlowService(p.Ctx)
-		// OMS项目转移 审批
+		// OMS项目创建 审批
 		bizCode := business.NboCode + ":" + gconv.String(lastId)
-		_, err = workflowSrv.StartProcessInstance(bizCode, workflowModel.ProjectCreate, "", &workflow.StartProcessInstanceRequest{
-			ProcessCode: &BusinessCreateRequestProcessCode,
+		business.ApproType = BusinessCreateRequestProcessCode
+		instanceId, err := workflowSrv.StartProcessInstance(bizCode, workflowModel.ProjectCreate, "", &workflow.StartProcessInstanceRequest{
+			ProcessCode: &business.ApproType,
 			FormComponentValues: []*workflow.StartProcessInstanceRequestFormComponentValues{
 				{
 					Id:    utils.String("TextField-K2AD4O5B"),
@@ -333,7 +337,12 @@ func (p *businessService) Create(req *model.AddProjBusinessReq) (err error) {
 			g.Log().Error(err)
 			return err
 		}
-		return err
+		// 更新项目审批信息
+		_, err = p.Dao.TX(tx).Data(g.Map{p.Dao.C.ApproType: business.ApproType, p.Dao.C.ApproInstanceId: instanceId}).Update()
+		if err != nil {
+			return err
+		}
+		return nil
 	})
 
 	return
@@ -351,7 +360,9 @@ func (p *businessService) BusinessCreatedNotify(flow *workflowModel.PlatWorkflow
 		data[p.Dao.C.ApproStatus] = ApprovalReturn
 	}
 	if msg.ProcessType == "finish" && msg.Result == "refuse" {
+		// 创建项目 审批拒绝后删除项目
 		data[p.Dao.C.ApproStatus] = ApprovalRejection
+		data[p.Dao.C.DeletedTime] = gtime.Now()
 	}
 	if msg.ProcessType == "finish" && msg.Result == "agree" {
 		data[p.Dao.C.ApproStatus] = ApprovalOK
@@ -591,8 +602,9 @@ func (p *businessService) BusinessTransfer(req *model.BusinessTransferReq) error
 
 		// OMS项目转移 审批
 		bizCode := business.NboCode + ":" + strconv.Itoa(business.Id)
-		_, err = workflowSrv.StartProcessInstance(bizCode, workflowModel.ProjectTransfer, "", &workflow.StartProcessInstanceRequest{
-			ProcessCode: &BusinessTransferRequestProcessCode,
+		business.ApproType = BusinessTransferRequestProcessCode
+		instanceId, err := workflowSrv.StartProcessInstance(bizCode, workflowModel.ProjectTransfer, "", &workflow.StartProcessInstanceRequest{
+			ProcessCode: &business.ApproType,
 			FormComponentValues: []*workflow.StartProcessInstanceRequestFormComponentValues{
 				{
 					Id:    utils.String("TextField-K2AD4O5B"),
@@ -650,6 +662,11 @@ func (p *businessService) BusinessTransfer(req *model.BusinessTransferReq) error
 			g.Log().Error(err)
 			return err
 		}
+		// 更新项目审批信息
+		_, err = p.Dao.TX(tx).Data(g.Map{p.Dao.C.ApproType: business.ApproType, p.Dao.C.ApproInstanceId: instanceId}).Update()
+		if err != nil {
+			return err
+		}
 		return nil
 	})
 	return err
@@ -797,8 +814,16 @@ func (p *businessService) BusinessUpgrade(req *model.BusinessUpgradeReq, fileMap
 		if err != nil {
 			return err
 		}
-		err = p.BusUpgradeDingEvent(business, req, fileMap)
-		return err
+		instanceId, err := p.BusUpgradeDingEvent(business, req, fileMap)
+		if err != nil {
+			return err
+		}
+		// 更新项目审批信息
+		_, err = p.Dao.TX(tx).Data(g.Map{p.Dao.C.ApproType: business.ApproType, p.Dao.C.ApproInstanceId: instanceId}).Update()
+		if err != nil {
+			return err
+		}
+		return nil
 	})
 	if err != nil {
 		return err
@@ -828,15 +853,14 @@ func (p *businessService) getBusDingUpgradeType(dbNboType, reqNboType string) st
 }
 
 // BusUpgradeDingEvent 项目升级钉钉审批流调用
-func (p *businessService) BusUpgradeDingEvent(business *model.ProjBusiness, req *model.BusinessUpgradeReq, fileMap map[string]*multipart.FileHeader) error {
-	var err error
+func (p *businessService) BusUpgradeDingEvent(business *model.ProjBusiness, req *model.BusinessUpgradeReq, fileMap map[string]*multipart.FileHeader) (instanceId string, err error) {
 	upgradeType := p.getBusDingUpgradeType(business.NboType, req.NboType)
 	if upgradeType == "" {
-		return myerrors.TipsError("错误的升级类型")
+		return "", myerrors.TipsError("错误的升级类型")
 	}
 	productLineMap, err := service.GetDictDataTreeByType(p.Ctx, "sys_product_line")
 	if err != nil {
-		return err
+		return "", err
 	}
 	productLine := gconv.String(productLineMap.Get(business.ProductLine))
 
@@ -878,8 +902,9 @@ func (p *businessService) BusUpgradeDingEvent(business *model.ProjBusiness, req
 	bizCode := business.NboCode + ":" + strconv.Itoa(business.Id)
 	switch req.NboType {
 	case StatusC:
+		business.ApproType = BusinessUpgradeCRequestProcessCode
 		dingReq = &workflow.StartProcessInstanceRequest{
-			ProcessCode: &BusinessUpgradeCRequestProcessCode,
+			ProcessCode: &business.ApproType,
 			FormComponentValues: []*workflow.StartProcessInstanceRequestFormComponentValues{
 				{
 					Id:    utils.String("TextField-K2AD4O5B"),
@@ -926,17 +951,17 @@ func (p *businessService) BusUpgradeDingEvent(business *model.ProjBusiness, req
 				// 报价单
 				if k == "quotationFile" {
 					if quotationFile, err = p.txCreateBusinessDingTalkFile(business.Id, upgradeType, k, files); err != nil {
-						return err
+						return "", err
 					}
 				}
 			}
 		}
 		if len(quotationFile) == 0 {
-			return myerrors.TipsError("请上传报价单文件")
+			return "", myerrors.TipsError("请上传报价单文件")
 		}
-		processCode := &BusinessUpgradeBRequestProcessCode
+		business.ApproType = BusinessUpgradeBRequestProcessCode
 		dingReq = &workflow.StartProcessInstanceRequest{
-			ProcessCode: processCode,
+			ProcessCode: &business.ApproType,
 			FormComponentValues: []*workflow.StartProcessInstanceRequestFormComponentValues{
 				{
 					Id:    utils.String("TextField-K2AD4O5B"),
@@ -1014,13 +1039,13 @@ func (p *businessService) BusUpgradeDingEvent(business *model.ProjBusiness, req
 				// 报价单
 				if k == "quotationFile" {
 					if quotationFile, err = p.txCreateBusinessDingTalkFile(business.Id, upgradeType, k, files); err != nil {
-						return err
+						return "", err
 					}
 				}
 				// 大数参数文件
 				if k == "dashooParamFile" {
 					if dashooParamFile, err = p.txCreateBusinessDingTalkFile(business.Id, upgradeType, k, files); err != nil {
-						return err
+						return "", err
 					}
 				}
 			}
@@ -1036,11 +1061,11 @@ func (p *businessService) BusUpgradeDingEvent(business *model.ProjBusiness, req
 			})
 		}
 		if len(quotationFile) == 0 {
-			return myerrors.TipsError("请上传报价单文件")
+			return "", myerrors.TipsError("请上传报价单文件")
 		}
-		processCode := &BusinessUpgradeARequestProcessCode
+		business.ApproType = BusinessUpgradeARequestProcessCode
 		dingReq = &workflow.StartProcessInstanceRequest{
-			ProcessCode: processCode,
+			ProcessCode: &business.ApproType,
 			FormComponentValues: []*workflow.StartProcessInstanceRequestFormComponentValues{
 				{
 					Id:    utils.String("TextField-K2AD4O5B"),
@@ -1141,14 +1166,14 @@ func (p *businessService) BusUpgradeDingEvent(business *model.ProjBusiness, req
 		}
 
 	default:
-		return nil
+		return "", nil
 	}
-	_, err = workflowSrv.StartProcessInstance(bizCode, workflowModel.ProjectUpGrade, "", dingReq)
+	instanceId, err = workflowSrv.StartProcessInstance(bizCode, workflowModel.ProjectUpGrade, "", dingReq)
 	if err != nil {
 		g.Log().Error(err)
-		return err
+		return "", err
 	}
-	return nil
+	return instanceId, nil
 }
 
 // 项目上传文件至钉钉
@@ -1338,8 +1363,9 @@ func (p *businessService) BusinessDowngrade(req *model.BusinessDowngradeReq) err
 		}
 		// OMS项目降级 审批
 		bizCode := business.NboCode + ":" + strconv.Itoa(business.Id)
-		_, err = workflowSrv.StartProcessInstance(bizCode, workflowModel.ProjectDownGrade, "", &workflow.StartProcessInstanceRequest{
-			ProcessCode: &BusinessDowngradeRequestProcessCode,
+		business.ApproType = BusinessDowngradeRequestProcessCode
+		instanceId, err := workflowSrv.StartProcessInstance(bizCode, workflowModel.ProjectDownGrade, "", &workflow.StartProcessInstanceRequest{
+			ProcessCode: &business.ApproType,
 			FormComponentValues: []*workflow.StartProcessInstanceRequestFormComponentValues{
 				{
 					Id:    utils.String("TextField-K2AD4O5B"),
@@ -1397,6 +1423,11 @@ func (p *businessService) BusinessDowngrade(req *model.BusinessDowngradeReq) err
 			g.Log().Error(err)
 			return err
 		}
+		// 更新项目审批信息
+		_, err = p.Dao.TX(tx).Data(g.Map{p.Dao.C.ApproType: business.ApproType, p.Dao.C.ApproInstanceId: instanceId}).Update()
+		if err != nil {
+			return err
+		}
 		return nil
 	})
 	return err
@@ -1585,8 +1616,9 @@ func (p *businessService) ConvertToReserve(req *model.BusinessToReserveReq) erro
 
 		// OMS项目转储备 审批
 		bizCode := business.NboCode + ":" + strconv.Itoa(business.Id)
-		_, err = workflowSrv.StartProcessInstance(bizCode, workflowModel.ProjectToReserve, "", &workflow.StartProcessInstanceRequest{
-			ProcessCode: &ConvertToReserveRequestProcessCode,
+		business.ApproType = ConvertToReserveRequestProcessCode
+		instanceId, err := workflowSrv.StartProcessInstance(bizCode, workflowModel.ProjectToReserve, "", &workflow.StartProcessInstanceRequest{
+			ProcessCode: &business.ApproType,
 			FormComponentValues: []*workflow.StartProcessInstanceRequestFormComponentValues{
 				{
 					Id:    utils.String("TextField-K2AD4O5B"),
@@ -1629,6 +1661,11 @@ func (p *businessService) ConvertToReserve(req *model.BusinessToReserveReq) erro
 			g.Log().Error(err)
 			return err
 		}
+		// 更新项目审批信息
+		_, err = p.Dao.TX(tx).Data(g.Map{p.Dao.C.ApproType: business.ApproType, p.Dao.C.ApproInstanceId: instanceId}).Update()
+		if err != nil {
+			return err
+		}
 		return nil
 	})
 

+ 1 - 2
opms_parent/app/service/work/deliver_order.go

@@ -336,11 +336,10 @@ func (s DeliverOrderService) Add(ctx context.Context, req *work.DeliverOrderAddR
 			return err
 		}
 
-		workflowId, err := workflowSrv.StartProcessInstance(bizCode, workflowModel.DeliverOrderCreate, "", &workflow.StartProcessInstanceRequest{
+		_, err = workflowSrv.StartProcessInstance(bizCode, workflowModel.DeliverOrderCreate, "", &workflow.StartProcessInstanceRequest{
 			ProcessCode:         &req.OrderTypeCode,
 			FormComponentValues: formComponentValues,
 		})
-		g.Log().Info("工单审批流ID ", workflowId)
 		if err != nil {
 			g.Log().Error(err)
 			return err

+ 1 - 2
opms_parent/app/service/work/work_order.go

@@ -400,11 +400,10 @@ func (s *OrderService) CreateWorkOrder(ctx context.Context, req *model.WorkOrder
 		workflowSrv, _ := workflowService.NewFlowService(s.Ctx)
 		bizCode := gconv.String(lastId) + ":" + req.OrderTypeCode
 
-		workflowId, err := workflowSrv.StartProcessInstance(bizCode, workflowModel.WorkOrderCreate, "", &workflow.StartProcessInstanceRequest{
+		_, err = workflowSrv.StartProcessInstance(bizCode, workflowModel.WorkOrderCreate, "", &workflow.StartProcessInstanceRequest{
 			ProcessCode:         &req.OrderTypeCode,
 			FormComponentValues: formComponentValues,
 		})
-		g.Log().Info("工单审批流ID ", workflowId)
 		if err != nil {
 			g.Log().Error(err)
 			return err

+ 4 - 4
opms_parent/app/service/workflow/work_flow.go

@@ -62,7 +62,7 @@ func (s *workflowService) GetProcessInstanceDetail(instId string) (*workflow.Que
 // ProcessCode = utils.String("每种审批对应固定的code")
 // bizType:业务类型(10领用20项目创建30合同创建
 // 详情参照文档:https://open.dingtalk.com/document/orgapp/create-an-approval-instance
-func (s *workflowService) StartProcessInstance(bizCode, bizType, remark string, flow *workflow.StartProcessInstanceRequest) (insertId int64, err error) {
+func (s *workflowService) StartProcessInstance(bizCode, bizType, remark string, flow *workflow.StartProcessInstanceRequest) (instanceId string, err error) {
 	// 参数调整
 	if flow.OriginatorUserId == nil {
 		flow.OriginatorUserId = utils.String(s.GetCxtUserDingtalkUid())
@@ -76,10 +76,10 @@ func (s *workflowService) StartProcessInstance(bizCode, bizType, remark string,
 	w := client.GetWorkflow()
 	resp, err := w.StartProcessInstance(flow)
 	if err != nil {
-		return 0, err
+		return "", err
 	}
-
-	return s.saveWorkflowInstance(bizCode, bizType, remark, resp.InstanceId)
+	_, err = s.saveWorkflowInstance(bizCode, bizType, remark, resp.InstanceId)
+	return resp.InstanceId, err
 }
 
 // RevokeProcessInstance 撤销审批实例(钉钉接口)