Browse Source

Merge branch 'crm6.5_user_apply' into debug

# Conflicts:
#	services/task.go
xiexiaoyuan 3 năm trước cách đây
mục cha
commit
4d74212b3f

+ 57 - 0
models/company_report_record.go

@@ -0,0 +1,57 @@
+package models
+
+import (
+	"github.com/rdlucklib/rdluck_tools/orm"
+	"time"
+)
+
+type CompanyReportRecord struct {
+	CompanyReportRecordId int `orm:"column(company_report_record_id);pk"`
+	CompanyId             int
+	CompanyProductId      int
+	CompanyName           string
+	Status                string
+	StartDate             string
+	EndDate               string
+	SellerId              int
+	SellerName            string
+	CreditCode            string
+	CreateDate            string
+	CreateTime            time.Time
+	ModifyTime            time.Time
+}
+
+func AddCompanyReportRecord(item *CompanyReportRecord) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+func GetExistCompanyReportRecord(endDate string) (list []*CompanyReportRecord, err error) {
+	sql := ` SELECT * FROM  company_report_record WHERE create_date>=? `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, endDate).QueryRows(&list)
+	return
+}
+
+func GetCompanyList(endDate string) (list []*CompanyReportRecord, err error) {
+	sql := ` SELECT a.company_id,a.company_name,a.credit_code,b.status,b.start_date,b.end_date,b.seller_id,b.seller_name,b.company_product_id
+			FROM  company AS a
+			INNER JOIN company_product AS b ON a.company_id=b.company_id
+			WHERE b.product_id=1`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+// 更新客户报告记录信息
+func UpdateCompanyReportRecord(where, updateParams map[string]interface{}) error {
+	o := orm.NewOrm()
+	ptrStructOrTableName := "company_report_record"
+	qs := o.QueryTable(ptrStructOrTableName)
+	for expr, exprV := range where {
+		qs = qs.Filter(expr, exprV)
+	}
+	_, err := qs.Update(updateParams)
+	return err
+}

+ 1 - 0
models/db.go

@@ -96,6 +96,7 @@ func init() {
 		new(data_manage.EdbDataLt),               //路透指标数据表
 		new(CompanyProductUpdateLog),             //客户产品状态变更表
 		new(roadshow.RsReportRecord),             //路演记录
+		new(CompanyReportRecord),
 		new(CompanyViewStatistics),
 	)
 }

+ 42 - 22
models/free_viewer.go

@@ -1,39 +1,59 @@
 package models
 
-import "github.com/rdlucklib/rdluck_tools/orm"
+import (
+	"github.com/rdlucklib/rdluck_tools/orm"
+	"time"
+)
 
 type FreeViewerDetails struct {
 	UserId         int
 	RealName       string
 	Mobile         string
-	Note           string
-	CreatedTime    string
-	MaxCreatedTime string
+	CompanyName    string
+	LastTime       string
 	Email          string
+	ApplyRecordId  int
 }
 
 func GetFreeViewerDetails(startTime, endTime string) (items []*FreeViewerDetails, err error) {
-	sql := `select u.user_id,u.real_name,u.mobile,u.note,u.created_time,max(uvh.created_time) as max_created_time,u.email
-	from wx_user u
-	LEFT JOIN user_view_history uvh on u.user_id = uvh.user_id
-    INNER JOIN user_record AS c ON u.user_id=c.user_id
-	where u.company_id = 1
-	and u.is_deal=0
-	and u.apply_method<>2
-	and u.mobile is not null
-	AND u.mobile<>''
-	and u.created_time > ?
-	and u.created_time <= ?
-	AND c.create_platform<>4
-    AND u.is_deal = 0
-	group by u.user_id`
-	_, err = orm.NewOrm().Raw(sql, startTime, endTime).QueryRows(&items)
+	sql := `SELECT
+	a.user_id,
+	a.real_name,
+	a.mobile,
+	a.email,
+    y.apply_record_id,
+    IF(a.company_id > 1,b.company_name,a.note) AS company_name,
+	IF(y.apply_record_id > 0,y.create_time, a.created_time) as last_time
+FROM
+	wx_user AS a
+	LEFT JOIN company AS b ON a.company_id = b.company_id
+  LEFT JOIN (SELECT * from company_product where product_id = 1) AS bp ON a.company_id = bp.company_id
+	LEFT JOIN (SELECT user_record_id, create_platform, user_id from user_record) AS c ON a.user_id = c.user_id 
+	LEFT JOIN (SELECT * from yb_apply_record where apply_record_id in (SELECT max(apply_record_id) from yb_apply_record GROUP BY user_id)) as y on a.user_id = y.user_id
+WHERE
+	b.enabled = 1 
+	AND ( y.apply_record_id > 0 or a.company_id=1 or bp.company_product_id is null)
+	AND ( a.mobile IS NOT NULL ) 
+	AND ( a.mobile <> '' ) 
+	AND ( c.create_platform <> 4 OR c.create_platform IS NULL )
+    AND (y.status = "潜在用户" or y.status is null or y.status = "权益用户" or y.status = "流失" )
+	AND ((y.apply_record_id > 0 and y.create_time > ? and y.create_time <= ?) OR (y.apply_record_id is null AND a.created_time > ? and a.created_time <= ?) )
+  GROUP BY a.user_id ORDER BY last_time asc
+	`
+	_, err = orm.NewOrm().Raw(sql, startTime, endTime, startTime, endTime).QueryRows(&items)
 	return
 }
 
 // DealWxUser 处理用户标记状态
