xiazhengtongxue
2026-01-04 46908c0f79e7aab8a3fa41bfdcd8390bbc3659f2
完善前端二期播种墙初始化和任务完成按钮,后端定期删除日志
已添加4个文件
已删除1个文件
已修改16个文件
27150 ■■■■ 文件已修改
项目代码/WCSClient/1.6.0 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSClient/4.12.1 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSClient/5.61.0 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSClient/babel.config.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSClient/config/buttons.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSClient/npm 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSClient/package-lock.json 26695 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSClient/package.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSClient/src/components/basic/ViewGrid/ViewGrid.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSClient/src/extension/taskinfo/task.js 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSClient/vue.config.js 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSServices/WIDESEAWCS_ISystemServices/ISys_LogService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSServices/WIDESEAWCS_Server/Controllers/PTLAPIController.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSServices/WIDESEAWCS_Server/Controllers/RYB_PTL_API.dll 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSServices/WIDESEAWCS_Server/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSServices/WIDESEAWCS_SystemServices/Sys_LogService.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSServices/WIDESEAWCS_Tasks/AGV/AGVErrorJob.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCSServices/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCSClient/1.6.0
ÏîÄ¿´úÂë/WCSClient/4.12.1
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Usage: npm <command>
where <command> is one of:
    access, adduser, audit, bin, bugs, c, cache, ci, cit,
    clean-install, clean-install-test, completion, config,
    create, ddp, dedupe, deprecate, dist-tag, docs, doctor,
    edit, explore, fund, get, help, help-search, hook, i, init,
    install, install-ci-test, install-test, it, link, list, ln,
    login, logout, ls, org, outdated, owner, pack, ping, prefix,
    profile, prune, publish, rb, rebuild, repo, restart, root,
    run, run-script, s, se, search, set, shrinkwrap, star,
    stars, start, stop, t, team, test, token, tst, un,
    uninstall, unpublish, unstar, up, update, v, version, view,
    whoami
npm <command> -h  quick help on <command>
npm -l            display full usage info
npm help <term>   search for help on <term>
npm help npm      involved overview
Specify configs in the ini-formatted file:
    C:\Users\zjc\.npmrc
or on the command line via: npm <command> --key value
Config info can be viewed via: npm help config
npm@6.14.0 D:\nvm\nvm\v16.20.2\node_modules\npm
ÏîÄ¿´úÂë/WCSClient/5.61.0
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Usage: npm <command>
where <command> is one of:
    access, adduser, audit, bin, bugs, c, cache, ci, cit,
    clean-install, clean-install-test, completion, config,
    create, ddp, dedupe, deprecate, dist-tag, docs, doctor,
    edit, explore, fund, get, help, help-search, hook, i, init,
    install, install-ci-test, install-test, it, link, list, ln,
    login, logout, ls, org, outdated, owner, pack, ping, prefix,
    profile, prune, publish, rb, rebuild, repo, restart, root,
    run, run-script, s, se, search, set, shrinkwrap, star,
    stars, start, stop, t, team, test, token, tst, un,
    uninstall, unpublish, unstar, up, update, v, version, view,
    whoami
npm <command> -h  quick help on <command>
npm -l            display full usage info
npm help <term>   search for help on <term>
npm help npm      involved overview
Specify configs in the ini-formatted file:
    C:\Users\zjc\.npmrc
