1
dengjunjie
2025-09-29 d9c99e0480b4910cdb134778dd5c314b35ec4cf2
1
已添加15个文件
已修改41个文件
已重命名7个文件
已删除8个文件
1268 ■■■■ 文件已修改
项目代码/WCS/WIDESEAWCS_Client/src/extension/basicinfo/shuttleCar.js 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Client/src/router/viewGird.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Client/src/views/basicinfo/shuttleCar.vue 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/831db718-fb9f-4c9b-8563-04ac4c3b022f.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/a7345d61-066f-4e75-a7f7-8fcdc4fbf0f2.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b8217153-c75b-4b3f-a8c2-cd54835606ff.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/c8d108fb-29d8-4013-a466-1db3d088147c.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/dc52eb13-6b38-4915-8a73-0df70bfff17e.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f7ab71a2-03ba-4f1b-bdd4-1b7dd081c6de.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ff6f6cdf-00f0-40e5-8759-0ada18529bb0.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/StackerCraneEnum/WriteStatus.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/BasicInfo/ShuttleCarController.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Interface/LargeScreenController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ShuttleCar/ShuttleCarService.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/PartialTaskService_Manual.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ShuttleCarJob/ShuttleCarExtend/PartialTaskService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ShuttleCarJob/ShuttleCarJob.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/api/http.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/extension/stock/inventoryBatch.js 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/Home.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/Login.vue 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/basic/materielInfo.vue 101 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/stock/inventoryBatch.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/stock/inventoryInfo.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/taskinfo/task.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/083d80b6-6142-49d0-9814-0a7c82c0f686.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/21da0554-32f9-4be1-9bc3-100a5891a916.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/30cef92a-8890-45b9-9045-c115bf9d2c3f.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3a5d755d-461e-4be6-a227-8a2294d2bac2.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3e1f62ff-b3b1-4560-a052-1caf9df98fcb.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/403bc1fd-51c3-4707-95b1-f77406d3c475.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/6136ac8b-5359-410d-badd-c473a7136a69.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/6706044f-7482-48ec-b0db-3cda90f7ff7f.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8bb4bd2d-5325-42d4-9412-8b5426ce7c08.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/9dbc0b34-59bd-40ab-b0b8-4f16dc128c7e.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.futdcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.suo 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/fileList.bin 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_DTO/LargeScreen/BoundOrderDTO.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WCSInfo/WMSResponseContent.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WCSInfo/WMSSaveModel.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/InboundOrderService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StockService/InventoryBatchService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_UserService.cs 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Interface/LargeScreenController.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Interface/WCSInterfaceController.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/全局异常错误日志_1740314366.log 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/芜湖三一PDA/common/config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/ERP数据库字段对应表/ERP数据库.txt 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/ERP数据库字段对应表/产品入库单.xls 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/ERP数据库字段对应表/其他出库单(vwICBill_16).xls 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/ERP数据库字段对应表/其它入库单(vwICBill_7).xls 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/ERP数据库字段对应表/存货表(ICInventory).xls 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/ERP数据库字段对应表/生产任务单.xls 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/数据库字段对应表/生产任务单.xls 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/问题处理.docx 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Client/src/extension/basicinfo/shuttleCar.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
//此js文件是用来自定义扩展业务代码,可以扩展一些自定义页面或者重新配置生成的代码
import gridBody from './extend/routerview.vue';
import gridHeader from './extend/addrouters.vue';
let extension = {
    components: {
      //查询界面扩展组件
      gridHeader: gridHeader,
      gridBody: gridBody,
      gridFooter: '',
      //新建、编辑弹出框扩展组件
      modelHeader: '',
      modelBody: '',
      modelFooter: ''
    },
    tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
    buttons: { view: [], box: [], detail: [] }, //扩展的按钮
    methods: {
       //下面这些方法可以保留也可以删除
      onInit() {
        this.pagination.order = "asc" ;
        var viewButton = this.buttons.find((x) => x.value == "ViewAllRouter");
        if (viewButton) {
            viewButton.onClick = ()=>{
                this.$refs.gridBody.open();
            }
        }
        var addRoutersButton = this.buttons.find((x) => x.value == "AddRouters");
        if (addRoutersButton) {
          addRoutersButton.onClick = ()=>{
                this.$refs.gridHeader.open();
            }
        }
      },
      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)
        this.editFormOptions.forEach(x => {
          x.forEach(option => {
            if (option.field == 'shuttleCarName') {
              option.readonly = true
            }
          })
        })
      }
    }
  };
  export default extension;
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Client/src/router/viewGird.js
@@ -61,6 +61,10 @@
    path: '/router',
    name: 'router',
    component: () => import('@/views/basicinfo/router.vue')
  },{
    path: '/shuttleCar',
    name: 'shuttleCar',
    component: () => import('@/views/basicinfo/shuttleCar.vue')
  }]
export default viewgird
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Client/src/views/basicinfo/shuttleCar.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,138 @@
<template>
  <view-grid
    ref="grid"
    :columns="columns"
    :detail="detail"
    :editFormFields="editFormFields"
    :editFormOptions="editFormOptions"
    :searchFormFields="searchFormFields"
    :searchFormOptions="searchFormOptions"
    :table="table"
    :extend="extend"
  >
  </view-grid>
</template>
    <script>
