Bläddra i källkod

Merge remote-tracking branch 'origin/develop' into develop

yanglingling 1 år sedan
förälder
incheckning
4dfa89294c

+ 3 - 0
opms_parent/app/dao/work/internal/work_order.go

@@ -83,6 +83,7 @@ type workOrderColumns struct {
 	FeedbackSaleOrder      string // 销售反馈-工单反馈(售后运维工单)
 	SatisfactionRating     string // 满意度评分(1-5)(经销商支持、技术文件支持、售前讲解支持)
 	PromotionProposal      string // 提升建议(经销商支持、技术文件支持、售前讲解支持)
+	TrainSaleApplyId       string // 经销商培训OMS工单申请(销售申请)Id
 }
 
 var (
@@ -145,6 +146,7 @@ var (
 			FeedbackSaleOrder:      "feedback_sale_order",
 			SatisfactionRating:     "satisfaction_rating",
 			PromotionProposal:      "promotion_proposal",
+			TrainSaleApplyId:       "train_sale_apply_id",
 		},
 	}
 )
@@ -209,6 +211,7 @@ func NewWorkOrderDao(tenant string) WorkOrderDao {
 			FeedbackSaleOrder:      "feedback_sale_order",
 			SatisfactionRating:     "satisfaction_rating",
 			PromotionProposal:      "promotion_proposal",
+			TrainSaleApplyId:       "train_sale_apply_id",
 		},
 	}
 	return dao

+ 16 - 0
opms_parent/app/handler/work/work_order.go

@@ -106,6 +106,22 @@ func (w *WorkOrderHandler) CreateWorkOrder(ctx context.Context, req *model.WorkO
 	return nil
 }
 
