wanshenmean
2026-03-31 9b77acb859f0866f3a854d2a2842072b2fe9cca8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using WIDESEA_Core;
using WIDESEA_Core.BaseController;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Inbound;
using WIDESEA_IInboundService;
using WIDESEA_IOutboundService;
using WIDESEA_ITaskInfoService;
using WIDESEA_Model.Models;
 
namespace WIDESEA_WMSServer.Controllers
{
    /// <summary>
    /// PDA 控制器 - 提供PDA应用下载、上传和版本检查功能
    /// </summary>
    [Route("api/PDA")]
    [Authorize, ApiController]
    public class PDAController : Controller
    {
        private readonly IInboundService _inboundService;
        private readonly IOutboundService _outboundService;
        private readonly ITaskService _taskService;
 
        /// <summary>
        /// 构造函数
        /// </summary>
        public PDAController(ITaskService taskService, IInboundService inboundService, IOutboundService outboundService)
        {
            _inboundService = inboundService;
            _outboundService = outboundService;
            _taskService = taskService;
        }
 
        /// <summary>
        /// 下载PDA应用安装包
        /// </summary>
        /// <returns>APK文件或错误信息</returns>
        [HttpPost, HttpGet, Route("DownLoadApp"), AllowAnonymous]
        public virtual ActionResult DownLoadApp()
        {
            const string appDirectory = "Upload/App/";
            const string appFileName = "WMS-PDA.apk";
            string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, appDirectory, appFileName);
 
            if (!System.IO.File.Exists(path))
            {
                return Json(WebResponseContent.Instance.Error("未找到安装包"));
            }
 
            byte[] fileBytes = System.IO.File.ReadAllBytes(path);
            return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, appFileName);
        }
 
        /// <summary>
        /// 上传PDA应用安装包
        /// </summary>
        /// <param name="fileInput">上传的文件</param>
        /// <returns>上传结果</returns>
        [HttpPost, HttpGet, Route("UploadApp"), AllowAnonymous]
        [Consumes("multipart/form-data")]
        public WebResponseContent UploadApp(IEnumerable<IFormFile> fileInput)
        {
            try
            {
                List<IFormFile> files = fileInput.ToList();
                if (files == null || files.Count == 0)
                {
                    return new WebResponseContent { Status = false, Message = "请选择上传的文件" };
                }
 
                IFormFile formFile = files[0];
                const string appDirectory = "Upload/App/";
                const string appFileName = "WMS-PDA.apk";
                string directoryPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, appDirectory);
 
                if (!Directory.Exists(directoryPath))
                {
                    Directory.CreateDirectory(directoryPath);
                }
 
                string backupPath = Path.Combine(directoryPath, $"WMS-PDA{DateTime.Now:yyyyMMddhhmmss}.apk");
                string targetPath = Path.Combine(directoryPath, appFileName);
 
                // 备份现有文件
                if (System.IO.File.Exists(targetPath))
                {
                    System.IO.File.Move(targetPath, backupPath);
                }
 
                // 保存新文件
                using (var stream = new FileStream(targetPath, FileMode.Create))
                {
                    formFile.CopyTo(stream);
                }
 
                return new WebResponseContent { Status = true, Message = "文件上传成功" };
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error($"文件上传失败:{ex.Message}");
            }
        }
 
        /// <summary>
        /// 获取PDA版本号并检查是否需要更新
        /// </summary>
        /// <param name="version">当前PDA版本号</param>
        /// <returns>是否需要更新的标志</returns>
        [HttpPost, HttpGet, Route("GetPDAVersion"), AllowAnonymous]
        public WebResponseContent GetPDAVersion(string version)
        {
            try
            {
                if (string.IsNullOrEmpty(version))
                {
                    return WebResponseContent.Instance.Error("版本号不能为空");
                }
 
                string serverVersion = AppSettings.Get("PDAVersion");
                if (int.TryParse(serverVersion, out int serverVersionNum) && int.TryParse(version, out int clientVersionNum))
                {
                    bool needUpdate = serverVersionNum > clientVersionNum;
                    return WebResponseContent.Instance.OK(data: needUpdate);
                }
 
                return WebResponseContent.Instance.Error("版本号格式错误");
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error($"版本检查失败:{ex.Message}");
            }
        }
    }
}