Jelajahi Sumber

fix(新增存量客户统计)

Roc 4 tahun lalu
induk
melakukan
770ca4728e
4 mengubah file dengan 260 tambahan dan 21 penghapusan
  1. 76 0
      models/stack_company_statistic.go
  2. 54 0
      services/company_statistic.go
  3. 92 0
      services/oss.go
  4. 38 21
      services/task.go

+ 76 - 0
models/stack_company_statistic.go

@@ -0,0 +1,76 @@
+package models
+
+import (
+	"rdluck_tools/orm"
+	"time"
+)
+
+//存量客户数据表
+type StackCompanyStatistic struct {
+	StatisticId  int       `orm:"column(statistic_id);pk"`
+	Type         string    `description:"数据类型,取值范围:新签客户,续约客户,未续约客户"`
+	CompanyId    int       `description:"企业客户id"`
+	CompanyName  string    `description:"企业客户名称"`
+	ProductId    int       `description:"客户产品id"`
+	ProductName  string    `description:"客户产品名称"`
+	ContractNum  int       `description:"第几份合同,默认是:1"`
+	SellerId     int       `description:"所属销售id"`
+	SellerName   string    `description:"所属销售名称"`
+	GroupId      int       `description:"所属销售分组id"`
+	DepartmentId int       `description:"所属销售部门id"`
+	Date         string    `description:"记录日期"`
+	StartDate    string    `description:"服务起始时间"`
+	EndDate      string    `description:"服务截止时间"`
+	RegionType   string    `description:"所属区域,国内,海外"`
+	CreateTime   time.Time `description:"记录添加时间"`
+}
+
+//添加存量客户记录
+func AddStackCompanyStatistic(item *StackCompanyStatistic) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+//待签约用户列表
+type WillExpireCompanyList struct {
+	CompanyContractId int     `description:"合同id"`
+	ContractType      string  `description:"合同类型"`
+	CompanyId         int     `description:"企业客户id"`
+	CompanyName       string  `description:"企业客户名称"`
+	ProductId         int     `description:"产品id"`
+	ProductName       string  `description:"产品名称"`
+	CompanyProductId  int     `description:"客户购买产品授权id"`
+	ContractCode      string  `description:"合同编码"`
+	StartDate         string  `description:"合同开始日期"`
+	EndDate           string  `description:"合同结束日期"`
+	Money             float64 `description:"合同金额"`
+	PayMethod         string  `description:"付款方式"`
+	PayChannel        string  `description:"付款渠道"`
+	ImgUrl            string  `description:"合同图片"`
+	CreateTime        string  `description:"合同创建时间"`
+	ModifyTime        string  `description:"合同修改时间"`
+	Status            string  `description:"合同审批状态,0:待审批,1:已审批;默认:1"`
+	RegionType        string  `description:"企业客户所属区域;可选范围:国内,海外"`
+	SellerId          int     `description:"归属销售id"`
+	GroupId           int     `description:"归属销售分组id"`
+	DepartmentId      int     `description:"所属销售部门id"`
+	SellerName        string  `description:"归属销售名称"`
+	ProductStatus     string  `description:"产品状态"`
+	Count             int     `description:"合同数量"`
+}
+
+//新签客户数(存量客户)
+func GetStackCompanyListV1() (total int64, items []*WillExpireCompanyList, err error) {
+	o := orm.NewOrm()
+	//产品权限
+	sql := `SELECT *,count(1) count FROM (
+SELECT a.*,b.region_type,c.seller_id,c.seller_name,c.company_name,c.group_id,c.department_id,c.status as product_status FROM company_contract a
+		LEFT JOIN company b ON a.company_id = b.company_id
+		LEFT JOIN company_product c ON a.company_id = c.company_id and a.product_id=c.product_id  where a.status = 1
+order by a.end_date desc ) d 
+GROUP BY company_id,product_id `
+
+	total, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 54 - 0
services/company_statistic.go

@@ -0,0 +1,54 @@
+package services
+
+import (
+	"fmt"
+	"hongze/hongze_task/models"
+	"hongze/hongze_task/utils"
+	"time"
+)
+
+//存量客户数据统计
+func StackCompanyStatistic()(err error) {
+	total, list, err := models.GetStackCompanyListV1()
+	if err != nil {
+		fmt.Println("查询新签客户数(存量客户)异常:", err.Error())
+	}
+	fmt.Println("total:", total)
+	//fmt.Println(list)
+
+	for _, company := range list {
+		fmt.Println(company)
+		item := models.StackCompanyStatistic{
+			CompanyId:    company.CompanyId,
+			CompanyName:  company.CompanyName,
+			ProductId:    company.ProductId,
+			ProductName:  company.ProductName,
+			ContractNum:  company.Count,
+			SellerId:     company.SellerId,
+			SellerName:   company.SellerName,
+			GroupId:      company.GroupId,
+			DepartmentId: company.DepartmentId,
+			Date:         utils.GetToday(utils.FormatDate),
+			StartDate:    company.StartDate,
+			EndDate:      company.EndDate,
+			RegionType:   company.RegionType,
+			CreateTime:   time.Now(),
+		}
+
+		if company.ProductStatus == "正式" {
+			//正式客户
+			if company.Count == 1 {
+				//新签客户数
+				item.Type = "新签客户"
+			} else {
+				item.Type = "续约客户"
+			}
+		} else {
+			//未续约客户
+			item.Type = "未续约客户"
+		}
+		err := models.AddStackCompanyStatistic(&item)
+		fmt.Println(err)
+	}
+	return
+}

+ 92 - 0
services/oss.go

@@ -0,0 +1,92 @@
+package services
+
+import (
+	"github.com/aliyun/aliyun-oss-go-sdk/oss"
+	"os"
+	"time"
+
+	"hongze/hongze_task/utils"
+)
+
+/*
+上传demo
+func init() {
+	fmt.Println("start")
+	randStr := utils.GetRandStringNoSpecialChar(28)
+	fileName :=  randStr + ".jpg"
+	fmt.Println("fileName:",fileName)
+	fpath:="./1.png"
+	resourceUrl,err:=UploadAliyun(fileName,fpath)
+	if err!=nil {
+		fmt.Println("UploadAliyun Err:",err.Error())
+		return
+	}
+	fmt.Println("resourceUrl:",resourceUrl)
+	fmt.Println("end")
+}
+*/
+
+//图片上传到阿里云
+func UploadAliyun(filename, filepath string) (string,error) {
+	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
+	if err != nil {
+		return "1",err
+	}
+	bucket, err := client.Bucket(utils.Bucketname)
+	if err != nil {
+		return "2",err
+	}
+	path := utils.Upload_dir + time.Now().Format("200601/20060102/")
+	path += filename
+	err = bucket.PutObjectFromFile(path, filepath)
+	if err != nil {
+		return "3",err
+	}
+	path = utils.Imghost + path
+	return path,err
+}
+
+
+//音频上传到阿里云
+func UploadAudioAliyun(filename, filepath string) (string,error) {
+	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
+	if err != nil {
+		return "1",err
+	}
+	bucket, err := client.Bucket(utils.Bucketname)
+	if err != nil {
+		return "2",err
+	}
+	path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
+	path += filename
+	err = bucket.PutObjectFromFile(path, filepath)
+	if err != nil {
+		return "3",err
+	}
+	path = utils.Imghost + path
+	return path,err
+}
+
+//视频上传到阿里云
+func UploadVideoAliyun(filename, filepath,savePath string) (error) {
+	defer func() {
+		os.Remove(filepath)
+	}()
+	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
+	if err != nil {
+		return err
+	}
+	bucket, err := client.Bucket(utils.Bucketname)
+	if err != nil {
+		return err
+	}
+	//path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
+	//path += filename
+	err = bucket.PutObjectFromFile(savePath, filepath)
+	if err != nil {
+		return err
+	}
+	//path = utils.Imghost + path
+	//return path,err
+	return err
+}

+ 38 - 21
services/task.go

@@ -3,35 +3,21 @@ package services
 import (
 	"fmt"
 	"github.com/astaxie/beego/toolbox"
+	"hongze/hongze_task/utils"
 )
 
 func Task() {
 	fmt.Println("task start")
-	//发送邮件
-	sendEmail := toolbox.NewTask("sendEmail", "0 0 12 * * 0 ", SendEmail)
-	toolbox.AddTask("sendEmail", sendEmail)
+
+	//如果是生产环境,才需要走这些任务
+	if utils.RunMode == "release"{
+		releaseTask()
+	}
 
 	//潜在客户
 	freeViewerDetail := toolbox.NewTask("freeViewerDetail", "0 0 9 * * 1 ", FreeViewerDetail)
 	toolbox.AddTask("freeViewerDetail", freeViewerDetail)
 
-	oneMinute := toolbox.NewTask("oneMinute", "0 */1 7-23 * * * ", OneMinute)
-	toolbox.AddTask("oneMinute", oneMinute)
-
-	//隆众指标获取
-	getLzProductList := toolbox.NewTask("getLzProductList", "0 0 11-19/1 * * * ", GetLzProductList)
-	toolbox.AddTask("getLzProductList", getLzProductList)
-	//隆众指标数据获取
-	getLzProductDetail := toolbox.NewTask("getLzProductDetail", "0 5 11-19/1 * * * ", GetLzProductDetail)
-	toolbox.AddTask("getLzProductDetail", getLzProductDetail)
-
-	//隆众价格指标获取
-	getLzProductPriceProduct := toolbox.NewTask("getLzProductPriceProduct", "0 5 11-19/1 * * * ", GetLzProductPriceProduct)
-	toolbox.AddTask("getLzProductPriceProduct", getLzProductPriceProduct)
-	//隆众价格指标数据获取
-	getLzProductPriceData := toolbox.NewTask("getLzProductPriceData", "0 10 11-19/1 * * * ", GetLzProductPriceData)
-	toolbox.AddTask("getLzProductPriceData", getLzProductPriceData)
-
 	//正式->试用
 	companyTryOut := toolbox.NewTask("companyTryOut", "0 5 0 * * *", CompanyTryOut)
 	toolbox.AddTask("companyTryOut", companyTryOut)
@@ -44,11 +30,12 @@ func Task() {
 	companyLoss := toolbox.NewTask("companyLoss", "0 20 0 * * *", CompanyLoss)
 	toolbox.AddTask("companyLoss", companyLoss)
 
+	//用户产品权限试用-->关闭
 	companyReportPermissionClose := toolbox.NewTask("companyReportPermissionClose", "0 30 0 * * *", CompanyReportPermissionClose)
 	toolbox.AddTask("用户产品权限试用-->关闭", companyReportPermissionClose)
 
 
-	//到期提醒
+	// 正式/试用 用户到期提醒
 	companyRemind := toolbox.NewTask("companyRemind", "0 30 08 * * *", CompanyRemind)
 	toolbox.AddTask("companyRemind", companyRemind)
 
@@ -56,6 +43,11 @@ func Task() {
 	//deleteReportSaveLog := toolbox.NewTask("deleteReportSaveLog", "0 30 08 * * *", DeleteReportSaveLog)
 	//toolbox.AddTask("deleteReportSaveLog", deleteReportSaveLog)
 
+
+	// 存量客户数据统计
+	stackCompanyStatistic := toolbox.NewTask("stackCompanyStatistic", "0 35 0 * * *", StackCompanyStatistic)
+	toolbox.AddTask("存量客户数据统计", stackCompanyStatistic)
+
 	toolbox.StartTask()
 	//GetHistoryLzProductDetail()
 	//GetLzPrice()
@@ -65,6 +57,31 @@ func Task() {
 	fmt.Println("task end")
 }
 
+//生产环境需要走的任务
+func releaseTask(){
+
+	//隆众指标获取
+	getLzProductList := toolbox.NewTask("getLzProductList", "0 0 11-19/1 * * * ", GetLzProductList)
+	toolbox.AddTask("getLzProductList", getLzProductList)
+	//隆众指标数据获取
+	getLzProductDetail := toolbox.NewTask("getLzProductDetail", "0 5 11-19/1 * * * ", GetLzProductDetail)
+	toolbox.AddTask("getLzProductDetail", getLzProductDetail)
+
+	//隆众价格指标获取
+	getLzProductPriceProduct := toolbox.NewTask("getLzProductPriceProduct", "0 5 11-19/1 * * * ", GetLzProductPriceProduct)
+	toolbox.AddTask("getLzProductPriceProduct", getLzProductPriceProduct)
+	//隆众价格指标数据获取
+	getLzProductPriceData := toolbox.NewTask("getLzProductPriceData", "0 10 11-19/1 * * * ", GetLzProductPriceData)
+	toolbox.AddTask("getLzProductPriceData", getLzProductPriceData)
+
+	//发送邮件
+	sendEmail := toolbox.NewTask("sendEmail", "0 0 12 * * 0 ", SendEmail)
+	toolbox.AddTask("sendEmail", sendEmail)
+
+	oneMinute := toolbox.NewTask("oneMinute", "0 */1 7-23 * * * ", OneMinute)
+	toolbox.AddTask("oneMinute", oneMinute)
+}
+
 func TaskTest(){
 	fmt.Println("The task is start")
 	//companyReportPermissionClose := toolbox.NewTask("companyTryOut", "0 5 0 * * *", CompanyReportPermissionClose)