1
dengjunjie
2025-05-08 092971a8ba7848f024427694c642959d0fbc8599
1
已删除3个文件
已修改25个文件
已重命名3个文件
已添加3个文件
159920 ■■■■■ 文件已修改
项目代码/DB/WCS.sql 146201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/DB/WMS.sql 13273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Client/public/webconfig.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/26b01e51-9a68-4c47-8780-af7ecacddafa.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/2e0cec22-71d4-4db0-af44-4ee55d61f5b7.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/6ca764a9-6144-4d24-9e02-bab85fd29ba8.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/cf8f758c-02fe-4fd6-bc41-1b5316634314.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ed5cc9cc-24de-4aff-b9d7-28e2ee536d32.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/WIDESEAWCS_Model.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Interface/LargeScreenController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_RoleService.cs 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/public/webconfig.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrder_hty.js 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder_hty.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/39ed65d2-a17e-453b-83c9-c3fef9fedd28.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8a78a9fa-3cb9-4b0b-b61a-678ca336d0a6.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8af33108-0a39-431e-b524-38991697ce9a.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/cb392da8-3837-430a-8136-81104be931ed.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.futdcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.suo 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/InboundOrderService.cs 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder_hty.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderService.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_ProductionLine.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/DB/WCS.sql
ÎļþÌ«´ó
ÏîÄ¿´úÂë/DB/WMS.sql
ÎļþÌ«´ó
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Client/public/webconfig.js
@@ -1,4 +1,4 @@
window.webConfig = {
    "webApiBaseUrl": "http://192.168.10.88:8099/",
    "webApiBaseUrl": "http://127.0.0.1:8099/",
    "webApiProduction":"http://192.168.10.88:8099/"
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/26b01e51-9a68-4c47-8780-af7ecacddafa.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/2e0cec22-71d4-4db0-af44-4ee55d61f5b7.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/6ca764a9-6144-4d24-9e02-bab85fd29ba8.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/cf8f758c-02fe-4fd6-bc41-1b5316634314.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ed5cc9cc-24de-4aff-b9d7-28e2ee536d32.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs
@@ -24,5 +24,6 @@
        WebResponseContent Save(Sys_Menu menu);
        WebResponseContent DelMenu(int menuId);
        object GetMenuActionList(int roleId);
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/WIDESEAWCS_Model.csproj
@@ -8,7 +8,7 @@
    <ItemGroup>
        <PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" />
        <PackageReference Include="WIDESEAWCS_Core" Version="1.0.10" />
        <PackageReference Include="WIDESEAWCS_Core" Version="1.0.19" />
    </ItemGroup>
    <ItemGroup>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Interface/LargeScreenController.cs
@@ -174,7 +174,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/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -6,7 +6,7 @@
<Project>
  <PropertyGroup>
    <_PublishTargetUrl>E:\IISText\芜湖三一\WCS</_PublishTargetUrl>
    <History>True|2025-04-21T09:54:03.6534614Z;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-04-27T11:58:33.9706872Z;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_SystemServices/Sys_RoleService.cs
@@ -98,33 +98,33 @@
            if (App.User.RoleId == RoleId) return WebResponseContent.Instance.Error("无操作权限");
            return base.UpdateData(saveModel);
        }
        public override PageGridData<Sys_Role> GetPageData(PageDataOptions options)
        {
            PageGridData<Sys_Role> pageGridData = new PageGridData<Sys_Role>();
            if (App.User.IsSuperAdmin)
            {
                var GridData = base.GetPageData(options);
                pageGridData = new PageGridData<Sys_Role>()
                {
                    Rows = options.Order?.ToLower() == OrderByType.Asc.ToString().ToLower() ? GridData.Rows.OrderBy(x => x.RoleId).ToList() : GridData.Rows,
                    Total = GridData.Total
                };
                return pageGridData;
            }
        //public override PageGridData<Sys_Role> GetPageData(PageDataOptions options)
        //{
        //    PageGridData<Sys_Role> pageGridData = new PageGridData<Sys_Role>();
        //    if (App.User.IsSuperAdmin)
        //    {
        //        var GridData = base.GetPageData(options);
        //        pageGridData = new PageGridData<Sys_Role>()
        //        {
        //            Rows = options.Order?.ToLower() == OrderByType.Asc.ToString().ToLower() ? GridData.Rows.OrderBy(x => x.RoleId).ToList() : GridData.Rows,
        //            Total = GridData.Total
        //        };
        //        return pageGridData;
        //    }
            var roleIds = GetAllChildren(App.User.RoleId).Select(x => x.Id);
            //树形菜单传查询角色下所有用户
            string where = ValidatePageOptions(options);
        //    var roleIds = GetAllChildren(App.User.RoleId).Select(x => x.Id);
        //    //树形菜单传查询角色下所有用户
        //    string where = ValidatePageOptions(options);
            int total = 0;
            pageGridData = new PageGridData<Sys_Role>()
            {
                Rows = BaseDal.Db.Queryable<Sys_Role>().Where(x => roleIds.Contains(x.RoleId)).Where(where).OrderBy(x => x.RoleId).ToPageList(options.Page, options.Rows),
                Total = total
            };
        //    int total = 0;
        //    pageGridData = new PageGridData<Sys_Role>()
        //    {
        //        Rows = BaseDal.Db.Queryable<Sys_Role>().Where(x => roleIds.Contains(x.RoleId)).Where(where).OrderBy(x => x.RoleId).ToPageList(options.Page, options.Rows),
        //        Total = total
        //    };
            return pageGridData;
        }
        //    return pageGridData;
        //}
        /// <summary>
        /// ç¼–辑权限时,获取指定角色的所有菜单权限
        /// </summary>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs
