Browse Source

feature<oms报表> 1工单 2工作量统计

zhaosl 2 năm trước cách đây
mục cha
commit
94754e9cb7

+ 20 - 0
opms_parent/app/handler/sysreport/work_order_report.go

@@ -72,3 +72,23 @@ func (s *WorkOrderReportHandle) GetSupportWorkOrderReportList(ctx context.Contex
 	rsp.Data = resp
 	return nil
 }
+
+//  GetSaleWorkLoadReportList 查询工作量统计
+func (s *WorkOrderReportHandle) GetSupportWorkLoadReportList(ctx context.Context, req *sys_report.SearchWorkLoadData, rsp *comm_def.CommonMsg) error {
+	svc, err := service.NewWorkOrderService(ctx)
+	if err != nil {
+		return err
+	}
+	if err := gvalid.CheckStruct(ctx, req, nil); err != nil {
+		return err
+	}
+
+	resp, err := svc.GetSupportWorkLoadReportList(req)
+	if err != nil {
+		return err
+	}
+	rsp.Code = 200
+	rsp.Msg = "查询成功"
+	rsp.Data = resp
+	return nil
+}

+ 12 - 0
opms_parent/app/model/sys_report/sys_report.go

@@ -43,6 +43,10 @@ type SearchPunchRecordsData struct {
 	Month string `json:"month" v:"required#月份不能为空"`
 }
 
+type SearchWorkLoadData struct {
+	Month    string `json:"month"`
+	DateType string `json:"dateType"`
+}
 type WorkerOrderRtn struct {
 	SaleId          int    `orm:"sale_id"                  json:"saleId"`            // 销售工程师ID
 	SaleName        string `orm:"sale_name"                json:"saleName"`          // 销售工程师
@@ -54,3 +58,11 @@ type WorkerOrderRtn struct {
 	OrderTypeName   string `orm:"order_type_name"          json:"orderTypeName"`     // 工单类型名称
 	OrderTypeNum    int    ` json:"orderTypeNum"`                                    // 工单类型数量
 }
+
+type WorkLoadRtn struct {
+	CreatedBy   int    `orm:"created_by"                  json:"createdBy"` // 销售工程师ID
+	CreatedName string `json:"createdName"`                                 // 销售工程师姓名
+	VisitCount  int    `json:"visitCount"`                                  // 拜访次数
+	OtherCount  int    `json:"otherCount"`                                  // 其他次数
+	TotalCount  int    `json:"totalCount"`                                  // 其他次数
+}

+ 49 - 5
opms_parent/app/service/sys_report/work_order.go

@@ -2,16 +2,19 @@ package service
 
 import (
 	"context"
+	"dashoo.cn/micro/app/dao/plat"
 	"dashoo.cn/micro/app/dao/work"
 	"dashoo.cn/micro/app/model/sys_report"
 	"dashoo.cn/micro/app/service"
 	"database/sql"
 	"github.com/gogf/gf/errors/gerror"
 	"github.com/gogf/gf/os/glog"
+	"strings"
 )
 
 type WorkOrderService struct {
-	Dao *work.WorkOrderDao
+	Dao     *work.WorkOrderDao
+	PlatDao *plat.PlatFollowupDao
 	*service.ContextService
 }
 
@@ -21,6 +24,7 @@ func NewWorkOrderService(ctx context.Context) (svc *WorkOrderService, err error)
 		return nil, err
 	}
 	svc.Dao = work.NewWorkOrderDao(svc.Tenant)
+	svc.PlatDao = plat.NewPlatFollowupDao(svc.Tenant)
 	return svc, nil
 }
 
@@ -105,7 +109,47 @@ func (s WorkOrderService) GetSupportWorkOrderReportList(month string) (list []*s
 	return list, nil
 }
 
-//  GetSaleWorkLoadReportList 查询工作量统计
-//func (s WorkOrderService) GetSupportWorkOrderReportList(month string) (list []*sys_report.WorkerOrderRtn, err error) {
-//
-//}
+// GetSaleWorkOrderReportList 销售工作量统计
+func (s WorkOrderService) GetSupportWorkLoadReportList(req *sys_report.SearchWorkLoadData) (list []*sys_report.WorkLoadRtn, err error) {
+	date := req.Month
+	db := s.PlatDao
+
+	if req.DateType == "day" {
+		date = date[0:10]
+		db.Fields(s.PlatDao.C.CreatedBy, s.PlatDao.C.CreatedName, "SUM(CASE WHEN follow_type = 30 THEN 1 ELSE 0 END) AS VisitCount",
+			"SUM(CASE WHEN follow_type != 30 THEN 1 ELSE 0 END) AS OtherCount", " count(follow_type) as TotalCount").Where(s.PlatDao.C.FollowDate, date).Group(s.PlatDao.C.CreatedBy).Scan(&list)
+	} else if req.DateType == "week" {
+		dateArray := strings.Split(req.Month, ",")
+		dateStart := dateArray[0]
+		dateEnd := dateArray[1]
+		dateEnd = dateEnd[0:10] + " 23:59:59"
+		db.Fields(s.PlatDao.C.CreatedBy, s.PlatDao.C.CreatedName, "SUM(CASE WHEN follow_type = 30 THEN 1 ELSE 0 END) AS VisitCount",
+			"SUM(CASE WHEN follow_type != 30 THEN 1 ELSE 0 END) AS OtherCount", " count(follow_type) as TotalCount").WhereGTE(s.PlatDao.C.FollowDate, dateStart).WhereLTE(s.PlatDao.C.FollowDate, dateEnd).Group(s.PlatDao.C.CreatedBy).Scan(&list)
+	} else if req.DateType == "month" {
+		date = date[0:7]
+		db.Fields(s.PlatDao.C.CreatedBy, s.PlatDao.C.CreatedName, "SUM(CASE WHEN follow_type = 30 THEN 1 ELSE 0 END) AS VisitCount",
+			"SUM(CASE WHEN follow_type != 30 THEN 1 ELSE 0 END) AS OtherCount", " count(follow_type) as TotalCount").WhereLike(s.PlatDao.C.FollowDate, "%"+date+"%").Group(s.PlatDao.C.CreatedBy).Scan(&list)
+	}
+
+	if err != nil && err != sql.ErrNoRows {
+		glog.Error("查询跟进表数据发生错误!")
+		return list, gerror.New("数据处理发生错误!")
+	}
+	// 获取销售数据
+	userList, err := service.GetUserListByRoleCode(s.Ctx, []string{"SalesEngineer", "ProductLineManager"}, 1000)
+	if err != nil {
+		return nil, err
+	}
+	if len(list) > 0 {
+		for i := 0; i < len(list); i++ {
+			userId := list[i].CreatedBy
+			for j := 0; j < len(userList); j++ {
+				if userId == userList[j]["Id"] {
+					list[i].CreatedName = userList[j]["NickName"].(string)
+					break
+				}
+			}
+		}
+	}
+	return list, nil
+}