wanshenmean
2 天以前 72c0f86c75c8a9a5eb7435d72b6ebece4c5382e8
feat: 添加vue3-json-viewer并优化日志显示

refactor(WCS): 重构堆垛机任务选择和状态检查逻辑

fix(WCS): 修正堆垛机放货条件判断

fix(WMS): 修复组盘仓库ID匹配逻辑

perf: 优化API日志中间件的异步处理

style: 更新日志显示样式和交互

docs: 添加出库作业类型注释

chore: 更新设备通讯文档
已修改22个文件
338 ■■■■■ 文件已修改
Code/.omc/state/idle-notif-cooldown.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Client/.omc/state/idle-notif-cooldown.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Client/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Client/src/extension/system/Sys_Log.jsx 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Client/src/views/system/Sys_Log.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Client/vite.config.mjs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Constants/StackerCraneConst.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Middlewares/ApiLogMiddleware.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskCommand.cs 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/WIDESEA_WMSClient/src/extension/system/Mes_Log.jsx 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/WIDESEA_WMSClient/src/extension/system/Sys_Log.jsx 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/WIDESEA_WMSClient/vite.config.mjs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationTypeEnum.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_GradingMachine.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Tray.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/设备协议/高常温堆垛机与输送线/堆垛机与上位机交互信息.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
Code/.omc/state/idle-notif-cooldown.json
@@ -1,3 +1,3 @@
{
  "lastSentAt": "2026-04-13T06:33:17.906Z"
  "lastSentAt": "2026-04-14T08:08:15.956Z"
}
Code/WCS/WIDESEAWCS_Client/.omc/state/idle-notif-cooldown.json
@@ -1,3 +1,3 @@
{
  "lastSentAt": "2026-04-12T15:31:49.457Z"
  "lastSentAt": "2026-04-14T08:55:27.403Z"
}
Code/WCS/WIDESEAWCS_Client/package.json
@@ -21,6 +21,7 @@
    "vue-draggable-next": "^2.0.1",
    "vue-router": "^4.0.0-0",
    "vuex": "^4.0.0-0",
    "vue3-json-viewer": "^2.4.1",
    "wangeditor": "^4.7.6"
  },
  "devDependencies": {
Code/WCS/WIDESEAWCS_Client/src/extension/system/Sys_Log.jsx
@@ -1,4 +1,8 @@
import { h, resolveComponent } from 'vue';
import { createApp } from 'vue';
import { ElDrawer } from 'element-plus';
import { JsonViewer } from 'vue3-json-viewer';
import 'vue3-json-viewer/dist/vue3-json-viewer.css';
let extension = {
  components: {
    //动态扩充组件或组件路径
@@ -20,6 +24,69 @@
    },
    onInited() {
      this.height = this.height - 170;
    },
    // è¡Œç‚¹å‡»äº‹ä»¶ - æ˜¾ç¤ºå‚数详情抽屉
    rowClick({ row, column }) {
      if (column.property === 'requestParam' && row.requestParam) {
        this.showJsonDetail(row, 'request');
      } else if (column.property === 'responseParam' && row.responseParam) {
        this.showJsonDetail(row, 'response');
      }
    },
    // æ˜¾ç¤º JSON è¯¦æƒ…抽屉
    showJsonDetail(row, type = 'request') {
      const content = type === 'request' ? row.requestParam : row.responseParam;
      const title = type === 'request' ? '📋 è¯·æ±‚参数' : '📥 å“åº”参数';
      // è§£æž JSON å¯¹è±¡ï¼Œè§£æžå¤±è´¥åˆ™ä¿ç•™åŽŸå§‹å­—ç¬¦ä¸²
      let jsonData;
      try {
        jsonData = typeof content === 'string' ? JSON.parse(content) : content;
      } catch (e) {
        jsonData = String(content);
      }
      // åˆ›å»ºä¸´æ—¶å®¹å™¨æ¸²æŸ“抽屉
      const container = document.createElement('div');
      document.body.appendChild(container);
      const app = createApp({
        render() {
          const onClose = (val) => {
            if (!val) {
              app.unmount();
              document.body.removeChild(container);
            }
          };
          return (
            <div>
              <ElDrawer
                modelValue={true}
                onUpdate:modelValue={onClose}
                title={title}
                size="40%"
                destroyOnClose={true}
                closeOnClickModal={true}
              >
                <JsonViewer
                  value={jsonData}
                  expanded={true}
                  expandDepth={5}
                  copyable={true}
                  sort={false}
                  theme="light"
                />
              </ElDrawer>
            </div>
          );
        }
      });
      app.use(window.ElementPlus);
      app.component('JsonViewer', JsonViewer);
      app.mount(container);
    }
  }
};
Code/WCS/WIDESEAWCS_Client/src/views/system/Sys_Log.vue
@@ -138,6 +138,13 @@
        type: "string",
        width: 120,
        align: "left",
        formatter: (row) => {
          if (!row.requestParam) return '-';
          const preview = row.requestParam.length > 50
            ? row.requestParam.substring(0, 50) + '...'
            : row.requestParam;
          return `<span style="color: #409EFF; cursor: pointer;">${preview}</span>`;
        }
      },
      {
        field: "responseParam",
@@ -145,6 +152,13 @@
        type: "string",
        width: 120,
        align: "left",
        formatter: (row) => {
          if (!row.responseParam) return '-';
          const preview = row.responseParam.length > 50
            ? row.responseParam.substring(0, 50) + '...'
            : row.responseParam;
          return `<span style="color: #409EFF; cursor: pointer;">${preview}</span>`;
        }
      },
      {
        field: "exceptionInfo",
Code/WCS/WIDESEAWCS_Client/vite.config.mjs
@@ -16,6 +16,9 @@
      overlay: false
    }
  },
  optimizeDeps: {
    include: ['vue3-json-viewer']
  },
  build: {
    sourcemap: false,
    chunkSizeWarningLimit: 1200,
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Constants/StackerCraneConst.cs
@@ -37,5 +37,13 @@
        /// æ ‡è¯†ä»»åŠ¡ä¸ºå…¥åº“ä½œä¸šç±»åž‹ã€‚
        /// </remarks>
        public const short WorkTypeInbound = 1;
        /// <summary>
        /// ä½œä¸šç±»åž‹ - å‡ºåº“
        /// </summary>
        /// <remarks>
        /// æ ‡è¯†ä»»åŠ¡ä¸ºå‡ºåº“ä½œä¸šç±»åž‹ã€‚
        /// </remarks>
        public const short WorkTypeOutbound = 2;
    }
}
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Middlewares/ApiLogMiddleware.cs
@@ -74,7 +74,7 @@
                    try
                    {
                        // å­˜å‚¨è¯·æ±‚数据
                        requestParam = RequestDataLog(context);
                        requestParam = await RequestDataLog(context);
                        context.Request.Body.Position = 0;
                    }
                    catch { }