@@ -22,39 +22,41 @@
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly ICacheService _cacheService;
        private readonly ISys_MenuService _menuService;
        private readonly ISys_RoleService _sys_RoleService;
        public Sys_UserService(ISys_UserRepository repository, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService, ISys_RoleService sys_RoleService) : base(repository)
        public Sys_UserService(ISys_UserRepository repository, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService, ISys_RoleService sys_RoleService, ISys_MenuService menuService) : base(repository)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _cacheService = cacheService;
            _sys_RoleService = sys_RoleService;
            _menuService = menuService;
        }
        public override PageGridData<Sys_User> GetPageData(PageDataOptions options)
        {
            var roleIds = _sys_RoleService.GetAllChildren(App.User.RoleId).Select(x => x.Id);
            PageGridData<Sys_User> pageGridData = new PageGridData<Sys_User>();
            //树形菜单传查询角色下所有用户
            if (App.User.IsSuperAdmin)
            {
                var GridData = base.GetPageData(options);
                pageGridData = new PageGridData<Sys_User>()
                {
                    Rows = options.Order?.ToLower() == "asc" ? GridData.Rows.OrderBy(x => x.Role_Id).ToList() : GridData.Rows,
                    Total = GridData.Total
                };
                return pageGridData;
            }
            string where = ValidatePageOptions(options);
            var a = BaseDal.Db.Queryable<Sys_User>().Where(x => roleIds.Contains(x.Role_Id)).Where(where);
            int total = 0;
            pageGridData = new PageGridData<Sys_User>()
            {
                Rows = BaseDal.Db.Queryable<Sys_User>().Where(x => roleIds.Contains(x.Role_Id)).Where(where).ToPageList(options.Page, options.Rows),
                Total = total
            };
        //public override PageGridData<Sys_User> GetPageData(PageDataOptions options)
        //{
        //    var roleIds = _sys_RoleService.GetAllChildren(App.User.RoleId).Select(x => x.Id);
        //    PageGridData<Sys_User> pageGridData = new PageGridData<Sys_User>();
        //    //树形菜单传查询角色下所有用户
        //    if (App.User.IsSuperAdmin)
        //    {
        //        var GridData = base.GetPageData(options);
        //        pageGridData = new PageGridData<Sys_User>()
        //        {
        //            Rows = options.Order?.ToLower() == "asc" ? GridData.Rows.OrderBy(x => x.Role_Id).ToList() : GridData.Rows,
        //            Total = GridData.Total
        //        };
        //        return pageGridData;
        //    }
        //    string where = ValidatePageOptions(options);
        //    var a = BaseDal.Db.Queryable<Sys_User>().Where(x => roleIds.Contains(x.Role_Id)).Where(where);
        //    int total = 0;
        //    pageGridData = new PageGridData<Sys_User>()
        //    {
        //        Rows = BaseDal.Db.Queryable<Sys_User>().Where(x => roleIds.Contains(x.Role_Id)).Where(where).ToPageList(options.Page, options.Rows),
        //        Total = total
        //    };
            return pageGridData;
        }
        //    return pageGridData;
        //}
        public WebResponseContent Login(LoginInfo loginInfo)
        {
            WebResponseContent content = new WebResponseContent();
@@ -78,6 +80,7 @@
                UserInfo user = BaseDal.GetUserInfo(loginInfo.UserName, loginInfo.Password);
                if (user != null)
                {
                    object obj = _menuService.GetMenuActionList(user.RoleId);
                    #region åˆ¤æ–­å½“前用户是否启用
                    if (BaseDal.QueryFirst(x => x.User_Id == user.UserId, s => s.Enable) != 1) throw new Exception($"账号{user.UserName}禁止使用,请联系管理员");
                    #endregion
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/public/webconfig.js
@@ -1,4 +1,4 @@
window.webConfig = {
    "webApiBaseUrl": "http://192.168.10.88:8098/",
    "webApiBaseUrl": "http://127.0.0.1:8098/",
    "webApiProduction":"http://192.168.10.88:8098/"
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js
@@ -99,13 +99,13 @@
          return this.$error("柜号不能为空");
        }
      })
      if (formData.detailData.length > 3) return this.$error("入库单明细不能超过3个");
      // if (formData.detailData.length > 3) return this.$error("入库单明细不能超过3个");
      return req;
    },
    updateBefore(formData) {
      //编辑保存前formData为对象,包括明细表、删除行的Id
      // this.$error(formData.detailData.length)
      if (formData.detailData.length > 3) return this.$error("入库单明细不能超过3个");
      // if (formData.detailData.length > 3) return this.$error("入库单明细不能超过3个");
      return true;
    },
    rowClick({ row, column, event }) {
@@ -120,27 +120,41 @@
      //如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
      //看不懂就把输出看:console.log(this.editFormOptions)
      if (this.currentAction == 'Add') {
      let locationCodes=this.getOption("locationCode");
      locationCodes.bind.data.splice(0);
      this.http.post("/api/LocationInfo/GetLocationCodes", null, true).then(
        source => {
          if (!source.status) return this.$error(source.message);
          for (let i = 0; i < source.data.length; i++) {
            locationCodes.bind.data.push({ key: source.data[i], value: source.data[i] });
          }
          this.refresh();
        })
        let locationCodes = this.getOption("locationCode");
        locationCodes.bind.data.splice(0);
        this.http.post("/api/LocationInfo/GetLocationCodes", null, true).then(
          source => {
            if (!source.status) return this.$error(source.message);
            for (let i = 0; i < source.data.length; i++) {
              locationCodes.bind.data.push({ key: source.data[i], value: source.data[i] });
            }
            this.refresh();
          })
          this.editFormOptions.forEach(x => {
            x.forEach(option => {
              if (option.field == 'orderNo' || option.field == 'orderType') {
                option.readonly = false
              }
            })
          })
        this.detailOptions.columns.forEach(x => {
          if (x.field == 'materielCode' || x.field == 'batchNo' || x.field == 'orderQuantity' || x.field == 'locationCode') {
            x.readonly = false
          }
        });
      } else {
        this.detailOptions.columns.forEach(x => {
          if (x.field == 'materielCode' || x.field == 'batchNo' || x.field == 'orderQuantity' || x.field == 'locationCode') {
            x.readonly = true// row.orderStatus > 0
          }
        });
        this.editFormOptions.forEach(x => {
          x.forEach(option => {
            if (option.field == 'orderNo' || option.field == 'orderType') {
              option.readonly = true
            }
          })
        })
        // this.detailOptions.columns.forEach(x => {
        //   if (x.field == 'materielCode' || x.field == 'batchNo' || x.field == 'orderQuantity' || x.field == 'locationCode') {
        //     x.readonly = true// row.orderStatus > 0
        //   }
        // });
      }
      // if (row.orderStatus != '0') {
      // this.detailOptions.columns.forEach(x => {
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrder_hty.js
@@ -19,21 +19,21 @@
    //下面这些方法可以保留也可以删除
    onInit() {
      //扩展页面初始化操作
      this.columns.push({
        field: '操作',
        title: '操作',
        width: 90,
        fixed: 'right',
        align: 'center',
        formatter: (row) => {
          return (
            '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">查看明细</i>'
          );
        },
        click: (row) => {
          this.$refs.gridBody.open(row);
        }
      });
      // this.columns.push({
      //   field: '操作',
      //   title: '操作',
      //   width: 90,
      //   fixed: 'right',
      //   align: 'center',
      //   formatter: (row) => {
      //     return (
      //       '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">查看明细</i>'
      //     );
      //   },
      //   click: (row) => {
      //     this.$refs.gridBody.open(row);
      //   }
      // });
    },
    onInited() {
      //框架初始化配置后
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder_hty.vue
@@ -14,7 +14,7 @@
  </view-grid>
</template>
    <script>
import extend from "@/extension/outbound/outboundOrder.js";
import extend from "@/extension/outbound/outboundOrder_hty.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
  setup() {
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue
@@ -36,54 +36,7 @@
      devicePlcType: "",
      deviceRemark: "",
    });
    const editFormOptions = ref([
      [
        {
          title: "设备编号",
          required: true,
          field: "deviceCode",
          type: "string",
        },
        {
          title: "设备名称",
          required: true,
          field: "deviceName",
          type: "string",
        },
        {
          title: "设备类型",
          required: true,
          field: "deviceType",
          type: "string",
        },
        {
          title: "设备状态",
          required: true,
          field: "deviceStatus",
          type: "string",
        },
      ],
      [
        { title: "设备IP", required: true, field: "deviceIp", type: "string" },
        {
          title: "设备端口",
          required: true,
          field: "devicePort",
          type: "string",
        },
        {
          title: "PLC类型",
          required: true,
          field: "devicePlcType",
          type: "string",
        },
        {
          title: "备注",
          field: "deviceRemark",
          type: "string",
        },
      ],
    ]);
    const editFormOptions = ref([]);
    const searchFormFields = ref({
      deviceCode: "",
      deviceType: "",
@@ -91,8 +44,8 @@
    });
    const searchFormOptions = ref([
      [
        { title: "托盘编号", field: "palletCode",type:"like" },
        { title: "货位编号", field: "locationCode",type:"like" },
        { title: "托盘编号", field: "palletCode", type: "like" },
        { title: "货位编号", field: "locationCode", type: "like" },
        {
          title: "库存状态",
          field: "stockStatus",
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue
@@ -36,54 +36,7 @@
      devicePlcType: "",
      deviceRemark: "",
    });
    const editFormOptions = ref([
      [
        {
          title: "设备编号",
          required: true,
          field: "deviceCode",
          type: "string",
        },
        {
          title: "设备名称",
          required: true,
          field: "deviceName",
          type: "string",
        },
        {
          title: "设备类型",
          required: true,
          field: "deviceType",
          type: "string",
        },
        {
          title: "设备状态",
          required: true,
          field: "deviceStatus",
          type: "string",
        },
      ],
      [
        { title: "设备IP", required: true, field: "deviceIp", type: "string" },
        {
          title: "设备端口",
          required: true,
          field: "devicePort",
          type: "string",
        },
        {
          title: "PLC类型",
          required: true,
          field: "devicePlcType",
          type: "string",
        },
        {
          title: "备注",
          field: "deviceRemark",
          type: "string",
        },
      ],
    ]);
    const editFormOptions = ref([]);
    const searchFormFields = ref({
      orderNo: "",
      batchNo: "",
@@ -109,19 +62,24 @@
      [
        // { title: "批次号", field: "batchNo" },
        {
          title: "批次号",
          field: "batchNo",
          title: "批号",
          field: "orderNo",
          type: "select",
          dataKey: "StockbatchNos",
          data: [],
        },
        {
          title: "库存明细状态",
          field: "status",
          type: "select",
          dataKey: "stockStatusEmun",
          data: [],
          title: "柜号",
          field: "batchNo",
          type: "like",
        },
        // {
        //   title: "库存明细状态",
        //   field: "status",
        //   type: "select",
        //   dataKey: "stockStatusEmun",
        //   data: [],
        // },
      ],
    ]);
    const columns = ref([
@@ -159,14 +117,14 @@
      },
      {
        field: "orderNo",
        title: "单据编号",
        title: "批号",
        type: "decimal",
        width: 90,
        align: "left",
      },
      {
        field: "batchNo",
        title: "批次号",
        title: "柜号",
        type: "string",
        width: 90,
        align: "left",
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/39ed65d2-a17e-453b-83c9-c3fef9fedd28.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8a78a9fa-3cb9-4b0b-b61a-678ca336d0a6.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8af33108-0a39-431e-b524-38991697ce9a.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/cb392da8-3837-430a-8136-81104be931ed.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/WIDESEA_InboundService/Base/InboundOrderService.cs
@@ -87,7 +87,7 @@
                    if (!content.Status)
                        throw new Exception(content.Message);
                }
                BaseDal.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
                Db.Ado.CommitTran();
                content = WebResponseContent.Instance.OK();
@@ -111,13 +111,13 @@
            {
                if (saveModel.DetailData == null || saveModel.DetailData.Count == 0) throw new Exception($"入库单明细不能为空");
                List<InboundOrderDetailAddDTO> inboundOrderDetail = saveModel.DetailData.DicToIEnumerable<InboundOrderDetailAddDTO>();
                if (inboundOrderDetail.FirstOrDefault(x => x.OrderDetailStatus > 0) != null) throw new Exception($"订单已开始组盘入库");
                var inboundOrderDetails = _inboundOrderDetailService.Db.Queryable<Dt_InboundOrderDetail>().Where(x => saveModel.DelKeys.Contains(x.Id)).ToList();
                if (inboundOrderDetails.Count > 0)
                {
                    if (inboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus != OrderDetailStatusEnum.New.ObjToInt()) != null)
                        throw new Exception($"存在已组盘工单,已先解盘");
                }
                //if (inboundOrderDetail.FirstOrDefault(x => x.OrderDetailStatus > 0) != null) throw new Exception($"订单已开始组盘入库");
                //var inboundOrderDetails = _inboundOrderDetailService.Db.Queryable<Dt_InboundOrderDetail>().Where(x => saveModel.DelKeys.Contains(x.Id)).ToList();
                //if (inboundOrderDetails.Count > 0)
                //{
                //    if (inboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus != OrderDetailStatusEnum.New.ObjToInt()) != null)
                //        throw new Exception($"存在已组盘工单,已先解盘");
                //}
                content = base.UpdateData(saveModel);
            }
            catch (Exception ex)
@@ -132,19 +132,19 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                var inboundOrders = BaseDal.QueryData(x => keys.Contains(x.Id));
                if (inboundOrders.FirstOrDefault(x => x.OrderStatus != InboundStatusEnum.未开始.ObjToInt()) != null)
                    throw new Exception($"入库单存在组盘入库信息");
                foreach (var inboundOrder in inboundOrders)
                //var inboundOrders = BaseDal.QueryData(x => keys.Contains(x.Id));
                var inboundOrders = BaseDal.Db.Queryable<Dt_InboundOrder>().Includes(x => x.Details).Where(x => keys.Contains(x.Id)).ToList();
                if (inboundOrders.Count < 1) throw new Exception("未找到入库单");
                List<Dt_InboundOrderDetail> orderDetails = new List<Dt_InboundOrderDetail>();
                foreach (var item in inboundOrders)
                {
                    var inboundOrderDetails = BaseDal.Db.Queryable<Dt_InboundOrder>().Includes(x => x.Details).First(x => x.OrderNo == inboundOrder.OrderNo).Details;
                    if (inboundOrderDetails != null || inboundOrderDetails.Count > 0)
                    {
                        if (inboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus != OrderDetailStatusEnum.New.ObjToInt()) != null)
                            throw new Exception($"入库单【{inboundOrder.OrderNo}】存在组盘入库信息");
                    }
                    if (item.Details.Where(x => x.ReceiptQuantity != x.OverInQuantity).Any())
                        throw new Exception("存在未入库完成托盘");
                    orderDetails.AddRange(item.Details);
                    item.Details = null;
                }
                content = base.DeleteData(keys);
                BaseDal.DeleteAndMoveIntoHty(inboundOrders, OperateType.人工删除);
                content.Status = _inboundOrderDetailService.Repository.DeleteAndMoveIntoHty(orderDetails, OperateType.人工删除);
            }
            catch (Exception ex)
            {
@@ -177,7 +177,7 @@
                return (false, "有物料信息未录入,请录入物料信息", inboundOrderAddDTO);
            }
            if (BaseDal.QueryFirst(x => x.UpperOrderNo == inboundOrderAddDTO.UpperOrderNo && !string.IsNullOrEmpty(x.UpperOrderNo)) != null)
            if (BaseDal.QueryFirst(x => x.OrderNo == inboundOrderAddDTO.orderNo && !string.IsNullOrEmpty(x.OrderNo)) != null)
            {
                return (false, "单据已存在", inboundOrderAddDTO);
            }
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder_hty.cs
@@ -36,5 +36,8 @@
        [ExporterHeader(DisplayName = "移入历史时间")]
        [SugarColumn(IsNullable = false, ColumnDescription = "移入历史时间")]
        public DateTime InsertTime { get; set; }
        [Navigate(NavigateType.OneToMany, nameof(Dt_OutboundOrderDetail_Hty.OrderId), nameof(SourceId))]
        public new List<Dt_OutboundOrderDetail_Hty> Details { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderService.cs
@@ -34,11 +34,12 @@
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IBasicRepository _basicRepository;
        private readonly ITaskRepository _taskRepository;
        private readonly IOutboundOrderDetailRepository _outboundOrderDetailRepository;
        private readonly SqlSugarClient _dbBase;
        public IOutboundOrderRepository Repository => BaseDal;
        public OutboundOrderService(IOutboundOrderRepository BaseDal, IBasicRepository basicRepository, IMapper mapper, IMaterielInfoService materielInfoService, IStockInfoDetailService stockDetailService, IStockInfoService stockInfoService, IUnitOfWorkManage unitOfWorkManage,ITaskRepository taskRepository) : base(BaseDal)
        public OutboundOrderService(IOutboundOrderRepository BaseDal, IBasicRepository basicRepository, IMapper mapper, IMaterielInfoService materielInfoService, IStockInfoDetailService stockDetailService, IStockInfoService stockInfoService, IUnitOfWorkManage unitOfWorkManage, ITaskRepository taskRepository, IOutboundOrderDetailRepository outboundOrderDetailRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _materielInfoService = materielInfoService;
@@ -47,6 +48,7 @@
            _stockService = stockInfoService;
            _dbBase = unitOfWorkManage.GetDbClient();
            _taskRepository = taskRepository;
            _outboundOrderDetailRepository = outboundOrderDetailRepository;
        }
        public override WebResponseContent AddData(SaveModel saveModel)
@@ -88,6 +90,31 @@
            }
            saveModel.DetailData = dics;
            return base.UpdateData(saveModel);
        }
        public override WebResponseContent DeleteData(object[] keys)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                List<Dt_OutboundOrder> _OutboundOrders = BaseDal.Db.Queryable<Dt_OutboundOrder>().Includes(x => x.Details).Where(x => keys.Contains(x.Id)).ToList();
                if (_OutboundOrders.Count < 1) throw new Exception("未找到出库单");
                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("存在未出库完成托盘");
                    orderDetails.AddRange(item.Details);
                    item.Details = null;
                }
                BaseDal.DeleteAndMoveIntoHty(_OutboundOrders, OperateType.人工删除);
                content.Status = _outboundOrderDetailRepository.DeleteAndMoveIntoHty(orderDetails, OperateType.人工删除);
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        public WebResponseContent AddOutboundOrder(OutboundOrderAddDTO orderAddDTO)
@@ -142,20 +169,6 @@
                return (false, "单据已存在", outboundOrderAddDTO);
            }
            return (true, "成功", outboundOrderAddDTO);
        }
        public WebResponseContent ReleaseOutOrder(int orderId)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
            }
            catch (Exception ex)
            {
            }
            return content;
        }
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs
@@ -192,7 +192,7 @@
                Dt_InboundOrder inboundOrder = _inboundService.InbounOrderService.GetInboundOrder(stockInfoDetail.OrderNo);
                if (inboundOrder == null) throw new Exception($"未找到托盘[{lineDTO.Barcode}]的入库单信息");
                var BatchNo = stockInfoDetail.BatchNo.Substring(0, 2);
                var BatchNo = stockInfoDetail.BatchNo;
                #region åˆ¤æ–­æ˜¯å¦æŒ‡å®šè´§ä½
                Dt_InboundOrderDetail? orderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == stockInfoDetail.BatchNo);
                if (orderDetail == null) throw new Exception($"未找到托盘[{lineDTO.Barcode}]的入库单明细信息");