-func DealWxUser(userId int) (err error) {
-	sql := `update wx_user set is_deal = 1 where user_id=?`
-	_, err = orm.NewOrm().Raw(sql, userId).Exec()
+func DealWxUsers(userIds string) (err error) {
+	sql := `update wx_user set is_deal = 1 where user_id in (`+userIds+`) and is_deal=0`
+	_, err = orm.NewOrm().Raw(sql).Exec()
+	return
+}
+
+// DealFiccApply 处理用户申请标记状态
+func DealFiccApply(applyRecordIds string, dealTime time.Time) (err error) {
+	sql := `update yb_apply_record set op_status = 1, deal_time=?  where apply_record_id in (`+applyRecordIds+`) and op_status=0`
+	_, err = orm.NewOrm().Raw(sql, dealTime).Exec()
 	return
 }

+ 76 - 0
services/company/company_report_record.go

@@ -0,0 +1,76 @@
+package company
+
+import (
+	"context"
+	"fmt"
+	"hongze/hongze_task/models"
+	"hongze/hongze_task/utils"
+	"strconv"
+	"sync"
+	"time"
+)
+
+var companyLock sync.Mutex
+
+func AddCompanyReportRecord(cont context.Context) (err error) {
+	companyLock.Lock()
+	defer func() {
+		if err != nil {
+			fmt.Println("AddReportRecord Err:" + err.Error())
+		}
+	}()
+
+	endDate := time.Now().Format(utils.FormatDate)
+
+	existList, err := models.GetExistCompanyReportRecord(endDate)
+	if err != nil {
+		return
+	}
+	existMap := make(map[int]*models.CompanyReportRecord)
+	for _, v := range existList {
+		existMap[v.CompanyId] = v
+	}
+	list, err := models.GetCompanyList(endDate)
+	if err != nil {
+		return
+	}
+	for _, v := range list {
+		if _, ok := existMap[v.CompanyId]; ok { //修改
+			utils.FileLog.Info("update company:" + strconv.Itoa(v.CompanyId))
+			recordWhereParams := make(map[string]interface{})
+			recordWhereParams["company_id"] = v.CompanyId
+
+			recordUpdateParams := make(map[string]interface{})
+			recordUpdateParams["company_name"] = v.CompanyName
+			recordUpdateParams["status"] = v.Status
+			recordUpdateParams["start_date"] = v.StartDate
+			recordUpdateParams["end_date"] = v.EndDate
+			recordUpdateParams["seller_id"] = v.SellerId
+			recordUpdateParams["seller_name"] = v.SellerName
+			recordUpdateParams["credit_code"] = v.CreditCode
+			recordUpdateParams["modify_time"] = time.Now()
+			err = models.UpdateCompanyReportRecord(recordWhereParams, recordUpdateParams)
+		} else { //新增
+			utils.FileLog.Info("add company:" + strconv.Itoa(v.CompanyId))
+			item := new(models.CompanyReportRecord)
+			item.CompanyId = v.CompanyId
+			item.CompanyProductId = v.CompanyProductId
+			item.CompanyName = v.CompanyName
+			item.Status = v.Status
+			item.StartDate = v.StartDate
+			item.EndDate = v.EndDate
+			item.SellerId = v.SellerId
+			item.SellerName = v.SellerName
+			item.CreditCode = v.CreditCode
+			item.CreateDate = time.Now().Format(utils.FormatDate)
+			item.CreateTime = time.Now()
+			item.ModifyTime = time.Now()
+			_, err = models.AddCompanyReportRecord(item)
+			if err != nil {
+				return
+			}
+		}
+	}
+	companyLock.Unlock()
+	return err
+}

+ 24 - 5
services/free_viewer.go

@@ -7,6 +7,8 @@ import (
 	"hongze/hongze_task/models"
 	"hongze/hongze_task/utils"
 	"os"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -23,6 +25,8 @@ func FreeViewerDetail(cont context.Context) (err error) {
 	startTime := time.Now().AddDate(0, 0, -7).Format(utils.FormatDateTime)
 	endTime := time.Now().Format(utils.FormatDateTime)
 
+	userIdsStr := ""
+	applyRecordIdsStr := ""
 	items, err := models.GetFreeViewerDetails(startTime, endTime)
 	if err != nil {
 		return
@@ -54,14 +58,18 @@ func FreeViewerDetail(cont context.Context) (err error) {
 		cellB := row.AddCell()
 		cellB.Value = item.Mobile
 		cellC := row.AddCell()
-		cellC.Value = item.Note
+		cellC.Value = item.CompanyName
 		cellD := row.AddCell()
-		cellD.Value = item.CreatedTime
+		cellD.Value = item.LastTime
 		cellE := row.AddCell()
 		cellE.Value = item.Email
 
-		models.DealWxUser(item.UserId)
+		userIdsStr += ","+strconv.Itoa(item.UserId)
+		applyRecordIdsStr += ","+strconv.Itoa(item.ApplyRecordId)
 	}
+	userIdsStr = strings.Trim(userIdsStr, ",")
+	applyRecordIdsStr = strings.Trim(applyRecordIdsStr, ",")
+	_ = dealUser(userIdsStr, applyRecordIdsStr)
 
 	savePath := "free_viewer_details" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
 	err = file.Save("./" + savePath)
@@ -71,11 +79,22 @@ func FreeViewerDetail(cont context.Context) (err error) {
 	//发送邮件
 	fmt.Println("start send email")
 	sendResult := utils.SendEmailByHongze(title, "潜在客户回访记录',\"你好,上周潜在客户回访记录见附件。", utils.EmailSendToHzUsers, savePath, title+".xlsx")
-	//sendResult:=utils.SendEmailByHongze(title,"你好,上周研报阅读统计见附件。",utils.EmailSendToMe,savePath)
+	//sendResult:=utils.SendEmailByHongze(title,"潜在客户回访记录',\"你好,上周潜在客户回访记录见附件。",utils.EmailSendToMe,savePath, title+".xlsx")
 	if sendResult {
-		os.Remove(savePath)
+		_ = os.Remove(savePath)
 	}
 	//fmt.Println("send result:", sendResult)
 	fmt.Println("end send email")
 	return nil
 }
+
+func dealUser(userIds, applyRecordIds string) (err error) {
+	if userIds !="" {
+		_ = models.DealWxUsers(userIds)
+	}
+	if applyRecordIds != "" {
+		nowTime := time.Now()
+		_ = models.DealFiccApply(applyRecordIds, nowTime)
+	}
+	return
+}

+ 4 - 2
services/roadshow/report.go

@@ -11,7 +11,7 @@ import (
 	"context"
 )
 
-func AddReportRecord(cont context.Context)(err error) {
+func AddReportRecord(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("AddReportRecord Err:" + err.Error())
@@ -36,7 +36,7 @@ func AddReportRecord(cont context.Context)(err error) {
 		companyMap[v.CompanyId] = v
 	}
 
-	endDate := time.Now().Format(utils.FormatDate)
+	endDate := time.Now().AddDate(-1, 0, 0).Format(utils.FormatDate)
 
 	existList, err := roadshow.GetExistRsReportRecord(endDate)
 	if err != nil {
@@ -72,6 +72,7 @@ func AddReportRecord(cont context.Context)(err error) {
 
 		key := strconv.Itoa(v.RsCalendarId) + "_" + strconv.Itoa(v.RsCalendarResearcherId)
 		if _, ok := existMap[key]; ok { //修改
+			utils.FileLog.Info("update:" + strconv.Itoa(v.RsCalendarId))
 			reportWhereParams := make(map[string]interface{})
 			reportWhereParams["rs_calendar_id"] = v.RsCalendarId
 			reportWhereParams["rs_calendar_researcher_id"] = v.RsCalendarResearcherId
@@ -147,6 +148,7 @@ func AddReportRecord(cont context.Context)(err error) {
 				item.SellerGroupId = 0
 				item.SellerGroupName = ""
 			}
+			utils.FileLog.Info("add:" + strconv.Itoa(v.RsCalendarId))
 			item.RsCalendarId = v.RsCalendarId
 			item.RsCalendarResearcherId = v.RsCalendarResearcherId
 			item.StartDate = v.StartDate

+ 12 - 15
services/task.go

@@ -6,6 +6,7 @@ import (
 	"fmt"
 	"github.com/beego/beego/v2/task"
 	"hongze/hongze_task/models"
+	"hongze/hongze_task/services/company"
 	"hongze/hongze_task/services/company_contract"
 	"hongze/hongze_task/services/data"
 	"hongze/hongze_task/services/roadshow"
@@ -57,7 +58,7 @@ func Task() {
 	// 定时往同花顺推送报告
 	sendWaitReport := task.NewTask("sendWaitReport", "0 */1 * * * * ", SendWaitReport)
 	task.AddTask("定时往同花顺推送报告", sendWaitReport)
-	
+
 	// 研报电话会提醒
 	ybTelRemind := task.NewTask("YbTelRemind", "0 */1 * * * * ", YbTelRemind)
 	task.AddTask("研报电话会提醒", ybTelRemind)
@@ -65,11 +66,6 @@ func Task() {
 	// 研报沙龙提醒
 	ybSalonRemind := task.NewTask("ybSalonRemind", "0 */1 * * * * ", YbSalonRemind)
 	task.AddTask("研报沙龙提醒", ybSalonRemind)
-
-	//初始化指标更新状态
-	resetEdbInfoIsUpdate := task.NewTask("resetEdbInfoIsUpdate", "0 0 0 * * *", data.ResetEdbInfoIsUpdate)
-	task.AddTask("resetEdbInfoIsUpdate", resetEdbInfoIsUpdate)
-
 	//GetHistoryLzProductDetail()
 	//GetLzPrice()
 	//GetLzProductDetail()
@@ -81,7 +77,7 @@ func Task() {
 	task.AddTask("定时新增手工指标数据提醒", addEdbTask)
 	//每次服务启动都需要执行一次的
 	_ = AddEdbTask(nil)
-	
+
 	//每日用户阅读数据统计
 	statisticsUserView := task.NewTask("statisticsUserView", "0 5 2 * * *", StatisticsUserView)
 	task.AddTask("每日用户阅读数据统计", statisticsUserView)
@@ -90,26 +86,27 @@ func Task() {
 	modifyRsCalendarStatus := task.NewTask("modifyRsCalendarStatus", "0 */1 * * * * ", roadshow.ModifyRsCalendarResearcherStatus)
 	task.AddTask("modifyRsCalendarStatus", modifyRsCalendarStatus)
 
-	// 定时往追加数据到ETA表格(凌晨5点)
-	appendDataToEdbTable := task.NewTask("appendDataToEdbTable", "0 1 5 * * * ", data.AppendDataToEdbTable)
-	task.AddTask("定时往追加数据到ETA表格", appendDataToEdbTable)
-
 	addReportRecord := task.NewTask("addReportRecord", "0 0 */1 * * *", roadshow.AddReportRecord)
 	task.AddTask("addReportRecord", addReportRecord)
 
+	//存量客户数据统计
+	addCompanyReportRecord := task.NewTask("addCompanyReportRecord", "0 0 */1 * * *", company.AddCompanyReportRecord)
+	task.AddTask("addCompanyReportRecord", addCompanyReportRecord)
+
 	//CRM 6.3 客户列表路演次数统计
 	roadShowTotal := task.NewTask("roadShowTotal", "0 */30 * * * *", roadshow.RoadShow)
 	task.AddTask("roadShowTotal", roadShowTotal)
 
-	//路演公开会议合并
-	setPublicMeetingUnionCode := task.NewTask("setPublicMeetingUnionCode", "0 */10 * * * *", roadshow.SetPublicMeetingUnionCode)
-	task.AddTask("setPublicMeetingUnionCode", setPublicMeetingUnionCode)
-
 	//每半个小时用户阅读数据统计
 	statisticsUserView1Hour := task.NewTask("statisticsUserView1Hour", "0 */30 * * * *", StatisticsUserView1Hour)
 	task.AddTask("每半个小时用户阅读数据统计", statisticsUserView1Hour)
 
+	//路演公开会议合并
+	setPublicMeetingUnionCode := task.NewTask("setPublicMeetingUnionCode", "0 */10 * * * *", roadshow.SetPublicMeetingUnionCode)
+	task.AddTask("setPublicMeetingUnionCode", setPublicMeetingUnionCode)
+
 	task.StartTask()
+
 	fmt.Println("task end")
 }