Преглед изворни кода

featrue<工单>:报表统计开发

zhaosl пре 2 година
родитељ
комит
99ecc1086e

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

@@ -0,0 +1,74 @@
+package sysreport
+
+import (
+	"context"
+	"dashoo.cn/common_definition/comm_def"
+	"dashoo.cn/micro/app/model/sys_report"
+	service "dashoo.cn/micro/app/service/sys_report"
+	"github.com/gogf/gf/util/gvalid"
+)
+
+type WorkOrderReportHandle struct {
+}
+
+// Swagger:WorkOrderReport  销售工单统计报表
+func (s *WorkOrderReportHandle) GetSaleWorkOrderReportList(ctx context.Context, req *sys_report.SearchPunchRecordsData, 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.GetSaleWorkOrderReportList(req.Month)
+	if err != nil {
+		return err
+	}
+	rsp.Code = 200
+	rsp.Msg = "查询成功"
+	rsp.Data = resp
+
+	return nil
+}
+
+//  Swagger:WorkOrderReport 产品线工单统计报表
+func (s *WorkOrderReportHandle) GetProductWorkOrderReportList(ctx context.Context, req *sys_report.SearchPunchRecordsData, 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.GetProductWorkOrderReportList(req.Month)
+	if err != nil {
+		return err
+	}
+	rsp.Code = 200
+	rsp.Msg = "查询成功"
+	rsp.Data = resp
+
+	return nil
+}
+
+// Swagger:WorkOrderReport 产品线工单统计报表
+func (s *WorkOrderReportHandle) GetSupportWorkOrderReportList(ctx context.Context, req *sys_report.SearchPunchRecordsData, 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.GetSupportWorkOrderReportList(req.Month)
+	if err != nil {
+		return err
+	}
+	rsp.Code = 200
+	rsp.Msg = "查询成功"
+	rsp.Data = resp
+	return nil
+}

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

