Explorar o código

freature(*): 微信小程序-督办功能、日程功能对接

likai %!s(int64=3) %!d(string=hai) anos
pai
achega
537642de4a

+ 7 - 0
opms_libary/plugin/dingtalk/calendar/calendar.go

@@ -44,10 +44,12 @@ func (c *Calendar) CreateSchedule(params *DingAddScheduleParams) (returnData *Cr
 		attendees = append(attendees, &att)
 	}
 	start := &EventStart{
+		Date: &params.BeginDate,
 		DateTime: &params.BeginTime,
 		TimeZone: &params.TimeZone,
 	}
 	end := &EventEnd{
+		Date: &params.EndDate,
 		DateTime: &params.EndTime,
 		TimeZone: &params.TimeZone,
 	}
@@ -58,6 +60,11 @@ func (c *Calendar) CreateSchedule(params *DingAddScheduleParams) (returnData *Cr
 		End:         end,
 		Attendees:   attendees,
 	}
+	if params.SchType == "20" {
+		req.IsAllDay = utils.Bool(true)
+	} else {
+		req.IsAllDay = utils.Bool(false)
+	}
 
 	resp, _ := c.HTTPPostJSONWithAccessToken(initCreateEventUrl(params.UserId), req)
 

+ 5 - 0
opms_libary/plugin/dingtalk/calendar/entity.go

