123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- package service
- import (
- "context"
- "os"
- "strconv"
- "strings"
- pb "go-common/app/service/main/sms/api"
- smsmdl "go-common/app/service/main/sms/model"
- "go-common/library/ecode"
- "go-common/library/log"
- xtime "go-common/library/time"
- )
- const _tableTask = "sms_tasks"
- func (s *Service) checkActTemplate(ctx context.Context, code string) (err error) {
- tpl, err := s.templateByCode(ctx, code)
- if err != nil {
- return
- }
- if tpl == nil {
- return ecode.SmsTemplateNotExist
- }
- if tpl.Stype != smsmdl.TypeActSms {
- return ecode.SmsTemplateNotAct
- }
- return
- }
- // AddTask add task
- func (s *Service) AddTask(ctx context.Context, req *pb.AddTaskReq) (res *pb.AddTaskReply, err error) {
- if err = s.checkActTemplate(ctx, req.TemplateCode); err != nil {
- return
- }
- t := &smsmdl.ModelTask{
- Type: req.Type,
- BusinessID: req.BusinessID,
- TemplateCode: req.TemplateCode,
- Desc: req.Desc,
- FileName: req.FileName,
- FilePath: req.FilePath,
- SendTime: xtime.Time(req.SendTime),
- Status: smsmdl.TaskStatusPrepared,
- }
- if err = s.db.Table(_tableTask).Create(t).Error; err != nil {
- log.Error("s.AddTask(%+v) error(%v)", req, err)
- }
- return
- }
- // UpdateTask update task
- func (s *Service) UpdateTask(ctx context.Context, req *pb.UpdateTaskReq) (res *pb.UpdateTaskReply, err error) {
- if err = s.checkActTemplate(ctx, req.TemplateCode); err != nil {
- return
- }
- data := map[string]interface{}{
- "type": req.Type,
- "business_id": req.BusinessID,
- "template_code": req.TemplateCode,
- "desc": req.Desc,
- "file_name": req.FileName,
- "file_path": req.FilePath,
- "send_time": xtime.Time(req.SendTime),
- }
- if err = s.db.Table(_tableTask).Where("id=?", req.ID).Update(data).Error; err != nil {
- log.Error("s.UpdateTask(%+v) error(%v)", req, err)
- }
- return
- }
- // DeleteTask delete task
- func (s *Service) DeleteTask(ctx context.Context, req *pb.DeleteTaskReq) (res *pb.DeleteTaskReply, err error) {
- if err = s.db.Table(_tableTask).Where("id=?", req.ID).Update("status", smsmdl.TaskStatusStop).Error; err != nil {
- log.Error("s.DeleteTask(%+v) error(%v)", req, err)
- }
- return
- }
- // TaskInfo get task info
- func (s *Service) TaskInfo(ctx context.Context, req *pb.TaskInfoReq) (res *pb.TaskInfoReply, err error) {
- res = &pb.TaskInfoReply{Info: new(smsmdl.ModelTask)}
- if err = s.db.Table(_tableTask).Where("id=?", req.ID).Find(&res.Info).Error; err != nil {
- log.Error("s.TaskInfo(%+v) error(%v)", req, err)
- return
- }
- tpl, err := s.templateByCode(ctx, res.Info.TemplateCode)
- if err != nil || tpl == nil {
- return
- }
- res.Info.TemplateCode = tpl.Code
- res.Info.TemplateContent = tpl.Template
- return
- }
- // TaskList get task list
- func (s *Service) TaskList(ctx context.Context, req *pb.TaskListReq) (res *pb.TaskListReply, err error) {
- res = &pb.TaskListReply{List: make([]*smsmdl.ModelTask, 0)}
- start := (req.Pn - 1) * req.Ps
- if err = s.db.Table(_tableTask).Order("id desc").Offset(start).Limit(req.Ps).Find(&res.List).Error; err != nil {
- log.Error("s.TaskList(%d,%d) error(%v)", req.Pn, req.Ps, err)
- return
- }
- if err = s.db.Table(_tableTask).Count(&res.Total).Error; err != nil {
- log.Error("s.TaskList(%d,%d) count error(%v)", req.Pn, req.Ps, err)
- return
- }
- return
- }
- // 上传说明:
- // 前端是批量上传,会随机按内容长度切割文件进行分批上传,有可能会切断原始行内容
- // 如果想在上传的时候同步判断文件格式,产生错误时需要忽略首行和末行
- // CheckUploadFile checks uploaded content validation.
- func (s *Service) CheckUploadFile(data []byte) (err error) {
- var (
- val int64
- lineNum int
- lines = strings.Split(string(data), "\n")
- total = len(lines)
- )
- for _, line := range lines {
- lineNum++
- line = strings.Trim(line, " \r\t")
- if line == "" {
- continue
- }
- if val, err = strconv.ParseInt(line, 10, 64); err != nil {
- log.Error("CheckUploadMid data(%s) error(%v)", line, err)
- return ecode.PushUploadInvalidErr
- }
- if val <= 0 {
- if lineNum == 1 || lineNum == total {
- continue
- }
- log.Error("CheckUploadMid data(%s) error(%v)", line, err)
- return ecode.PushUploadInvalidErr
- }
- }
- return
- }
- // Upload add mids file.
- func (s *Service) Upload(dir, path string, data []byte) (err error) {
- if _, err = os.Stat(dir); err != nil {
- if !os.IsNotExist(err) {
- log.Error("os.IsNotExist(%s) error(%v)", dir, err)
- return
- }
- if err = os.MkdirAll(dir, 0777); err != nil {
- log.Error("os.MkdirAll(%s) error(%v)", dir, err)
- return
- }
- }
- f, err := os.OpenFile(path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
- if err != nil {
- log.Error("s.Upload(%s) error(%v)", path, err)
- return
- }
- if _, err = f.Write(data); err != nil {
- log.Error("f.Write() error(%v)", err)
- return
- }
- if err = f.Close(); err != nil {
- log.Error("f.Close() error(%v)", err)
- }
- return
- }
|