@@ -38,3 +38,19 @@ type IdsReq struct {
 type IdRequiredReq struct {
 	Id int `json:"id" v:"required#请输入Id"`
 }
+
+type SearchPunchRecordsData struct {
+	Month string `json:"month" v:"required#月份不能为空"`
+}
+
+type WorkerOrderRtn struct {
+	SaleId          int    `orm:"sale_id"                  json:"saleId"`            // 销售工程师ID
+	SaleName        string `orm:"sale_name"                json:"saleName"`          // 销售工程师
+	ProductLine     string `orm:"product_line"                json:"productLine"`    // 产品线
+	ProductLineName string `json:"productLineName"`                                  // 产品线名称
+	AssignUserId    int    `orm:"assign_user_id"            json:"assignUserId"`     // 分派人员ID
+	AssignUserName  string `orm:"assign_user_name"            json:"assignUserName"` // 分派人员姓名
+	OrderTypeId     int    `orm:"order_type_id"            json:"orderTypeId"`       // 工单类型
+	OrderTypeName   string `orm:"order_type_name"          json:"orderTypeName"`     // 工单类型名称
+	OrderTypeNum    int    ` json:"orderTypeNum"`                                    // 工单类型数量
+}

+ 10 - 0
opms_parent/app/service/base.go

@@ -194,6 +194,16 @@ func GetDictDataByType(ctx context.Context, typ string) (map[string]string, erro
 	return res, nil
 }
 
+// Find获取一个切片并在其中查找元素。如果找到它,它将返回它的密钥,否则它将返回-1和一个错误的bool。
+func FindItem(slice []string, val string) (int, bool) {
+	for i, item := range slice {
+		if item == val {
+			return i, true
+		}
+	}
+	return -1, false
+}
+
 // 有序
 func GetDictDataTreeByType(ctx context.Context, typ string) (*gmap.ListMap, error) {
 	data, err := baseGetDictDataByType(ctx, typ)

+ 111 - 0
opms_parent/app/service/sys_report/work_order.go

@@ -0,0 +1,111 @@
+package service
+
+import (
+	"context"
+	"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"
+)
+
+type WorkOrderService struct {
+	Dao *work.WorkOrderDao
+	*service.ContextService
+}
+
+func NewWorkOrderService(ctx context.Context) (svc *WorkOrderService, err error) {
+	svc = new(WorkOrderService)
+	if svc.ContextService, err = svc.Init(ctx); err != nil {
+		return nil, err
+	}
+	svc.Dao = work.NewWorkOrderDao(svc.Tenant)
+	return svc, nil
+}
+
+// GetSaleWorkOrderReportList 查询销售工单统计
+func (s WorkOrderService) GetSaleWorkOrderReportList(month string) (list []*sys_report.WorkerOrderRtn, err error) {
+	db := s.Dao
+	if month != "" {
+		month = month[0:7]
+		err = db.Fields(s.Dao.C.SaleId, s.Dao.C.SaleName, s.Dao.C.OrderTypeId, s.Dao.C.OrderTypeName, "COUNT(order_type_id) AS OrderTypeNum").WhereLike(s.Dao.C.CreatedTime, "%"+month+"%").Group(s.Dao.C.SaleId, s.Dao.C.OrderTypeId).Scan(&list)
+
+	}
+	if month == "" {
+		err = db.Fields(s.Dao.C.SaleId, s.Dao.C.SaleName, s.Dao.C.OrderTypeId, s.Dao.C.OrderTypeName, "COUNT(order_type_id) AS OrderTypeNum").Group(s.Dao.C.SaleId, s.Dao.C.OrderTypeId).Scan(&list)
+	}
+
+	if err != nil && err != sql.ErrNoRows {
+		glog.Error("查询销售报表发生错误!")
+		return nil, gerror.New("查询销售报表发生错误!")
+	}
+
+	return list, nil
+}
+
+// GetSaleWorkOrderReportList 查询产品线工单统计
+func (s WorkOrderService) GetProductWorkOrderReportList(month string) (list []*sys_report.WorkerOrderRtn, err error) {
+	db := s.Dao
+	if month != "" {
+		month = month[0:7]
+		err = db.Fields(s.Dao.C.ProductLine, s.Dao.C.OrderTypeId, s.Dao.C.OrderTypeName, "COUNT(order_type_id) AS OrderTypeNum").WhereLike(s.Dao.C.CreatedTime, "%"+month+"%").Group(s.Dao.C.ProductLine, s.Dao.C.OrderTypeId).Scan(&list)
+
+	}
+
+	if month == "" {
+		err = db.Fields(s.Dao.C.ProductLine, s.Dao.C.OrderTypeId, s.Dao.C.OrderTypeName, "COUNT(order_type_id) AS OrderTypeNum").Group(s.Dao.C.ProductLine, s.Dao.C.OrderTypeId).Scan(&list)
+	}
+
+	if err != nil && err != sql.ErrNoRows {
+		glog.Error("查询销售报表发生错误!")
+		return nil, gerror.New("查询销售报表发生错误!")
+	}
+	//
+	res, err := service.GetDictDataByType(s.Ctx, "sys_product_line")
+	glog.Info("res的结果是:", res)
+	if err != nil {
+		glog.Error("字典查询调用失败")
+		return list, nil
+	}
+	var keyList []string
+	for k, _ := range res {
+		keyList = append(keyList, k)
+	}
+	for i := 0; i < len(list); i++ {
+		productLine := list[i].ProductLine
+		num, _ := service.FindItem(keyList, productLine)
+		if num != -1 {
+			list[i].ProductLineName = res[productLine]
+		}
+		if num == -1 {
+			list[i].ProductLineName = ""
+		}
+	}
+	return list, nil
+}
+
+// GetSaleWorkOrderReportList 查询支持人员工单统计
+func (s WorkOrderService) GetSupportWorkOrderReportList(month string) (list []*sys_report.WorkerOrderRtn, err error) {
+	db := s.Dao
+	if month != "" {
+		month = month[0:7]
+		err = db.Fields(s.Dao.C.AssignUserId, s.Dao.C.AssignUserName, s.Dao.C.OrderTypeId, s.Dao.C.OrderTypeName, "COUNT(order_type_id) AS OrderTypeNum").WhereLike(s.Dao.C.CreatedTime, "%"+month+"%").Group(s.Dao.C.AssignUserId, s.Dao.C.OrderTypeId).Scan(&list)
+
+	}
+	if month == "" {
+		err = db.Fields(s.Dao.C.AssignUserId, s.Dao.C.AssignUserName, s.Dao.C.OrderTypeId, s.Dao.C.OrderTypeName, "COUNT(order_type_id) AS OrderTypeNum").Group(s.Dao.C.AssignUserId, s.Dao.C.OrderTypeId).Scan(&list)
+	}
+
+	if err != nil && err != sql.ErrNoRows {
+		glog.Error("查询销售报表发生错误!")
+		return nil, gerror.New("查询销售报表发生错误!")
+	}
+
+	return list, nil
+}
+
+//  GetSaleWorkLoadReportList 查询工作量统计
+//func (s WorkOrderService) GetSupportWorkOrderReportList(month string) (list []*sys_report.WorkerOrderRtn, err error) {
+//
+//}

+ 1 - 0
opms_parent/main.go

@@ -68,6 +68,7 @@ func main() {
 	s.RegisterName("DingUpload", new(dingtalk.DingUploadHandler), "")
 	s.RegisterName("Report", new(sysreport.SysReportHandler), "")
 	s.RegisterName("RoleReport", new(sysreport.SysRoleReportHandler), "")
+	s.RegisterName("WorkOrderReport", new(sysreport.WorkOrderReportHandle), "")
 	s.RegisterName("CustCustomerBidRecord", new(cust.CustCustomerBidRecordHandler), "")
 	s.RegisterName("CustCustomerInvoiceHeader", new(cust.CustCustomerInvoiceHeaderHandler), "")
 	s.RegisterName("Questionnaire", new(plat.QuestionnaireHandler), "")