package company_todo import ( "github.com/beego/beego/v2/client/orm" "time" ) // CompanyTodo 客户任务 数据表 type CompanyTodo struct { Id int `orm:"column(id);pk"` CompanyId int `description:"客户id"` ProductId int `description:"客户产品id"` Content string `description:"任务描述"` SellerId int `description:"客户所属销售id"` SellerName string `description:"客户所属销售名称"` CreatedCompanyStatus string `description:"创建时,客户状态"` CreateUserId int `description:"创建人用户id"` CreateUserName string `description:"创建人用户姓名"` ApproveUserId int `description:"审批人用户id"` ApproveUserName string `description:"审批人用户姓名"` ApprovedSellerId int `description:"审批时,客户所属销售id"` ApprovedSellerName string `description:"审批时,客户所属销售名称"` ApprovedCompanyStatus string `description:"审批时,客户状态"` Status string `description:"待办单状态,枚举值:进行中,已完成,已作废"` ModifyTime time.Time `description:"修改时间"` ApproveTime time.Time `description:"审核时间"` CreateTime time.Time `description:"创建时间"` EndTime time.Time `description:"截止时间"` IsDelete uint8 `json:"-" description:"是否已经删除,0:未删除,1:已删除;默认:0"` Remark string `description:"审批备注"` } type CompanyTodoListItem struct { *CompanyTodo EndTimeStr string `description:"格式化后的截止时间"` } // Update 客户任务 数据表 func (companyTodo *CompanyTodo) Update(cols []string) (err error) { o := orm.NewOrm() _, err = o.Update(companyTodo, cols...) return } // AddCompanyTodo 新增任务请求 func AddCompanyTodo(item *CompanyTodo) (lastId int64, err error) { o := orm.NewOrm() to, err := o.Begin() if err != nil { return } defer func() { if err != nil { _ = to.Rollback() } else { _ = to.Commit() } }() lastId, err = to.Insert(item) if err != nil { return } //更新客户产品的状态 sql := `UPDATE company_product SET todo_status='未完成',todo_create_time=NOW(),todo_modify_time=NOW(),modify_time=NOW(),todo_end_time=? WHERE company_id=? AND product_id=? ` _, err = to.Raw(sql, item.EndTime, item.CompanyId, item.ProductId).Exec() return } // EditCompanyTodo 编辑任务 func (companyTodo *CompanyTodo) EditCompanyTodo(cols []string) (err error) { o := orm.NewOrm() to, err := o.Begin() if err != nil { return } defer func() { if err != nil { _ = to.Rollback() } else { _ = to.Commit() } }() _, err = to.Update(companyTodo, cols...) //更新客户产品的状态 //sql := `UPDATE company_product SET todo_status='未完成',modify_time=NOW() WHERE company_id=? AND product_id=? ` //_, err = to.Raw(sql, companyTodo.CompanyId, companyTodo.ProductId).Exec() return } // ApproveCompanyTodo 审批通过任务 func (companyTodo *CompanyTodo) ApproveCompanyTodo(cols []string) (err error) { o := orm.NewOrm() to, err := o.Begin() if err != nil { return } defer func() { if err != nil { _ = to.Rollback() } else { _ = to.Commit() } }() _, err = to.Update(companyTodo, cols...) //更新客户产品的状态 sql := `UPDATE company_product SET todo_status='已完成',todo_approve_time=NOW(),todo_modify_time=NOW(),modify_time=NOW() WHERE company_id=? AND product_id=? ` _, err = to.Raw(sql, companyTodo.CompanyId, companyTodo.ProductId).Exec() return } // GetCountDoingCompanyTodo 获取正在进行中的任务数量 func GetCountDoingCompanyTodo(companyId, productId int) (total int, err error) { o := orm.NewOrm() sql := `select count(1) as total from company_todo where status="进行中" and company_id = ? and product_id =? AND is_delete=0 ` err = o.Raw(sql, companyId, productId).QueryRow(&total) return } // GetCompanyTodoById 根据任务id获取客户任务 func GetCompanyTodoById(id int) (item *CompanyTodo, err error) { o := orm.NewOrm() sql := `select * from company_todo where id = ? ` err = o.Raw(sql, id).QueryRow(&item) return } // GetCompanyTodoList 获取客户任务列表 func GetCompanyTodoList(companyId, productId int) (items []*CompanyTodo, err error) { o := orm.NewOrm() var pars []interface{} sql := `select a.* from company_todo a join company_product b on a.company_id=b.company_id and a.product_id=b.product_id and a.seller_id=b.seller_id where a.company_id = ? and a.status !="已作废" and a.is_delete=0 ` pars = append(pars, companyId) //如果有传入产品id,那么只查询该类型下的产品 if productId != 0 { sql += ` and a.product_id = ? ` pars = append(pars, productId) } sql += ` order by a.create_time asc` _, err = o.Raw(sql, pars...).QueryRows(&items) return } // GetCompanyTodoListV2 获取客户任务列表 func GetCompanyTodoListV2(condition string, pars []interface{}) (items []*CompanyTodo, err error) { o := orm.NewOrm() sql := `select * from company_todo where 1 = 1 ` sql += condition + ` order by create_time asc` _, err = o.Raw(sql, pars...).QueryRows(&items) return } // GetDoingCompanyTodoList 获取客户的进行中任务列表 func GetDoingCompanyTodoList(companyId, productId int) (items []*CompanyTodo, err error) { o := orm.NewOrm() var pars []interface{} sql := `select a.* from company_todo a join company_product b on a.company_id=b.company_id and a.product_id=b.product_id and a.seller_id=b.seller_id where a.status="进行中" and a.company_id = ? and a.is_delete=0 ` pars = append(pars, companyId) //如果有传入产品id,那么只查询该类型下的产品 if productId != 0 { sql += ` and a.product_id = ? ` pars = append(pars, productId) } sql += ` order by a.product_id asc,a.create_time asc ` _, err = o.Raw(sql, pars...).QueryRows(&items) return } // GetDoingCompanyTodoByCompanyIds 根据客户id集合字符串获取所有客户待办的任务列表 func GetDoingCompanyTodoByCompanyIds(companyIds, condition string, pars []interface{}) (items []*CompanyTodo, err error) { if companyIds == `` { return } sql := `SELECT * FROM company_todo WHERE status="进行中" and company_id in (` + companyIds + `) and is_delete=0 ` sql += condition sql += ` ORDER BY id ASC ` o := orm.NewOrm() _, err = o.Raw(sql, pars...).QueryRows(&items) return } type CompanyTodoReportRecordGroup struct { AdminId int `description:"所属销售id"` AdminName string `description:"所属销售名称"` Num int `description:"汇总次数"` CompanyIds string `description:"客户id字符串"` } // GetDoingGroupCompanyReportRecordGroupList 获取销售分组数据(进行中) func GetDoingGroupCompanyReportRecordGroupList(condition string, pars []interface{}) (list []*CompanyTodoReportRecordGroup, err error) { o := orm.NewOrm() //sql := ` SELECT DISTINCT b.id, a.seller_id as admin_id,a.seller_name admin_name,count(1) num,GROUP_CONCAT(DISTINCT a.company_id SEPARATOR ',') AS company_ids // FROM company_report_record a join company_todo b on a.company_id=b.company_id and a.product_id=b.product_id // WHERE 1=1 //` //if condition != "" { // sql += condition //} //sql += ` GROUP BY a.seller_id` //sql := ` SELECT a.seller_id as admin_id,a.seller_name as admin_name,count(1) num,GROUP_CONCAT(DISTINCT a.company_id SEPARATOR ',') AS company_ids // FROM company_todo a //join company_product b on a.company_id=b.company_id and a.product_id=b.product_id // WHERE 1=1 //` sql := ` SELECT b.seller_id as admin_id,b.seller_name as admin_name,count(1) num,GROUP_CONCAT(DISTINCT a.company_id SEPARATOR ',') AS company_ids FROM company_todo a join company_product b on a.company_id=b.company_id and a.product_id=b.product_id and a.seller_id =b.seller_id WHERE 1=1 AND a.is_delete=0 ` if condition != "" { sql += condition } sql += ` GROUP BY admin_id` _, err = o.Raw(sql, pars).QueryRows(&list) return } // GetFinishedGroupCompanyReportRecordGroupList 获取销售分组数据(已完成) func GetFinishedGroupCompanyReportRecordGroupList(condition string, pars []interface{}) (list []*CompanyTodoReportRecordGroup, err error) { o := orm.NewOrm() //sql := ` SELECT a.approved_seller_id as admin_id,a.approved_seller_name as admin_name,count(1) num,GROUP_CONCAT(DISTINCT a.company_id SEPARATOR ',') AS company_ids // FROM company_todo a //join company_product b on a.company_id=b.company_id and a.product_id=b.product_id // WHERE 1=1 //` sql := ` SELECT b.seller_id as admin_id,b.seller_name as admin_name,count(1) num,GROUP_CONCAT(DISTINCT a.company_id SEPARATOR ',') AS company_ids FROM company_todo a join company_product b on a.company_id=b.company_id and a.product_id=b.product_id and a.approved_seller_id=b.seller_id WHERE 1=1 AND a.is_delete=0 ` if condition != "" { sql += condition } sql += ` GROUP BY admin_id` _, err = o.Raw(sql, pars).QueryRows(&list) return } // CompanyTodoAddReq 新增任务请求 type CompanyTodoAddReq struct { CompanyId int `description:"客户id"` ProductId int `description:"产品id,ficc传:1,权益传:2"` Description string `description:"任务描述"` EndTime string `description:"截止时间"` } // CompanyTodoEditReq 编辑任务请求 type CompanyTodoEditReq struct { Id int `description:"客户任务记录id"` CompanyId int `description:"客户id"` ProductId int `description:"产品id,ficc传:1,权益传:2"` Description string `description:"任务描述"` EndTime string `description:"截止时间"` } // ApproveCompanyTodoReq 审批任务请求 type ApproveCompanyTodoReq struct { Id int `description:"客户任务记录id"` Remark string `description:"审批备注"` }