@@ -217,7 +217,7 @@
                    #endregion
                    else
                    {
                        instockInfoDetail = _stockService.StockInfoDetailService.Get_StockInfoDetail(stockInfoDetail.OrderNo, BatchNo);//入库单存在库存,判断货位
                        instockInfoDetail = _stockService.StockInfoDetailService.Get_StockInfoDetail(stockInfoDetail.OrderNo /*BatchNo*/);//入库单存在库存,判断货位
                        if (instockInfoDetail != null) instockInfo = _stockService.StockInfoService.Repository.GetStockInfo(instockInfoDetail.StockId);
                        if (instockInfo != null)
                        {
@@ -238,7 +238,7 @@
                    if (locationInfo == null)//分配新货位
                    {
                        List<Dt_InboundOrderDetail> inboundOrderDetailList = inboundOrder.Details.Where(x => x.BatchNo.Contains(BatchNo) && x.OverInQuantity == 0).ToList();
                        List<Dt_InboundOrderDetail> inboundOrderDetailList = inboundOrder.Details.Where(x => /*x.BatchNo.Contains(BatchNo) &&*/ x.OverInQuantity == 0).ToList();
                        int inboundOrderCount = inboundOrderDetailList.Count;
                        locationInfo = _basicService.LocationInfoService.AssignLocation(inboundOrderCount);//重新分配货位
                    }
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs
@@ -205,7 +205,7 @@
                        };
                        dt_Tasks.Add(task);
                        item1.StockStatus = StockStatusEmun.移库中.ObjToInt();
                        locationInfo2.CurrentQty++;
                        //locationInfo2.CurrentQty++;
                    }
                }
            }
