啊鑫
2025-07-16 d111f8edae7823e0cc700b3e090b828ac2116ed9
Add MesLaboratory API functionality

- Add MesLaboratory and VLaboratory models
- Implement MesLaboratoryService with CRUD operations
- Add MesLaboratoryController with API endpoints
- Add SaveLaboratory method for OQC data processing
- Add GetPage method for pagination
- Add UpdateInspectionResult method for inspection results
- Add API documentation for frontend integration
已修改9个文件
已添加6个文件
714 ■■■■■ 文件已修改
.claude/settings.local.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CLAUDE.md 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/service/OQCDto.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesLaboratory.cs 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/VLaboratory.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/bin/Debug/net8.0/MES.Service.dll 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/bin/Debug/net8.0/MES.Service.pdb 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/QC/MesLaboratoryService.cs 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Controllers/QC/MesLaboratoryController.cs 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MES.Service.dll 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MES.Service.pdb 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MESApplication.dll 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MESApplication.exe 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MESApplication.pdb 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MESApplication.xml 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.claude/settings.local.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
{
  "permissions": {
    "allow": [
      "Bash(rm:*)",
      "Bash(git add:*)"
    ],
    "deny": []
  }
}
CLAUDE.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,140 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
This is a Manufacturing Execution System (MES) API application built with .NET 8, consisting of:
- **MESApplication**: Main Web API project with controllers and middleware
- **MES.Service**: Service layer containing business logic, data models, and database operations
The system manages manufacturing operations including quality control (QC), warehouse management, inventory tracking, PLM integration, and ERP connectivity.
## Development Commands
### Build and Run
```bash
# Build the solution
dotnet build MESApplication.sln
# Run the API (from MESApplication directory)
cd MESApplication
dotnet run
# Run with specific environment
dotnet run --environment Development
```
### Development Server
- API runs on: `http://localhost:5184`
- Swagger UI available at: `http://localhost:5184/swagger`
- IIS Express: `http://localhost:10054`
### Project Structure Commands
```bash
# Restore NuGet packages
dotnet restore
# Clean build artifacts
dotnet clean
# Build specific project
dotnet build MESApplication/MESApplication.csproj
dotnet build MES.Service/MES.Service.csproj
```
## Architecture
### Database Layer
- **ORM**: SqlSugar for Oracle database connectivity
- **Database**: Oracle (connection configured in appsettings.json)
- **Patterns**: Repository pattern with generic DbContext<T> and specific managers
- **Key Classes**:
  - `SqlSugarHelper.cs`: Database connection and transaction management
  - `DbContext<T>.cs`: Generic repository for CRUD operations
  - `Repository.cs`: Base repository implementation