import extend from "@/extension/basicinfo/shuttleCar.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
  setup() {
    const table = ref({
      key: "shuttleCarId",
      footer: "Foots",
      cnName: "路由配置信息",
      name: "ShuttleCar",
      url: "/ShuttleCar/",
      sortName: "shuttleCarCode",
    });
    const editFormFields = ref({
      shuttleCarPosition: "",
      shuttleCarCode: "",
      shuttleCarName: "",
      shuttleCarPosition1: "",
    });
    const editFormOptions = ref([
      [
        {
          title: "穿梭车名称",
          required: true,
          field: "shuttleCarName",
          type: "string",
        },
      ],
      [
        {
          title: "穿梭车位置",
          required: true,
          field: "shuttleCarPosition",
          type: "string",
        },
      ],
    ]);
    const searchFormFields = ref({});
    const searchFormOptions = ref([]);
    const columns = ref([
      {
        field: "shuttleCarId",
        title: "Id",
        type: "int",
        width: 90,
        hidden: true,
        readonly: true,
        require: true,
        align: "left",
      },
      {
        field: "shuttleCarCode",
        title: "穿梭车编号",
        type: "string",
        width: 90,
        align: "left",
        hidden: true,
      },
      {
        field: "shuttleCarName",
        title: "穿梭车名称",
        type: "string",
        width: 120,
        align: "left",
      },
      {
        field: "shuttleCarPosition",
        title: "穿梭车位置",
        type: "string",
        width: 180,
        align: "left",
      },
      {
        field: "shuttleCarPosition1",
        title: "穿梭车位置1",
        type: "string",
        hidden: true,
        width: 180,
        align: "left",
      },
      {
        field: "creater",
        title: "创建者",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "modifier",
        title: "修改人",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "modifyDate",
        title: "修改时间",
        type: "string",
        width: 150,
        align: "left",
      },
    ]);
    const detail = ref({
      cnName: "",
      table: "",
      columns: [],
      sortName: "",
      key: "",
    });
    return {
      table,
      extend,
      editFormFields,
      editFormOptions,
      searchFormFields,
      searchFormOptions,
      columns,
      detail,
    };
  },
});
</script>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/831db718-fb9f-4c9b-8563-04ac4c3b022f.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/a7345d61-066f-4e75-a7f7-8fcdc4fbf0f2.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b8217153-c75b-4b3f-a8c2-cd54835606ff.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/c8d108fb-29d8-4013-a466-1db3d088147c.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/dc52eb13-6b38-4915-8a73-0df70bfff17e.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f7ab71a2-03ba-4f1b-bdd4-1b7dd081c6de.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ff6f6cdf-00f0-40e5-8759-0ada18529bb0.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/StackerCraneEnum/WriteStatus.cs
@@ -22,5 +22,10 @@
        /// </summary>
        [Description("允许")]
        Permit,
        /// <summary>
        /// æˆåŠŸ
        /// </summary>
        [Description("成功")]
        Success
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/BasicInfo/ShuttleCarController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.DataProtection.KeyManagement;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using Quartz.Util;
using SqlSugar;
using System.ComponentModel;
using System.Reflection;
using WIDESEAWCS_Common;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.BasicInfo;
using WIDESEAWCS_IShuttleCar;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
namespace WIDESEAWCS_Server.Controllers.BasicInfo
{
    [Route("api/ShuttleCar")]
    [ApiController]
    public class ShuttleCarController : ApiBaseController<IShuttleCarService, Dt_ShuttleCar>
    {
        public ShuttleCarController(IShuttleCarService service) : base(service)
        {
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Interface/LargeScreenController.cs
@@ -172,7 +172,7 @@
                                        {
                                            DeviceName = item.DeviceName,
                                            DeviceCode = childDeviceCode,
                                            DeviceStatus = Device.inRead == 1 ? "可写" : "不可写",
                                            DeviceStatus = "正常",// Device.inRead == 1 ? "可写" : "不可写",
                                            DeviceMachine = GetMachine(Device.Status),
                                            TaskID = Device.TaskNum,
                                            Err_Status = GetSpec(Device.Spec)
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
@@ -31,7 +31,12 @@
            return Service.ModifyBarcode(taskDTO);
        }
        /// <summary>
        /// äººå·¥æ“ä½œä»»åŠ¡
        /// </summary>
        /// <param name="TaskId"></param>
        /// <param name="TaskType"></param>
        /// <returns></returns>
        [HttpPost, Route("ManualTask"), AllowAnonymous]
        public WebResponseContent ManualTask(int TaskId, int TaskType)
        {
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -6,7 +6,7 @@
<Project>
  <PropertyGroup>
    <_PublishTargetUrl>E:\IISText\芜湖三一\WCS</_PublishTargetUrl>
    <History>True|2025-07-07T01:47:14.5536194Z;True|2025-07-04T09:01:52.1304268+08:00;True|2025-06-30T18:01:52.8637969+08:00;True|2025-06-30T17:01:56.3064177+08:00;True|2025-06-30T16:38:12.1057130+08:00;True|2025-06-28T14:30:49.7946659+08:00;True|2025-06-28T10:55:58.8222554+08:00;True|2025-06-28T08:47:43.7229176+08:00;True|2025-06-26T12:37:56.3484297+08:00;True|2025-06-23T11:05:39.8485399+08:00;True|2025-06-23T10:17:43.5808008+08:00;True|2025-06-23T09:54:40.9326213+08:00;True|2025-06-23T09:37:35.0797885+08:00;True|2025-06-20T10:31:11.5116619+08:00;True|2025-06-19T17:43:29.0660951+08:00;True|2025-06-19T15:33:15.5169520+08:00;True|2025-06-17T15:08:30.3988621+08:00;True|2025-06-17T11:49:45.7757057+08:00;False|2025-06-17T11:46:12.2872897+08:00;True|2025-06-17T11:14:34.8780060+08:00;True|2025-06-17T10:58:01.4890300+08:00;True|2025-05-20T11:49:19.9344988+08:00;True|2025-05-19T16:43:32.2157734+08:00;True|2025-05-19T16:12:01.9378787+08:00;True|2025-05-15T16:58:47.2930537+08:00;True|2025-05-15T13:17:15.3596644+08:00;True|2025-05-15T13:11:17.2616075+08:00;True|2025-05-15T12:57:49.7942020+08:00;True|2025-05-15T12:38:37.7925022+08:00;True|2025-05-15T12:28:15.6975809+08:00;True|2025-05-15T11:44:00.9991686+08:00;True|2025-05-15T10:37:45.5900920+08:00;True|2025-05-14T11:31:54.9438366+08:00;True|2025-05-14T09:59:15.2570833+08:00;True|2025-05-14T09:57:55.8054307+08:00;True|2025-05-14T09:39:18.3194886+08:00;True|2025-05-13T17:13:53.4476748+08:00;True|2025-05-13T15:21:11.2441407+08:00;True|2025-05-13T10:39:40.0223843+08:00;True|2025-05-09T11:16:41.1746344+08:00;True|2025-04-27T19:58:33.9706872+08:00;True|2025-04-27T14:52:52.9853720+08:00;True|2025-04-21T17:54:03.6534614+08:00;True|2025-04-19T10:28:25.0898569+08:00;True|2025-04-17T14:04:50.3243452+08:00;True|2025-03-27T16:23:43.2657011+08:00;True|2025-03-25T12:01:47.0052741+08:00;True|2025-02-14T17:36:18.5767695+08:00;True|2025-02-14T14:39:49.5856199+08:00;</History>
    <History>True|2025-08-22T03:21:45.7413104Z;True|2025-08-15T08:30:13.2395643+08:00;True|2025-08-15T08:25:51.8312481+08:00;True|2025-08-15T00:47:30.6781852+08:00;True|2025-08-07T17:07:22.1687277+08:00;True|2025-07-15T17:34:29.8297232+08:00;True|2025-07-10T09:58:14.0263582+08:00;True|2025-07-10T09:43:37.0135140+08:00;True|2025-07-07T09:47:14.5536194+08:00;True|2025-07-04T09:01:52.1304268+08:00;True|2025-06-30T18:01:52.8637969+08:00;True|2025-06-30T17:01:56.3064177+08:00;True|2025-06-30T16:38:12.1057130+08:00;True|2025-06-28T14:30:49.7946659+08:00;True|2025-06-28T10:55:58.8222554+08:00;True|2025-06-28T08:47:43.7229176+08:00;True|2025-06-26T12:37:56.3484297+08:00;True|2025-06-23T11:05:39.8485399+08:00;True|2025-06-23T10:17:43.5808008+08:00;True|2025-06-23T09:54:40.9326213+08:00;True|2025-06-23T09:37:35.0797885+08:00;True|2025-06-20T10:31:11.5116619+08:00;True|2025-06-19T17:43:29.0660951+08:00;True|2025-06-19T15:33:15.5169520+08:00;True|2025-06-17T15:08:30.3988621+08:00;True|2025-06-17T11:49:45.7757057+08:00;False|2025-06-17T11:46:12.2872897+08:00;True|2025-06-17T11:14:34.8780060+08:00;True|2025-06-17T10:58:01.4890300+08:00;True|2025-05-20T11:49:19.9344988+08:00;True|2025-05-19T16:43:32.2157734+08:00;True|2025-05-19T16:12:01.9378787+08:00;True|2025-05-15T16:58:47.2930537+08:00;True|2025-05-15T13:17:15.3596644+08:00;True|2025-05-15T13:11:17.2616075+08:00;True|2025-05-15T12:57:49.7942020+08:00;True|2025-05-15T12:38:37.7925022+08:00;True|2025-05-15T12:28:15.6975809+08:00;True|2025-05-15T11:44:00.9991686+08:00;True|2025-05-15T10:37:45.5900920+08:00;True|2025-05-14T11:31:54.9438366+08:00;True|2025-05-14T09:59:15.2570833+08:00;True|2025-05-14T09:57:55.8054307+08:00;True|2025-05-14T09:39:18.3194886+08:00;True|2025-05-13T17:13:53.4476748+08:00;True|2025-05-13T15:21:11.2441407+08:00;True|2025-05-13T10:39:40.0223843+08:00;True|2025-05-09T11:16:41.1746344+08:00;True|2025-04-27T19:58:33.9706872+08:00;True|2025-04-27T14:52:52.9853720+08:00;True|2025-04-21T17:54:03.6534614+08:00;True|2025-04-19T10:28:25.0898569+08:00;True|2025-04-17T14:04:50.3243452+08:00;True|2025-03-27T16:23:43.2657011+08:00;True|2025-03-25T12:01:47.0052741+08:00;True|2025-02-14T17:36:18.5767695+08:00;True|2025-02-14T14:39:49.5856199+08:00;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -14,6 +14,7 @@
  //连接字符串
  //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_WHSY;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "WMSConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_WHSY;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //跨域
  "Cors": {
    "PolicyName": "CorsIpAccess", //策略名称
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ShuttleCar/ShuttleCarService.cs
@@ -1,7 +1,11 @@
using AutoMapper;
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using SqlSugar;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Const;
using WIDESEAWCS_Core.DB;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_IShuttleCar;
using WIDESEAWCS_IShuttleCarInfoRepository;
using WIDESEAWCS_Model.Models;
@@ -46,5 +50,34 @@
        {
            return BaseDal.QueryFirst(x => x.ShuttleCarCode != ShuttleCarCode);
        }
        public override WebResponseContent UpdateData(SaveModel saveModel)
        {
            WebResponseContent responseContent = new WebResponseContent().OK();
            try
            {
                Dt_ShuttleCar shuttleCar = BaseDal.QueryFirst(x => x.ShuttleCarId == saveModel.MainData["shuttleCarId"].ObjToInt());
                var Position = saveModel.MainData["shuttleCarPosition"].ToString();
                if (BaseDal.QueryData(x => x.ShuttleCarPosition == Position && x.ShuttleCarId != shuttleCar.ShuttleCarId).Any())
                    throw new Exception($"位置【{Position}】已存在穿梭车");
                SqlSugarClient WMSsugarClient = new SqlSugarClient(new ConnectionConfig
                {
                    ConfigId = MainDb.CurrentDbConnId,
                    ConnectionString = AppSettings.Get("WMSConnectionString").DecryptDES(AppSecret.DB),
                    IsAutoCloseConnection = true,
                    DbType = DbType.SqlServer,
                });
                var getLocation = WMSsugarClient.Queryable("Dt_LocationInfo", "x").Where("LocationCode", "=", Position).Any();
                if (!getLocation) throw new Exception($"未找到位置【{Position}】");
                shuttleCar.ShuttleCarPosition = Position;
                shuttleCar.ShuttleCarPosition1 = Position;
                BaseDal.UpdateData(shuttleCar);
            }
            catch (Exception ex)
            {
                responseContent.Error(ex.Message);
            }
            return responseContent;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/PartialTaskService_Manual.cs
@@ -160,9 +160,9 @@
                }
                else if (TaskOutboundTypes.Contains(task.TaskType))
                {
                    if (task.TaskState < TaskOutStatusEnum.SC_OutFinish.ObjToInt())
                    if (task.TaskState < TaskOutStatusEnum.OutFinish.ObjToInt())
                    {
                        task.TaskState = TaskOutStatusEnum.SC_OutFinish.ObjToInt();
                        task.TaskState = TaskOutStatusEnum.OutFinish.ObjToInt();
                        ToWMSCompletedTask(task);
                    }
                    AddTask_Hty(task, TaskOperateTypeEnum.ManualCompletion);
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ShuttleCarJob/ShuttleCarExtend/PartialTaskService.cs
@@ -484,10 +484,12 @@
            {
                case (int)TaskInboundTypeEnum.Inbound:
                case (int)TaskInboundTypeEnum.PalletInbound:
                case (int)TaskInboundTypeEnum.InQuality:
                    taskType = ShuttleCarTaskType.In;
                    break;
                case (int)TaskOutboundTypeEnum.Outbound:
                case (int)TaskOutboundTypeEnum.PalletOutbound:
                case (int)TaskOutboundTypeEnum.OutQuality:
                    taskType = ShuttleCarTaskType.Out;
                    break;
                case (int)TaskOtherTypeEnum.RelocationCar:
@@ -510,10 +512,12 @@
            {
                case (int)TaskInboundTypeEnum.Inbound:
                case (int)TaskInboundTypeEnum.PalletInbound:
                case (int)TaskInboundTypeEnum.InQuality:
                    state = (int)TaskInStatusEnum.Car_InExecuting;
                    break;
                case (int)TaskOutboundTypeEnum.Outbound:
                case (int)TaskOutboundTypeEnum.PalletOutbound:
                case (int)TaskOutboundTypeEnum.OutQuality:
                    state = (int)TaskOutStatusEnum.Car_OutExecuting;
                    break;
                case (int)TaskRelocationTypeEnum.Relocation:
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ShuttleCarJob/ShuttleCarJob.cs
@@ -40,13 +40,13 @@
        private readonly ITaskService _taskService;
        private readonly ITaskRepository _taskRepository;
        private readonly ITaskHtyService _taskHtyService;
        private readonly IShuttleCarService _shuttleCarService;
        private readonly WIDESEAWCS_IShuttleCar.IShuttleCarService _shuttleCarService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly IRouterService _routerService;
        private readonly ICacheService _cacheService;
        private readonly IMapper _mapper;
        public CommonShuttleCarJob(ITaskService taskService, ITaskRepository taskRepository, ITaskHtyService taskHtyService, IShuttleCarService shuttleCarService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, ICacheService cacheService, IMapper mapper)
        public CommonShuttleCarJob(ITaskService taskService, ITaskRepository taskRepository, ITaskHtyService taskHtyService, WIDESEAWCS_IShuttleCar.IShuttleCarService shuttleCarService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, ICacheService cacheService, IMapper mapper)
        {
            _taskService = taskService;
            _taskRepository = taskRepository;
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -42,10 +42,10 @@
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskRepository _taskRepository;
        private readonly IRouterService _routerService;
        private readonly IShuttleCarService _shuttleCarService;
        private readonly WIDESEAWCS_IShuttleCar.IShuttleCarService _shuttleCarService;
        private readonly ICacheService _cacheService;
        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IShuttleCarService shuttleCarService, ICacheService cacheService)
        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, WIDESEAWCS_IShuttleCar.IShuttleCarService shuttleCarService, ICacheService cacheService)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
@@ -73,7 +73,7 @@
                    #endregion
                    #region ä»»åŠ¡å®Œæˆ
                    if (common.CompleteStatus == 2 || common.CompleteStatus == 3 || common.CompleteStatus == 4)
                    if ((common.CompleteStatus == 2 || common.CompleteStatus == 3 || common.CompleteStatus == 4) && commonStackerCrane.CurrentTaskNum > 0)
                    {
                        var remark = "正常完成";
                        if (common.CompleteStatus == 2) remark = "手动完成";
@@ -87,7 +87,7 @@
                    if (common.Onlinestate == (short)Onlinestate.online)
                    {
                        #region æŸ¥è¯¢ä»»åŠ¡,逻辑处理
                        if (common.RunStatus == (short)RunStatus.Standby)
                        if (common.RunStatus == (short)RunStatus.Standby && common.WriteStatus == (short)WriteStatus.Permit)
                        {
                            #region ç©¿æ¢­è½¦ç§»è½¦/充电任务
                            var Task = _taskService.GetTaskState((int)CarChargingTaskEnum.CarCharging_Finish, (int)TaskOtherTypeEnum.RelocationCarCharging) ??
@@ -125,6 +125,7 @@
                {
                    if (commonStackerCrane.SetValue(StackerCraneDBName.CommandSend, sendFlag))
                    {
                        WriteDebug($"{commonStackerCrane.DeviceName}接收任务", $"WCS下发任务,任务号【{task.TaskNum}】");
                        if (_taskService.TaskInboundTypes.Contains(task.TaskType) ||
                            _taskService.TaskOutboundTypes.Contains(task.TaskType))
                            commonStackerCrane.LastTaskType = task.TaskType;
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/api/http.js
@@ -221,7 +221,7 @@
            }
        }
    } catch (error) {
        console.log(error);
        console.log(111);
        Message.error({
            showClose: true,
            message: responseText,
@@ -282,6 +282,7 @@
    var xhr = createXHR();
    xhr.onreadystatechange = function () {
        if (xhr.status == 403 || xhr.status == 401) {
            console.log(11)
            redirect(xhr.responseText);
            return;
        }
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/extension/stock/inventoryBatch.js
@@ -2,57 +2,77 @@
//此js文件是用来自定义扩展业务代码,可以扩展一些自定义页面或者重新配置生成的代码
let extension = {
    components: {
      //查询界面扩展组件
      gridHeader: '',
      gridBody: '',
      gridFooter: '',
      //新建、编辑弹出框扩展组件
      modelHeader: '',
      modelBody: '',
      modelFooter: ''
    },
    tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
    buttons: { view: [], box: [], detail: [] }, //扩展的按钮
    methods: {
       //下面这些方法可以保留也可以删除
      onInit() {
      },
      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)
  components: {
    //查询界面扩展组件
    gridHeader: '',
    gridBody: '',
    gridFooter: '',
    //新建、编辑弹出框扩展组件
    modelHeader: '',
    modelBody: '',
    modelFooter: ''
  },
  tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
  buttons: { view: [], box: [], detail: [] }, //扩展的按钮
  methods: {
    //下面这些方法可以保留也可以删除
    onInit() {
      this.buttons.forEach(x => {
        if (x.name == "编 è¾‘") {
          x.name = "审 æ ¸";
        }
      });
      let enableBtn = this.buttons.find(x => x.value == 'Update');
      if (enableBtn) {
        enableBtn.onClick = function () {
          let rows = this.$refs.table.getSelected();
          if (rows.length == 0) return this.$error("请选择库存批次信息!");
          if (rows.length > 1) return this.$error("一次只可审批一个库存批次信息!");
          this.edit();
          // this.$message.success('自定义按钮点击事件');
          // let params = {
          //   MethodName: "LocationEnableStatus",
          //   Remark: "启用",
          //   keys: null
          // }
          // this.enableStatus(params)
        }
      }
    },
    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;
  }
};
export default extension;
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/Home.vue
@@ -35,11 +35,12 @@
                  }}
                </div>
                <div>货位状态:{{ getStatusText(col.locationStatus) }}</div>
                <div>物料名称: {{ col.materielName }}</div>
                <div>批号:{{ col.batchNo }}</div>
                <div>物料编号: {{ col.materielCode }}</div>
                <div>批号:{{ col.orderNo }}</div>
                <div>柜号:{{ col.batchNo }}</div>
                <div>数量:{{ col.quantity }}托</div>
                <div>物料名称: {{ col.materielName }}</div>
                <div>托数:{{ col.quantity }}</div>
                <div>箱数:{{ col.boxQty }}</div>
                <div>袋数:{{ col.stockQuantity }}</div>
                <!-- <div>托盘号:{{ col.palletCode }}</div> -->
                <div>入库时间:{{ col.inDate }}</div>
                <div>启用状态:{{ getEnableStatusText(col.enalbeStatus) }}</div>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/Login.vue
@@ -8,28 +8,50 @@
            <div>欢迎登录...</div>
            <div class="login-line"></div>
          </div>
          <div style="flex:1;"></div>
          <div style="flex: 1"></div>
        </div>
        <div class="login-text-small">WELCOME TO LOGIN</div>
        <div class="item">
          <div class="input-icon el-icon-user"></div>
          <input type="text" v-focus v-model="userInfo.userName" placeholder="请输入账号" />
          <input
            type="text"
            v-focus
            v-model="userInfo.userName"
            placeholder="请输入账号"
          />
        </div>
        <div class="item">
          <div class="input-icon el-icon-lock"></div>
          <input type="password" v-focus v-model="userInfo.password" placeholder="请输入密码" />
          <input
            type="password"
            v-focus
            v-model="userInfo.password"
            placeholder="请输入密码"
          />
        </div>
        <div class="item">
          <div class="input-icon el-icon-mobile"></div>
          <input v-focus type="text" v-model="userInfo.verificationCode" placeholder="输入验证码" />
          <input
            v-focus
            type="text"
            v-model="userInfo.verificationCode"
            placeholder="输入验证码"
          />
          <div class="code" @click="getVierificationCode">
            <img v-show="codeImgSrc != ''" :src="codeImgSrc" />
          </div>
        </div>
      </div>
      <div class="loging-btn">
        <el-button size="large" :loading="loading" color="#3a6cd1" :dark="true" @click="login" long>
        <el-button
          size="large"
          :loading="loading"
          color="#3a6cd1"
          :dark="true"
          @click="login"
          long
        >
          <span v-if="!loading">登录</span>
          <span v-else>正在登录...</span>
        </el-button>
@@ -84,26 +106,26 @@
  ref,
  reactive,
  toRefs,
  getCurrentInstance
} from 'vue';
import { useRouter, useRoute } from 'vue-router';
import store from '../store/index';
import http from '@/../src/api/http.js';
  getCurrentInstance,
} from "vue";
import { useRouter, useRoute } from "vue-router";
import store from "../store/index";
import http from "@/../src/api/http.js";
export default defineComponent({
  setup(props, context) {
    store.commit('clearUserInfo', '');
    store.commit("clearUserInfo", "");
    const loading = ref(false);
    const codeImgSrc = ref('');
    const codeImgSrc = ref("");
    const userInfo = reactive({
      userName: '',
      password: '',
      verificationCode: '',
      UUID: undefined
      userName: "",
      password: "",
      verificationCode: "",
      UUID: undefined,
    });
    const getVierificationCode = () => {
      http.get('/api/User/getVierificationCode').then((x) => {
        codeImgSrc.value = 'data:image/png;base64,' + x.img;
      http.get("/api/User/getVierificationCode").then((x) => {
        codeImgSrc.value = "data:image/png;base64," + x.img;
        userInfo.UUID = x.uuid;
      });
    };
@@ -114,20 +136,22 @@
    let router = useRouter();
    const login = () => {
      if (!userInfo.userName) return $message.error('请输入用户名');
      if (!userInfo.password) return $message.error('请输入密码');
      if (!userInfo.verificationCode) return $message.error('请输入验证码');
      if (userInfo.verificationCode!="1234") return $message.error('验证码有误');
      if (!userInfo.userName) return $message.error("请输入用户名");
      if (!userInfo.password) return $message.error("请输入密码");
      if (!userInfo.verificationCode) return $message.error("请输入验证码");
      if (userInfo.verificationCode != "1234")
        return $message.error("验证码有误");
      loading.value = true;
      http.post('/api/User/login', userInfo, '正在登录....').then((result) => {
      http.post("/api/User/login", userInfo, "正在登录....").then((result) => {
        if (!result.status) {
          loading.value = false;
          getVierificationCode();
          return $message.error(result.message);
        }
        $message.success('登录成功,正在跳转!');
        store.commit('setUserInfo', result.data);
        router.push({ path: '/' });
        if (result.message != "") $message.error(result.message);
        $message.success("登录成功,正在跳转!");
        store.commit("setUserInfo", result.data);
        router.push({ path: "/" });
      });
    };
    const loginPress = (e) => {
@@ -136,7 +160,7 @@
      }
    };
    const openUrl = (url) => {
      window.open(url, '_blank');
      window.open(url, "_blank");
    };
    return {
      loading,
@@ -145,16 +169,16 @@
      login,
      userInfo,
      loginPress,
      openUrl
      openUrl,
    };
  },
  directives: {
    focus: {
      inserted: function (el) {
        el.focus();
      }
    }
  }
      },
    },
  },
});
</script>
<style lang="less" scoped>
@@ -359,7 +383,6 @@
<style lang="less" scoped>
@media screen and (max-width: 700px) {
  .login-bg,
  .account-info,
  .app-link,
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/basic/materielInfo.vue
@@ -33,6 +33,7 @@
      materielDes: "",
      isMixBatch: "",
      isMixMateriel: "",
      validity: "",
    });
    const editFormOptions = ref([
      [
@@ -54,22 +55,28 @@
          field: "materielName",
          type: "string",
        },
      ],
      [
        // {
        //   title: "允许混批",
        //   field: "isMixBatch",
        //   type: "string",
        // },
        // {
        //   title: "允许混料",
        //   field: "isMixMateriel",
        //   type: "string",
        // },
        {
          title: "有效期",
          required: true,
          field: "validity",
          type: "string",
        },
        {
          title: "计量单位",
          required: true,
          field: "unit",
          type: "string",
        },
      ],
      [
        {
          title: "允许混批",
          field: "isMixBatch",
          type: "string",
        },
        {
          title: "允许混料",
          field: "isMixMateriel",
          type: "string",
        },
        {
@@ -102,13 +109,13 @@
        require: true,
        align: "left",
      },
      {
        field: "areaId",
        title: "区域主键",
        type: "string",
        width: 90,
        align: "left",
      },
      // {
      //   field: "areaId",
      //   title: "区域主键",
      //   type: "string",
      //   width: 90,
      //   align: "left",
      // },
      {
        field: "materielCode",
        title: "物料编号",
@@ -130,27 +137,27 @@
        width: 90,
        align: "left",
      },
      {
        field: "cotainerType",
        title: "容器类型",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "packspes",
        title: "包装规格",
        type: "int",
        width: 120,
        align: "left",
      },
      {
        field: "attribute",
        title: "物料属性",
        type: "string",
        width: 200,
        align: "left",
      },
      // {
      //   field: "cotainerType",
      //   title: "容器类型",
      //   type: "string",
      //   width: 90,
      //   align: "left",
      // },
      // {
      //   field: "packspes",
      //   title: "包装规格",
      //   type: "int",
      //   width: 120,
      //   align: "left",
      // },
      // {
      //   field: "attribute",
      //   title: "物料属性",
      //   type: "string",
      //   width: 200,
      //   align: "left",
      // },
      {
        field: "unit",
        title: "计量单位",
@@ -165,13 +172,13 @@
        width: 120,
        align: "left",
      },
      {
        field: "safetyStock",
        title: "安全库存",
        type: "string",
        width: 120,
        align: "left",
      },
      // {
      //   field: "safetyStock",
      //   title: "安全库存",
      //   type: "string",
      //   width: 120,
      //   align: "left",
      // },
      {
        field: "creater",
        title: "创建人",
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/stock/inventoryBatch.vue
@@ -27,8 +27,36 @@
      sortName: "id",
    });
    const editFormFields = ref({
      productStatus: "",
      certificateNumber: "",
      materielCode:"",
      materielName:"",
      shelfLife:"",
      boxQuantity:"",
      outboundQuantity:"",
      stockQuantity:"",
      productionDate:"",
      remark:"",
      validityPeriod:"",
      batchNo:""
    });
    const editFormOptions = ref([]);
    const editFormOptions = ref([
      [
        {
          title: "产品状态",
          field: "productStatus",
          type: "select",
          dataKey: "productStatusEmun",
          data: [],
        },
        {
          title: "合格证号",
          required: true,
          field: "certificateNumber",
          type: "string",
        },
      ],
    ]);
    const searchFormFields = ref({
      deviceCode: "",
      deviceType: "",
@@ -36,13 +64,12 @@
    });
    const searchFormOptions = ref([
      [
        { title: "托盘编号", field: "palletCode", type: "like" },
        { title: "货位编号", field: "locationCode", type: "like" },
        { title: "批号", field: "batchNo", type: "like" },
        {
          title: "库存状态",
          field: "stockStatus",
          title: "产品状态",
          field: "productStatus",
          type: "select",
          dataKey: "stockStatusEmun",
          dataKey: "productStatusEmun",
          data: [],
        },
      ],
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/stock/inventoryInfo.vue
@@ -36,7 +36,10 @@
    });
    const searchFormOptions = ref([
      [
        { title: "批号", field: "batchNo", type: "like" },
        { title: "托盘编号", field: "palletCode", type: "like" },
      ],
      [
        { title: "货位编号", field: "locationCode", type: "like" },
        {
          title: "库存状态",
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/taskinfo/task.vue
@@ -26,8 +26,13 @@
      url: "/Task/",
      sortName: "taskNum",
    });
    const editFormFields = ref({});
    const editFormOptions = ref([]);
    const editFormFields = ref({palletCode:""});
    const editFormOptions = ref([[{
          title: "托盘编号",
          required: true,
          field: "palletCode",
          type: "string",
        },]]);
    const searchFormFields = ref({
      taskNum: "",
      palletCode: "",
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/083d80b6-6142-49d0-9814-0a7c82c0f686.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/21da0554-32f9-4be1-9bc3-100a5891a916.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/30cef92a-8890-45b9-9045-c115bf9d2c3f.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3a5d755d-461e-4be6-a227-8a2294d2bac2.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3e1f62ff-b3b1-4560-a052-1caf9df98fcb.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/403bc1fd-51c3-4707-95b1-f77406d3c475.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/6136ac8b-5359-410d-badd-c473a7136a69.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/6706044f-7482-48ec-b0db-3cda90f7ff7f.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8bb4bd2d-5325-42d4-9412-8b5426ce7c08.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/9dbc0b34-59bd-40ab-b0b8-4f16dc128c7e.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.futdcache.v2
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.suo
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/fileList.bin
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs
@@ -23,33 +23,52 @@
        /// 
        /// </summary>
        private readonly RequestDelegate _next;
        private readonly ILogger<ApiLogMiddleware> _logger;
        public ApiLogMiddleware(RequestDelegate next, ILogger<ApiLogMiddleware> logger)
        {
            _next = next;
            _logger = logger;
        }
        //todo
        public async Task InvokeAsync(HttpContext context)
        {
            if (App.ExpDateTime != null && (DateTime.Now - App.ExpDateTime.GetValueOrDefault()).TotalSeconds > 0)
            {
                context.Response.StatusCode = HttpStatusCode.InternalServerError.ObjToInt();
                context.Response.ContentType = "application/json";
            //if (App.ExpDateTime != null)
            //{
            //    if ((DateTime.Now - App.ExpDateTime.GetValueOrDefault()).TotalSeconds > 0)
            //    {
            //        await ReturnExpiredResponse(context, "系统已过期,请联系管理员");
            //        return;
            //    }
            //    //var Hours = (App.ExpDateTime.GetValueOrDefault() - DateTime.Now).TotalHours;
            //    //if (Hours < 72)
            //    //{
            //    //    // è®°å½•警告日志
            //    //    _logger.LogWarning($"系统即将到期,剩余时间:{Hours:F2}小时,到期时间:{App.ExpDateTime.GetValueOrDefault():yyyy-MM-dd HH:mm:ss}");
                var json = new WebResponseContent();
            //    //    // åœ¨å“åº”头中添加到期提示
            //    //    context.Response.Headers.Add("X-Expiration-Warning",
            //    //        $"系统将在 {Hours:F2} å°æ—¶åŽåˆ°æœŸ ({App.ExpDateTime.GetValueOrDefault():yyyy-MM-dd HH:mm:ss})");
                json.Message = HttpStatusCode.InternalServerError.ToString();//错误信息
                json.Code = 500;//500异常
            //    //    // å¦‚果需要直接返回提示信息,取消下面的注释
            //    //    await ReturnExpirationWarningResponse(context, Hours);
            //    //    return;
            //    //}
                StreamWriter streamWriter = new StreamWriter(context.Response.Body);
                await streamWriter.WriteAsync(json.Serialize());
                return;
            }
            //}
            // è¿‡æ»¤ï¼Œåªæœ‰æŽ¥å£
            if (context.Request.Path.Value?.Contains("api") ?? false)
            {
                if (App.ExpDateTime != null)
                {
                    if ((DateTime.Now - App.ExpDateTime.GetValueOrDefault()).TotalSeconds > 0 && !context.Request.Path.Value.Contains("getVierificationCode") && context.Request.Path.Value != "/api/User/login")
                    {
                        await ReturnExpiredResponse(context, "系统已过期,请联系管理员");
                        return;
                    }
                }
                context.Request.EnableBuffering();
                Stream originalBody = context.Response.Body;
                string requestParam = string.Empty;
@@ -78,7 +97,7 @@
                    ms.Position = 0;
                    await ms.CopyToAsync(originalBody);
                    if (!((context.Request.Path.Value?.Contains("get")) ?? true) && !((context.Request.Path.Value?.Contains("Get")) ?? true) && !((context.Request.Path.Value?.Contains("query")) ?? true) && !((context.Request.Path.Value?.Contains("Query")) ?? true) && !((context.Request.Path.Value?.Contains("DownLoadApp")) ?? true) && !((context.Request.Path.Value?.Contains("downLoadApp")) ?? true) && !((context.Request.Path.Value?.Contains("UploadApp")) ?? true) && !((context.Request.Path.Value?.Contains("uploadApp")) ?? true))
                    if (!ShouldSkipLogging(context.Request.Path.Value))
                        Logger.Add(requestParam, responseParam);
                }
                catch (Exception ex)
@@ -97,6 +116,60 @@
            }
        }
        /// <summary>
        /// è¿”回过期响应
        /// </summary>
        private async Task ReturnExpiredResponse(HttpContext context, string message)
        {
            context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
            context.Response.ContentType = "application/json; charset=utf-8";
            context.Response.Headers.ContentType= "application/json; charset=utf-8";
            var json = new WebResponseContent
            {
                Message = message,
                Code = 500
            };
            var jsonString = JsonConvert.SerializeObject(json);
            await context.Response.WriteAsync(jsonString);
        }
        /// <summary>
        /// è¿”回到期警告响应(可选)
        /// </summary>
        private async Task ReturnExpirationWarningResponse(HttpContext context, double hoursRemaining)
        {
            context.Response.StatusCode = (int)HttpStatusCode.OK;
            context.Response.ContentType = "application/json";
            var expirationDate = App.ExpDateTime.GetValueOrDefault();
            var response = new
            {
                Code = 200,
                Message = "系统即将到期警告",
                Data = new
                {
                    HoursRemaining = hoursRemaining,
                    ExpirationDate = expirationDate,
                    FormattedMessage = $"系统将在 {Math.Ceiling(hoursRemaining)} å°æ—¶åŽåˆ°æœŸï¼Œåˆ°æœŸæ—¶é—´ï¼š{expirationDate:yyyy-MM-dd HH:mm:ss}。请联系管理员续期。"
                },
                Warning = true
            };
            var jsonString = JsonConvert.SerializeObject(response);
            await context.Response.WriteAsync(jsonString);
        }
        /// <summary>
        /// åˆ¤æ–­æ˜¯å¦è·³è¿‡æ—¥å¿—记录
        /// </summary>
        private bool ShouldSkipLogging(string path)
        {
            if (string.IsNullOrEmpty(path)) return false;
            var skipKeywords = new[] { "get", "Get", "query", "Query", "DownLoadApp", "downLoadApp", "UploadApp", "uploadApp" };
            return skipKeywords.Any(keyword => path.Contains(keyword, StringComparison.OrdinalIgnoreCase));
        }
        private string RequestDataLog(HttpContext context)
        {
            var request = context.Request;
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_DTO/LargeScreen/BoundOrderDTO.cs
@@ -9,9 +9,9 @@
    public class BoundOrderDTO
    {
        /// <summary>
        /// å•据编号
        /// æ•°é‡
        /// </summary>
        public string OrderNo {  get; set; }
        public decimal Quantity {  get; set; }
        /// <summary>
        /// å•据类型
        /// </summary>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs
@@ -106,7 +106,8 @@
        public string MaterielName { get; set; }
        public string OrderNo { get; set; }
        public int BoxQty { get; set; }
        public int StockQuantity { get; set; }
        public string BatchNo { get; set; }
    }
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WCSInfo/WMSResponseContent.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@

using System.Collections;
using System.Collections.Generic;
namespace WIDESEA_Common
{
    public class WMSResponseContent
    {
        /// <summary>
        /// false:失败,true:成功
        /// </summary>
        public bool success { get; set; }
        /// <summary>
        /// 200成功否则失败
        /// </summary>
        public int code { get; set; }
        /// <summary>
        /// è¿”回消息
        /// </summary>
        public string msg { get; set; }
        /// <summary>
        /// æ•°æ®
        /// </summary>
        public object data { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WCSInfo/WMSSaveModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@

using System.Collections;
using System.Collections.Generic;
namespace WIDESEA_Common
{
    public class WMSSaveModel
    {
        public string serverCode { get; set; } = "C0135";
        //public Params @params { get; set; }
        public Params Params { get; set; }
    }
    public class Params
    {
        /// <summary>
        /// å…¥åº“获取标签:GET_SN_INFO_TWO_BY_WCS<br></br>
        /// ç»“果反馈:AUTOMATIC_PICKING_POSTING<br></br>
        /// èŽ·å–ç‰©æ–™ä¿¡æ¯ï¼šGET_MATERIAL_INFO_TWO_BY_WCS
        /// </summary>
        public string apiMethod { get; set; }
        public object data { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -22,6 +22,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/InboundOrderService.cs
@@ -140,8 +140,8 @@
                List<Dt_InboundOrderDetail> orderDetails = new List<Dt_InboundOrderDetail>();
                foreach (var item in inboundOrders)
                {
                    if (item.Details.Where(x => x.ReceiptQuantity != x.OverInQuantity).Any())
                        throw new Exception("存在未入库完成托盘");
                    //if (item.Details.Where(x => x.ReceiptQuantity != x.OverInQuantity).Any())
                    //    throw new Exception("存在未入库完成托盘");
                    orderDetails.AddRange(item.Details);
                    item.Details = null;
                }
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderService.cs
@@ -102,8 +102,8 @@
                List<Dt_OutboundOrderDetail> orderDetails = new List<Dt_OutboundOrderDetail>();
                foreach (var item in _OutboundOrders)
                {
                    if (item.Details.Where(x => x.LockQuantity != x.OverOutQuantity).Any())
                        throw new Exception("存在未出库完成托盘");
                    //if (item.Details.Where(x => x.LockQuantity != x.OverOutQuantity).Any())
                    //    throw new Exception("存在未出库完成托盘");
                    orderDetails.AddRange(item.Details);
                    item.Details = null;
                }
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs
@@ -177,8 +177,11 @@
                ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>();
                List<Dt_LocationInfo> dt_LocationInfos = sugarQueryable.ToList();
                ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>().Where(x => dt_LocationInfos.Select(x => x.LocationCode).ToList().Contains(x.LocationCode)).Includes(x => x.Details);
                List<Dt_StockInfo> StockInfos = sugarQueryable1.OrderBy(x => x.InDate).ToList();
                //ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>().Where(x => dt_LocationInfos.Select(x => x.LocationCode).ToList().Contains(x.LocationCode)).Includes(x => x.Details);
                //List<Dt_StockInfo> StockInfos = sugarQueryable1.OrderBy(x => x.InDate).ToList();
                ISugarQueryable<Dt_InventoryInfo> sugarQueryable1 = _dbBase.Queryable<Dt_InventoryInfo>().Where(x => dt_LocationInfos.Select(x => x.LocationCode).ToList().Contains(x.LocationCode));
                List<Dt_InventoryInfo> StockInfos = sugarQueryable1.OrderBy(x => x.InDate).ToList();
                foreach (var dt_LocationInfo in dt_LocationInfos)
                {
                    LocationStockView locationStockView = new LocationStockView()
@@ -195,22 +198,24 @@
                        RoadwayNo = dt_LocationInfo.RoadwayNo,
                        Row = dt_LocationInfo.Row
                    };
                    List<Dt_StockInfo> dt_StockInfos = StockInfos.Where(x => x.LocationCode == dt_LocationInfo.LocationCode).ToList();
                    List<Dt_StockInfoDetail> Details = new List<Dt_StockInfoDetail>();
                    foreach (var item in dt_StockInfos)
                    {
                        Details.AddRange(item.Details);
                    }
                    var BatchNo = string.Join(",", Details.GroupBy(x => x.BatchNo).Select(x => x.Key).ToList());
                    List<Dt_InventoryInfo> dt_StockInfos = StockInfos.Where(x => x.LocationCode == dt_LocationInfo.LocationCode).ToList();
                    //List<Dt_StockInfoDetail> Details = new List<Dt_StockInfoDetail>();
                    //foreach (var item in dt_StockInfos)
                    //{
                    //    Details.AddRange(item.Details);
                    //}
                    //var BatchNo = string.Join(",", Details.GroupBy(x => x.BatchNo).Select(x => x.Key).ToList());
                    if (dt_StockInfos.Count > 0 && dt_StockInfos != null)
                    {
                        locationStockView.BatchNo = BatchNo;
                        locationStockView.BatchNo = dt_StockInfos.First().BatchNo;
                        locationStockView.InDate = dt_StockInfos.OrderByDescending(x => x.InDate).First().InDate;
                        locationStockView.MaterielCode = dt_StockInfos.First().Details.First().MaterielCode;
                        locationStockView.MaterielName = dt_StockInfos.First().Details.First().MaterielName;
                        locationStockView.OrderNo = dt_StockInfos.First().Details.First().OrderNo;
                        locationStockView.MaterielCode = dt_StockInfos.First().MaterielCode;
                        locationStockView.MaterielName = dt_StockInfos.First().MaterielName;
                        //locationStockView.OrderNo = dt_StockInfos.First().OrderNo;
                        locationStockView.PalletCode = string.Join(",", dt_StockInfos.Select(x => x.PalletCode).ToList());
                        locationStockView.Quantity = dt_StockInfos.Count;
                        locationStockView.BoxQty = dt_StockInfos.Select(x => x.BoxQuantity).Sum();
                        locationStockView.StockQuantity = dt_StockInfos.Select(x => x.StockQuantity).Sum();
                    }
                    locationStockViews.Add(locationStockView);
                }
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StockService/InventoryBatchService.cs
@@ -24,15 +24,30 @@
    {
        private readonly IMapper _mapper;
        public IInventoryBatchRepository Repository => BaseDal;
        public IInventoryInfoRepository _inventoryInfoRepository;
        public InventoryBatchService(IInventoryBatchRepository BaseDal, IMapper mapper) : base(BaseDal)
        public InventoryBatchService(IInventoryBatchRepository BaseDal, IInventoryInfoRepository inventoryInfoRepository, IMapper mapper) : base(BaseDal)
        {
            _mapper = mapper;
            _inventoryInfoRepository = inventoryInfoRepository;
        }
        public List<Dt_Inventory_Batch> GetInventoryBatch(string materielCode)
        {
            List<Dt_Inventory_Batch> dt_Inventories = BaseDal.QueryData(x => x.MaterielCode == materielCode);
            return dt_Inventories;
        }
        public override WebResponseContent UpdateData(SaveModel saveModel)
        {
            var productStatus = saveModel.MainData["productStatus"].ObjToInt();
            var batchNo = saveModel.MainData["batchNo"].ToString();
            List<Dt_InventoryInfo> inventoryInfos = _inventoryInfoRepository.QueryData(x => x.BatchNo == batchNo);
            inventoryInfos.ForEach(x =>
            {
                x.ProductStatus = productStatus;
            });
            _inventoryInfoRepository.UpdateData(inventoryInfos);
            return base.UpdateData(saveModel);
        }
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_UserService.cs
@@ -41,8 +41,21 @@
            try
            {
                //BaseDal.QueryFirst(x => x.UserName == loginInfo.UserName);
                string msg = string.Empty;
                if (App.ExpDateTime != null)
                {
                    if ((DateTime.Now - App.ExpDateTime.GetValueOrDefault()).TotalSeconds > 0)
                        return WebResponseContent.Instance.Error("授权已到期,请联系管理员");
                    var span = App.ExpDateTime.GetValueOrDefault() - DateTime.Now;
                    var Days = span.TotalDays;
                    var Hours = span.TotalHours;
                    var Minutes = span.TotalMinutes;
                    var Seconds = span.TotalSeconds;
                    if (Minutes < 1) msg = $"系统将在 {Math.Ceiling(Seconds)} ç§’钟后到期,到期时间:{App.ExpDateTime.GetValueOrDefault():yyyy-MM-dd HH:mm:ss}。请联系管理员续期。";
                    else if (Hours < 1) msg = $"系统将在 {Math.Ceiling(Minutes)} åˆ†é’ŸåŽåˆ°æœŸï¼Œåˆ°æœŸæ—¶é—´ï¼š{App.ExpDateTime.GetValueOrDefault():yyyy-MM-dd HH:mm:ss}。请联系管理员续期。";
                    else if (Hours < 72) msg = $"系统将在 {Math.Ceiling(Hours)} å°æ—¶åŽåˆ°æœŸï¼Œåˆ°æœŸæ—¶é—´ï¼š{App.ExpDateTime.GetValueOrDefault():yyyy-MM-dd HH:mm:ss}。请联系管理员续期。";
                    else if (Days < 7) msg = $"系统将在 {Math.Ceiling(Days)} å¤©åŽåˆ°æœŸï¼Œåˆ°æœŸæ—¶é—´ï¼š{App.ExpDateTime.GetValueOrDefault():yyyy-MM-dd HH:mm:ss}。请联系管理员续期。";
                }
                #region ä¸´æ—¶ä½¿ç”¨
                try
@@ -78,7 +91,7 @@
                    _cacheService.AddOrUpdate(user.UserId.ToString(), token);
                    content = WebResponseContent.Instance.OK(data: new { token, userName = user.UserTrueName, img = user.HeadImageUrl });
                    content = WebResponseContent.Instance.OK(msg, data: new { token, userName = user.UserTrueName, img = user.HeadImageUrl });
                }
                else
                {
@@ -128,7 +141,7 @@
            int RoleId = saveModel.MainData[nameof(Sys_User.Role_Id).FirstLetterToLower()].ObjToInt();
            var user = BaseDal.QueryFirst(x => x.User_Id == userId);
            if (User.User_Id == user.User_Id && User.Role_Id != RoleId) return WebResponseContent.Instance.Error("不可修改自己的角色");
            if(User.User_Id != user.User_Id && User.Role_Id >= RoleId) return WebResponseContent.Instance.Error("权限等级不足");
            if (User.User_Id != user.User_Id && User.Role_Id >= RoleId) return WebResponseContent.Instance.Error("权限等级不足");
            if (User.Role_Id > user.Role_Id || User.Role_Id == user.Role_Id && User.User_Id != userId) return WebResponseContent.Instance.Error("暂无修改权限");
            //if (User.User_Id != userId) return WebResponseContent.Instance.Error("暂无修改权限");只限当前用户修改
            #endregion
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs
@@ -127,7 +127,7 @@
                var qty = saveModel.MainData["qty"].ToString();
                if (string.IsNullOrEmpty(qty)) throw new Exception("袋数不可为空");
                var batchNo = saveModel.MainData["batchNo"].ToString();
                if (string.IsNullOrEmpty(batchNo)) throw new Exception("柜号不可为空");
                if (string.IsNullOrEmpty(batchNo)) throw new Exception("批号不可为空");
                #region æŸ¥è¯¢åº“存、入库单
                Dt_InventoryInfo inventoryInfo = _inventoryInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
@@ -137,8 +137,27 @@
                if (inboundOrderDetail.OrderQuantity - inboundOrderDetail.ReceiptQuantity < qty.ObjToInt()) throw new Exception($"批号【{batchNo}】可组盘数量不足");
                Dt_InboundOrder? inboundOrder = _inboundService.InbounOrderService.Repository.QueryFirst(x => x.Id == inboundOrderDetail.OrderId);
                if (inboundOrder == null) throw new Exception($"未找到批号为【{batchNo}】的入库单");
                Dt_Inventory_Batch inventory_Batch = _inventoryBatchRepository.QueryFirst(x => x.BatchNo == batchNo);
                if (inventory_Batch == null) throw new Exception($"未找到批号为【{batchNo}】的批次信息");
                var materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == inboundOrderDetail.MaterielCode);
                if (materielInfo == null) throw new Exception($"未找到物料信息,物料编码【{inboundOrderDetail.MaterielCode}】");
                //Dt_Inventory_Batch inventory_Batch = _inventoryBatchRepository.QueryFirst(x => x.BatchNo == batchNo);
                //if (inventory_Batch == null && inboundOrder.OrderType == InOrderTypeEnum.Quality.ObjToInt())
                //    throw new Exception($"未找到批号为【{batchNo}】的批次信息");
                //bool add = inventory_Batch == null;
                //if (add)
                //{
                var productionDate = DateTime.Now.ToString("yyyy-MM-dd");
                var validityPeriod = DateTime.Now.AddDays(materielInfo.Validity).ToString("yyyy-MM-dd");//加天
                //    inventory_Batch = new Dt_Inventory_Batch()
                //    {
                //        BatchNo = inboundOrderDetail.BatchNo,
                //        MaterielCode = inboundOrderDetail.MaterielCode,
                //        MaterielName = inboundOrderDetail.MaterielName,
                //        ProductionDate = productionDate,
                //        ShelfLife = materielInfo.Validity,
                //        ValidityPeriod = validityPeriod,
                //        Creater = "System"
                //    };
                //}
                #endregion
                #region åˆ›å»ºä»»åŠ¡
@@ -163,15 +182,15 @@
                #region æ·»åŠ åº“å­˜ä¿¡æ¯ã€å¤„ç†å…¥åº“å•
                inventoryInfo = new Dt_InventoryInfo()
                {
                    BatchNo = inventory_Batch.BatchNo,
                    MaterielCode = inventory_Batch.MaterielCode,
                    MaterielName = inventory_Batch.MaterielName,
                    BatchNo = inboundOrderDetail.BatchNo,
                    MaterielCode = inboundOrderDetail.MaterielCode,
                    MaterielName = inboundOrderDetail.MaterielName,
                    PalletCode = palletCode,
                    ProductionDate = inventory_Batch.ProductionDate,
                    ProductionDate = productionDate,
                    StockStatus = StockStatusEmun.组盘暂存.ObjToInt(),
                    ProductStatus = dt_Task.TaskType == TaskTypeEnum.InQuality.ObjToInt() ? ProductStatusEmun.待检2.ObjToInt() : ProductStatusEmun.待检1.ObjToInt(),
                    ShelfLife = inventory_Batch.ShelfLife,
                    ValidityPeriod = inventory_Batch.ValidityPeriod,
                    ShelfLife = materielInfo.Validity,
                    ValidityPeriod = validityPeriod,
                    StockQuantity = qty.ObjToInt(),
                    BoxQuantity = (qty.ObjToInt() % 8 > 0) ? (qty.ObjToInt() / 8) + 1 : qty.ObjToInt() / 8,
                    Creater = "System"
@@ -179,14 +198,22 @@
                inboundOrder.OrderStatus = InboundStatusEnum.入库中.ObjToInt();
                inboundOrderDetail.ReceiptQuantity += inventoryInfo.StockQuantity;
                inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt();
                inventory_Batch.ProductStatus = inventoryInfo.ProductStatus;
                //inventory_Batch.ProductStatus = inventoryInfo.ProductStatus;
                #endregion
                Db.Ado.BeginTran();
                _inboundService.InbounOrderService.UpdateData(inboundOrder);
                _inboundService.InboundOrderDetailService.UpdateData(inboundOrderDetail);
                _inventoryInfoRepository.AddData(inventoryInfo);
                _inventoryBatchRepository.UpdateData(inventory_Batch);
                //if (add)
                //{
                //    inventory_Batch.BoxQuantity = inventoryInfo.BoxQuantity;
                //    inventory_Batch.OutboundQuantity = inventoryInfo.OutboundQuantity;
                //    inventory_Batch.StockQuantity = inventoryInfo.StockQuantity;
                //    _inventoryBatchRepository.AddData(inventory_Batch);
                //}
                //else
                //    _inventoryBatchRepository.UpdateData(inventory_Batch);
                AddData(dt_Task);
                List<WMSTaskDTO> wMSTaskDTOs = _mapper.Map<List<WMSTaskDTO>>(new List<Dt_Task> { dt_Task });
                var ResultData = HttpHelper.PostAsync(WCSInterfaceAddress.ReceiveTask, wMSTaskDTOs.ToJson(), headers: new Dictionary<string, string>());
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs
@@ -196,16 +196,25 @@
                }
                else
                {
                    Dt_InventoryInfo? _InventoryInfo = _stockService.InventoryInfoService.Repository.QueryData(x => x.BatchNo == inventoryInfo.BatchNo && (x.StockStatus == StockStatusEmun.入库中.ObjToInt() || x.StockStatus == StockStatusEmun.已入库.ObjToInt())).OrderByDescending(x => x.ModifyDate).FirstOrDefault();
                    Dt_InventoryInfo? _InventoryInfo = _stockService.InventoryInfoService.Repository.QueryData(x => x.BatchNo == inventoryInfo.BatchNo && x.StockStatus == StockStatusEmun.入库中.ObjToInt()).OrderByDescending(x => x.ModifyDate).FirstOrDefault();
                    if (_InventoryInfo != null)
                    {
                        locationInfo = _basicService.LocationInfoService.GetLocation(_InventoryInfo.LocationCode);
                        if (locationInfo?.MaxQty <= locationInfo?.CurrentQty) locationInfo = null;
                    }
                    if (locationInfo == null)
                    {
                        _InventoryInfo = _stockService.InventoryInfoService.Repository.QueryData(x => x.BatchNo == inventoryInfo.BatchNo && x.StockStatus == StockStatusEmun.已入库.ObjToInt()).OrderByDescending(x => x.InDate).FirstOrDefault();
                        if (_InventoryInfo != null)
                        {
                            locationInfo = _basicService.LocationInfoService.GetLocation(_InventoryInfo.LocationCode);
                            if (locationInfo?.MaxQty <= locationInfo?.CurrentQty) locationInfo = null;
                        }
                    }
                    if (locationInfo == null)//分配新货位
                    {
                        var Qty = Convert.ToInt32(inboundOrderDetail.OrderQuantity - inboundOrderDetail.OverInQuantity);
                        var Qty = Convert.ToInt32(inboundOrderDetail.OrderQuantity - inboundOrderDetail.ReceiptQuantity);
                        var ts = Qty / 320;
                        if (Qty % 320 > 0) ts++;
                        int inboundOrderCount = ts > 12 ? 2 : 1;
@@ -223,6 +232,7 @@
                task.SourceIsPickPlace = false;
                inventoryInfo.LocationCode = locationInfo.LocationCode;
                inventoryInfo.StockStatus = StockStatusEmun.入库中.ObjToInt();
                inventoryInfo.ModifyDate = DateTime.Now;
                locationInfo.CurrentQty++;
                if (locationInfo.MaxQty < locationInfo.CurrentQty) locationInfo.CurrentQty = locationInfo.MaxQty;
                inventoryInfo.SerialNumber = locationInfo.CurrentQty;
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -267,7 +267,7 @@
                    return webResponse.Error($"批号【{batchNo}】已质检入库");
                List<Dt_InventoryInfo> _InventoryInfos = _inventoryInfoRepository.QueryData(x => x.BatchNo == batchNo && x.StockStatus == StockStatusEmun.已入库.ObjToInt()).OrderByDescending(x => x.InDate).Take(qty).ToList();
                if (_InventoryInfos.Count < 1) return webResponse.Error($"未找到批号【{batchNo}】的库存");
                Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == _InventoryInfos.First().LocationCode);
                List<Dt_LocationInfo> locationInfos = _basicRepository.LocationInfoRepository.QueryData(x => _InventoryInfos.Select(x => x.LocationCode).ToList().Contains(x.LocationCode));
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<Dt_OutStockLockInfo> OutStockLockInfos = new List<Dt_OutStockLockInfo>();
                #region ç”Ÿæˆè´¨æ£€å‡ºåº“单
@@ -289,6 +289,7 @@
                #endregion
                foreach (var item in _InventoryInfos)
                {
                    var locationInfo = locationInfos.First(x => x.LocationCode == item.LocationCode);
                    orderDetail.MaterielCode = item.MaterielCode;
                    orderDetail.MaterielName = item.MaterielName;
                    orderDetail.OrderQuantity += item.StockQuantity;
@@ -301,10 +302,10 @@
                        Grade = 0,
                        PalletCode = item.PalletCode,
                        SourceIsPickPlace = item.SerialNumber == locationInfo.MaxQty,
                        NextAddress = "1005",
                        NextAddress = "1008",
                        Roadway = "SC01",
                        SourceAddress = item.LocationCode,
                        TargetAddress = "1005",
                        TargetAddress = "1008",
                        TaskState = OutTaskStatusEnum.OutNew.ObjToInt(),
                        TaskType = TaskTypeEnum.OutQuality.ObjToInt(),
                        TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum))
@@ -331,7 +332,7 @@
                    OutStockLockInfos.Add(outStockLockInfo);
                    #endregion
                }
                bool CreateQCIn = AppSettings.app(nameof(CreateQCIn)).ObjToBool();
                #region ç”Ÿæˆè´¨æ£€å…¥åº“单
                Dt_InboundOrderDetail inboundOrderDetail = new Dt_InboundOrderDetail()
                {
@@ -364,7 +365,7 @@
                BaseDal.AddData(tasks);
                _outboundService.OutboundOrderService.Repository.Db.InsertNav(outboundOrder).Include(x => x.Details).ExecuteCommand();
                _outboundService.OutboundStockLockInfoService.Repository.AddData(OutStockLockInfos);
                _inboundService.InbounOrderService.Repository.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
                if (CreateQCIn) _inboundService.InbounOrderService.Repository.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
                _inventoryInfoRepository.UpdateData(_InventoryInfos);
                _inventoryBatchRepository.UpdateData(inventory_Batch);
                #region ä¸‹å‘任务给WCS
@@ -394,15 +395,15 @@
                if (inventoryInfo == null) throw new Exception("未找到托盘信息");
                if (inventoryInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && inventoryInfo.StockStatus != StockStatusEmun.入库确认.ObjToInt() && inventoryInfo.StockStatus != StockStatusEmun.入库中.ObjToInt())
                    throw new Exception($"托盘非入库中,不可修改数量");
                Dt_InboundOrderDetail orderDetail = _inboundService.InboundOrderDetailService.Repository.QueryFirst(x => x.BatchNo == inventoryInfo.BatchNo);
                //Dt_InboundOrderDetail orderDetail = _inboundService.InboundOrderDetailService.Repository.QueryFirst(x => x.BatchNo == inventoryInfo.BatchNo);
                var StockQty = inventoryInfo.StockQuantity;
                inventoryInfo.StockQuantity = qty;
                inventoryInfo.BoxQuantity = qty % 8 > 0 ? qty / 8 + 1 : qty / 8;
                if (orderDetail != null)
                {
                    orderDetail.ReceiptQuantity -= StockQty - qty;
                    _inboundService.InboundOrderDetailService.Repository.UpdateData(orderDetail);
                }
                //if (orderDetail != null)
                //{
                //    orderDetail.ReceiptQuantity -= StockQty - qty;
                //    _inboundService.InboundOrderDetailService.Repository.UpdateData(orderDetail);
                //}
                _inventoryInfoRepository.UpdateData(inventoryInfo);
                return webResponseContent.OK();
            }
@@ -411,7 +412,38 @@
                return webResponseContent.Error(ex.Message);
            }
        }
        public override WebResponseContent UpdateData(SaveModel saveModel)
        {
            WebResponseContent webResponseContent = new WebResponseContent();
            try
            {
                Dt_Task dt_Task = BaseDal.QueryFirst(x => x.TaskId == saveModel.MainData["taskId"].ObjToInt());
                string newBarcode = saveModel.MainData["palletCode"].ToString();
                if (TaskEnumHelper.GetTaskTypeGroup(dt_Task.TaskType) != TaskTypeGroup.InboundGroup)
                    throw new Exception($"只可修改入库任务,如需修改其他任务类型请联系管理员!");
                Dt_InventoryInfo inventoryInfo = _inventoryInfoRepository.QueryFirst(x => x.PalletCode == newBarcode);
                if (inventoryInfo != null) throw new Exception($"托盘号【{newBarcode}】已存在库存信息!");
                inventoryInfo = _inventoryInfoRepository.QueryFirst(x => x.PalletCode == dt_Task.PalletCode);
                if (inventoryInfo == null) throw new Exception($"托盘号【{dt_Task.PalletCode}】未找到库存信息!");
                inventoryInfo.PalletCode = newBarcode;
                dt_Task.PalletCode = newBarcode;
                Db.Ado.BeginTran();
                WMSTaskDTO wMSTaskDTOs = _mapper.Map<WMSTaskDTO>(dt_Task);
                var ResultData = HttpHelper.PostAsync(WCSInterfaceAddress.ModifyBarcode, wMSTaskDTOs.ToJson(), headers: new Dictionary<string, string>());
                if (ResultData.Result == null) throw new Exception($"WCS响应超时");
                WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result);
                if (content == null) throw new Exception($"WCS无响应");
                if (!content.Status) throw new Exception(content.Message);
                BaseDal.UpdateData(dt_Task);
                _inventoryInfoRepository.UpdateData(inventoryInfo);
                Db.Ado.CommitTran();
                return webResponseContent.OK();
            }
            catch (Exception ex)
            {
                return webResponseContent.Error(ex.Message);
            }
        }
        public WebResponseContent ModifyBarcode(string barcode, string newBarcode)
        {
            WebResponseContent webResponseContent = new WebResponseContent();
@@ -460,23 +492,36 @@
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == WMStask.TaskNum && x.TaskType == WMStask.TaskType);
                if (task == null) return WebResponseContent.Instance.Error("未找到任务信息");
                Dt_StockInfo? _StockInfo = _stockService.StockInfoService.GetStockByPalletCode(task.PalletCode);
                if (_StockInfo != null)
                Dt_InventoryInfo? inventoryInfo = _inventoryInfoRepository.QueryFirst(x => x.PalletCode == task.PalletCode);
                if (inventoryInfo != null)
                {
                    Dt_StockInfoDetail? detail = _StockInfo.Details.FirstOrDefault();
                    if (detail != null)
                    Dt_InboundOrderDetail? inboundOrderDetail = _inboundService.InboundOrderDetailService.Repository.QueryFirst(x => x.BatchNo == inventoryInfo.BatchNo);
                    if (inboundOrderDetail != null)
                    {
                        Dt_InboundOrder dt_InboundOrder = _inboundService.InbounOrderService.GetInboundOrder(detail.OrderNo);
                        Dt_InboundOrderDetail? inboundOrderDetail = dt_InboundOrder.Details.FirstOrDefault(x => x.BatchNo == detail.BatchNo);
                        if (inboundOrderDetail != null)
                        {
                            inboundOrderDetail.ReceiptQuantity--;
                            _inboundService.InboundOrderDetailService.Repository.UpdateData(inboundOrderDetail);
                        }
                        _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(_StockInfo.Details, OperateType.AGV删除);
                        inboundOrderDetail.ReceiptQuantity--;
                        _inboundService.InboundOrderDetailService.Repository.UpdateData(inboundOrderDetail);
                    }
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(_StockInfo, OperateType.AGV删除);
                    _inventoryInfoRepository.DeleteAndMoveIntoHty(inventoryInfo, OperateType.AGV删除);
                }
                #region MyRegion
                //Dt_StockInfo? _StockInfo = _stockService.StockInfoService.GetStockByPalletCode(task.PalletCode);
                //if (_StockInfo != null)
                //{
                //    Dt_StockInfoDetail? detail = _StockInfo.Details.FirstOrDefault();
                //    if (detail != null)
                //    {
                //        Dt_InboundOrder dt_InboundOrder = _inboundService.InbounOrderService.GetInboundOrder(detail.OrderNo);
                //        Dt_InboundOrderDetail? inboundOrderDetail = dt_InboundOrder.Details.FirstOrDefault(x => x.BatchNo == detail.BatchNo);
                //        if (inboundOrderDetail != null)
                //        {
                //            inboundOrderDetail.ReceiptQuantity--;
                //            _inboundService.InboundOrderDetailService.Repository.UpdateData(inboundOrderDetail);
                //        }
                //        _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(_StockInfo.Details, OperateType.AGV删除);
                //    }
                //    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(_StockInfo, OperateType.AGV删除);
                //}
                #endregion
                BaseDal.DeleteAndMoveIntoHty(task, /*App.User.UserId == 0 ? OperateType.自动完成 :*/ OperateType.AGV删除);
            }
            catch (Exception ex)
@@ -681,43 +726,43 @@
            {
                Db.Ado.BeginTran();
                Dt_OutStockLockInfo? outStockLockInfo = _outboundService.OutboundStockLockInfoService.Repository.QueryFirst(x => x.TaskNum == task.TaskNum && x.PalletCode == task.PalletCode);
                Dt_OutboundOrder? outboundOrder = null;
                Dt_OutboundOrderDetail? outboundOrderDetail = null;
                //Dt_OutboundOrder? outboundOrder = null;
                //Dt_OutboundOrderDetail? outboundOrderDetail = null;
                int overCount = 0;
                if (outStockLockInfo != null)
                {
                    outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == outStockLockInfo.OrderDetailId);
                    if (outboundOrderDetail != null)
                    {
                        outboundOrder = Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == outboundOrderDetail.OrderId).Includes(x => x.Details).First();
                        if (outboundOrder != null)
                        {
                            outboundOrderDetail.OverOutQuantity++;
                            overCount = outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
                            if (outboundOrderDetail.OverOutQuantity == outboundOrderDetail.OrderQuantity)
                            {
                                var outboundOrderdetail = outboundOrder.Details.First(x => x.Id == outboundOrderDetail.Id);
                                outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                                outboundOrderdetail.OverOutQuantity = outboundOrderDetail.OverOutQuantity;
                                outboundOrderdetail.OrderDetailStatus = outboundOrderDetail.OrderDetailStatus;
                                overCount++;
                            }
                        }
                    }
                    //outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == outStockLockInfo.OrderDetailId);
                    //if (outboundOrderDetail != null)
                    //{
                    //    outboundOrder = Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == outboundOrderDetail.OrderId).Includes(x => x.Details).First();
                    //    if (outboundOrder != null)
                    //    {
                    //        outboundOrderDetail.OverOutQuantity += outStockLockInfo.AssignQuantity;
                    //        overCount = outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
                    //        if (outboundOrderDetail.OverOutQuantity == outboundOrderDetail.OrderQuantity)
                    //        {
                    //            var outboundOrderdetail = outboundOrder.Details.First(x => x.Id == outboundOrderDetail.Id);
                    //            outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                    //            outboundOrderdetail.OverOutQuantity = outboundOrderDetail.OverOutQuantity;
                    //            outboundOrderdetail.OrderDetailStatus = outboundOrderDetail.OrderDetailStatus;
                    //            overCount++;
                    //        }
                    //    }
                    //}
                    outStockLockInfo.Status = OutLockStockStatusEnum.出库完成.ObjToInt();
                }
                if (outboundOrder != null && outboundOrder.Details.Count == overCount)
                {
                    outboundOrder.OrderStatus = OutboundStatusEnum.出库完成.ObjToInt();
                    _outboundService.OutboundOrderDetailService.Repository.DeleteAndMoveIntoHty(outboundOrder.Details, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                    outboundOrder.Details = null;
                    _outboundService.OutboundOrderService.Repository.DeleteAndMoveIntoHty(outboundOrder, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                }
                else
                {
                    if (outboundOrderDetail != null)
                        _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetail);
                }
                //if (outboundOrder != null && outboundOrder.Details.Count == overCount)
                //{
                //    outboundOrder.OrderStatus = OutboundStatusEnum.出库完成.ObjToInt();
                //    _outboundService.OutboundOrderDetailService.Repository.DeleteAndMoveIntoHty(outboundOrder.Details, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                //    outboundOrder.Details = null;
                //    _outboundService.OutboundOrderService.Repository.DeleteAndMoveIntoHty(outboundOrder, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                //}
                //else
                //{
                //    if (outboundOrderDetail != null)
                //        _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetail);
                //}
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                if (outStockLockInfo != null) _outboundService.OutboundStockLockInfoService.Repository.UpdateData(outStockLockInfo);
                Db.Ado.CommitTran();
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Interface/LargeScreenController.cs
@@ -30,7 +30,8 @@
        private readonly IInboundOrderRepository _inboundOrderRepository;
        private readonly IOutboundOrderDetailRepository _outboundOrderDetailRepository;
        private readonly IOutboundOrderRepository _outboundOrderRepository;
        public LargeScreenController(ILocationInfoService locationInfoService, ITaskRepository taskRepository, ITask_HtyRepository taskHtyRepository, IInboundOrderDetailRepository inboundOrderDetailRepository, IInboundOrderRepository inboundOrderRepository, IOutboundOrderDetailRepository outboundOrderDetailRepository, IOutboundOrderRepository outboundOrderRepository, IStockInfoDetailRepository stockInfoDetailRepository)
        private readonly IInventoryInfoRepository _inventoryInfoRepository;
        public LargeScreenController(ILocationInfoService locationInfoService, ITaskRepository taskRepository, ITask_HtyRepository taskHtyRepository, IInboundOrderDetailRepository inboundOrderDetailRepository, IInboundOrderRepository inboundOrderRepository, IOutboundOrderDetailRepository outboundOrderDetailRepository, IOutboundOrderRepository outboundOrderRepository, IStockInfoDetailRepository stockInfoDetailRepository, IInventoryInfoRepository inventoryInfoRepository)
        {
            _locationInfoService = locationInfoService;
            _taskRepository = taskRepository;
@@ -40,14 +41,16 @@
            _outboundOrderDetailRepository = outboundOrderDetailRepository;
            _outboundOrderRepository = outboundOrderRepository;
            _stockInfoDetailRepository = stockInfoDetailRepository;
            _inventoryInfoRepository = inventoryInfoRepository;
        }
        [HttpPost, Route("GetStockInfos")]
        public WebResponseContent GetStockInfos()
        {
            WebResponseContent webResponseContent = new WebResponseContent();
            List<Dt_StockInfoDetail> _StockInfoDetails = _stockInfoDetailRepository.QueryData(x => x.Status == StockStatusEmun.已入库.ObjToInt());
            //List<Dt_StockInfoDetail> _StockInfoDetails = _stockInfoDetailRepository.QueryData(x => x.Status == StockStatusEmun.已入库.ObjToInt());
            List<StockInfo> stocks = new List<StockInfo>();
            foreach (var item in _StockInfoDetails.GroupBy(x => x.MaterielCode))
            List<Dt_InventoryInfo> inventoryInfos = _inventoryInfoRepository.QueryData(x => x.StockStatus == StockStatusEmun.已入库.ObjToInt());
            foreach (var item in inventoryInfos.GroupBy(x => x.MaterielCode))
            {
                StockInfo stockInfo = new StockInfo()
                {
@@ -90,7 +93,7 @@
                        Dt_InboundOrder _InboundOrder = inboundOrders.Where(x => x.Id == item.OrderId).First();
                        BoundOrderDTO boundOrderDTO = new BoundOrderDTO()
                        {
                            OrderNo = _InboundOrder.OrderNo,
                            Quantity = item.ReceiptQuantity,
                            BatchNo = item.BatchNo,
                            MaterielCode = item.MaterielCode,
                            MaterielName = item.MaterielName,
@@ -111,7 +114,7 @@
                        Dt_OutboundOrder _OutboundOrder = outboundOrders.Where(x => x.Id == item.OrderId).First();
                        BoundOrderDTO boundOrderDTO = new BoundOrderDTO()
                        {
                            OrderNo = _OutboundOrder.OrderNo,
                            Quantity = item.LockQuantity,
                            BatchNo = item.BatchNo,
                            MaterielCode = item.MaterielCode,
                            MaterielName = item.MaterielName,
@@ -141,8 +144,8 @@
            List<Dt_Task_Hty> Task_Hties = Task_YearHties.Where(x => x.InsertTime.Date == date.Date).ToList();
            List<Dt_Task_Hty> ZTask_Hties = Task_YearHties.Where(x => x.InsertTime.Date == date1.Date).ToList();
            List<Dt_Task_Hty> _Task_InYearHties = Task_YearHties.Where(x => x.TaskType == TaskInboundTypeEnum.Inbound.ObjToInt() || x.TaskType == TaskInboundTypeEnum.PalletInbound.ObjToInt()).ToList();
            List<Dt_Task_Hty> _Task_OutYearHties = Task_YearHties.Where(x => x.TaskType == TaskOutboundTypeEnum.Outbound.ObjToInt() || x.TaskType == TaskOutboundTypeEnum.PalletOutbound.ObjToInt()).ToList();
            List<Dt_Task_Hty> _Task_InYearHties = Task_YearHties.Where(x => x.TaskType == TaskInboundTypeEnum.Inbound.ObjToInt() || x.TaskType == TaskInboundTypeEnum.PalletInbound.ObjToInt() || x.TaskType == TaskInboundTypeEnum.InQuality.ObjToInt()).ToList();
            List<Dt_Task_Hty> _Task_OutYearHties = Task_YearHties.Where(x => x.TaskType == TaskOutboundTypeEnum.Outbound.ObjToInt() || x.TaskType == TaskOutboundTypeEnum.PalletOutbound.ObjToInt() || x.TaskType == TaskOutboundTypeEnum.OutQuality.ObjToInt()).ToList();
            List<Dt_Task_Hty> _Task_InMonthHties = _Task_InYearHties.Where(x => x.InsertTime.Month == date.Month).ToList();
            List<Dt_Task_Hty> _Task_OutMonthHties = _Task_OutYearHties.Where(x => x.InsertTime.Month == date.Month).ToList();
@@ -174,34 +177,35 @@
            var name = model.MainData["Name"].ToString();
            List<Dt_Task_Hty> task_Hties = new List<Dt_Task_Hty>();
            List<Dt_InventoryInfo> inventoryInfos = _inventoryInfoRepository.QueryData(x => x.StockStatus == StockStatusEmun.出库中.ObjToInt() || x.StockStatus == StockStatusEmun.已入库.ObjToInt());
            if (name != "入库")
            {
                task_Hties = _taskHtyRepository.QueryData(x => x.TaskType == TaskOutboundTypeEnum.Outbound.ObjToInt() || x.TaskType == TaskOutboundTypeEnum.PalletOutbound.ObjToInt()).ToList();
                task_Hties = _taskHtyRepository.QueryData(x => x.TaskType == TaskOutboundTypeEnum.Outbound.ObjToInt() || x.TaskType == TaskOutboundTypeEnum.PalletOutbound.ObjToInt() || x.TaskType == TaskOutboundTypeEnum.OutQuality.ObjToInt()).ToList();
                var task_htys = task_Hties.Where(x => x.InsertTime.Date == DateTime.Now.Date).ToList();
                var tasks = _taskRepository.QueryData(x => x.TaskType == TaskOutboundTypeEnum.Outbound.ObjToInt() || x.TaskType == TaskOutboundTypeEnum.PalletOutbound.ObjToInt()).ToList();
                var tasks = _taskRepository.QueryData(x => x.TaskType == TaskOutboundTypeEnum.Outbound.ObjToInt() || x.TaskType == TaskOutboundTypeEnum.PalletOutbound.ObjToInt() || x.TaskType == TaskOutboundTypeEnum.OutQuality.ObjToInt()).ToList();
                List<Dt_OutboundOrderDetail> outboundOrderDetails = _outboundOrderDetailRepository.QueryData(x => x.OrderDetailStatus < OrderDetailStatusEnum.Outbound.ObjToInt()).ToList();
                //List<Dt_OutboundOrderDetail> outboundOrderDetails = _outboundOrderDetailRepository.QueryData(x => x.OrderDetailStatus < OrderDetailStatusEnum.Outbound.ObjToInt()).ToList();
                webResponseContent.OK(data: new
                {
                    task_Htiesqty = task_Hties.Count,
                    task_htysqty = task_htys.Count,
                    tasksqty = tasks.Count,
                    inboundOrderDetailsqty = outboundOrderDetails.Sum(x => x.OrderQuantity - x.OverOutQuantity)
                    inboundOrderDetailsqty = inventoryInfos.Count,//outboundOrderDetails.Sum(x => x.OrderQuantity - x.OverOutQuantity)
                });
            }
            else
            {
                task_Hties = _taskHtyRepository.QueryData(x => x.TaskType == TaskInboundTypeEnum.Inbound.ObjToInt() || x.TaskType == TaskInboundTypeEnum.PalletInbound.ObjToInt()).ToList();
                task_Hties = _taskHtyRepository.QueryData(x => x.TaskType == TaskInboundTypeEnum.Inbound.ObjToInt() || x.TaskType == TaskInboundTypeEnum.PalletInbound.ObjToInt() || x.TaskType == TaskInboundTypeEnum.InQuality.ObjToInt()).ToList();
                var task_htys = task_Hties.Where(x => x.InsertTime.Date == DateTime.Now.Date).ToList();
                var tasks = _taskRepository.QueryData(x => x.TaskType == TaskInboundTypeEnum.Inbound.ObjToInt() || x.TaskType == TaskInboundTypeEnum.PalletInbound.ObjToInt()).ToList();
                var tasks = _taskRepository.QueryData(x => x.TaskType == TaskInboundTypeEnum.Inbound.ObjToInt() || x.TaskType == TaskInboundTypeEnum.PalletInbound.ObjToInt() || x.TaskType == TaskInboundTypeEnum.InQuality.ObjToInt()).ToList();
                List<Dt_InboundOrderDetail> inboundOrderDetails = _inboundOrderDetailRepository.QueryData(x => x.OrderDetailStatus <= OrderDetailStatusEnum.GroupAndInbound.ObjToInt()).ToList();
                //List<Dt_InboundOrderDetail> inboundOrderDetails = _inboundOrderDetailRepository.QueryData(x => x.OrderDetailStatus <= OrderDetailStatusEnum.GroupAndInbound.ObjToInt()).ToList();
                webResponseContent.OK(data: new
                {
                    task_Htiesqty = task_Hties.Count,
                    task_htysqty = task_htys.Count,
                    tasksqty = tasks.Count,
                    inboundOrderDetailsqty = inboundOrderDetails.Sum(x => x.OrderQuantity - x.OverInQuantity)
                    inboundOrderDetailsqty = inventoryInfos.Count,//inboundOrderDetails.Sum(x => x.OrderQuantity - x.OverInQuantity)
                });
            }
            return webResponseContent;
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Interface/WCSInterfaceController.cs
@@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Common;
using WIDESEA_Core;
using WIDESEA_IBasicService;
using WIDESEA_ITaskInfoService;
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/È«¾ÖÒì³£´íÎóÈÕÖ¾_1740314366.log
@@ -1608,3 +1608,69 @@
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
--------------------------------
2025/8/27 15:39:55|
中文提示 :  è¿žæŽ¥æ•°æ®åº“过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - ç®¡é“的另一端上无任何进程。)DbType="SqlServer";ConfigId="WIDESEA".
English Message : Connection open error . A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - ç®¡é“的另一端上无任何进程。)DbType="SqlServer";ConfigId="WIDESEA"
【自定义错误】:中文提示 :  è¿žæŽ¥æ•°æ®åº“过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - ç®¡é“的另一端上无任何进程。)DbType="SqlServer";ConfigId="WIDESEA".
English Message : Connection open error . A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - ç®¡é“的另一端上无任何进程。)DbType="SqlServer";ConfigId="WIDESEA"
【异常类型】:SqlSugarException
【异常信息】:中文提示 :  è¿žæŽ¥æ•°æ®åº“过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - ç®¡é“的另一端上无任何进程。)DbType="SqlServer";ConfigId="WIDESEA".
English Message : Connection open error . A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - ç®¡é“的另一端上无任何进程。)DbType="SqlServer";ConfigId="WIDESEA"
【堆栈调用】:   at SqlSugar.Check.Exception(Boolean isException, String message, String[] args)
   at SqlSugar.AdoProvider.CheckConnection()
   at SqlSugar.SqlServerProvider.GetCommand(String sql, SugarParameter[] parameters)
   at SqlSugar.AdoProvider.GetDataReader(String sql, SugarParameter[] parameters)
   at SqlSugar.AdoProvider.SqlQuery[T,T2,T3,T4,T5,T6,T7](String sql, Object parameters)
   at SqlSugar.AdoProvider.SqlQuery[T](String sql, SugarParameter[] parameters)
   at SqlSugar.AdoProvider.SqlQuery[T](String sql, Object parameters)
   at WIDESEA_BasicService.LocationInfoService.GetLocationLayer() in E:\项目集\ChuanSuoCheKu\项目代码\WMS\WIDESEA_WMSServer\WIDESEA_BasicService\Base\LocationInfoService.cs:line 130
   at Castle.Proxies.Invocations.ILocationInfoService_GetLocationLayer.InvokeMethodOnTarget()
   at Castle.DynamicProxy.AbstractInvocation.Proceed()
   at Castle.Proxies.IService`1Proxy_3.GetLocationLayer()
   at WIDESEA_WMSServer.Controllers.Basic.LocationInfoController.GetLocationLayer()
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
--------------------------------
2025/8/27 15:39:55|
中文提示 :  è¿žæŽ¥æ•°æ®åº“过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - ç®¡é“的另一端上无任何进程。)DbType="SqlServer";ConfigId="WIDESEA".
English Message : Connection open error . A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - ç®¡é“的另一端上无任何进程。)DbType="SqlServer";ConfigId="WIDESEA"
【自定义错误】:中文提示 :  è¿žæŽ¥æ•°æ®åº“过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - ç®¡é“的另一端上无任何进程。)DbType="SqlServer";ConfigId="WIDESEA".
English Message : Connection open error . A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - ç®¡é“的另一端上无任何进程。)DbType="SqlServer";ConfigId="WIDESEA"
【异常类型】:SqlSugarException
【异常信息】:中文提示 :  è¿žæŽ¥æ•°æ®åº“过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - ç®¡é“的另一端上无任何进程。)DbType="SqlServer";ConfigId="WIDESEA".
English Message : Connection open error . A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - ç®¡é“的另一端上无任何进程。)DbType="SqlServer";ConfigId="WIDESEA"
【堆栈调用】:   at SqlSugar.Check.Exception(Boolean isException, String message, String[] args)
   at SqlSugar.AdoProvider.CheckConnection()
   at SqlSugar.SqlServerProvider.GetCommand(String sql, SugarParameter[] parameters)
   at SqlSugar.AdoProvider.GetDataReader(String sql, SugarParameter[] parameters)
   at SqlSugar.QueryableProvider`1.GetData[TResult](KeyValuePair`2 sqlObj)
   at SqlSugar.QueryableProvider`1._ToList[TResult]()
   at SqlSugar.QueryableProvider`1.ToList()
   at WIDESEA_Core.BaseRepository.RepositoryBase`1.QueryData(Expression`1 whereExpression) in E:\项目集\ChuanSuoCheKu\项目代码\WMS\WIDESEA_WMSServer\WIDESEA_Core\BaseRepository\RepositoryBase.cs:line 248
   at WIDESEA_SystemRepository.Sys_MenuRepository.GetAllMenu() in E:\项目集\ChuanSuoCheKu\项目代码\WMS\WIDESEA_WMSServer\WIDESEA_SystemRepository\Sys_MenuRepository.cs:line 30
   at WIDESEA_SystemRepository.Sys_MenuRepository.GetSuperAdminMenu() in E:\项目集\ChuanSuoCheKu\项目代码\WMS\WIDESEA_WMSServer\WIDESEA_SystemRepository\Sys_MenuRepository.cs:line 50
   at Castle.Proxies.Invocations.ISys_MenuRepository_GetSuperAdminMenu.InvokeMethodOnTarget()
   at Castle.DynamicProxy.AbstractInvocation.Proceed()
   at Castle.Proxies.IRepository`1Proxy_1.GetSuperAdminMenu()
   at WIDESEA_SystemService.Sys_MenuService.GetMenuActionList(Int32 roleId) in E:\项目集\ChuanSuoCheKu\项目代码\WMS\WIDESEA_WMSServer\WIDESEA_SystemService\Sys_MenuService.cs:line 61
   at WIDESEA_SystemService.Sys_MenuService.GetCurrentMenuActionList() in E:\项目集\ChuanSuoCheKu\项目代码\WMS\WIDESEA_WMSServer\WIDESEA_SystemService\Sys_MenuService.cs:line 37
   at Castle.Proxies.Invocations.ISys_MenuService_GetCurrentMenuActionList.InvokeMethodOnTarget()
   at Castle.DynamicProxy.AbstractInvocation.Proceed()
   at Castle.Proxies.IService`1Proxy.GetCurrentMenuActionList()
   at WIDESEA_WMSServer.Controllers.Sys_MenuController.GetTreeMenu()
   at lambda_method883(Closure , Object , Object[] )
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs
@@ -34,7 +34,7 @@
}); ;
builder.ConfigureApplication();
App.ExpDateTime = DateTime.Parse("2025-09-01 09:00:00");
//App.ExpDateTime = DateTime.Parse("2025-09-20 00:00:00");
// 2、配置服务
builder.Services.AddSingleton(new AppSettings(builder.Configuration));//注册
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -6,7 +6,7 @@
<Project>
  <PropertyGroup>
    <_PublishTargetUrl>E:\IISText\芜湖三一\WMS</_PublishTargetUrl>
    <History>True|2025-07-09T14:29:46.5043041Z;True|2025-07-09T22:28:37.9127415+08:00;True|2025-07-04T09:02:45.7658413+08:00;True|2025-06-28T12:22:26.5226251+08:00;True|2025-06-23T10:41:48.4640291+08:00;True|2025-06-20T12:54:56.1810887+08:00;True|2025-06-20T10:43:00.0676097+08:00;True|2025-05-21T14:27:23.3463661+08:00;True|2025-05-20T09:58:56.9385057+08:00;True|2025-05-20T09:50:56.2630438+08:00;True|2025-05-19T16:43:28.3327270+08:00;True|2025-05-19T16:39:14.2351867+08:00;True|2025-05-15T10:36:19.1660612+08:00;True|2025-05-13T15:37:28.0425978+08:00;True|2025-05-13T15:21:45.1951276+08:00;True|2025-05-07T17:51:44.1784374+08:00;True|2025-04-27T14:53:35.8458295+08:00;True|2025-04-18T17:17:44.2558979+08:00;True|2025-04-18T11:56:16.2333182+08:00;True|2025-04-17T14:04:11.2641163+08:00;True|2025-03-27T16:24:43.5017432+08:00;True|2025-03-18T16:14:40.3832855+08:00;True|2025-02-18T14:43:41.4214052+08:00;True|2025-02-17T16:47:47.1464719+08:00;True|2025-02-14T13:02:33.0683296+08:00;True|2025-02-11T13:55:27.2837544+08:00;True|2025-02-11T13:54:12.7390669+08:00;True|2025-02-10T16:40:04.5645895+08:00;True|2025-02-10T16:24:19.3540916+08:00;True|2025-02-10T14:24:04.2140946+08:00;True|2025-02-10T14:01:37.7817950+08:00;True|2025-02-10T13:58:35.5650499+08:00;True|2025-02-10T13:49:31.5513866+08:00;False|2025-02-10T13:49:18.2135044+08:00;True|2025-02-10T11:32:33.6168149+08:00;False|2025-02-10T11:31:56.1964136+08:00;False|2025-02-10T11:31:03.0326897+08:00;True|2025-02-10T11:25:27.6553142+08:00;True|2025-01-18T15:10:06.4957375+08:00;False|2025-01-18T15:09:32.6588841+08:00;True|2025-01-18T15:07:28.0952526+08:00;True|2025-01-18T15:05:38.5243008+08:00;True|2025-01-18T15:03:32.1684791+08:00;True|2025-01-18T15:00:14.2579995+08:00;False|2025-01-18T14:59:17.3888861+08:00;False|2025-01-18T14:57:59.9512472+08:00;True|2025-01-18T13:57:17.7790615+08:00;True|2025-01-18T12:53:22.4660853+08:00;True|2025-01-17T17:26:35.1781925+08:00;True|2025-01-17T16:54:55.6218094+08:00;</History>
    <History>True|2025-09-29T01:44:22.7122741Z;True|2025-09-13T09:59:14.1811656+08:00;True|2025-09-11T14:44:21.4463899+08:00;True|2025-09-11T09:46:57.1606195+08:00;True|2025-09-11T08:54:45.2508701+08:00;True|2025-09-10T17:23:20.2805726+08:00;True|2025-09-10T11:03:28.6084368+08:00;True|2025-09-10T09:23:04.5233835+08:00;True|2025-08-31T13:15:01.0860708+08:00;True|2025-08-28T14:21:06.4731427+08:00;True|2025-08-18T09:21:31.6163565+08:00;True|2025-08-13T10:31:53.2822334+08:00;True|2025-08-07T16:34:33.8969844+08:00;True|2025-07-30T18:59:50.4912438+08:00;True|2025-07-15T10:34:32.4834130+08:00;True|2025-07-12T10:23:38.7794405+08:00;True|2025-07-12T10:10:47.3292316+08:00;True|2025-07-10T16:31:30.9386059+08:00;True|2025-07-10T11:32:42.0614780+08:00;True|2025-07-10T11:06:03.2986340+08:00;True|2025-07-10T09:53:23.2547896+08:00;True|2025-07-09T22:29:46.5043041+08:00;True|2025-07-09T22:28:37.9127415+08:00;True|2025-07-04T09:02:45.7658413+08:00;True|2025-06-28T12:22:26.5226251+08:00;True|2025-06-23T10:41:48.4640291+08:00;True|2025-06-20T12:54:56.1810887+08:00;True|2025-06-20T10:43:00.0676097+08:00;True|2025-05-21T14:27:23.3463661+08:00;True|2025-05-20T09:58:56.9385057+08:00;True|2025-05-20T09:50:56.2630438+08:00;True|2025-05-19T16:43:28.3327270+08:00;True|2025-05-19T16:39:14.2351867+08:00;True|2025-05-15T10:36:19.1660612+08:00;True|2025-05-13T15:37:28.0425978+08:00;True|2025-05-13T15:21:45.1951276+08:00;True|2025-05-07T17:51:44.1784374+08:00;True|2025-04-27T14:53:35.8458295+08:00;True|2025-04-18T17:17:44.2558979+08:00;True|2025-04-18T11:56:16.2333182+08:00;True|2025-04-17T14:04:11.2641163+08:00;True|2025-03-27T16:24:43.5017432+08:00;True|2025-03-18T16:14:40.3832855+08:00;True|2025-02-18T14:43:41.4214052+08:00;True|2025-02-17T16:47:47.1464719+08:00;True|2025-02-14T13:02:33.0683296+08:00;True|2025-02-11T13:55:27.2837544+08:00;True|2025-02-11T13:54:12.7390669+08:00;True|2025-02-10T16:40:04.5645895+08:00;True|2025-02-10T16:24:19.3540916+08:00;True|2025-02-10T14:24:04.2140946+08:00;True|2025-02-10T14:01:37.7817950+08:00;True|2025-02-10T13:58:35.5650499+08:00;True|2025-02-10T13:49:31.5513866+08:00;False|2025-02-10T13:49:18.2135044+08:00;True|2025-02-10T11:32:33.6168149+08:00;False|2025-02-10T11:31:56.1964136+08:00;False|2025-02-10T11:31:03.0326897+08:00;True|2025-02-10T11:25:27.6553142+08:00;True|2025-01-18T15:10:06.4957375+08:00;False|2025-01-18T15:09:32.6588841+08:00;True|2025-01-18T15:07:28.0952526+08:00;True|2025-01-18T15:05:38.5243008+08:00;True|2025-01-18T15:03:32.1684791+08:00;True|2025-01-18T15:00:14.2579995+08:00;False|2025-01-18T14:59:17.3888861+08:00;False|2025-01-18T14:57:59.9512472+08:00;True|2025-01-18T13:57:17.7790615+08:00;True|2025-01-18T12:53:22.4660853+08:00;True|2025-01-17T17:26:35.1781925+08:00;True|2025-01-17T16:54:55.6218094+08:00;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
@@ -23,6 +23,7 @@
  },
  "WCSIP": "http://127.0.0.1:8099",
  "LogAopEnable": false,
  "CreateQCIn": false, //是否创建质检入库单
  "wcsInterfaceAddress": "/api/Task/ReceiveTask,/api/Task/ModifyBarcode",
  "ConveyorLineID": "1001,1002", //输送线编号
  "CarChargingStation": "002-002-001",
ÏîÄ¿´úÂë/ÎߺþÈýÒ»PDA/common/config.js
@@ -1,5 +1,5 @@
let config = {
    baseUrl: 'http://192.168.10.88:8098',
    baseUrl: 'http://127.0.0.1:8098',
    urls: [
        'http://192.168.10.88:8098',
        'http://192.168.10.88:8098'
ÏîÄ¿×ÊÁÏ/ERPÊý¾Ý¿â×ֶζÔÓ¦±í/ERPÊý¾Ý¿â.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
服务器IP地址:192.168.188.6
数据库账号:sa
密码:tizi@123
测试用数据库实体:AIS20250704095332
账套名称:账套名称:测试2
ÏîÄ¿×ÊÁÏ/ERPÊý¾Ý¿â×ֶζÔÓ¦±í/²úÆ·Èë¿âµ¥.xls
Binary files differ
ÏîÄ¿×ÊÁÏ/ERPÊý¾Ý¿â×ֶζÔÓ¦±í/ÆäËû³ö¿âµ¥(vwICBill_16).xls
Binary files differ
ÏîÄ¿×ÊÁÏ/ERPÊý¾Ý¿â×ֶζÔÓ¦±í/ÆäËüÈë¿âµ¥(vwICBill_7).xls
Binary files differ
ÏîÄ¿×ÊÁÏ/ERPÊý¾Ý¿â×ֶζÔÓ¦±í/´æ»õ±í(ICInventory).xls
Binary files differ
ÏîÄ¿×ÊÁÏ/ERPÊý¾Ý¿â×ֶζÔÓ¦±í/Éú²úÈÎÎñµ¥.xls
Binary files differ
ÏîÄ¿×ÊÁÏ/Êý¾Ý¿â×ֶζÔÓ¦±í/Éú²úÈÎÎñµ¥.xls
Binary files differ
ÏîÄ¿×ÊÁÏ/ÎÊÌâ´¦Àí.docx
Binary files differ