@@ -86,7 +86,7 @@
                    try
                    {
                        // å­˜å‚¨å“åº”数据
                        responseParam = ResponseDataLog(context.Response);
                        responseParam = await ResponseDataLog(context.Response);
                    }
                    catch { }
@@ -114,7 +114,7 @@
            }
        }
        private string RequestDataLog(HttpContext context)
        private async Task<string> RequestDataLog(HttpContext context)
        {
            var request = context.Request;
            var sr = new StreamReader(request.Body);
@@ -122,7 +122,7 @@
            object obj = new
            {
                QueryString = request.QueryString.ToString(),
                BodyData = sr.ReadToEndAsync().Result
                BodyData = JsonConvert.DeserializeObject( await sr.ReadToEndAsync())
            };
            string data = JsonConvert.SerializeObject(obj);
@@ -132,11 +132,11 @@
            return data;
        }
        private string ResponseDataLog(HttpResponse response)
        private async Task<string> ResponseDataLog(HttpResponse response)
        {
            response.Body.Position = 0;
            using StreamReader stream = new StreamReader(response.Body, leaveOpen: true);
            string body = stream.ReadToEnd();
            string body = await stream.ReadToEndAsync();
            response.Body.Position = 0;
            return body;
        }
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs
@@ -359,7 +359,7 @@
            if (Communicator is SiemensS7)
            {
                if (!IsConnected) throw new Exception($"通讯连接错误,请检查网络");
                DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceProParamName == "InputTaskNum")/*.OrderBy(x=>x.DeviceProOffset)*/.FirstOrDefault();
                if (devicePro == null)
                {
                    return false;
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
@@ -119,7 +119,7 @@
                // - æ‰‹è‡‚上有物料(RobotArmObject == 1)
                // - ä»»åŠ¡çŠ¶æ€ä¸º RobotPickFinish(已记录取货完成)
                if ((latestState.CurrentAction == "PickFinished" || latestState.CurrentAction == "AllPickFinished")
                    && latestState.RobotArmObject == 0
                    && latestState.RobotArmObject == 1
                    && task.RobotTaskState == TaskRobotStatusEnum.RobotPickFinish.GetHashCode())
                {
                    _logger.LogInformation("ExecuteAsync:满足放货条件,开始处理取货完成,任务号: {TaskNum}", task.RobotTaskNum);
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -197,11 +197,11 @@
                // ========== æ£€æŸ¥æ˜¯å¦å¯ä»¥å‘送新任务 ==========
                //if (!commonStackerCrane.IsCanSendTask(commonStackerCrane.Communicator, commonStackerCrane.DeviceProDTOs, commonStackerCrane.DeviceProtocolDetailDTOs))
                if (commonStackerCrane.StackerCraneStatusValue != StackerCraneStatus.Normal)
                if (commonStackerCrane.StackerCraneStatusValue != StackerCraneStatus.Normal /*&& commonStackerCrane.StackerCraneAutoStatusValue != StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneWorkStatusValue != StackerCraneWorkStatus.Standby*/)
                {
                    // å †åž›æœºä¸å¯ç”¨ï¼ˆå¦‚正在执行上一任务),直接返回
                    _logger.LogDebug("Execute:堆垛机不可用,设备: {DeviceCode}", _deviceCode);
                    QuartzLogger.Debug($"堆垛机不可用,设备: {_deviceCode}", _deviceCode);
                    //_logger.LogDebug("Execute:堆垛机不可用,设备: {DeviceCode}", _deviceCode);
                    //QuartzLogger.Debug($"堆垛机不可用,设备: {_deviceCode}", _deviceCode);
                    return Task.CompletedTask;
                }
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskCommand.cs
@@ -14,17 +14,6 @@
    public class StackerCraneTaskCommand : DeviceCommand
    {
        /// <summary>
        /// ä½œä¸šå‘½ä»¤
        /// </summary>
        /// <remarks>
        /// æŽ§åˆ¶å †åž›æœºçš„动作:
        /// - 1: å¼€å§‹æ‰§è¡Œä»»åŠ¡
        /// - 2: ä»»åŠ¡å®Œæˆ/停止
        /// - 3: æ¶ˆé˜²ä»»åС开始
        /// </remarks>
        public short WorkAction { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        /// <remarks>
@@ -105,5 +94,16 @@
        /// å‡ºåº“时表示货物从哪个位置取出。
        /// </remarks>
        public short EndLayer { get; set; }
        /// <summary>
        /// ä½œä¸šå‘½ä»¤
        /// </summary>
        /// <remarks>
        /// æŽ§åˆ¶å †åž›æœºçš„动作:
        /// - 1: å¼€å§‹æ‰§è¡Œä»»åŠ¡
        /// - 2: ä»»åŠ¡å®Œæˆ/停止
        /// - 3: æ¶ˆé˜²ä»»åС开始
        /// </remarks>
        public short WorkAction { get; set; }
    }
}
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
@@ -105,7 +105,7 @@
            //QuartzLogger.Info($"开始选择任务,设备: {deviceCode},上一任务类型: {commonStackerCrane.LastTaskType}", deviceCode);
            // æ ¹æ®ä¸Šä¸€ä»»åŠ¡ç±»åž‹å†³å®šæŸ¥è¯¢ç­–ç•¥
            if (commonStackerCrane.LastTaskType == null)
            if (commonStackerCrane.LastTaskType == null || commonStackerCrane.LastTaskType == TaskRelocationTypeEnum.Relocation.GetHashCode())
            {
                // æ²¡æœ‰ä¸Šä¸€ä»»åŠ¡ç±»åž‹ï¼ŒæŸ¥è¯¢æ™®é€šä»»åŠ¡
                candidateTask = _taskService.QueryStackerCraneTask(deviceCode);
@@ -321,8 +321,8 @@
            // æ£€æŸ¥ç«™å°æ˜¯å¦è¢«å ç”¨
            bool isOccupied = conveyorLine.IsOccupied(router.ChildPosi);
            _logger.LogInformation("IsOutTaskStationAvailable:站台 {ChildPosi},是否被占用: {IsOccupied},任务号: {TaskNum}", router.ChildPosi, isOccupied, task.TaskNum);
            QuartzLogger.Info($"IsOutTaskStationAvailable:站台 {router.ChildPosi},是否被占用: {isOccupied}", task.Roadway);
            _logger.LogInformation("IsOutTaskStationAvailable:站台 {ChildPosi},是否被占用: {IsOccupied},任务号: {TaskNum}", router.ChildPosi, !isOccupied, task.TaskNum);
            QuartzLogger.Info($"IsOutTaskStationAvailable:站台 {router.ChildPosi},是否被占用: {!isOccupied}", task.Roadway);
            return isOccupied;
        }
Code/WMS/WIDESEA_WMSClient/src/extension/system/Mes_Log.jsx
@@ -1,5 +1,7 @@
import { h, createApp } from 'vue';
import { ElDrawer, ElIcon } from 'element-plus';
import { createApp } from 'vue';
import { ElDrawer } from 'element-plus';
import { JsonViewer } from 'vue3-json-viewer';
import 'vue3-json-viewer/dist/vue3-json-viewer.css';
let extension = {
  components: {
@@ -54,13 +56,12 @@
      const jsonContent = type === 'request' ? row.requestJson : row.responseJson;
      const title = type === 'request' ? '📋 è¯·æ±‚ JSON' : '📥 å“åº” JSON';
      // æ ¼å¼åŒ– JSON
      let formattedJson = '';
      // è§£æž JSON å¯¹è±¡ï¼Œè§£æžå¤±è´¥åˆ™ä¿ç•™åŽŸå§‹å­—ç¬¦ä¸²
      let jsonData;
      try {
        const obj = typeof jsonContent === 'string' ? JSON.parse(jsonContent) : jsonContent;
        formattedJson = JSON.stringify(obj, null, 2);
        jsonData = typeof jsonContent === 'string' ? JSON.parse(jsonContent) : jsonContent;
      } catch (e) {
        formattedJson = String(jsonContent);
        jsonData = String(jsonContent);
      }
      // åˆ›å»ºä¸´æ—¶å®¹å™¨æ¸²æŸ“抽屉
@@ -69,45 +70,38 @@
      const app = createApp({
        render() {
          return h('div', [
            h(ElDrawer, {
              modelValue: true,
              'onUpdate:modelValue': (val) => {
          const onClose = (val) => {
                if (!val) {
                  app.unmount();
                  document.body.removeChild(container);
                }
              },
              title: title,
              size: '30%',
              destroyOnClose: true,
              closeOnClickModal: true
            }, {
              default: () => h('div', {
                style: {
                  height: '100%',
                  backgroundColor: '#f5f5f5',
                  padding: '16px',
                  borderRadius: '4px'
                }
              }, [
                h('pre', {
                  style: {
                    margin: '0',
                    fontSize: '14px',
                    lineHeight: '1.5',
                    fontFamily: 'Consolas, Monaco, "Courier New", monospace',
                    whiteSpace: 'pre-wrap',
                    wordBreak: 'break-all'
                  }
                }, formattedJson)
              ])
            })
          ]);
          };
          return (
            <div>
              <ElDrawer
                modelValue={true}
                onUpdate:modelValue={onClose}
                title={title}
                size="30%"
                destroyOnClose={true}
                closeOnClickModal={true}
              >
                <JsonViewer
                  value={jsonData}
                  expanded={true}
                  expandDepth={5}
                  copyable={true}
                  sort={false}
                  theme="light"
                />
              </ElDrawer>
            </div>
          );
        }
      });
      app.use(window.ElementPlus);
      app.component('JsonViewer', JsonViewer);
      app.mount(container);
    },
  }
Code/WMS/WIDESEA_WMSClient/src/extension/system/Sys_Log.jsx
@@ -1,5 +1,7 @@
import { h, createApp } from 'vue';
import { createApp } from 'vue';
import { ElDrawer } from 'element-plus';
import { JsonViewer } from 'vue3-json-viewer';
import 'vue3-json-viewer/dist/vue3-json-viewer.css';
let extension = {
  components: {
@@ -39,13 +41,12 @@
      const content = type === 'request' ? row.requestParam : row.responseParam;
      const title = type === 'request' ? '📋 è¯·æ±‚参数' : '📥 å“åº”参数';
      // æ ¼å¼åŒ– JSON
      let formattedJson = '';
      // è§£æž JSON å¯¹è±¡ï¼Œè§£æžå¤±è´¥åˆ™ä¿ç•™åŽŸå§‹å­—ç¬¦ä¸²
      let jsonData;
      try {
        const obj = typeof content === 'string' ? JSON.parse(content) : content;
        formattedJson = JSON.stringify(obj, null, 2);
        jsonData = typeof content === 'string' ? JSON.parse(content) : content;
      } catch (e) {
        formattedJson = String(content);
        jsonData = String(content);
      }
      // åˆ›å»ºä¸´æ—¶å®¹å™¨æ¸²æŸ“抽屉
@@ -54,45 +55,38 @@
      const app = createApp({
        render() {
          return h('div', [
            h(ElDrawer, {
              modelValue: true,
              'onUpdate:modelValue': (val) => {
          const onClose = (val) => {
                if (!val) {
                  app.unmount();
                  document.body.removeChild(container);
                }
              },
              title: title,
              size: '30%',
              destroyOnClose: true,
              closeOnClickModal: true
            }, {
              default: () => h('div', {
                style: {
                  height: '30%',
                  backgroundColor: '#f5f5f5',
                  padding: '16px',
                  borderRadius: '4px'
                }
              }, [
                h('pre', {
                  style: {
                    margin: '0',
                    fontSize: '14px',
                    lineHeight: '1.5',
                    fontFamily: 'Consolas, Monaco, "Courier New", monospace',
                    whiteSpace: 'pre-wrap',
                    wordBreak: 'break-all'
                  }
                }, formattedJson)
              ])
            })
          ]);
          };
          return (
            <div>
              <ElDrawer
                modelValue={true}
                onUpdate:modelValue={onClose}
                title={title}
                size="30%"
                destroyOnClose={true}
                closeOnClickModal={true}
              >
                <JsonViewer
                  value={jsonData}
                  expanded={true}
                  expandDepth={5}
                  copyable={true}
                  sort={false}
                  theme="light"
                />
              </ElDrawer>
            </div>
          );
        }
      });
      app.use(window.ElementPlus);
      app.component('JsonViewer', JsonViewer);
      app.mount(container);
    }
  }
Code/WMS/WIDESEA_WMSClient/vite.config.mjs
@@ -17,6 +17,9 @@
    port: 8080,
    open: false
  },
  optimizeDeps: {
    include: ['vue3-json-viewer']
  },
  build: {
    sourcemap: false
  }
Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationTypeEnum.cs
@@ -41,5 +41,17 @@
        /// </summary>
        [Description("特大托盘")]
        ExtraPallet = 4,
        /// <summary>
        /// åŒ–成空托盘
        /// </summary>
        [Description("化成空托盘")]
        HCTrayPallet = 5,
        /// <summary>
        /// åŒ–成分容托盘
        /// </summary>
        [Description("化成分容托盘")]
        HCFRPallet = 6,
    }
}
Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs
@@ -74,7 +74,7 @@
                    try
                    {
                        // å­˜å‚¨è¯·æ±‚数据
                        requestParam = RequestDataLog(context);
                        requestParam = await RequestDataLogAsync(context);
                        context.Request.Body.Position = 0;
                    }
                    catch { }
