package models import ( "github.com/beego/beego/v2/client/orm" "time" ) type CompanyJson struct { CompanyName string `json:"name"` //公司名称 ShortName string `json:"short_name"` //公司简称 CreditCode string `json:"social"` //社会信用代码 City string `json:"city"` //所在地级市或直辖市 SignType string `json:"sign_type"` //客户重要度(A类、B类、C类、D类) Fe string `json:"f_e"` //客户类型(FICC、权益、策略) IndustryName string `json:"industry"` //所属行业(公募、私募、券商资管、保险、海外、其他类型) Mobile string `json:"sale_phone"` //所属销售(销售手机号) Status string `json:"status"` //客户状态(正式、试用) //Permission string `json:"permissions"` //客户权限(医药,科技,智造,消费,策略,专家,路演服务,研选) StartDate string `json:"start_time"` //服务期限开始时间 EndDate string `json:"end_time"` //服务期限结束时间 Info string `json:"info"` //简介 CreatedTime string `json:"create_time"` //创建时间 PermissionData []*PermissionData `json:"permission_data"` //创建时间 //CreatedTimes string //创建时间 EndDateTime time.Time //创建时间 Cid int // 公司ID } type PermissionDataList struct { PermissionData []*PermissionData } type PermissionData struct { PermissionName string `json:"permission_name"` //权限名称 StartTime string `json:"start_time"` //权限开始时间 EndTime string `json:"end_time"` //权限结束时间 IsTryOut int `json:"is_try_out"` //权限是否试用:0=否,1=是 Money int `json:"money"` //权限是否试用:0=否,1=是 } type UserJson struct { CreditCode string `json:"social"` //社会信用代码 RealName string `json:"name"` //昵称 Mobile string `json:"phone"` //手机号1 CountryCode string `json:"area_code"` //国家号1(+86..) OutboundMobile string `json:"phone2"` //手机号2 OutboundCountryCode string `json:"area_code2"` //国家号2(+86..) Telephone string `json:"machine"` //座机 MachineAreaCode string `json:"machine_area_code"` //座机国家号(+86..) Sex string `json:"sex"` //性别(男、女) Email string `json:"email"` //电子邮箱,比如 example@qq.com Department string `json:"department"` //部门 Position string `json:"position"` //职位 Level string `json:"level"` //职位等级(研究员、基金经理、部门总监) IsMaker string `json:"policymakers"` //是否决策人(是、否) CreatedTime string `json:"create_time"` //创建时间 } type CompanyJsonList struct { SyncData *[]CompanyJson `json:"sync_data"` } type CompanyUnJsonList struct { SyncData []CompanyJson `json:"sync_data"` } // 删除用户 type ShangHaiCrmUserDeleteResp struct { Social string `json:"social"` Mobile string `json:"phone"` Name string `json:"name"` } // 获取公司 func GetSendCompanyList(condition string) (items []*CompanyJson, err error) { o := orm.NewOrmUsingDB("weekly_report") sql := ` SELECT c.company_name, c.company_id as cid, c.credit_code, c.city, p.industry_name, am.real_name, am.mobile, p.status, p.end_date as end_date_time, UNIX_TIMESTAMP( p.start_date ) AS start_date, UNIX_TIMESTAMP( p.end_date ) AS end_date, UNIX_TIMESTAMP( a.created_time ) AS created_time, (SELECT GROUP_CONCAT(DISTINCT b.chart_permission_name ORDER BY b.sort ASC SEPARATOR ',') FROM company_report_permission AS a INNER JOIN chart_permission AS b ON a.chart_permission_id=b.chart_permission_id INNER JOIN company_product AS c ON a.company_id=c.company_id AND a.product_id=c.product_id WHERE a.company_id=cid AND c.enabled = 1 AND b.cygx_auth=1 AND a.STATUS IN ( '正式', '试用', '永续' )) AS permission FROM company_report_permission AS a INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id INNER JOIN company_product AS p ON a.company_id = p.company_id INNER JOIN company AS c ON c.company_id = a.company_id INNER JOIN admin AS am ON am.admin_id = p.seller_id AND a.product_id = p.product_id WHERE 1 = 1 AND c.enabled = 1 AND b.cygx_auth = 1 AND p.STATUS IN ( '正式', '试用','冻结','流失' ,'流失', '永续' ) AND( c.credit_code LIKE '91%' OR c.credit_code LIKE 'HZ%' ) AND p.product_id = 2 ` + condition + `GROUP BY c.company_id ` _, err = o.Raw(sql).QueryRows(&items) return } type PermissionDataResp struct { CompanyId int `description:"公司ID"` PermissionName string `description:"行业名称"` Status string `description:"状态"` StartDate time.Time `description:"行业名称"` EndDate time.Time `description:"行业名称"` } func GetSendCompanyPermissionDataList(condition string, pars []interface{}) (items []*PermissionDataResp, err error) { o := orm.NewOrmUsingDB("weekly_report") sql := ` SELECT company_id, c.permission_name, cp.status, cp.end_date, cp.start_date FROM company_report_permission AS cp INNER JOIN chart_permission AS c ON cp.chart_permission_id = c.chart_permission_id WHERE 1 = 1 AND cp.STATUS IN ( '正式', '试用', '永续' ) AND c.enabled = 1 AND c.chart_permission_name IN ( '医药', '消费', '科技', '智造', '策略', '研选订阅', '研选扣点包', '专家', '路演服务','固收','周期' ) ` + condition + ` GROUP BY c.permission_name, cp.company_id ` _, err = o.Raw(sql, pars).QueryRows(&items) return } // 不做正式,试用,永续权限的校验 func GetSendCompanyPermissionDataListNoChekcStatus(condition string, pars []interface{}) (items []*PermissionDataResp, err error) { o := orm.NewOrmUsingDB("weekly_report") sql := ` SELECT company_id, c.permission_name, cp.status, cp.end_date, cp.start_date FROM company_report_permission AS cp INNER JOIN chart_permission AS c ON cp.chart_permission_id = c.chart_permission_id WHERE 1 = 1 AND cp.STATUS NOT IN ( '正式', '试用', '永续' ) AND c.chart_permission_name IN ( '医药', '消费', '科技', '智造', '策略', '研选扣点包', '专家', '路演服务' ,'固收','周期' ) ` + condition + ` GROUP BY c.permission_name, cp.company_id ` _, err = o.Raw(sql, pars).QueryRows(&items) return } // 获取FICC公司 func GetSendCompanyFiccList(condition string) (items []*CompanyJson, err error) { o := orm.NewOrmUsingDB("weekly_report") sql := ` SELECT c.company_name, c.company_id AS cid, c.credit_code, c.city, p.industry_name, am.real_name, am.mobile, p.status, p.end_date AS end_date_time, UNIX_TIMESTAMP( p.start_date ) AS start_date, UNIX_TIMESTAMP( p.end_date ) AS end_date, UNIX_TIMESTAMP( a.created_time ) AS created_time, ( SELECT GROUP_CONCAT( DISTINCT b.chart_permission_name ORDER BY b.sort ASC SEPARATOR ',' ) FROM company_report_permission AS a INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id INNER JOIN company_product AS c ON a.company_id = c.company_id AND a.product_id = c.product_id WHERE a.company_id = cid AND c.enabled = 1 AND b.cygx_auth = 1 AND a.STATUS IN ( '正式', '试用', '永续' )) AS permission FROM company_report_permission AS a INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id INNER JOIN company_product AS p ON a.company_id = p.company_id INNER JOIN company AS c ON c.company_id = a.company_id INNER JOIN admin AS am ON am.admin_id = p.seller_id AND a.product_id = p.product_id WHERE 1 = 1 AND c.enabled = 1 AND b.cygx_auth = 1 AND p.STATUS IN ( '正式', '试用','冻结','流失' ) AND ( c.credit_code LIKE '91%' OR c.credit_code LIKE 'HZ%' ) AND p.product_id = 1 ` + condition + `AND c.company_id NOT IN ( SELECT c.company_id FROM company_report_permission AS a INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id INNER JOIN company_product AS p ON a.company_id = p.company_id INNER JOIN company AS c ON c.company_id = a.company_id INNER JOIN admin AS am ON am.admin_id = p.seller_id AND a.product_id = p.product_id WHERE 1 = 1 AND c.enabled = 1 AND b.cygx_auth = 1 AND p.STATUS IN ( '正式', '试用' ,'冻结','流失', '永续') AND ( c.credit_code LIKE '91%' OR c.credit_code LIKE 'HZ%' ) AND p.product_id = 2 GROUP BY c.company_id ) GROUP BY c.company_id ` _, err = o.Raw(sql).QueryRows(&items) return } // 获取用户 func GetSendUserList(condition string) (items []*UserJson, err error) { o := orm.NewOrmUsingDB("weekly_report") sql := ` SELECT c.credit_code, u.real_name, u.mobile, u.country_code, u.outbound_mobile, u.outbound_country_code, u.telephone, u.sex, u.is_maker, c.company_id, UNIX_TIMESTAMP( us.create_time ) AS created_time FROM wx_user AS u INNER JOIN company AS c ON c.company_id = u.company_id INNER JOIN user_seller_relation AS us ON us.user_id = u.user_id WHERE 1 = 1 AND u.company_id IN ( SELECT c.company_id FROM company_report_permission AS a INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id INNER JOIN company_product AS p ON a.company_id = p.company_id INNER JOIN company AS c ON c.company_id = a.company_id INNER JOIN admin AS am ON am.admin_id = p.seller_id AND a.product_id = p.product_id WHERE 1 = 1 AND c.enabled = 1 AND b.cygx_auth = 1 AND p.STATUS IN ( '正式', '试用','冻结','流失','流失', '永续' ) AND us.create_time != '' ` + condition + `GROUP BY c.company_id ) AND us.create_time != '' AND u.real_name != '' AND u.mobile != '' AND ( c.credit_code LIKE '91%' OR c.credit_code LIKE 'HZ%' ) GROUP BY u.user_id ORDER BY c.company_id DESC ` _, err = o.Raw(sql).QueryRows(&items) return } type WxUserOpLogResp struct { CompanyId int `description:"客户ID"` UserId int `description:"用户ID"` Mobile string `description:"用户ID"` } type WxUserOpLogDeleteResp struct { CompanyId int `description:"客户ID"` UserId int `description:"用户ID"` Mobile string `description:"用户ID"` OriginalUserInfo string `description:"用户详情"` CreditCode string `description:"社会信用码"` RealName string `description:"真实姓名"` } // 获取指定时间内更新的用户 func GetWxUserOpLog(createTime string) (items []*WxUserOpLogResp, err error) { o := orm.NewOrmUsingDB("weekly_report") sql := ` SELECT u.company_id FROM wx_user_op_log AS l INNER JOIN wx_user AS u ON u.mobile = l.mobile WHERE l.create_time >= '` + createTime + `' GROUP BY u.company_id ` _, err = o.Raw(sql).QueryRows(&items) return } // 获取指定时间内删除的用户 func GetWxUserOpLogDelete(createTime string) (items []*WxUserOpLogDeleteResp, err error) { o := orm.NewOrmUsingDB("weekly_report") sql := `SELECT l.*, c.credit_code FROM wx_user_op_log AS l INNER JOIN company AS c ON c.company_id = l.company_id WHERE l.log_type = 'delete' AND l.create_time >= '` + createTime + `'` _, err = o.Raw(sql).QueryRows(&items) return } // 获取指定时间内被暂停的客户 func GetWxUserOpLogSuspend(createTime string) (items []*WxUserOpLogDeleteResp, err error) { o := orm.NewOrmUsingDB("weekly_report") sql := `SELECT * FROM company_operation_record AS p WHERE remark = '暂停' AND p.id IN ( SELECT MAX( p.id ) AS max_id FROM company_operation_record AS p WHERE 1 = 1 AND p.create_time > '` + createTime + `' ) ` _, err = o.Raw(sql).QueryRows(&items) return } // 获取指定时间内被移动的客户 func GetCompanyOperationRecord(createTime string) (items []*WxUserOpLogDeleteResp, err error) { o := orm.NewOrmUsingDB("weekly_report") sql := `SELECT * FROM company_operation_record AS p WHERE 1=1 AND p.create_time > '` + createTime + `' GROUP BY company_id ` _, err = o.Raw(sql).QueryRows(&items) return } // 获取指定时间内试用转冻结,冻结转流失的客户 func GetCompanyFreezeAndLoss(createTime string) (items []*WxUserOpLogResp, err error) { o := orm.NewOrmUsingDB("weekly_report") sql := ` SELECT * FROM company_operation_record WHERE status IN ('冻结','流失') AND create_time > '` + createTime + `' GROUP BY company_id ` _, err = o.Raw(sql).QueryRows(&items) return } // 获取指定时间内被移动的用户 func GetWxUserOpLogList(startDate, endDate string) (items []*WxUserOpLogResp, err error) { o := orm.NewOrmUsingDB("weekly_report") sql := ` SELECT company_id,user_id,mobile FROM wx_user_op_log WHERE log_type IN ('move','add') AND create_time >= '` + startDate + `' AND create_time <= '` + endDate + `' GROUP BY user_id ` _, err = o.Raw(sql).QueryRows(&items) return } // 获取指定时间内被删除的用户 func GetWxUserOpLogDeleteList(startDate, endDate string) (items []*WxUserOpLogResp, err error) { o := orm.NewOrmUsingDB("weekly_report") sql := ` SELECT company_id,user_id,mobile FROM wx_user_op_log WHERE log_type IN ('delete') AND create_time >= '` + startDate + `' AND create_time <= '` + endDate + `' GROUP BY user_id ` _, err = o.Raw(sql).QueryRows(&items) return }