@@ -14,6 +14,9 @@ type DingAddScheduleParams struct {
 	BeginTime   string
 	EndTime     string
 	UserIds     []string
+	SchType     string
+	BeginDate   string
+	EndDate     string
 }
 
 type DingGetScheduleParams struct {
@@ -162,6 +165,8 @@ type GetEventResponse struct {
 	Summary *string `json:"summary,omitempty" xml:"summary,omitempty"`
 	// 更新时间
 	UpdateTime *string `json:"updateTime,omitempty" xml:"updateTime,omitempty"`
+	// 是否是全天日程
+	IsAllDay *bool     `json:"isAllDay,omitempty" xml:"isAllDay,omitempty"`
 }
 
 type GetScheduleResponse struct {

+ 3 - 0
opms_parent/app/dao/plat/internal/plat_schedule.go

@@ -32,6 +32,7 @@ type platScheduleColumns struct {
 	SchContent     string // 内容
 	SchDate        string // 日程开始时间
 	SchDateEnd     string // 日程结束时间
+	SchType        string // 类型:10非全天日程;20全天日程
 	UserId         string // 日程组织人Id
 	UserUnionId    string // 日程组织人unionId
 	UserName       string // 日程组织人姓名
@@ -60,6 +61,7 @@ var (
 			SchContent:     "sch_ content",
 			SchDate:        "sch_ date",
 			SchDateEnd:     "sch_ date_end",
+			SchType:        "sch_type",
 			UserId:         "user_id",
 			UserUnionId:    "user_unionId",
 			UserName:       "user_name",
@@ -90,6 +92,7 @@ func NewPlatScheduleDao(tenant string) PlatScheduleDao {
 			SchContent:     "sch_ content",
 			SchDate:        "sch_ date",
 			SchDateEnd:     "sch_ date_end",
+			SchType:        "sch_type",
 			UserId:         "user_id",
 			UserUnionId:    "user_unionId",
 			UserName:       "user_name",

+ 1 - 0
opms_parent/app/handler/plat/task.go

@@ -14,6 +14,7 @@ import (
 type TaskHandler struct{}
 
 // GetList 获取列表
+// Swagger:Task 督办 督办列表
 func (h *TaskHandler) GetList(ctx context.Context, req *model.SearchPlatTaskReq, rsp *comm_def.CommonMsg) error {
 	taskService, err := server.NewTaskService(ctx)
 	if err != nil {

+ 1 - 0
opms_parent/app/model/plat/internal/plat_schedule.go

@@ -15,6 +15,7 @@ type PlatSchedule struct {
 	SchContent     string      `orm:"sch_content"  json:"schContent"`            // 内容
 	SchDate        *gtime.Time `orm:"sch_date"     json:"schDate"`               // 日程开始时间
 	SchDateEnd     *gtime.Time `orm:"sch_date_end" json:"schDateEnd"`            // 日程结束时间
+	SchType        string      `orm:"sch_type"     json:"schType"`               // 类型:10非全天日程;20全天日程
 	UserId         int         `orm:"user_id"      json:"userId"`                // 日程组织人Id
 	UserUnionId    string      `orm:"user_unionId" json:"userUnionId"`           // 日程组织人unionId
 	UserName       string      `orm:"user_name"    json:"userName"`              // 日程组织人姓名

+ 1 - 0
opms_parent/app/model/plat/plat_followup.go

@@ -22,6 +22,7 @@ type SearchPlatFollowupReq struct {
 	TargetId        string `json:"targetId"`
 	ManagerId       string `json:"managerId"`
 	DaysBeforeToday int    `json:"daysBeforeToday"`
+	IsMyself        string `json:"isMyself"` // IsMyself为1时,查询本人的数据
 	request.PageReq
 }
 

+ 1 - 0
opms_parent/app/model/plat/plat_schedule.go

@@ -22,6 +22,7 @@ type AddScheduleSeq struct {
 	SchContent string      `json:"schContent" v:"required#日程内容不能为空"` //内容
 	SchDate    *gtime.Time `json:"schDate"    v:"required#开始时间不能为空"` //日程开始时间
 	SchDateEnd *gtime.Time `json:"schDateEnd" v:"required#结束时间不能为空"` //日程结束时间
+	SchType    string      `json:"schType"`                          // 类型:10非全天日程;20全天日程
 	BizType    string      `json:"bizType,omitempty"`                //关联业务类型
 	BizBillId  int         `json:"bizBillId,omitempty"`              //关联业务单据
 	UserIds    []string    `json:"userIds"    v:"required#用户不能为空"`   // 用户unionId

+ 10 - 10
opms_parent/app/model/plat/plat_task.go

@@ -22,16 +22,16 @@ type PlatTaskEx struct {
 
 // 查询
 type SearchPlatTaskReq struct {
-	TaskTitle   string `json:"taskTitle"`
-	TaskType    string `son:"taskType"`
-	TaskStatus  string `json:"taskStatus"`
-	IsOverdue   string `json:"isOverdue"`
-	MainUserId  string `json:"mainUserId"`
-	TargetId    string `json:"targetId"`
-	TargetType  string `json:"targetType"`
-	MySelf      string `json:"mySelf"`
-	IsMain      string `json:"isMain"`
-	OperateType string `json:"operateType"`
+	TaskTitle   string `json:"taskTitle"`   // 任务标题
+	TaskType    string `son:"taskType"`     // 任务类型 数据字典
+	TaskStatus  string `json:"taskStatus"`  // 任务状态(10发起  20进行中   30流程完成)
+	IsOverdue   string `json:"isOverdue"`   // 是否超期(10否20是)
+	MainUserId  string `json:"mainUserId"`  // 负责人ID
+	TargetId    string `json:"targetId"`    // 关联对象ID
+	TargetType  string `json:"targetType"`  // 关联对象类型(10客户,20项目,30合同,40回款)
+	MySelf      string `json:"mySelf"`      // 我发起的
+	IsMain      string `json:"isMain"`      // 我负责的
+	OperateType string `json:"operateType"` // 前端操作数据状态:1 我的待办;2 我发起的;3 我处理的
 	request.PageReq
 }
 

+ 3 - 0
opms_parent/app/service/plat/plat_followup.go

@@ -48,6 +48,9 @@ func (s *followupService) GetList(req *model.SearchPlatFollowupReq) (total int,
 	if req.ManagerId != "" {
 		followupModel = followupModel.Where("created_by", req.ManagerId)
 	}
+	if req.IsMyself == "1" {
+		followupModel = followupModel.Where("created_by", s.GetCxtUserId())
+	}
 
 	total, err = followupModel.Count()
 	if err != nil {

+ 44 - 15
opms_parent/app/service/plat/plat_schedule.go

@@ -40,26 +40,26 @@ func (s *scheduleService) GetList(req *model.ScheduleSearchReq) (total int, sche
 	Model := s.Dao.M.InnerJoin("plat_schedule_attendee", "plat_schedule.id=plat_schedule_attendee.sch_id")
 	where := ""
 	if req.DataType == "10" {
-		where = fmt.Sprintf("plat_schedule_attendee.user_id=%v", s.GetCxtUserId())
-		Model = Model.Where("plat_schedule_attendee.user_id = ", s.GetCxtUserId())
+		where = fmt.Sprintf("plat_schedule_attendee.user_unionId='%v'", s.GetCxtUserDingtalkId())
+		Model = Model.Where("plat_schedule_attendee.user_unionId=?", s.GetCxtUserDingtalkId())
 	} else {
-		where = fmt.Sprintf("plat_schedule.user_id=%v", s.GetCxtUserId())
-		Model = Model.Where("plat_schedule.user_id = ", s.GetCxtUserId())
+		where = fmt.Sprintf("plat_schedule.user_unionId='%v'", s.GetCxtUserDingtalkId())
+		Model = Model.Where("plat_schedule.user_unionId=?", s.GetCxtUserDingtalkId())
 	}
 	if req.SchDate != nil {
 		schDate := gconv.String(req.SchDate)
 		begin := strings.Split(schDate, " ")[0] + " 00:00:00"
 		end := strings.Split(schDate, " ")[0] + " 23:59:59"
 		Model = Model.Where("plat_schedule.sch_date >= ? AND plat_schedule.sch_date <= ? ", begin, end)
-		where += fmt.Sprintf(" AND plat_schedule.sch_date >= %v AND plat_schedule.sch_date <= %v", begin, end)
+		where += fmt.Sprintf(" AND plat_schedule.sch_date >= '%v' AND plat_schedule.sch_date <= '%v'", begin, end)
 	}
 	if req.BeginTime != "" && req.EndTime != "" {
 		begin := strings.Split(req.BeginTime, " ")[0] + " 00:00:00"
 		end := strings.Split(req.EndTime, " ")[0] + " 23:59:59"
 		Model = Model.Where("plat_schedule.sch_date >= ? AND plat_schedule.sch_date <= ? ", begin, end)
-		where += fmt.Sprintf(" AND plat_schedule.sch_date >= %v AND plat_schedule.sch_date <= %v", begin, end)
+		where += fmt.Sprintf(" AND plat_schedule.sch_date >= '%v' AND plat_schedule.sch_date <= '%v'", begin, end)
 	}
-	total, err = Model.Count()
+	total, err = Model.Group("plat_schedule.id").Count()
 	if err != nil {
 		err = myerrors.DbError("获取总行数失败")
 		return
@@ -129,10 +129,13 @@ func (s *scheduleService) Create(req *model.AddScheduleSeq) (insertId int64, err
 	param.Summary = schedule.SchTitle
 	param.Description = schedule.SchContent
 	param.BeginTime = fmt.Sprintf("%vT%v+08:00", req.SchDate.Format("Y-m-d"), req.SchDate.Format("H:i:s"))
+	param.BeginDate = req.SchDate.Format("Y-m-d")
 	param.EndTime = fmt.Sprintf("%vT%v+08:00", req.SchDateEnd.Format("Y-m-d"), req.SchDateEnd.Format("H:i:s"))
+	param.EndDate = req.SchDateEnd.Format("Y-m-d")
 	param.UserIds = req.UserIds
 
 	param.UserId = s.GetCxtUserDingtalkId()
+	param.SchType = schedule.SchType
 
 	// 记录日志
 	dingtalk_log.Create(s.Ctx, "10", gconv.String(&param))
@@ -299,11 +302,19 @@ func (s *scheduleService) addScheduleByDing(rsp *calendar.GetEventResponse) erro
 	if rsp.Description != nil {
 		schedule.SchContent = *rsp.Description
 	}
-	if rsp.Start != nil && rsp.Start.DateTime != nil {
-		schedule.SchDate = gtime.NewFromStr(*rsp.Start.DateTime)
+	if rsp.Start != nil {
+		if rsp.Start.DateTime != nil {
+			schedule.SchDate = gtime.NewFromStr(*rsp.Start.DateTime)
+		} else if rsp.Start.Date != nil {
+			schedule.SchDate = gtime.NewFromStr(*rsp.Start.Date + " 00:00:00")
+		}
 	}
-	if rsp.End != nil && rsp.End.DateTime != nil {
-		schedule.SchDateEnd = gtime.NewFromStr(*rsp.End.DateTime)
+	if rsp.End != nil {
+		if rsp.End.DateTime != nil {
+			schedule.SchDateEnd = gtime.NewFromStr(*rsp.End.DateTime)
+		} else if rsp.End.Date != nil {
+			schedule.SchDateEnd = gtime.NewFromStr(*rsp.End.Date + " 00:00:00")
+		}
 	}
 	schedule.UserId = 0 // TODO 获取系统的用户Id
 	if rsp.Organizer != nil && rsp.Organizer.Id != nil {
@@ -315,6 +326,11 @@ func (s *scheduleService) addScheduleByDing(rsp *calendar.GetEventResponse) erro
 	if rsp.Id != nil {
 		schedule.DingScheduleId = *rsp.Id
 	}
+	if rsp.IsAllDay != nil && *rsp.IsAllDay {
+		schedule.SchType = "20"
+	} else {
+		schedule.SchType = "10"
+	}
 
 	insertId, err := s.Dao.InsertAndGetId(schedule)
 	if err != nil {
@@ -348,11 +364,19 @@ func updateScheduleByDing(rsp *calendar.GetEventResponse, schedule *model.PlatSc
 	if rsp.Description != nil {
 		schedule.SchContent = *rsp.Description
 	}
-	if rsp.Start != nil && rsp.Start.DateTime != nil {
-		schedule.SchDate = gtime.NewFromStr(*rsp.Start.DateTime)
+	if rsp.Start != nil {
+		if rsp.Start.DateTime != nil {
+			schedule.SchDate = gtime.NewFromStr(*rsp.Start.DateTime)
+		} else if rsp.Start.Date != nil {
+			schedule.SchDate = gtime.NewFromStr(*rsp.Start.Date + " 00:00:00")
+		}
 	}
-	if rsp.End != nil && rsp.End.DateTime != nil {
-		schedule.SchDateEnd = gtime.NewFromStr(*rsp.End.DateTime)
+	if rsp.End != nil {
+		if rsp.End.DateTime != nil {
+			schedule.SchDateEnd = gtime.NewFromStr(*rsp.End.DateTime)
+		} else if rsp.End.Date != nil {
+			schedule.SchDateEnd = gtime.NewFromStr(*rsp.End.Date + " 00:00:00")
+		}
 	}
 	schedule.UserId = 0 // TODO 获取系统的用户Id
 	if rsp.Organizer != nil && rsp.Organizer.Id != nil {
@@ -361,4 +385,9 @@ func updateScheduleByDing(rsp *calendar.GetEventResponse, schedule *model.PlatSc
 	if rsp.Organizer != nil && rsp.Organizer.DisplayName != nil {
 		schedule.UserName = *rsp.Organizer.DisplayName
 	}
+	if rsp.IsAllDay != nil && *rsp.IsAllDay {
+		schedule.SchType = "20"
+	} else {
+		schedule.SchType = "10"
+	}
 }