@@ -247,6 +247,7 @@
                stockInfos.AddRange(result.Item1);
                outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                outboundOrderDetail.LockQuantity = result.Item1.Count;
                outStockLockInfos = result.Item2;
                locationInfos = result.Item3;
                outboundOrder.OrderStatus = OutboundStatusEnum.出库中.ObjToInt();
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_ProductionLine.cs
@@ -30,11 +30,11 @@
                stockInfo = new Dt_StockInfo();
                stockInfo.Details = new List<Dt_StockInfoDetail>();
                #region MyRegion
                string OrderNo = productionlineDTO.batchNo.Substring(0, 6);// DateTime.Now.ToString("yyMMdd");
                string OrderNo = productionlineDTO.batchNo.Substring(0, 8);// DateTime.Now.ToString("yyMMdd");
                Dt_InboundOrder? inboundOrder = _inboundService.InbounOrderService.GetInboundOrder(OrderNo);
                if (inboundOrder == null) throw new Exception($"未找到批号为【{OrderNo}】的入库单");
                //var BatchNo = string.Join("", productionlineDTO.batchNo.Except(OrderNo));
                var BatchNo = productionlineDTO.batchNo.Substring(6);
                var BatchNo = productionlineDTO.batchNo.Substring(8);
                Dt_InboundOrderDetail? inboundOrderDetail = inboundOrder.Details.Where(x => x.BatchNo == BatchNo).FirstOrDefault();
                if (inboundOrderDetail == null) throw new Exception($"批号【{OrderNo}】的入库单未找到柜号【{BatchNo}】");
                if (inboundOrderDetail.OrderQuantity - inboundOrderDetail.ReceiptQuantity < 1) throw new Exception($"批号【{OrderNo}】的柜号【{BatchNo}】可组盘数量不足");
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -300,7 +300,7 @@
                else if (task.TaskType == (int)TaskTypeEnum.Relocation)
                {
                    task.TaskState = WMStask.TaskState;
                    if (task.TaskState == (int)WIDESEA_Core.Enums.TaskRelocationStatusEnum.RelocationFinish)
                    if (task.TaskState == (int)WIDESEA_Core.Enums.TaskRelocationStatusEnum.SC_RelocationFinish)
                        content = UpdateTaskStatusRelocationCarFinish(task);
                    else
                        content = UpdateData(task);
@@ -334,21 +334,11 @@
                {
                    /*if (task.TaskType == TaskOutboundTypeEnum.Outbound.ObjToInt())*/
                    Sourcelocation.CurrentQty--;
                    if (Sourcelocation.CurrentQty <= 0 && Sourcelocation.Row != 2)
                    if (Sourcelocation.CurrentQty <= 0)
                    {
                        Sourcelocation.CurrentQty = 0;
                        Sourcelocation.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                        Sourcelocation.EnableStatus = EnableStatusEnum.Normal.ObjToInt();
                    }
                    if (Sourcelocation.Row == 1 && Sourcelocation.LocationStatus == LocationStatusEnum.Free.ObjToInt())
                    {
                        Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.Row == 2 && x.Column == Sourcelocation.Column && x.Layer == Sourcelocation.Layer);
                        if (locationInfo.CurrentQty == 0 /*&& locationInfo.LocationStatus == LocationStatusEnum.Free.ObjToInt()*/)
                        {
                            locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                            locationInfo.EnableStatus = EnableStatusEnum.Normal.ObjToInt();
                            _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
                        }
                    }
                    _basicService.LocationInfoService.Repository.UpdateData(Sourcelocation);
                }
