|
|
@@ -12,6 +12,7 @@ import (
|
|
|
proj "dashoo.cn/micro/app/dao/proj"
|
|
|
contractModel "dashoo.cn/micro/app/model/contract"
|
|
|
workflowModel "dashoo.cn/micro/app/model/workflow"
|
|
|
+ baseService "dashoo.cn/micro/app/service/base"
|
|
|
workflowService "dashoo.cn/micro/app/service/workflow"
|
|
|
"dashoo.cn/opms_libary/multipart"
|
|
|
"dashoo.cn/opms_libary/plugin/dingtalk"
|
|
|
@@ -180,6 +181,28 @@ func (s *OrderService) UpdateById(req *model.UpdateWorkOrderReq) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+func (s *OrderService) UploadDingtalk(req *model.UploadDingtalkReq) ([]byte, error) {
|
|
|
+ return baseService.UploadDingtalk(s.CxtUser.DingtalkId, req.FileUrl, req.FileName)
|
|
|
+}
|
|
|
+
|
|
|
+func extractFileInfo(v interface{}) (fileinfo []contractModel.DingFileInfo, err error) {
|
|
|
+ defer func() {
|
|
|
+ if r := recover(); r != nil {
|
|
|
+ err = fmt.Errorf("%s", r)
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("解析动态表单文件信息异常 %s", err)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ fmt.Println(v)
|
|
|
+ s := v.(string)
|
|
|
+ if s == "" {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err = json.Unmarshal([]byte(s), &fileinfo)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
func (s *OrderService) CreateWorkOrder(req *model.WorkOrderReq, args *multipart.Form) (err error) {
|
|
|
data := new(model.WorkOrder)
|
|
|
if err = gconv.Struct(req, data); err != nil {
|
|
|
@@ -198,19 +221,19 @@ func (s *OrderService) CreateWorkOrder(req *model.WorkOrderReq, args *multipart.
|
|
|
data.OrderStatus = "20"
|
|
|
service.SetCreatedInfo(data, s.GetCxtUserId(), s.GetCxtUserName())
|
|
|
|
|
|
- if args != nil {
|
|
|
- for k, v := range req.FormData {
|
|
|
- if v.ComponentName == "DDAttachment" {
|
|
|
- file, err := s.UploadFile(args.File["file"])
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- v.Value = file
|
|
|
- data.File = strings.Join([]string{"dingtalk", file[0].SpaceId, file[0].FileId}, ":")
|
|
|
- }
|
|
|
- req.FormData[k].Value = gconv.String(v.Value)
|
|
|
+ fileInfo := []contractModel.DingFileInfo{}
|
|
|
+ for _, v := range req.FormData {
|
|
|
+ if v.ComponentName != "DDAttachment" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ fi, err := extractFileInfo(v.Value)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
}
|
|
|
+ fileInfo = append(fileInfo, fi...)
|
|
|
}
|
|
|
+ fileInfoByte, err := json.Marshal(fileInfo)
|
|
|
+ data.File = string(fileInfoByte)
|
|
|
|
|
|
formComponentValues := make([]*workflow.StartProcessInstanceRequestFormComponentValues, 0)
|
|
|
if err = gconv.Structs(req.FormData, &formComponentValues); err != nil {
|
|
|
@@ -218,15 +241,15 @@ func (s *OrderService) CreateWorkOrder(req *model.WorkOrderReq, args *multipart.
|
|
|
}
|
|
|
|
|
|
err = s.Dao.Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
|
|
|
- if g.Config().GetBool("dingtalk.disable-for-dev") {
|
|
|
- g.Log().Warning("disable-for-dev true 未创建钉钉审批!!!!!!!!!!!!")
|
|
|
- data.OrderStatus = "30"
|
|
|
- lastId, err := s.Dao.TX(tx).Data(data).InsertAndGetId()
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- return s.AddDynamicsByCurrentUser(tx, int(lastId), "创建工单", map[string]interface{}{})
|
|
|
- }
|
|
|
+ // if g.Config().GetBool("dingtalk.disable-for-dev") {
|
|
|
+ // g.Log().Warning("disable-for-dev true 未创建钉钉审批!!!!!!!!!!!!")
|
|
|
+ // data.OrderStatus = "30"
|
|
|
+ // lastId, err := s.Dao.TX(tx).Data(data).InsertAndGetId()
|
|
|
+ // if err != nil {
|
|
|
+ // return err
|
|
|
+ // }
|
|
|
+ // return s.AddDynamicsByCurrentUser(tx, int(lastId), "创建工单", map[string]interface{}{})
|
|
|
+ // }
|
|
|
|
|
|
// 更新项目调级
|
|
|
lastId, err := s.Dao.TX(tx).Data(data).InsertAndGetId()
|
|
|
@@ -304,6 +327,34 @@ func (s *OrderService) WorkOrderNotify(flow *workflowModel.PlatWorkflow, msg *me
|
|
|
data[s.Dao.C.OrderStatus] = "30"
|
|
|
}
|
|
|
|
|
|
+ if data[s.Dao.C.OrderStatus] == "30" {
|
|
|
+ recvUserIds := []int{}
|
|
|
+ if workOrder.AssignUserId != 0 {
|
|
|
+ recvUserIds = append(recvUserIds, workOrder.AssignUserId)
|
|
|
+ }
|
|
|
+ if workOrder.SaleId != 0 {
|
|
|
+ recvUserIds = append(recvUserIds, workOrder.SaleId)
|
|
|
+ }
|
|
|
+ recvUserIds = service.SliceIntDeduplication(recvUserIds)
|
|
|
+ if len(recvUserIds) != 0 {
|
|
|
+ recvUserIdString := []string{}
|
|
|
+ for _, uid := range recvUserIds {
|
|
|
+ recvUserIdString = append(recvUserIdString, strconv.Itoa(uid))
|
|
|
+ }
|
|
|
+ msg := g.MapStrStr{
|
|
|
+ "msgTitle": "支持工单审批通过提醒",
|
|
|
+ "msgContent": fmt.Sprintf("<p>工单:%s 已审批通过</p>", workOrder.Name),
|
|
|
+ "msgType": "20",
|
|
|
+ "recvUserIds": strings.Join(recvUserIdString, ","),
|
|
|
+ "msgStatus": "10",
|
|
|
+ "sendType": "10",
|
|
|
+ }
|
|
|
+ if err := service.CreateSystemMessage(msg); err != nil {
|
|
|
+ g.Log().Error("支持工单审批通过提醒异常:%s", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 项目修改
|
|
|
_, err = s.Dao.WherePri(workOrder.Id).FieldsEx(service.UpdateFieldEx...).Data(data).Update()
|
|
|
if err != nil {
|
|
|
@@ -376,36 +427,36 @@ func (s *OrderService) GetWorkOrderFeedbackByDay(req *model.WorkOrderFeedbackSea
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func (s *OrderService) Finish(ctx context.Context, req *model.WorkOrderFinishReq) error {
|
|
|
- ent, err := s.Dao.Where("id = ?", req.OrderId).One()
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- if ent == nil {
|
|
|
- return myerrors.TipsError("工单不存在")
|
|
|
- }
|
|
|
- if ent.OrderStatus != "30" {
|
|
|
- return myerrors.TipsError("当前工单不可完成")
|
|
|
- }
|
|
|
-
|
|
|
- return s.Dao.DB.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
|
|
|
- _, err = tx.Update("work_order", map[string]interface{}{
|
|
|
- "order_status": "60",
|
|
|
- "finish_remark": req.FinishRemark,
|
|
|
- "finish_time": gtime.Now(),
|
|
|
- "finish_by": s.CxtUser.Id,
|
|
|
- "finish_by_name": s.CxtUser.NickName,
|
|
|
- "updated_by": s.CxtUser.Id,
|
|
|
- "updated_name": s.CxtUser.NickName,
|
|
|
- "updated_time": gtime.Now(),
|
|
|
- }, "id = ?", req.OrderId)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- err = s.AddDynamicsByCurrentUser(tx, int(req.OrderId), "完成工单", map[string]interface{}{})
|
|
|
- return err
|
|
|
- })
|
|
|
-}
|
|
|
+// func (s *OrderService) Finish(ctx context.Context, req *model.WorkOrderFinishReq) error {
|
|
|
+// ent, err := s.Dao.Where("id = ?", req.OrderId).One()
|
|
|
+// if err != nil {
|
|
|
+// return err
|
|
|
+// }
|
|
|
+// if ent == nil {
|
|
|
+// return myerrors.TipsError("工单不存在")
|
|
|
+// }
|
|
|
+// if ent.OrderStatus != "30" {
|
|
|
+// return myerrors.TipsError("当前工单不可完成")
|
|
|
+// }
|
|
|
+
|
|
|
+// return s.Dao.DB.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
|
|
|
+// _, err = tx.Update("work_order", map[string]interface{}{
|
|
|
+// "order_status": "60",
|
|
|
+// "finish_remark": req.FinishRemark,
|
|
|
+// "finish_time": gtime.Now(),
|
|
|
+// "finish_by": s.CxtUser.Id,
|
|
|
+// "finish_by_name": s.CxtUser.NickName,
|
|
|
+// "updated_by": s.CxtUser.Id,
|
|
|
+// "updated_name": s.CxtUser.NickName,
|
|
|
+// "updated_time": gtime.Now(),
|
|
|
+// }, "id = ?", req.OrderId)
|
|
|
+// if err != nil {
|
|
|
+// return err
|
|
|
+// }
|
|
|
+// err = s.AddDynamicsByCurrentUser(tx, int(req.OrderId), "完成工单", map[string]interface{}{})
|
|
|
+// return err
|
|
|
+// })
|
|
|
+// }
|
|
|
|
|
|
func (s *OrderService) Close(ctx context.Context, req *model.WorkOrderCloseReq) error {
|
|
|
ent, err := s.Dao.Where("id = ?", req.OrderId).One()
|