+// Swagger:WorkOrder 工单 创建工单(销售申请确认后生成)
+func (w *WorkOrderHandler) CreateWorkOrderByTrainSaleApply(ctx context.Context, req *model.CreateWorkOrderByTrainSaleApplyReq, rsp *comm_def.CommonMsg) error {
+	orderService, err := workSrv.NewOrderService(ctx)
+	if err != nil {
+		return err
+	}
+	if err := gvalid.CheckStruct(ctx, req, nil); err != nil {
+		return err
+	}
+	err = orderService.CreateWorkOrderByTrainSaleApply(ctx, req, nil)
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
 // Swagger:WorkOrder 工单 上传文件
 func (w *WorkOrderHandler) UploadDingtalk(ctx context.Context, req *model.UploadDingtalkReq, rsp *comm_def.CommonMsg) error {
 	orderService, err := workSrv.NewOrderService(ctx)

+ 10 - 9
opms_parent/app/model/cust/product_consult_record.go

@@ -23,19 +23,20 @@ type ProductConsultRecordListReq struct {
 }
 
 type ProductConsultRecordAddReq struct {
-	Code         string      `json:"code"`                              // 序号
+	Code         string      `json:"code"`                                     // 序号
 	ConsultTime  *gtime.Time `json:"consultTime"  v:"required#请输入日期时间"` // 日期时间
-	ProvinceId   int         `json:"provinceId"`                        // 所在省ID
-	Province     string      `json:"province"`                          // 所在省
-	CityId       int         `json:"cityId"`                            // 所在市ID
-	City         string      `json:"city"`                              // 所在市
+	ProvinceId   int         `json:"provinceId"`                               // 所在省ID
+	Province     string      `json:"province"`                                 // 所在省
+	CityId       int         `json:"cityId"`                                   // 所在市ID
+	City         string      `json:"city"`                                     // 所在市
 	Unit         string      `json:"unit" v:"required#请输入单位名称"`         // 单位名称
-	Name         string      `json:"name" v:"required#请输入联系人"`          // 联系人
+	Name         string      `json:"name" v:"required#请输入联系人"`           // 联系人
 	Contact      string      `json:"contact" v:"required#请输入联系方式"`      // 联系方式
 	Product      string      `json:"product" v:"required#请输入咨询产品"`      // 咨询产品
-	InchargeId   int         `json:"inchargeId" v:"required#请输入对接人"`    // 对接人ID
-	InchargeName string      `json:"inchargeName"`                      // 对接人(销售工程师)
-	Remark       string      `json:"remark"`                            // 备注
+	InchargeId   int         `json:"inchargeId" v:"required#请输入对接人"`     // 对接人ID
+	InchargeName string      `json:"inchargeName"`                             // 对接人(销售工程师)
+	Content      string      `json:"content"`                                  // 内容
+	Remark       string      `json:"remark"`                                   // 备注
 }
 
 type ProductConsultRecordUpdateReq struct {

+ 1 - 0
opms_parent/app/model/work/internal/work_order.go

@@ -63,4 +63,5 @@ type WorkOrder struct {
 	FeedbackSaleOrder      string      `orm:"feedback_sale_order"      json:"feedbackSaleOrder"`      // 销售反馈-工单反馈(售后运维工单)
 	SatisfactionRating     string      `orm:"satisfaction_rating"      json:"satisfactionRating"`     // 满意度评分(1-5)(经销商支持、技术文件支持、售前讲解支持)
 	PromotionProposal      string      `orm:"promotion_proposal"       json:"promotionProposal"`      // 提升建议(经销商支持、技术文件支持、售前讲解支持)
+	TrainSaleApplyId       int         `orm:"train_sale_apply_id"      json:"trainSaleApplyId"`       // 经销商培训OMS工单申请(销售申请)Id
 }

+ 53 - 49
opms_parent/app/model/work/work_order.go

@@ -37,31 +37,35 @@ type WorkOrderSearchReq struct {
 	request.PageReq
 }
 type WorkOrderReq struct {
-	NboId          int                    `json:"nboId"`                                              // 主键
-	NboCode        string                 `json:"nboCode"`                                            // 项目编码
-	NboName        string                 `json:"nboName"`                                            // 项目名称
-	CustId         int                    `json:"custId"`                                             // 关联客户
-	CustName       string                 `json:"custName"`                                           // 客户名称
-	Name           string                 `json:"name"             v:"required#工单名称不能为空"`     // 工单名称
-	OrderTypeId    int                    `json:"orderTypeId"      v:"min:1#工单类型不能为空"`        // 工单类型
+	NboId          int                    `json:"nboId"`                                    // 主键
+	NboCode        string                 `json:"nboCode"`                                  // 项目编码
+	NboName        string                 `json:"nboName"`                                  // 项目名称
+	CustId         int                    `json:"custId"`                                   // 关联客户
+	CustName       string                 `json:"custName"`                                 // 客户名称
+	Name           string                 `json:"name"             v:"required#工单名称不能为空"`   // 工单名称
+	OrderTypeId    int                    `json:"orderTypeId"      v:"min:1#工单类型不能为空"`      // 工单类型
 	OrderTypeName  string                 `json:"orderTypeName"    v:"required#工单类型名称不能为空"` // 工单类型名称
 	OrderTypeCode  string                 `json:"orderTypeCode"    v:"required#工单类型编码不能为空"` // 工单类型名称
-	FormData       []DingTalkFormItemData `json:"formData"         v:"required#表单数据不能为空"`     // 表单数据
-	AssignUserId   int                    `json:"assignUserId"     v:"min:1#分派人员不能为空"`        // 分派人员ID
+	FormData       []DingTalkFormItemData `json:"formData"         v:"required#表单数据不能为空"`   // 表单数据
+	AssignUserId   int                    `json:"assignUserId"     v:"min:1#分派人员不能为空"`      // 分派人员ID
 	AssignUserName string                 `json:"assignUserName"   v:"required#分派人员姓名不能为空"` // 分派人员姓名
-	SaleId         int                    `json:"saleId"`                                             // 销售工程师ID
-	SaleName       string                 `json:"saleName"`                                           // 销售工程师
-	EndTime        *gtime.Time            `json:"endTime"`                                            // 结束时间
-	File           string                 `json:"file"`                                               // 相关文件
-	Remark         string                 `json:"remark"`                                             // 备注
-	ExpectTime     *gtime.Time            `json:"expectTime"`                                         // 期望完成时间 (技术文件)
-	SupportTime    *gtime.Time            `json:"supportTime"`                                        // 支持时间 (售前讲解)
-	TrialTimeStart *gtime.Time            `json:"trialTimeStart"`                                     // '试用开始时间 (试用)';
-	TrialTimeEnd   *gtime.Time            `json:"trialTimeEnd"`                                       // '试用结束时间 (试用)';
-	DealerIds      string                 `json:"dealerIds"`                                          // 关联经销商(多选)
-	DealerNames    string                 `json:"dealerNames"`                                        // 经销商名称
-	AgentIds       string                 `json:"agentIds"`                                           // 关联代理商(多选)
-	AgentNames     string                 `json:"agentNames"`                                         // 经销商名称
+	SaleId         int                    `json:"saleId"`                                   // 销售工程师ID
+	SaleName       string                 `json:"saleName"`                                 // 销售工程师
+	EndTime        *gtime.Time            `json:"endTime"`                                  // 结束时间
+	File           string                 `json:"file"`                                     // 相关文件
+	Remark         string                 `json:"remark"`                                   // 备注
+	ExpectTime     *gtime.Time            `json:"expectTime"`                               // 期望完成时间 (技术文件)
+	SupportTime    *gtime.Time            `json:"supportTime"`                              // 支持时间 (售前讲解)
+	TrialTimeStart *gtime.Time            `json:"trialTimeStart"`                           // '试用开始时间 (试用)';
+	TrialTimeEnd   *gtime.Time            `json:"trialTimeEnd"`                             // '试用结束时间 (试用)';
+	DealerIds      string                 `json:"dealerIds"`                                // 关联经销商(多选)
+	DealerNames    string                 `json:"dealerNames"`                              // 经销商名称
+	AgentIds       string                 `json:"agentIds"`                                 // 关联代理商(多选)
+	AgentNames     string                 `json:"agentNames"`                               // 经销商名称
+}
+
+type CreateWorkOrderByTrainSaleApplyReq struct {
+	ApplyId int `json:"applyId"` // 经销商培训OMS工单申请(销售申请) Id
 }
 
 type UploadDingtalkReq struct {
@@ -78,71 +82,71 @@ type DingTalkFormItemData struct {
 }
 
 type UpdateWorkOrderReq struct {
-	Id       int    `  json:"id"     v:"min:1#工单不能为空"`        // 主健
+	Id       int    `  json:"id"     v:"min:1#工单不能为空"`      // 主健
 	Feedback string `json:"feedback" v:"required#反馈信息不能为空"` // 反馈信息
-	Remark   string `json:"remark"`                                 // 备注
+	Remark   string `json:"remark"`                         // 备注
 }
 
 type WorkOrderFeedbackReq struct {
-	OrderId  int    `json:"orderId"     v:"min:1#工单不能为空"`     // 主健
+	OrderId  int    `json:"orderId"     v:"min:1#工单不能为空"`   // 主健
 	Feedback string `json:"feedback" v:"required#反馈信息不能为空"` // 反馈信息
-	Remark   string `json:"remark"`                                 // 备注
+	Remark   string `json:"remark"`                         // 备注
 }
 
 type WorkOrderFeedbackSearchReq struct {
 	OrderId         int    `json:"orderId"     v:"min:1#工单不能为空"` // 主健
-	FeePeople       string `json:"feePeople"`                          // 反馈人
+	FeePeople       string `json:"feePeople"`                    // 反馈人
 	DaysBeforeToday int    `json:"daysBeforeToday"`
 	request.PageReq
 }
 
 type WorkOrderFinishReq struct {
 	OrderId      int    `json:"orderId"     v:"min:1#工单不能为空"` //
-	FinishRemark string `json:"finishRemark"`                       // 完成信息
+	FinishRemark string `json:"finishRemark"`                 // 完成信息
 }
 
 type FeedbackSupportReq struct {
-	OrderId                int         `json:"orderId"     v:"min:1#工单不能为空"`                           //
-	FeedbackSupportTime    *gtime.Time `json:"feedbackSupportTime"`                                          // 支持反馈-反馈时间 (售前讲解 技术文件)
+	OrderId                int         `json:"orderId"     v:"min:1#工单不能为空"`                     //
+	FeedbackSupportTime    *gtime.Time `json:"feedbackSupportTime"`                              // 支持反馈-反馈时间 (售前讲解 技术文件)
 	FeedbackSupportContent string      `json:"feedbackSupportContent" v:"required#本次讲解情况反馈不能为空"` // 支持反馈-本次讲解情况反馈 (售前讲解 技术文件)
 }
 
 type FeedbackSaleReq struct {
 	OrderId             int         `json:"orderId"     v:"min:1#工单不能为空"` //
-	FeedbackSaleTime    *gtime.Time `json:"feedbackSaleTime"`                   // 销售反馈-反馈时间 (售前讲解 技术文件)
-	FeedbackSaleMeeting string      `json:"feedbackSaleMeeting"`                // 销售反馈-会议纪要 (售前讲解)
-	FeedbackSaleDist    string      `json:"feedbackSaleDist"`                   // 销售反馈-客户经销商反馈 (售前讲解)
-	FeedbackSaleNext    string      `json:"feedbackSaleNext"`                   // 销售反馈-下一步计划 (售前讲解 技术文件)
-	FeedbackSaleUser    string      `json:"feedbackSaleUser"`                   // 销售反馈-用户反馈 (技术文件)
-	FeedbackSaleOrder   string      `json:"feedbackSaleOrder"`                  // 销售反馈-工单反馈(售后运维工单)
-	SatisfactionRating  string      `json:"satisfactionRating"`                 // 满意度评分(1-5)(经销商支持、技术文件支持、售前讲解支持)
-	PromotionProposal   string      `json:"promotionProposal"`                  // 提升建议(经销商支持、技术文件支持、售前讲解支持)
+	FeedbackSaleTime    *gtime.Time `json:"feedbackSaleTime"`             // 销售反馈-反馈时间 (售前讲解 技术文件)
+	FeedbackSaleMeeting string      `json:"feedbackSaleMeeting"`          // 销售反馈-会议纪要 (售前讲解)
+	FeedbackSaleDist    string      `json:"feedbackSaleDist"`             // 销售反馈-客户经销商反馈 (售前讲解)
+	FeedbackSaleNext    string      `json:"feedbackSaleNext"`             // 销售反馈-下一步计划 (售前讲解 技术文件)
+	FeedbackSaleUser    string      `json:"feedbackSaleUser"`             // 销售反馈-用户反馈 (技术文件)
+	FeedbackSaleOrder   string      `json:"feedbackSaleOrder"`            // 销售反馈-工单反馈(售后运维工单)
+	SatisfactionRating  string      `json:"satisfactionRating"`           // 满意度评分(1-5)(经销商支持、技术文件支持、售前讲解支持)
+	PromotionProposal   string      `json:"promotionProposal"`            // 提升建议(经销商支持、技术文件支持、售前讲解支持)
 }
 
 type FeedbackTrailReq struct {
-	WorkOrderId          int         `json:"workOrderId" v:"min:1#工单不能为空"`              // 关联工单ID
+	WorkOrderId          int         `json:"workOrderId" v:"min:1#工单不能为空"`            // 关联工单ID
 	FeedbackTrialType    string      `json:"feedbackTrialType" v:"required#反馈类型不能为空"` // 试用反馈类型 10 启动 20 过程 30 总结
-	FeedbackTrialTime    *gtime.Time `json:"feedbackTrialTime"`                               // 试用反馈-反馈时间 (试用)
-	FeedbackTrialContent string      `json:"feedbackTrialContent"`                            // 试用反馈-部署安装总结、会议总结、过程问题、试用总结 (试用)
-	FeedbackTrialDist    string      `json:"feedbackTrialDist"`                               // 试用反馈-客户经销商反馈 (试用)
-	FeedbackTrialPlan    string      `json:"feedbackTrialPlan"`                               // 试用反馈-下一步计划,跟进计划 (试用)
-	Remark               string      `json:"remark"`                                          // 备注
+	FeedbackTrialTime    *gtime.Time `json:"feedbackTrialTime"`                       // 试用反馈-反馈时间 (试用)
+	FeedbackTrialContent string      `json:"feedbackTrialContent"`                    // 试用反馈-部署安装总结、会议总结、过程问题、试用总结 (试用)
+	FeedbackTrialDist    string      `json:"feedbackTrialDist"`                       // 试用反馈-客户经销商反馈 (试用)
+	FeedbackTrialPlan    string      `json:"feedbackTrialPlan"`                       // 试用反馈-下一步计划,跟进计划 (试用)
+	Remark               string      `json:"remark"`                                  // 备注
 }
 
 type TimeUpdateExpectReq struct {
 	OrderId    int         `json:"orderId"     v:"min:1#工单不能为空"` //
-	ExpectTime *gtime.Time `json:"expectTime"`                         // 期望完成时间 (技术文件)
+	ExpectTime *gtime.Time `json:"expectTime"`                   // 期望完成时间 (技术文件)
 }
 
 type TimeUpdateSupportReq struct {
 	OrderId     int         `json:"orderId"     v:"min:1#工单不能为空"` //
-	SupportTime *gtime.Time `json:"supportTime"`                        // 支持时间 (售前讲解)
+	SupportTime *gtime.Time `json:"supportTime"`                  // 支持时间 (售前讲解)
 }
 
 type TimeUpdateTrialReq struct {
 	OrderId        int         `json:"orderId"     v:"min:1#工单不能为空"` //
-	TrialTimeStart *gtime.Time `json:"trialTimeStart"`                     // '试用开始时间 (试用)';
-	TrialTimeEnd   *gtime.Time `json:"trialTimeEnd"`                       // '试用结束时间 (试用)';
+	TrialTimeStart *gtime.Time `json:"trialTimeStart"`               // '试用开始时间 (试用)';
+	TrialTimeEnd   *gtime.Time `json:"trialTimeEnd"`                 // '试用结束时间 (试用)';
 }
 
 type WorkOrderCloseReq struct {
@@ -150,7 +154,7 @@ type WorkOrderCloseReq struct {
 }
 
 type WorkOrderAddDynamics struct {
-	OrderId int    `json:"orderId"     v:"min:1#工单不能为空"`    // 主健
+	OrderId int    `json:"orderId"     v:"min:1#工单不能为空"`  // 主健
 	Content string `json:"content" v:"required#动态信息不能为空"` // 动态信息
 }
 

+ 3 - 2
opms_parent/app/service/cust/product_consult_record.go

@@ -137,6 +137,7 @@ func (s ProductConsultRecordService) Add(ctx context.Context, req *model.Product
 		InchargeId:   req.InchargeId,
 		InchargeName: req.InchargeName,
 		State:        "10",
+		Content:      req.Content,
 		Remark:       req.Remark,
 		CreatedBy:    int(s.userInfo.Id),
 		CreatedName:  s.userInfo.NickName,
@@ -223,8 +224,8 @@ func (s ProductConsultRecordService) FollowUp(ctx context.Context, req *model.Fo
 	toupdate["content"] = req.Content
 	toupdate["progress"] = req.Progress
 	toupdate["next_plan"] = req.NextPlan
-	//toupdate["distributor_id"] = req.DistributorId
-	//toupdate["distributor_name"] = req.DistributorName
+	toupdate["distributor_id"] = req.DistributorId
+	toupdate["distributor_name"] = req.DistributorName
 	//toupdate["cust_id"] = req.CustId
 	//toupdate["cust_name"] = req.CustName
 	toupdate["nbo_id"] = req.NboId

+ 114 - 3
opms_parent/app/service/work/work_order.go

@@ -28,6 +28,7 @@ import (
 	"github.com/360EntSecGroup-Skylar/excelize"
 
 	"dashoo.cn/micro/app/dao/work"
+	train "dashoo.cn/micro/app/model/train"
 	model "dashoo.cn/micro/app/model/work"
 	"dashoo.cn/micro/app/service"
 )
@@ -419,6 +420,110 @@ func (s *OrderService) CreateWorkOrder(ctx context.Context, req *model.WorkOrder
 	return
 }
 
+// CreateWorkOrderByTrainSaleApply 销售申请确认后生成,销售申请培训工单
+func (s *OrderService) CreateWorkOrderByTrainSaleApply(ctx context.Context, req *model.CreateWorkOrderByTrainSaleApplyReq, args *multipart.Form) (err error) {
+	// 数据校验
+	if req.ApplyId == 0 {
+		return myerrors.TipsError("未查询到经销商培训OMS工单申请(销售申请)记录")
+	}
+	// 查询数据
+	var apply train.TrainSaleApply
+	err = s.Dao.DB.Model("train_sale_apply").Where(fmt.Sprintf("id='%v'", req.ApplyId)).Scan(&apply)
+	if err != nil {
+		if err == sql.ErrNoRows {
+			return myerrors.TipsError("未查询到经销商培训OMS工单申请(销售申请)记录")
+		}
+		return err
+	}
+
+	endTime := ""
+	data := new(model.WorkOrder)
+	data.OrderTypeName = "销售申请培训工单"
+	data.OrderStatus = "30"
+	if apply.ExpectTrainDate != nil {
+		data.Name = apply.ExpectTrainDate.Format("Y-m-d")
+		endTime = apply.ExpectTrainDate.Format("Y-m-d ")
+	}
+	if apply.ExpectStartTime != nil {
+		data.Name += apply.ExpectStartTime.Format("(H:i~")
+	}
+	if apply.ExpectEndTime != nil {
+		data.Name += apply.ExpectEndTime.Format("H:i)")
+		endTime += apply.ExpectEndTime.Format("H:i:s")
+	}
+	data.Name += apply.InstructorRequire + "销售申请培训工单"
+	data.AssignUserName = apply.InstructorRequire
+	data.EndTime = gtime.NewFromStr(endTime)
+	data.TrainSaleApplyId = apply.Id
+
+	service.SetCreatedInfo(data, s.GetCxtUserId(), s.GetCxtUserName())
+
+	var items []model.DingTalkFormItemData
+	items = append(items, model.DingTalkFormItemData{
+		Name:  "渠道名称",
+		Value: apply.DistributorName,
+	})
+	items = append(items, model.DingTalkFormItemData{
+		Name:  "主营产品",
+		Value: apply.MainProduct,
+	})
+	items = append(items, model.DingTalkFormItemData{
+		Name:  "主要客户",
+		Value: apply.MainCustomer,
+	})
+	items = append(items, model.DingTalkFormItemData{
+		Name:  "参训人员及职位",
+		Value: apply.Trainees,
+	})
+	if apply.ExpectTrainDate != nil {
+		items = append(items, model.DingTalkFormItemData{
+			Name:  "期望培训日期",
+			Value: apply.ExpectTrainDate.Format("Y-m-d"),
+		})
+	} else {
+		items = append(items, model.DingTalkFormItemData{
+			Name:  "期望培训日期",
+			Value: "",
+		})
+	}
+	if apply.ExpectStartTime != nil && apply.ExpectEndTime != nil {
+		items = append(items, model.DingTalkFormItemData{
+			Name:  "期望时间",
+			Value: apply.ExpectStartTime.Format("H:i") + "-" + apply.ExpectEndTime.Format("H:i"),
+		})
+	} else {
+		items = append(items, model.DingTalkFormItemData{
+			Name:  "期望时间",
+			Value: "",
+		})
+	}
+	items = append(items, model.DingTalkFormItemData{
+		Name:  "培训主题",
+		Value: apply.TrainTitle,
+	})
+	items = append(items, model.DingTalkFormItemData{
+		Name:  "讲师要求",
+		Value: apply.InstructorRequire,
+	})
+	items = append(items, model.DingTalkFormItemData{
+		Name:  "渠道关注要点",
+		Value: apply.FocusPoint,
+	})
+
+	err = s.Dao.Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
+		// 创建工单
+		lastId, err := s.Dao.TX(tx).Data(data).InsertAndGetId()
+		if err != nil {
+			return err
+		}
+
+		// 保存日志
+		err = s.AddDynamicsByCurrentUser(tx, int(lastId), "创建工单", map[string]interface{}{})
+		return err
+	})
+	return
+}
+
 func (s *OrderService) UploadFile(args *multipart.FileHeader) ([]contractModel.DingFileInfo, error) {
 	resp, err := dingtalk.Client.GetStorage().UploadFile(service.DingTalkSpaceId, s.GetCxtUserDingtalkId(), args.FileName, args.File.Name())
 	if err != nil {
@@ -615,7 +720,7 @@ func (s *OrderService) FeedbackSupport(ctx context.Context, req *model.FeedbackS
 	if ent == nil {
 		return myerrors.TipsError("工单不存在")
 	}
-	if ent.OrderStatus != "30" || !(ent.OrderTypeName == "售前讲解支持" || ent.OrderTypeName == "技术文件支持" || ent.OrderTypeName == "经销商支持" || ent.OrderTypeName == "售后运维工单") {
+	if ent.OrderStatus != "30" || !(ent.OrderTypeName == "售前讲解支持" || ent.OrderTypeName == "技术文件支持" || ent.OrderTypeName == "经销商支持" || ent.OrderTypeName == "售后运维工单" || ent.OrderTypeName == "销售申请培训工单") {
 		return myerrors.TipsError("当前工单不可进行支持反馈")
 	}
 	if req.FeedbackSupportTime == nil {
@@ -626,7 +731,7 @@ func (s *OrderService) FeedbackSupport(ctx context.Context, req *model.FeedbackS
 	}
 
 	return s.Dao.DB.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
-		_, err = tx.Update("work_order", map[string]interface{}{
+		data := map[string]interface{}{
 			"feedback_support_time":    req.FeedbackSupportTime,
 			"feedback_support_by":      s.CxtUser.Id,
 			"feedback_support_name":    s.CxtUser.NickName,
@@ -634,7 +739,11 @@ func (s *OrderService) FeedbackSupport(ctx context.Context, req *model.FeedbackS
 			"updated_by":               s.CxtUser.Id,
 			"updated_name":             s.CxtUser.NickName,
 			"updated_time":             gtime.Now(),
-		}, "id = ?", req.OrderId)
+		}
+		if ent.OrderTypeName == "销售申请培训工单" {
+			data["order_status"] = "60" // 支持人员总结之后工单完成
+		}
+		_, err = tx.Update("work_order", data, "id = ?", req.OrderId)
 		if err != nil {
 			return err
 		}
@@ -645,6 +754,8 @@ func (s *OrderService) FeedbackSupport(ctx context.Context, req *model.FeedbackS
 			"feedback_support_content": req.FeedbackSupportContent,
 		})
 
+		// TODO 更新销售申请 的支持人员总结信息
+
 		if err == nil {
 			s.WorkOrderSendMsg(ent, "支持工单总结反馈提醒", fmt.Sprintf("您的%v项目%v已有反馈,请尽快查看。", ent.NboName, ent.OrderTypeName), "30")
 		}