@@ -378,10 +368,11 @@
            {
                Dt_OutStockLockInfo? outStockLockInfo = _outboundService.OutboundStockLockInfoService.Repository.QueryFirst(x => x.TaskNum == task.TaskNum);
                Dt_OutboundOrder? outboundOrder = null;
                Dt_OutboundOrderDetail? outboundOrderDetail = null;
                int overCount = 0;
                if (outStockLockInfo != null)
                {
                    Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == outStockLockInfo.OrderDetailId);
                    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();
@@ -400,8 +391,14 @@
                if (outboundOrder != null && outboundOrder.Details.Count == overCount)
                {
                    outboundOrder.OrderStatus = OutboundStatusEnum.出库完成.ObjToInt();
                    _outboundService.OutboundOrderService.Repository.DeleteAndMoveIntoHty(outboundOrder, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                    _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);
@@ -430,6 +427,7 @@
                Targetlocation.CurrentQty++;
                stockInfo.LocationCode = Targetlocation.LocationCode;
                stockInfo.SerialNumber = Targetlocation.CurrentQty;
                stockInfo.StockStatus = StockStatusEmun.已入库.ObjToInt();
                if (Sourcelocation.CurrentQty == 0) Sourcelocation.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                Dt_Task _Task = BaseDal.QueryFirst(x => x.TaskNum != task.TaskNum && x.TaskType == task.TaskType && x.SourceAddress == Sourcelocation.LocationCode && x.TargetAddress == Targetlocation.LocationCode);
                if (_Task == null)
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -6,7 +6,7 @@
<Project>
  <PropertyGroup>
    <_PublishTargetUrl>E:\IISText\芜湖三一\WMS</_PublishTargetUrl>
    <History>True|2025-04-18T09:17:44.2558979Z;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-05-07T09:51:44.1784374Z;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>