Browse Source

feature(招标): 闭环审批对接钉钉审批流

lk 2 years ago
parent
commit
83c97f1bfe

+ 5 - 2
opms_parent/app/model/cust/cust_customer_bid_record.go

@@ -57,6 +57,9 @@ type CustCustomerBidRecordUpdateReq struct {
 }
 
 type CloseLoopReq struct {
-	Id           int    `json:"id" v:"required#请输入Id"`
-	CloseLoopMsg string `json:"closeLoopMsg"`
+	Id              int    `json:"id" v:"required#请输入Id"`
+	CloseMethod     string `json:"closeMethod"`
+	BusinessName    string `json:"businessName"`
+	DistributorName string `json:"distributorName"`
+	CloseReason     string `json:"closeReason"`
 }

+ 63 - 19
opms_parent/app/service/cust/cust_customer_bid_record.go

@@ -6,19 +6,23 @@ import (
 	model "dashoo.cn/micro/app/model/cust"
 	workflowModel "dashoo.cn/micro/app/model/workflow"
 	"dashoo.cn/micro/app/service"
+	workflowService "dashoo.cn/micro/app/service/workflow"
 	"dashoo.cn/opms_libary/micro_srv"
 	"dashoo.cn/opms_libary/myerrors"
 	"dashoo.cn/opms_libary/plugin/dingtalk/message"
+	"dashoo.cn/opms_libary/plugin/dingtalk/workflow"
 	"dashoo.cn/opms_libary/request"
+	"dashoo.cn/opms_libary/utils"
 	"database/sql"
 	"fmt"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/os/gtime"
 	"github.com/gogf/gf/util/gvalid"
+	"strconv"
 )
 
-var BidCloseLoopCode = "" // 客户招标信息闭环审批
+var BidCloseLoopCode = "PROC-35FEF564-21F8-41CA-A38F-DC1E61C21C71" // 客户招标信息闭环审批
 
 type CustCustomerBidRecordService struct {
 	Dao         *dao.CustCustomerBidRecordDao
@@ -266,31 +270,71 @@ func (s CustCustomerBidRecordService) CloseLoop(ctx context.Context, req *model.
 	if bid.Status != "10" && bid.Status != "40" {
 		return myerrors.TipsError("该招标信息不可闭环操作")
 	}
+	// 客户信息
+	cus, err := s.CustomerDao.Where(fmt.Sprintf("id='%v'", bid.CustId)).One()
+	if err != nil {
+		return err
+	}
+	// 产品线名称
+	lineName := ""
+	line, err := s.Dao.DB.Model("sys_dict_data").Where(fmt.Sprintf("dict_value='%v' AND dict_type='sys_product_line'", bid.ProductLine)).One()
+	if err != nil && err != sql.ErrNoRows {
+		return err
+	}
+	if line != nil {
+		lineName = line["dict_label"].String()
+	}
 
 	err = s.Dao.Transaction(context.TODO(), func(ctx1 context.Context, tx *gdb.TX) error {
 		// 改为待审批状态
-		_, err = s.Dao.Update(fmt.Sprintf("status='20',close_loop_msg='%v'", req.CloseLoopMsg), fmt.Sprintf("id='%v'", req.Id))
+		_, err := s.Dao.Update(fmt.Sprintf("status='20',close_loop_msg='%v'", req.CloseReason), fmt.Sprintf("id='%v'", req.Id))
 		if err != nil {
 			return err
 		}
 		// 调用钉钉审批
-		//// 审批流
-		//workflowSrv, _ := workflowService.NewFlowService(ctx)
-		//bizCode := strconv.Itoa(req.Id)
-		//_, err = workflowSrv.StartProcessInstance(bizCode, workflowModel.BidCloseLoop, "", &workflow.StartProcessInstanceRequest{
-		//	ProcessCode: &BidCloseLoopCode,
-		//	FormComponentValues: []*workflow.StartProcessInstanceRequestFormComponentValues{
-		//		{
-		//			Id:    utils.String("TextField-K2AD4O5B"),
-		//			Name:  utils.String("闭环信息"),
-		//			Value: utils.String(req.CloseLoopMsg),
-		//		},
-		//	},
-		//})
-		//if err != nil {
-		//	g.Log().Error(err)
-		//	return err
-		//}
+		// 审批流
+		name := ""
+		if req.CloseMethod == "已创建项目" {
+			name = req.BusinessName
+		} else if req.CloseMethod == "已创建经销商" {
+			name = req.DistributorName
+		}
+		workflowSrv, _ := workflowService.NewFlowService(ctx)
+		bizCode := strconv.Itoa(req.Id)
+		_, err = workflowSrv.StartProcessInstance(bizCode, workflowModel.BidCloseLoop, "", &workflow.StartProcessInstanceRequest{
+			ProcessCode: &BidCloseLoopCode,
+			FormComponentValues: []*workflow.StartProcessInstanceRequestFormComponentValues{
+				{
+					Id:    utils.String("TextField-K2AD4O5B"),
+					Name:  utils.String("所属销售"),
+					Value: utils.String(cus.SalesName),
+				},
+				{
+					Id:    utils.String("DDSelectField_1RVSHN0116740"),
+					Name:  utils.String("产品线"),
+					Value: utils.String(lineName),
+				},
+				{
+					Id:    utils.String("DDSelectField_21X20CB9B20W0"),
+					Name:  utils.String("闭环方式"),
+					Value: utils.String(req.CloseMethod),
+				},
+				{
+					Id:    utils.String("TextField_1GD012PXFMGW0"),
+					Name:  utils.String("名称"),
+					Value: utils.String(name),
+				},
+				{
+					Id:    utils.String("TextareaField_FXZRRAQB7CW0"),
+					Name:  utils.String("申请原因"),
+					Value: utils.String(req.CloseReason),
+				},
+			},
+		})
+		if err != nil {
+			g.Log().Error(err)
+			return err
+		}
 
 		return err
 	})