| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package reporter
- import (
- "context"
- "fmt"
- "os"
- "path/filepath"
- "time"
- "hnyfkj.com.cn/rtu/bxs-sy/baseapp"
- mcu "hnyfkj.com.cn/rtu/bxs-sy/mcu_ctrl_board"
- takephoto "hnyfkj.com.cn/rtu/bxs-sy/mvs_takephoto"
- )
- func LoopTakePhoto(ctx context.Context) {
- for {
- select {
- case <-mcu.Board.ReqTakePhoCh:
- TakePhotoAndUpToFtp(ctx)
- case <-ctx.Done():
- return
- }
- }
- }
- func TakePhotoAndUpToFtp(ctx context.Context) (string, error) {
- // 1, 开始执行拍照任务
- mcu.MCBSetCamStateBit(mcu.TakingPhoto)
- defer mcu.MCBSetCamStateBit(mcu.Idle)
- baseapp.Logger.Infof("[%s] 拍照中, 稍后...", MODULE_NAME)
- now := time.Now()
- imgFile := filepath.Join(baseapp.IMG_DIR, fmt.Sprintf("%s.jpg", now.Format("2006-01-02_15-04-05.000")))
- _, err := takephoto.TakePhoto(takephoto.IMG_TYPE_JPG, imgFile, 300 /*秒*/)
- if err != nil {
- baseapp.Logger.Errorf("[%s] 拍照失败: %v!!", MODULE_NAME, err)
- return "", err
- }
- elapsed := time.Since(now).Milliseconds()
- baseapp.Logger.Infof("[%s] 拍照完成, 输出到本地文件: %q, 用时: %d毫秒", MODULE_NAME, imgFile, elapsed)
- // 2, 上传照片到服务器
- fileUploader.uploadLock.Lock() // 上传锁定(多个上传任务并发时, 保证串行执行) 2025-10-17
- defer fileUploader.uploadLock.Unlock()
- mcu.MCBSetCamStateBit(mcu.PhotoUploading)
- now = time.Now()
- baseapp.Logger.Infof("[%s] 正在上传照片文件%q到服务器...", MODULE_NAME, imgFile)
- remoteFile, err := uploadFileToFtp(ctx, imgFile, CfgServers.Img2Ftp.Address, CfgServers.Img2Ftp.Username, CfgServers.Img2Ftp.Password, defaultUploadTimeout)
- if err != nil {
- baseapp.Logger.Errorf("[%s] 照片文件%q上传失败: %v!!", MODULE_NAME, imgFile, err)
- } else {
- os.Remove(imgFile)
- elapsed = time.Since(now).Milliseconds()
- baseapp.Logger.Infof("[%s] 照片文件上传成功, 用时: %d毫秒, 本地文件: %q已删除", MODULE_NAME, elapsed, imgFile)
- }
- return remoteFile, err
- }
|