or on the command line via: npm <command> --key value
Config info can be viewed via: npm help config
npm@6.14.0 D:\nvm\nvm\v16.20.2\node_modules\npm
ÏîÄ¿´úÂë/WCSClient/babel.config.js
@@ -1,5 +1,9 @@
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ],
  plugins: [
    // æ·»åŠ å¯é€‰é“¾æ“ä½œç¬¦æ”¯æŒ
    '@babel/plugin-proposal-optional-chaining'
  ]
}
}
ÏîÄ¿´úÂë/WCSClient/config/buttons.js
@@ -22,6 +22,29 @@
    }
},
{
    name: "二期播种墙初始化",
    icon: '',
    value: 'LightB2',
    class: '',
    //  plain:true,
    type: 'primary',
    // plain:true,
    onClick: function () {
    }
},
{
    name: "异常任务处理",
    icon: 'el-icon-plus',
    value: 'ExceptionTask',
    class: '',
    //  plain:true,
    type: 'success',
    // plain:true,
    onClick: function () {
    }
},
{
    name: "编 è¾‘",
    icon: 'el-icon-edit',
    value: 'Update',
ÏîÄ¿´úÂë/WCSClient/npm
ÏîÄ¿´úÂë/WCSClient/package-lock.json
ÎļþÌ«´ó
ÏîÄ¿´úÂë/WCSClient/package.json
@@ -24,7 +24,11 @@
    "wangeditor": "^4.7.6"
  },
  "devDependencies": {
    "@babel/core": "^7.28.5",
    "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
    "@babel/plugin-proposal-optional-chaining": "^7.21.0",
    "@babel/plugin-syntax-dynamic-import": "^7.8.3",
    "@babel/preset-env": "^7.28.5",
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-plugin-router": "~4.5.0",
@@ -34,6 +38,7 @@
    "@vue/compiler-sfc": "^3.0.0",
    "@vue/test-utils": "^2.0.0-0",
    "babel-eslint": "^10.1.0",
    "babel-loader": "^10.0.0",
    "chai": "^4.1.2",
    "cross-env": "^7.0.3",
    "less": "^4.1.1",
ÏîÄ¿´úÂë/WCSClient/src/components/basic/ViewGrid/ViewGrid.vue
@@ -506,6 +506,7 @@
  VIEW: 'view',
  PAGE: 'getPageData',
  AUDIT: 'audit',
  // INITLIGHT:'InitLight',
  DEL: 'del',
  EXPORT: 'Export', //导出操作返回加密后的路径
  DOWNLOAD: 'DownLoadFile', //导出文件
ÏîÄ¿´úÂë/WCSClient/src/extension/taskinfo/task.js
@@ -1,83 +1,142 @@
//此js文件是用来自定义扩展业务代码,可以扩展一些自定义页面或者重新配置生成的代码
import gridBody from './extend/taskExecuteDetail.vue'
import gridBody from "./extend/taskExecuteDetail.vue";
let extension = {
    components: {
        //查询界面扩展组件
        gridHeader: '',
        gridBody: gridBody,
        gridFooter: '',
        //新建、编辑弹出框扩展组件
        modelHeader: '',
        modelBody: '',
        modelFooter: ''
  components: {
    //查询界面扩展组件
    gridHeader: "",
    gridBody: gridBody,
    gridFooter: "",
    //新建、编辑弹出框扩展组件
    modelHeader: "",
    modelBody: "",
    modelFooter: "",
  },
  tableAction: "", //指定某张表的权限(这里填写表名,默认不用填写)
  buttons: { view: [], box: [], detail: [] }, //扩展的按钮
  methods: {
    //下面这些方法可以保留也可以删除
    onInit() {
      // this.$Notice.success({ title: this.detailOptions.cnName + ',查询结果', desc: '返回的对象:' + JSON.stringify(data) });
      var previousButton = this.buttons.find((x) => x.value == "Previous");
      if (previousButton) previousButton.hidden = true;
      var nextButton = this.buttons.find((x) => x.value == "Next");
      if (nextButton) nextButton.hidden = true;
      var recoveryButton = this.buttons.find((x) => x.value == "TaskRecovery");
      if (recoveryButton) recoveryButton.hidden = true;
      let LightB2Btn = this.buttons.find((x) => x.value == "LightB2");
      if (LightB2Btn) {
        LightB2Btn.onClick = function () {
          let rows = this.$refs.table.getSelected();
          this.http.post("api/Task/InitLight", "播种墙启动中").then((x) => {
            if (!x.status) return this.$message.error(x.message);
            this.$message.success("操作成功");
            this.refresh();
          });
        };
      }
      let TaskCompletedBtn = this.buttons.find(
        (x) => x.value == "TaskCompleted"
      );
      if (TaskCompletedBtn) {
        TaskCompletedBtn.onClick = function () {
          let rows = this.$refs.table.getSelected();
          if (rows.length == 0) return this.$error("请选择数据!");
          if (rows.length > 1) {
            return this.$error("一次只能操作一条数据!");
          }
          this.$confirm("确定货箱放在目标地址了吗?", "提示", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning",
          })
            .then(() => {
              const taskNum = rows[0].taskNum;
              // æ–¹æ³•1:发送JSON数据(需要后端支持[FromBody])
              // this.http.post("api/Task/RecTaskCompleted", { taskNum }, "任务完成中")
              // æˆ–方法2:URL参数方式
              this.http
                .post(
                  `api/Task/RecTaskCompleted?taskNum=${taskNum}`,
                  null,
                  "任务完成中"
                )
                // æˆ–方法3:表单数据方式
                // let formData = new FormData();
                // formData.append('taskNum', taskNum);
                // this.http.post("api/Task/RecTaskCompleted", formData, "任务完成中")
                .then((x) => {
                  if (!x.status) return this.$message.error(x.message);
                  this.$message.success("操作成功");
                  this.refresh();
                });
            })
            .catch(() => {
              this.$message({
                type: "info",
                message: "已取消操作",
              });
            });
        };
      }
      //扩展页面初始化操作
      this.columns.push({
        field: "操作",
        title: "操作",
        width: 70,
        fixed: "right",
        align: "center",
        formatter: (row) => {
          return '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">查看</i>';
        },
        click: (row) => {
          this.$refs.gridBody.open(row);
        },
      });
    },
    tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
    buttons: { view: [], box: [], detail: [] }, //扩展的按钮
    methods: {
        //下面这些方法可以保留也可以删除
        onInit() {
            // this.$Notice.success({ title: this.detailOptions.cnName + ',查询结果', desc: '返回的对象:' + JSON.stringify(data) });
            var previousButton = this.buttons.find((x) => x.value == "Previous");
            if (previousButton) previousButton.hidden = true;
            var nextButton = this.buttons.find((x) => x.value == "Next");
            if (nextButton) nextButton.hidden = true;
            var recoveryButton = this.buttons.find((x) => x.value == "TaskRecovery");
            if (recoveryButton) recoveryButton.hidden = true;
            //扩展页面初始化操作
            this.columns.push({
                field: '操作',
                title: '操作',
                width: 70,
                fixed: 'right',
                align: 'center',
                formatter: (row) => {
                    return (
                        '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">查看</i>'
                    );
                },
                click: (row) => {
                    this.$refs.gridBody.open(row);
                }
            },);
        },
        onInited() {
            //框架初始化配置后
            //如果要配置明细表,在此方法操作
            //this.detailOptions.columns.forEach(column=>{ });
        },
        searchBefore(param) {
            //界面查询前,可以给param.wheres添加查询参数
            //返回false,则不会执行查询
            return true;
        },
        searchAfter(result) {
            //查询后,result返回的查询数据,可以在显示到表格前处理表格的值
            return true;
        },
        addBefore(formData) {
            //新建保存前formData为对象,包括明细表,可以给给表单设置值,自己输出看formData的值
            return true;
        },
        updateBefore(formData) {
            //编辑保存前formData为对象,包括明细表、删除行的Id
            return true;
        },
        rowClick({ row, column, event }) {
            //查询界面点击行事件
            // this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
        },
        modelOpenAfter(row) {
            //点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据
            //(1)判断是编辑还是新建操作: this.currentAction=='Add';
            //(2)给弹出框设置默认值
            //(3)this.editFormFields.字段='xxx';
            //如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
            //看不懂就把输出看:console.log(this.editFormOptions)
        }
    }
    onInited() {
      //框架初始化配置后
      //如果要配置明细表,在此方法操作
      //this.detailOptions.columns.forEach(column=>{ });
    },
    searchBefore(param) {
      //界面查询前,可以给param.wheres添加查询参数
      //返回false,则不会执行查询
      return true;
    },
    searchAfter(result) {
      //查询后,result返回的查询数据,可以在显示到表格前处理表格的值
      return true;
    },
    addBefore(formData) {
      //新建保存前formData为对象,包括明细表,可以给给表单设置值,自己输出看formData的值
      return true;
    },
    updateBefore(formData) {
      //编辑保存前formData为对象,包括明细表、删除行的Id
      return true;
    },
    rowClick({ row, column, event }) {
      //查询界面点击行事件
      // this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
    },
    modelOpenAfter(row) {
      //点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据
      //(1)判断是编辑还是新建操作: this.currentAction=='Add';
      //(2)给弹出框设置默认值
      //(3)this.editFormFields.字段='xxx';
      //如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
      //看不懂就把输出看:console.log(this.editFormOptions)
    },
  },
};
export default extension;
ÏîÄ¿´úÂë/WCSClient/vue.config.js
@@ -1,5 +1,3 @@
// const webpack = require("webpack");
module.exports = {
  productionSourceMap: false,
  lintOnSave: false,
@@ -11,9 +9,13 @@
    }
  },
  css: {
    //查看CSS属于哪个css文件
    sourceMap: true
  },
  // å¼ºåˆ¶è½¬è¯‘依赖
  transpileDependencies: [
    'vue-router',
    'vue-draggable-next'
  ],
  configureWebpack: {
    module: {
      rules: [
@@ -21,33 +23,25 @@
          test: /\.mjs$/,
          include: /node_modules/,
          type: "javascript/auto"
        },
        }
      ]
    }
  },
  //https://cli.vuejs.org/zh/guide/html-and-static-assets.html#html
  chainWebpack: (config) => {
    // ç§»é™¤ prefetch æ’ä»¶
    config.plugins.delete('prefetch');
    //自下定义title
    config.plugin('html').tap((args) => {
      args[0].title = 'WCS';
      return args;
    });
    // æˆ–者
    // ä¿®æ”¹å®ƒçš„选项:
    // config.plugin('prefetch').tap(options => {
    //   options[0].fileBlacklist = options[0].fileBlacklist || []
    //   options[0].fileBlacklist.push(/myasyncRoute(.)+?\.js$/)
    //   return options
    // })
    // æ·»åР坹 mjs æ–‡ä»¶çš„处理
    config.module
      .rule('mjs')
      .test(/\.mjs$/)
      .include
        .add(/node_modules/)
        .end()
      .type('javascript/auto');
  }
  // configureWebpack: {
  //     plugins: [
  //         new webpack.optimize.MinChunkSizePlugin({
  //             minChunkSize: 100000 // é€šè¿‡åˆå¹¶å°äºŽ minChunkSize å¤§å°çš„ chunk,将 chunk ä½“积保持在指定大小限制以上
  //         })
  //     ]
  // }
};
}
ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_ISystemServices/ISys_LogService.cs
@@ -10,5 +10,6 @@
{
    public interface ISys_LogService : IService<Sys_Log>
    {
        void DeleteOldLogs();
    }
}
ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -171,5 +171,9 @@
        /// AGV状态查询调用及WMS故障上报
        /// </summary>
        void AgvSearchStatus();
        /// <summary>
        /// é‡ç½®æ‰€æœ‰å¼‚常任务
        /// </summary>
        WebResponseContent ResetAllExceptionTask(int taskNum);
    }
}
ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_Server/Controllers/PTLAPIController.cs
@@ -145,8 +145,6 @@
            try
            {
                //RYB_PTL.UserResultAvailable += new RYB_PTL.UserResultAvailableEventHandler(RYB_PTL_UserResultAvailable);
                bool isCfg = RYB_PTL.RYB_PTL_InitialConfiguration(new string[,] { { "11.2.30.252", "0001-0016" },{ "11.2.30.252", "1-16" } });
                bool isConnected = RYB_PTL.RYB_PTL_Connect(request.sIp, request.iPort);
            }
ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_Server/Controllers/RYB_PTL_API.dll
Binary files differ
ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
@@ -165,12 +165,23 @@
        /// <summary>
        /// WMS任务取消同步
        /// </summary>
        /// <param name="taskNum"></param>
        /// <param name="taskCancels"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("CancelTask"), AllowAnonymous]
        public WebResponseContent CancelTask(List<TaskCancel> taskCancels)
        public WebResponseContent CancelTask([FromBody] List<TaskCancel> taskCancels)
        {
            return WebResponseContent.Instance.Error();
        }
        /// <summary>
        /// æŠŠä»»åС异叏900修改为AGV执行中300
        /// </summary>
        /// <param name="taskNum"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("ResetAllExceptionTask"), AllowAnonymous]
        public WebResponseContent ResetAllExceptionTask(int taskNum)
        {
            return Service.ResetAllExceptionTask(taskNum);
        }
    }
}
ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_Server/appsettings.json
@@ -21,7 +21,7 @@
    // æ³¨æ„ï¼Œhttp://127.0.0.1:1818 å’Œ http://localhost:1818 æ˜¯ä¸ä¸€æ ·çš„
    "IPs": "http://127.0.0.1:8080,http://localhost:8080"
  },
  "ApiLogIgnore": "Export,Get,get",
  "ApiLogIgnore": "Export,Get,get,robotQuery,drivestatus",
  "WMSApiAddress": "http://127.0.0.1:9293", //"http://127.0.0.1:9283",正式环境地址
  "LogDeubgEnable": true, //是否记录调试日志
  "PrintSql": false, //打印SQL语句
ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_SystemServices/Sys_LogService.cs
@@ -1,6 +1,8 @@
using System;
using NPOI.HSSF.Record;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseServices;
@@ -12,8 +14,49 @@
{
    public class Sys_LogService : ServiceBase<Sys_Log, ISys_LogRepository>, ISys_LogService
    {
        private static DateTime? _lastExecutionDate = null;
        private readonly object _lock = new object();
        public Sys_LogService(ISys_LogRepository BaseDal) : base(BaseDal)
        {
        }
        public void DeleteOldLogs()
        {
            // ä½¿ç”¨é”ç¡®ä¿çº¿ç¨‹å®‰å…¨
            lock (_lock)
            {
                var today = DateTime.Today;
                // æ£€æŸ¥ä»Šå¤©æ˜¯å¦å·²ç»æ‰§è¡Œè¿‡
                if (_lastExecutionDate.HasValue && _lastExecutionDate.Value.Date == today)
                {
                    return;
                }
                try
                {
                    // è®¡ç®—3个月前的日期
                    var threeMonthsAgo = DateTime.Now.AddMonths(-3);
                    // è®¡ç®—3天前的日期
                    var sevenDaysAgo = DateTime.Now.AddDays(-3);
                    // ç‰¹å®šURL
                    var specificUrl = "http://11.2.30.141:10870/interfaces/api/amr/robotQuery";
                    // æž„建删除条件:3个月前的日志 æˆ– (7天前且URL为特定地址的日志)
                    var result = BaseDal.Db.Deleteable<Sys_Log>()
                        .Where(log => log.EndDate < threeMonthsAgo ||
                                     (log.EndDate < sevenDaysAgo && log.Url == specificUrl))
                        .ExecuteCommand();
                    // æ›´æ–°æœ€åŽæ‰§è¡Œæ—¥æœŸä¸ºä»Šå¤©
                    _lastExecutionDate = today;
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"执行日志清理时发生错误:{ex.Message}");
                    // å‘生错误时不更新最后执行日期,以便重试
                }
            }
        }
    }
}
}
ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -939,5 +939,31 @@
            }
            return content;
        }
        /// <summary>
        /// é‡ç½®æ‰€æœ‰å¼‚常任务
        /// </summary>
        public WebResponseContent ResetAllExceptionTask(int taskNum)
        {
            // èŽ·å–å¼‚å¸¸ä»»åŠ¡990修改为AGV待执行300
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task.TaskState != (int)TaskStatusEnum.Exception)
                {
                    return content = WebResponseContent.Instance.Error($"该任务状态不可重置,任务号:【{taskNum}】,任务状态:【{task.TaskState}】");
                }
                task.TaskState = (int)TaskStatusEnum.AGV_Execute;
                BaseDal.UpdateData(task);
                //_taskExecuteDetailService.AddTaskExecuteDetail(task, $"人工重置异常任务,重置后任务状态【{task.TaskState}】");
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
    }
}
ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_Tasks/AGV/AGVErrorJob.cs
@@ -6,7 +6,10 @@
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.Service;
@@ -21,8 +24,10 @@
        private readonly IStationMangerRepository _stationMangerRepository;
        private readonly ILocationInfoRepository _locationInfoRepository;
        private readonly IMapper _mapper;
        private readonly ISys_LogService _logService;
        public AGVErrorJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IStationMangerRepository stationMangerRepository, ILocationInfoRepository locationInfoRepository, IMapper mapper)
        public AGVErrorJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IStationMangerRepository stationMangerRepository, ILocationInfoRepository locationInfoRepository, ISys_LogService logService,  IMapper mapper)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
@@ -30,12 +35,16 @@
            _stationMangerRepository = stationMangerRepository;
            _locationInfoRepository = locationInfoRepository;
            _mapper = mapper;
            _logService = logService;
        }
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                _taskService.AgvSearchStatus();
                // æŸ¥è¯¢æ—¥å¿—前3个月和3天前并且是Url为http://11.2.30.141:10870/interfaces/api/amr/robotQuery
                _logService.DeleteOldLogs();
            }
            catch (Exception ex)
            {
ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj
@@ -18,6 +18,7 @@
    </ItemGroup>
    <ItemGroup>
        <ProjectReference Include="..\WIDESEAWCS_ISystemServices\WIDESEAWCS_ISystemServices.csproj" />
        <ProjectReference Include="..\WIDESEAWCS_TaskInfoService\WIDESEAWCS_TaskInfoService.csproj" />
    </ItemGroup>