@@ -86,7 +86,7 @@
                    try
                    {
                        // å­˜å‚¨å“åº”数据
                        responseParam = ResponseDataLog(context.Response);
                        responseParam = await ResponseDataLogAsync(context.Response);
                    }
                    catch { }
@@ -114,20 +114,23 @@
            }
        }
        private string RequestDataLog(HttpContext context)
        private async Task<string> RequestDataLogAsync(HttpContext context)
        {
            var request = context.Request;
            //request.EnableBuffering();
            //request.Body.Position = 0;
            var sr = new StreamReader(request.Body);
            var sr = new StreamReader(request.Body, Encoding.UTF8);
            object obj;
            string bodyData = sr.ReadToEndAsync().Result;
            string bodyData = await sr.ReadToEndAsync();
            if (request.ContentLength <= 100000)
            {
                obj = new
                {
                    QueryString = request.QueryString.ToString(),
                    BodyData = bodyData
                    BodyData = JsonConvert.DeserializeObject(bodyData)
                    //BodyData = bodyData
                };
            }
            else
@@ -145,13 +148,13 @@
            return data; ;
        }
        private string ResponseDataLog(HttpResponse response)
        private async Task<string> ResponseDataLogAsync(HttpResponse response)
        {
            if (response.ContentLength <= 100000)
            {
                response.Body.Position = 0;
                using StreamReader stream = new StreamReader(response.Body, leaveOpen: true);
                string body = stream.ReadToEnd();
                using StreamReader stream = new StreamReader(response.Body, Encoding.UTF8, leaveOpen: true);
                string body = await stream.ReadToEndAsync();
                response.Body.Position = 0;
                return body;
            }
Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
@@ -162,10 +162,16 @@
                        return result ? content.OK("组盘成功") : content.Error("组盘失败");
                    }
                    int WarehouseId = stock.Roadway switch
                    {
                        "注液组盘机械手" => (await _warehouseService.Db.Queryable<Dt_Warehouse>().FirstAsync(w => w.WarehouseCode == "GWSC1")).WarehouseId,
                        "换盘机械手" => (await _warehouseService.Db.Queryable<Dt_Warehouse>().FirstAsync(w => w.WarehouseCode == "HCSC1")).WarehouseId
                    };
                    var entity = new Dt_StockInfo
                    {
                        PalletCode = stock.TargetPalletNo,
                        WarehouseId = stock.Roadway == "注液组盘机械手" ? (await _warehouseService.Db.Queryable<Dt_Warehouse>().FirstAsync(w => w.WarehouseCode == "GW1")).WarehouseId : 0,
                        WarehouseId = WarehouseId,
                        StockStatus = StockStatusEmun.组盘暂存.GetHashCode(),
                        Creater = StockConstants.SYSTEM_USER,
                        Details = details
Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_GradingMachine.cs
@@ -141,8 +141,8 @@
                        NextAddress = TaskAddressConstants.DEFAULT_ADDRESS,
                        TargetAddress = TaskAddressConstants.GRADING_OUTBOUND_ADDRESS,
                        Roadway = stock.LocationDetails.RoadwayNo,
                        TaskType = TaskTypeEnum.Outbound.GetHashCode(),
                        TaskStatus = TaskStatusEnum.New.GetHashCode(),
                        TaskType = TaskOutboundTypeEnum.Outbound.GetHashCode(),
                        TaskStatus = TaskOutStatusEnum.OutNew.GetHashCode(),
                        Grade = 1,
                        TaskNum = await BaseDal.GetTaskNo(),
                        Creater = "system",
Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Tray.cs
@@ -117,6 +117,7 @@
                    TaskType = TaskOutboundTypeEnum.OutEmpty.GetHashCode(),
                    TaskStatus = TaskStatusEnum.New.GetHashCode(),
                    Grade = 1,
                    Dispatchertime = DateTime.Now,
                    TaskNum = await BaseDal.GetTaskNo(),
                    Creater = "system",
                };
@@ -167,6 +168,8 @@
                    location.LocationStatus = LocationStatusEnum.Free.GetHashCode();
                    task.TaskStatus = TaskOutStatusEnum.OutFinish.GetHashCode();
                    var updateLocationResult = await _locationInfoService.UpdateLocationInfoAsync(location);
                    var updateStockResult = await _stockInfoService.UpdateStockAsync(stockInfo);
                    if (!updateLocationResult || !updateStockResult)
ÏîÄ¿×ÊÁÏ/É豸ЭÒé/¸ß³£Î¶Ѷâ»úÓëÊäËÍÏß/¶Ñ¶â»úÓëÉÏλ»ú½»»¥ÐÅÏ¢.xlsx
Binary files differ