### Service Layer (MES.Service)
Organized by business domains:
- **BasicData/**: Core master data (customers, suppliers, items, departments)
- **QC/**: Quality control operations (inspections, testing, suspensions)
- **Warehouse/**: Inventory management (stock, moves, receipts, shipments)
- **PLM/**: Product lifecycle management integration
- **SpotCheck/**: Equipment maintenance and spot checking
### API Layer (MESApplication)
- **Controllers/**: REST endpoints organized by domain (matching service structure)
- **Filter/**: Action filters for logging and error handling
- **Authentication**: Not implemented (anonymous access)
- **Serialization**: Newtonsoft.Json with camelCase naming
### Key Configuration
- **Database**: Oracle connection string in `AppSettings.DataBaseConn`
- **CORS**: Enabled for all origins during development
- **Swagger**: Auto-generated API documentation with XML comments
- **Logging**: Console logging with SQL query debugging enabled
### External Integrations
- **Kingdee ERP**: Via WebService (configured URLs in AppSettings)
- **PLM System**: Document and BOM management
- **Real-time Inventory**: HTTP client for inventory queries
### Domain Models
Major entity categories:
- **Inventory**: `MesInvItem*` classes for stock management
- **Quality**: `MesQa*` classes for quality control processes
- **Manufacturing**: `Wom*` classes for work orders
- **Purchasing**: `Purd*` classes for procurement
- **Sales**: `SalesOrder*` classes for order management
### Data Transfer Objects (DTOs)
- **service/**: Internal service communication DTOs
- **webApi/**: External API integration DTOs (ERP, PLM)
- **base/**: Common DTOs (pagination, login, settings)
## Testing and Quality
### Testing Commands
```bash
# No automated tests currently configured
# Manual testing via Swagger UI at http://localhost:5184/swagger
```
### Common Development Tasks
#### Adding New API Endpoints
1. Create model class in `MES.Service/Modes/`
2. Create service manager in `MES.Service/service/[Domain]/`
3. Create controller in `MESApplication/Controllers/[Domain]/`
4. Register dependencies in `Startup.cs` if needed
#### Working with Database
- All database operations use SqlSugar ORM with Oracle
- Transaction support via `SqlSugarHelper.UseTransactionWithOracle()`
- SQL queries are logged to console during development
- Connection string configured in `appsettings.json`
#### External System Integration
- **ERP Integration**: Kingdee WebService calls configured in AppSettings
- **PLM Integration**: Document management via HTTP clients
- **Real-time Inventory**: Dedicated service for inventory queries
### Key Files to Understand
- `MES.Service/DB/SqlSugarHelper.cs`: Database connection management
- `MES.Service/DB/DbContext.cs`: Generic repository pattern
- `MES.Service/util/AppsettingsUtility.cs`: Configuration access
- `MESApplication/Startup.cs`: Application configuration and DI setup
- `MESApplication/Filter/ActionFilter.cs`: Request/response logging
### Dependencies and Packages
- **SqlSugarCore**: ORM for Oracle database operations
- **Newtonsoft.Json**: JSON serialization with camelCase naming
- **Swashbuckle.AspNetCore**: API documentation generation
- **Oracle.EntityFrameworkCore**: Oracle database connectivity
- **Kingdee.CDP.WebApi.SDK**: ERP system integration (local DLL)
### Configuration Management
- Environment-specific settings in `appsettings.json` and `appsettings.Development.json`
- Database connection in `AppSettings.DataBaseConn`
- ERP URLs in `AppSettings.TestErpUrl` and `AppSettings.ProductionErpUrl`
- CORS enabled for all origins in development mode
MES.Service/Dto/service/OQCDto.cs
@@ -12,6 +12,8 @@
    public decimal? MainId { get; set; }
    public string? ReleaseNo { get; set; }
    public string? OrderNo { get; set; }
    public List<MesInvItemStocks>? ItemBarCodeData { get; set; }
    
MES.Service/Modes/MesLaboratory.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,111 @@
using SqlSugar;
using System;
namespace MES.Service.Modes
{
    /// <summary>
    /// å®žéªŒå®¤æ£€æµ‹æ•°æ®è¡¨
    /// </summary>
    [SugarTable("MES_LABORATORY")]
    public class MesLaboratory
    {
        /// <summary>
        /// ä¸»é”®ID
        /// </summary>
        [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_MES_LABORATORY",
            IsPrimaryKey = true)]
        public decimal Id { get; set; }
        /// <summary>
        /// å·¥å•号
        /// </summary>
        [SugarColumn(ColumnName = "BILL_NO", Length = 100)]
        public string? BillNo { get; set; }
        /// <summary>
        /// ç”Ÿäº§çº¿ä½“编码
        /// </summary>
        [SugarColumn(ColumnName = "LINE_NO", Length = 100)]
        public string? LineNo { get; set; }
        /// <summary>
        /// ç‰©æ–™id
        /// </summary>
        [SugarColumn(ColumnName = "ITEM_ID")]
        public int? ItemId { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–码
        /// </summary>
        [SugarColumn(ColumnName = "ITEM_NO", Length = 64)]
        public string? ItemNo { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        [SugarColumn(ColumnName = "ITEM_NAME", Length = 500)]
        public string? ItemName { get; set; }
        /// <summary>
        /// ç‰©æ–™è§„æ ¼
        /// </summary>
        [SugarColumn(ColumnName = "ITEM_MODEL", Length = 3000)]
        public string? ItemModel { get; set; }
        /// <summary>
        /// ç”Ÿäº§è½¦é—´id
        /// </summary>
        [SugarColumn(ColumnName = "DEPARTMENTID")]
        public int? DepartmentId { get; set; }
        /// <summary>
        /// ç”Ÿäº§è½¦é—´ç¼–码
        /// </summary>
        [SugarColumn(ColumnName = "DEPARTMENTCODE", Length = 32)]
        public string? DepartmentCode { get; set; }
        /// <summary>
        /// é”€å”®è®¢å•号
        /// </summary>
        [SugarColumn(ColumnName = "SALE_ORDER_NOC", Length = 50)]
        public string? SaleOrderNoc { get; set; }
        /// <summary>
        /// æ£€éªŒç»“æžœ
        /// </summary>
        [SugarColumn(ColumnName = "INSPECTION_RESULT", Length = 20)]
        public string? InspectionResult { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        [SugarColumn(ColumnName = "CREATE_TIME", InsertServerTime = true)]
        public DateTime? CreateTime { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        [SugarColumn(ColumnName = "CREATE_BY", Length = 100)]
        public string? CreateBy { get; set; }
        /// <summary>
        /// æ£€éªŒæ—¶é—´
        /// </summary>
        [SugarColumn(ColumnName = "INSPECTION_TIME")]
        public DateTime? InspectionTime { get; set; }
        /// <summary>
        /// æ£€éªŒäºº
        /// </summary>
        [SugarColumn(ColumnName = "INSPECTION_BY", Length = 100)]
        public string? InspectionBy { get; set; }
        [SugarColumn(IsIgnore = true)]
        public string? CreateUser { get; set; }
        //inspection
        [SugarColumn(IsIgnore = true)]
        public string? InspectionUser { get; set; }
    }
}
MES.Service/Modes/VLaboratory.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
/// å®žéªŒå®¤æ£€æµ‹æ•°æ®è¡¨
/// </summary>
[SugarTable("V_LABORATORY")]
public class VLaboratory
{
    /// <summary>
    /// ä¸»é”®ID
    /// </summary>
    [SugarColumn(ColumnName = "ID",
        IsPrimaryKey = true)]
    public decimal Id { get; set; }
    /// <summary>
    /// å·¥å•号
    /// </summary>
    [SugarColumn(ColumnName = "BILL_NO")]
    public string? BillNo { get; set; }
    /// <summary>
    /// ç”Ÿäº§çº¿ä½“编码
    /// </summary>
    [SugarColumn(ColumnName = "LINE_NO")]
    public string? LineNo { get; set; }
    /// <summary>
    /// ç‰©æ–™id
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_ID")]
    public int? ItemId { get; set; }
    /// <summary>
    /// ç‰©æ–™ç¼–码
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_NO")]
    public string? ItemNo { get; set; }
    /// <summary>
    /// ç‰©æ–™åç§°
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_NAME")]
    public string? ItemName { get; set; }
    /// <summary>
    /// ç‰©æ–™è§„æ ¼
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_MODEL")]
    public string? ItemModel { get; set; }
    /// <summary>
    /// ç”Ÿäº§è½¦é—´id
    /// </summary>
    [SugarColumn(ColumnName = "DEPARTMENTID")]
    public int? DepartmentId { get; set; }
    /// <summary>
    /// ç”Ÿäº§è½¦é—´ç¼–码
    /// </summary>
    [SugarColumn(ColumnName = "DEPARTMENTCODE")]
    public string? DepartmentCode { get; set; }
    /// <summary>
    /// é”€å”®è®¢å•号
    /// </summary>
    [SugarColumn(ColumnName = "SALE_ORDER_NOC")]
    public string? SaleOrderNoc { get; set; }
}
MES.Service/bin/Debug/net8.0/MES.Service.dll
Binary files differ
MES.Service/bin/Debug/net8.0/MES.Service.pdb
Binary files differ
MES.Service/service/QC/MesLaboratoryService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
using System.Data;
using MES.Service.DB;
using MES.Service.Dto.service;
using MES.Service.Modes;
using MES.Service.util;
using SqlSugar;
using DbType = System.Data.DbType;
namespace MES.Service.service.QC;
public class MesLaboratoryService : Repository<MesLaboratory>
{
    //OQCDto
    public bool SaveLaboratory(OQCDto dto)
    {
        //1.根据BillNo查询视图VLaboratory,用dto的OrderNo,使用.First()只返回一个对象
        var vLaboratory = Context.Queryable<VLaboratory>()
            .Where(x => x.BillNo == dto.OrderNo)
            .First();
        //2.将查询出来的VLaboratory转换为MesLaboratory
        var mesLaboratory = new MesLaboratory
        {
            BillNo = vLaboratory.BillNo,
            LineNo = vLaboratory.LineNo,
            ItemId = vLaboratory.ItemId,
            ItemNo = vLaboratory.ItemNo,
            ItemName = vLaboratory.ItemName,
            ItemModel = vLaboratory.ItemModel,
            DepartmentId = vLaboratory.DepartmentId,
            DepartmentCode = vLaboratory.DepartmentCode,
            SaleOrderNoc = vLaboratory.SaleOrderNoc,
            CreateBy = dto.CreateUser,
            CreateTime = DateTime.Now
        };
        //3.插入到数据库中
        return Context.Insertable(mesLaboratory)
            .IgnoreColumns(ignoreNullColumn: true)
            .ExecuteCommand() > 0;
    }
    public new object InsertReturnIdentity(MesLaboratory data)
    {
        return base.InsertReturnIdentity(data);
    }
    public (List<MesLaboratory> item, int TotalCount) GetPage(
        XJPageResult queryObj)
    {
        if (queryObj == null)
            throw new ArgumentNullException(nameof(queryObj));
        var db = Db;
        var totalCount = 0;
        if (!decimal.TryParse(queryObj.id, out var id))
            id = 0;
        var pageList = db
            .Queryable<MesLaboratory, SysUser, SysUser>((a, b, c) =>
                new JoinQueryInfos(JoinType.Left, a.CreateBy == b.Fcode,
                    JoinType.Left, a.InspectionBy == c.Fcode
                ))
            .WhereIF(id > 0, (a, b, c) => a.Id == id)
            .Select((a, b, c) => new MesLaboratory()
            {
                CreateUser = b.Fname,
                InspectionUser = c.Fname,
                DepartmentId = a.DepartmentId,
            }, true)
            .OrderByDescending(a => a.Id)
            .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
        return (pageList, totalCount);
    }
    /// <summary>
    /// å½•入检验结果
    /// </summary>
    /// <param name="data">实验室检测数据</param>
    /// <returns></returns>
    public bool UpdateInspectionResult(MesLaboratory data)
    {
        return Context.Updateable<MesLaboratory>()
            .SetColumnsIF(!string.IsNullOrEmpty(data.InspectionResult),
                x => x.InspectionResult == data.InspectionResult)
            .SetColumnsIF(!string.IsNullOrEmpty(data.InspectionBy),
                x => x.InspectionBy == data.InspectionBy)
            .SetColumns(x => x.InspectionTime == DateTime.Now)
            .Where(x => x.Id == data.Id)
            .ExecuteCommand() > 0;
    }
}
MESApplication/Controllers/QC/MesLaboratoryController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,231 @@
using System.Dynamic;
using MES.Service.Dto.service;
using MES.Service.Modes;
using MES.Service.service.QC;
using MES.Service.util;
using Microsoft.AspNetCore.Mvc;
namespace MESApplication.Controllers.QC;
[Route("api/[controller]")]
[ApiController]
public class MesLaboratoryController : ControllerBase
{
    private readonly MesLaboratoryService m = new();
    [HttpPost("saveLaboratory")]
    public ResponseResult SaveLaboratory([FromBody] OQCDto dto)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var result = m.SaveLaboratory(dto);
            resultInfos.result = result;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     èŽ·å–æ‰€æœ‰
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetList")]
    public ResponseResult GetList()
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.GetList();
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ ¹æ®ä¸»é”®èŽ·å–
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetById")]
    public ResponseResult GetById(decimal id)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.GetById(id);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ ¹æ®ä¸»é”®åˆ é™¤
    /// </summary>
    /// <returns></returns>
    [HttpPost("DeleteByIds")]
    public ResponseResult DeleteByIds([FromBody] object[] ids)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.DeleteByIds(ids);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ·»åŠ 
    /// </summary>
    /// <returns></returns>
    [HttpPost("Insert")]
    public ResponseResult Add([FromBody] MesLaboratory data)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.Insert(data);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ·»åŠ è¿”å›žè‡ªå¢ž
    /// </summary>
    /// <returns></returns>
    [HttpPost("InsertReturnIdentity")]
    public ResponseResult InsertReturnIdentity([FromBody] MesLaboratory data)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.InsertReturnIdentity(data);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     ä¿®æ”¹
    /// </summary>
    /// <returns></returns>
    [HttpPost("Update")]
    public ResponseResult Update([FromBody] MesLaboratory data)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.Update(data);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     åˆ†é¡µæŸ¥è¯¢
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetPage")]
    public ResponseResult GetPage([FromBody] XJPageResult queryObj)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var (items, totalCount) = m.GetPage(queryObj);
            resultInfos.tbBillList = items;
            resultInfos.totalCount = totalCount;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     å½•入检验结果
    /// </summary>
    /// <returns></returns>
    [HttpPost("UpdateInspectionResult")]
    public ResponseResult UpdateInspectionResult([FromBody] MesLaboratory data)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var result = m.UpdateInspectionResult(data);
            resultInfos.result = result;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
}
MESApplication/bin/Debug/net8.0/MES.Service.dll
Binary files differ
MESApplication/bin/Debug/net8.0/MES.Service.pdb
Binary files differ
MESApplication/bin/Debug/net8.0/MESApplication.dll
Binary files differ
MESApplication/bin/Debug/net8.0/MESApplication.exe
Binary files differ
MESApplication/bin/Debug/net8.0/MESApplication.pdb
Binary files differ
MESApplication/bin/Debug/net8.0/MESApplication.xml
@@ -757,6 +757,61 @@
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.BaseController.getLljAllImgByFid(Newtonsoft.Json.Linq.JObject)">
            <summary>
                èŽ·å–æ¥æ–™æ£€å•ä¸ªæ£€éªŒå•ä¸Šä¼ çš„æ‰€æœ‰å›¾ç‰‡
            </summary>
            <param name="data"></param>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesLaboratoryController.GetList">
            <summary>
                èŽ·å–æ‰€æœ‰
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesLaboratoryController.GetById(System.Decimal)">
            <summary>
                æ ¹æ®ä¸»é”®èŽ·å–
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesLaboratoryController.DeleteByIds(System.Object[])">
            <summary>
                æ ¹æ®ä¸»é”®åˆ é™¤
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesLaboratoryController.Add(MES.Service.Modes.MesLaboratory)">
            <summary>
                æ·»åŠ 
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesLaboratoryController.InsertReturnIdentity(MES.Service.Modes.MesLaboratory)">
            <summary>
                æ·»åŠ è¿”å›žè‡ªå¢ž
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesLaboratoryController.Update(MES.Service.Modes.MesLaboratory)">
            <summary>
                ä¿®æ”¹
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesLaboratoryController.GetPage(MES.Service.Dto.service.XJPageResult)">
            <summary>
                åˆ†é¡µæŸ¥è¯¢
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesLaboratoryController.UpdateInspectionResult(MES.Service.Modes.MesLaboratory)">
            <summary>
                å½•入检验结果
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesLineUserController.GetList">
            <summary>
                èŽ·å–æ‰€æœ‰