xwt
2025-11-19 2b81edc873cc53d774104e4be2c26562cbe6f6ba
超期复检
已修改2个文件
已添加6个文件
1476 ■■■■■ 文件已修改
StandardInterface/MES.Service/Modes/LtsCqj.cs 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Modes/MesCqItemsDetect01.cs 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Modes/MesCqItemsDetectDetail12.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Modes/MesCqItemsDetectDetail5.cs 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Modes/MesQsImage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/service/QC/CqjService.cs 577 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MESApplication/Controllers/QC/CqjController.cs 400 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MESApplication/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Modes/LtsCqj.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
/// è¶…期检验视图 V_CQJ
/// </summary>
[SugarTable("V_CQJ")]
public class LtsCqj
{
    /// <summary>
    /// ID
    /// </summary>
    [SugarColumn(ColumnName = "ID")]
    public decimal? Id { get; set; }
    /// <summary>
    /// æ£€éªŒå•号
    /// </summary>
    [SugarColumn(ColumnName = "RELEASE_NO")]
    public string? ReleaseNo { get; set; }
    /// <summary>
    /// ç‰©æ–™ID
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_ID")]
    public decimal? 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>
    /// é€æ£€æ‰¹æ¬¡
    /// </summary>
    [SugarColumn(ColumnName = "LOT_NO")]
    public string? LotNo { get; set; }
    /// <summary>
    /// æäº¤æ ‡è¯†
    /// </summary>
    [SugarColumn(ColumnName = "FSUBMIT")]
    public decimal? Fsubmit { get; set; }
    /// <summary>
    /// åˆ›å»ºæ—¶é—´
    /// </summary>
    [SugarColumn(ColumnName = "CREATE_DATE")]
    public DateTime? CreateDate { get; set; }
    /// <summary>
    /// åˆ›å»ºäºº
    /// </summary>
    [SugarColumn(ColumnName = "CJR")]
    public string? Cjr { get; set; }
    /// <summary>
    /// æ£€éªŒç»“æžœ
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_RESU")]
    public string? FcheckResu { get; set; }
    /// <summary>
    /// å¤‡æ³¨ä¿¡æ¯
    /// </summary>
    [SugarColumn(ColumnName = "LOT_NO1")]
    public string? LotNo1 { get; set; }
    /// <summary>
    /// ä¸è‰¯æè¿°
    /// </summary>
    [SugarColumn(ColumnName = "FNG_DESC")]
    public string? FngDesc { get; set; }
    /// <summary>
    /// é€æ£€æ•°é‡
    /// </summary>
    [SugarColumn(ColumnName = "FBATCH_QTY")]
    public decimal? FbatchQty { get; set; }
    /// <summary>
    /// æäº¤äºº
    /// </summary>
    [SugarColumn(ColumnName = "TJR")]
    public string? Tjr { get; set; }
    /// <summary>
    /// å•位
    /// </summary>
    [SugarColumn(ColumnName = "FNUMBER")]
    public string? Fnumber { get; set; }
    /// <summary>
    /// é€æ£€äºº
    /// </summary>
    [SugarColumn(ColumnName = "SJR")]
    public string? Sjr { get; set; }
    /// <summary>
    /// é€æ£€å•号
    /// </summary>
    [SugarColumn(ColumnName = "DECLARATION_NO")]
    public string? DeclarationNo { get; set; }
    /// <summary>
    /// æ£€éªŒé¡¹ç›®æ•°é‡ï¼ˆéžæ•°æ®åº“字段,用于前端显示)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public int? InspectionItemCount { get; set; }
}
StandardInterface/MES.Service/Modes/MesCqItemsDetect01.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,127 @@
using System.ComponentModel.DataAnnotations.Schema;
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
/// è¶…期检验单主表 MES_CQ_ITEMS_DETECT_01
/// </summary>
[Table("MES_CQ_ITEMS_DETECT_01")]
[SugarTable("MES_CQ_ITEMS_DETECT_01")]
public class MesCqItemsDetect01
{
    /// <summary>
    /// ä¸»é”®ID
    /// </summary>
    [Column("ID")]
    [SugarColumn(IsPrimaryKey = true, OracleSequenceName = "SEQ_CQ_ID", ColumnName = "ID")]
    public decimal? Id { get; set; }
    /// <summary>
    /// æ£€éªŒå•号
    /// </summary>
    [SugarColumn(ColumnName = "RELEASE_NO")]
    public string? ReleaseNo { get; set; }
    /// <summary>
    /// ç‰©æ–™ID
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_ID")]
    public decimal? ItemId { get; set; }
    /// <summary>
    /// ç‰©æ–™ç¼–码
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_NO")]
    public string? ItemNo { get; set; }
    /// <summary>
    /// é€æ£€æ‰¹æ¬¡
    /// </summary>
    [SugarColumn(ColumnName = "LOT_NO")]
    public string? LotNo { get; set; }
    /// <summary>
    /// æäº¤æ ‡è¯†
    /// </summary>
    [SugarColumn(ColumnName = "FSUBMIT")]
    public decimal? Fsubmit { get; set; }
    /// <summary>
    /// æ£€éªŒç»“æžœ
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_RESU")]
    public string? FcheckResu { get; set; }
    /// <summary>
    /// æ£€éªŒæ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_DATE")]
    public DateTime? FcheckDate { get; set; }
    /// <summary>
    /// æ£€éªŒäºº
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_BY")]
    public string? FcheckBy { get; set; }
    /// <summary>
    /// å¤‡æ³¨ä¿¡æ¯
    /// </summary>
    [SugarColumn(ColumnName = "LOT_NO1")]
    public string? LotNo1 { get; set; }
    /// <summary>
    /// ä¸è‰¯æè¿°
    /// </summary>
    [SugarColumn(ColumnName = "FNG_DESC")]
    public string? FngDesc { get; set; }
    /// <summary>
    /// é€æ£€æ•°é‡
    /// </summary>
    [SugarColumn(ColumnName = "FBATCH_QTY")]
    public decimal? FbatchQty { get; set; }
    /// <summary>
    /// å•位
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_UNIT")]
    public decimal? ItemUnit { get; set; }
    /// <summary>
    /// åˆ›å»ºäºº
    /// </summary>
    [SugarColumn(ColumnName = "CREATE_BY")]
    public string? CreateBy { get; set; }
    /// <summary>
    /// åˆ›å»ºæ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "CREATE_DATE")]
    public DateTime? CreateDate { get; set; }
    /// <summary>
    /// æ›´æ–°äºº
    /// </summary>
    [SugarColumn(ColumnName = "LASTUPDATE_BY")]
    public string? LastupdateBy { get; set; }
    /// <summary>
    /// æ›´æ–°æ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "LASTUPDATE_DATE")]
    public DateTime? LastupdateDate { get; set; }
    /// <summary>
    /// å·¥åŽ‚
    /// </summary>
    [SugarColumn(ColumnName = "FACTORY")]
    public string? Factory { get; set; }
    /// <summary>
    /// å…¬å¸
    /// </summary>
    [SugarColumn(ColumnName = "COMPANY")]
    public string? Company { get; set; }
}
StandardInterface/MES.Service/Modes/MesCqItemsDetectDetail12.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
using System.ComponentModel.DataAnnotations.Schema;
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
/// è¶…期检验结果表 MES_CQ_ITEMS_DETECT_DETAIL12
/// </summary>
[Table("MES_CQ_ITEMS_DETECT_DETAIL12")]
[SugarTable("MES_CQ_ITEMS_DETECT_DETAIL12")]
public class MesCqItemsDetectDetail12
{
    /// <summary>
    /// ä¸»é”®ID
    /// </summary>
    [Column("ID")]
    [SugarColumn(IsPrimaryKey = true, OracleSequenceName = "SEQ_CQ_ID", ColumnName = "ID")]
    public decimal? Id { get; set; }
    /// <summary>
    /// ä¸»è¡¨ID(关联MES_CQ_ITEMS_DETECT_DETAIL5)
    /// </summary>
    [SugarColumn(ColumnName = "MAIN_ID")]
    public decimal? MainId { get; set; }
    /// <summary>
    /// æ£€éªŒå•号
    /// </summary>
    [SugarColumn(ColumnName = "RELEASE_NO")]
    public string? ReleaseNo { get; set; }
    /// <summary>
    /// æ ‡å‡†å€¼
    /// </summary>
    [SugarColumn(ColumnName = "FSTAND")]
    public string? Fstand { get; set; }
    /// <summary>
    /// æ£€éªŒç»“æžœ
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_RESU")]
    public string? FcheckResu { get; set; }
    /// <summary>
    /// åˆ›å»ºäºº
    /// </summary>
    [SugarColumn(ColumnName = "CREATE_BY")]
    public string? CreateBy { get; set; }
    /// <summary>
    /// åˆ›å»ºæ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "CREATE_DATE")]
    public DateTime? CreateDate { get; set; }
    /// <summary>
    /// æ›´æ–°äºº
    /// </summary>
    [SugarColumn(ColumnName = "LASTUPDATE_BY")]
    public string? LastupdateBy { get; set; }
    /// <summary>
    /// æ›´æ–°æ—¥æœŸï¼ˆæ•°æ®åº“中不存在此字段)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public DateTime? LastupdateDate { get; set; }
    /// <summary>
    /// å·¥åŽ‚
    /// </summary>
    [SugarColumn(ColumnName = "FACTORY")]
    public string? Factory { get; set; }
    /// <summary>
    /// å…¬å¸
    /// </summary>
    [SugarColumn(ColumnName = "COMPANY")]
    public string? Company { get; set; }
    /// <summary>
    /// æ•°é‡ï¼ˆç”¨äºŽæ‰¹é‡æ’入)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public int? count { get; set; }
}
StandardInterface/MES.Service/Modes/MesCqItemsDetectDetail5.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,157 @@
using System.ComponentModel.DataAnnotations.Schema;
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
/// è¶…期检验项目表 MES_CQ_ITEMS_DETECT_DETAIL5
/// </summary>
[Table("MES_CQ_ITEMS_DETECT_DETAIL5")]
[SugarTable("MES_CQ_ITEMS_DETECT_DETAIL5")]
public class MesCqItemsDetectDetail5
{
    /// <summary>
    /// ä¸»é”®ID
    /// </summary>
    [Column("ID")]
    [SugarColumn(IsPrimaryKey = true, OracleSequenceName = "SEQ_CQ_ID", ColumnName = "ID")]
    public decimal? Id { get; set; }
    /// <summary>
    /// æ£€éªŒå•号
    /// </summary>
    [SugarColumn(ColumnName = "RELEASE_NO")]
    public string? ReleaseNo { get; set; }
    /// <summary>
    /// æŽ¥å—水准
    /// </summary>
    [SugarColumn(ColumnName = "FAC_LEVEL")]
    public string? FacLevel { get; set; }
    /// <summary>
    /// æ£€éªŒé¡¹ç›®
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_ITEM")]
    public string? FcheckItem { get; set; }
    /// <summary>
    /// æ£€éªŒå·¥å…·
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_TOOL")]
    public string? FcheckTool { get; set; }
    /// <summary>
    /// ä¸‹é™
    /// </summary>
    [SugarColumn(ColumnName = "FDOWN_ALLOW")]
    public string? FdownAllow { get; set; }
    /// <summary>
    /// æ£€éªŒç­‰çº§
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_LEVEL")]
    public string? FcheckLevel { get; set; }
    /// <summary>
    /// æ ‡å‡†å€¼
    /// </summary>
    [SugarColumn(ColumnName = "FSTAND")]
    public string? Fstand { get; set; }
    /// <summary>
    /// ä¸Šé™
    /// </summary>
    [SugarColumn(ColumnName = "FUP_ALLOW")]
    public string? FupAllow { get; set; }
    /// <summary>
    /// æ ·æœ¬é‡
    /// </summary>
    [SugarColumn(ColumnName = "SAMPLE_SIZE_NO")]
    public string? SampleSizeNo { get; set; }
    /// <summary>
    /// è§„格要求
    /// </summary>
    [SugarColumn(ColumnName = "FSPEC_REQU")]
    public string? FspecRequ { get; set; }
    /// <summary>
    /// æ‹’收数量
    /// </summary>
    [SugarColumn(ColumnName = "FRE_QTY")]
    public decimal? FreQty { get; set; }
    /// <summary>
    /// åº”检数量
    /// </summary>
    [SugarColumn(ColumnName = "CHECK_QYT")]
    public decimal? CheckQyt { get; set; }
    /// <summary>
    /// æ£€éªŒç»“æžœ
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_RESU")]
    public string? FcheckResu { get; set; }
    /// <summary>
    /// æ£€éªŒé¡¹ç›®æè¿°
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_ITEM_DESC")]
    public string? FcheckItemDesc { get; set; }
    /// <summary>
    /// å•位
    /// </summary>
    [SugarColumn(ColumnName = "FUNIT")]
    public string? Funit { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    [SugarColumn(ColumnName = "MEOM")]
    public string? Meom { get; set; }
    /// <summary>
    /// å·¥åŽ‚
    /// </summary>
    [SugarColumn(ColumnName = "FACTORY")]
    public string? Factory { get; set; }
    /// <summary>
    /// å…¬å¸
    /// </summary>
    [SugarColumn(ColumnName = "COMPANY")]
    public string? Company { get; set; }
    /// <summary>
    /// å·²æ£€æ•°é‡
    /// </summary>
    [SugarColumn(ColumnName = "FENTER_QTY")]
    public int? FenterQty { get; set; }
    /// <summary>
    /// ä¸è‰¯æ•°é‡
    /// </summary>
    [SugarColumn(ColumnName = "FNG_QTY")]
    public int? FngQty { get; set; }
    /// <summary>
    /// AC数(接收数量)
    /// </summary>
    [SugarColumn(ColumnName = "FAC_QTY")]
    public int? FacQty { get; set; }
    /// <summary>
    /// å †ç©´å·ï¼ˆè¶…期检验不使用)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public string? Dnum { get; set; }
    /// <summary>
    /// ä¸åˆæ ¼æ•°ï¼ˆéžæ•°æ®åº“字段)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public int? Unqualified { get; set; }
}
StandardInterface/MES.Service/Modes/MesQsImage.cs
@@ -36,11 +36,11 @@
    public byte[]? ImageData { get; set; }
    /// <summary>
    ///     1为首检,2为巡检,3为入库检
    ///     1为首检,2为巡检,3为入库检,4为来料检验,5为超期检验
    /// </summary>
    [Column("QS_TYPE")]
    [SugarColumn(ColumnName = "QS_TYPE")] //用于SqlSugar
    [StringLength(1, ErrorMessage = "1为首检,2为巡检,3为入库检长度不能超出1")]
    [StringLength(1, ErrorMessage = "检验类型长度不能超出1")]
    public string? QsType { get; set; }
    /// <summary>
StandardInterface/MES.Service/service/QC/CqjService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,577 @@
using System.Data;
using MES.Service.DB;
using MES.Service.Dto.service;
using MES.Service.Modes;
using MES.Service.util;
using SqlSugar;
namespace MES.Service.service.QC;
public class CqjService
{
    /// <summary>
    /// èŽ·å–è¶…æœŸæ£€éªŒåˆ—è¡¨ï¼ˆåˆ†é¡µï¼‰
    /// </summary>
    /// <param name="queryObj">查询对象</param>
    /// <returns>分页数据</returns>
    public (List<LtsCqj> item, int TotalCount) GetPage(XJPageResult queryObj)
    {
        if (string.IsNullOrEmpty(queryObj.createUser)) return ([], 0);
        var db = SqlSugarHelper.GetInstance();
        var id = Convert.ToDecimal(queryObj.id);
        int totalCount = 0;
        // æŸ¥è¯¢è¶…期检验列表
        var pageList = db.Queryable<LtsCqj>()
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                "未完成".Equals(queryObj.result),
                a => a.FcheckResu == null)
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                !"未完成".Equals(queryObj.result),
                a => a.FcheckResu != null)
            .WhereIF(id > 0, a => a.Id == id)
            // æœç´¢æ¡ä»¶
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 1, // ç‰©æ–™ç¼–号搜索
                a => a.ItemNo != null && a.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 2, // ç‰©æ–™åç§°æœç´¢
                a => a.ItemName != null && a.ItemName.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 3, // é€æ£€æ‰¹æ¬¡æœç´¢
                a => a.LotNo != null && a.LotNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 4, // é€æ£€å•号搜索
                a => a.DeclarationNo != null && a.DeclarationNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 5, // æ£€éªŒå•号搜索
                a => a.ReleaseNo != null && a.ReleaseNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 6, // ç‰©æ–™è§„格搜索
                a => a.ItemModel != null && a.ItemModel.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .Select(a => new LtsCqj
            {
                Id = a.Id,
                ReleaseNo = a.ReleaseNo,
                ItemId = a.ItemId,
                ItemNo = a.ItemNo,
                ItemName = a.ItemName,
                ItemModel = a.ItemModel,
                LotNo = a.LotNo,
                Fsubmit = a.Fsubmit,
                CreateDate = a.CreateDate,
                Cjr = a.Cjr,
                FcheckResu = a.FcheckResu,
                LotNo1 = a.LotNo1,
                FngDesc = a.FngDesc,
                FbatchQty = a.FbatchQty,
                Tjr = a.Tjr,
                Fnumber = a.Fnumber,
                Sjr = a.Sjr,
                DeclarationNo = a.DeclarationNo
            })
            .OrderBy(a => a.CreateDate, OrderByType.Desc)
            .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
        // æ‰¹é‡èŽ·å–æ£€éªŒé¡¹ç›®æ•°é‡
        if (pageList.Any())
        {
            var releaseNos = pageList.Select(x => x.ReleaseNo).Distinct().ToList();
            foreach (var item in pageList)
            {
                var count = db.Queryable<MesCqItemsDetectDetail5>()
                    .Where(x => x.ReleaseNo == item.ReleaseNo)
                    .Count();
                item.InspectionItemCount = count;
            }
        }
        // è®¡ç®—总数
        int allDataQuery = db.Queryable<LtsCqj>()
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                "未完成".Equals(queryObj.result),
                a => a.FcheckResu == null)
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                !"未完成".Equals(queryObj.result),
                a => a.FcheckResu != null)
            .WhereIF(id > 0, a => a.Id == id)
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 1,
                a => a.ItemNo != null && a.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 2,
                a => a.ItemName != null && a.ItemName.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 3,
                a => a.LotNo != null && a.LotNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 4,
                a => a.DeclarationNo != null && a.DeclarationNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 5,
                a => a.ReleaseNo != null && a.ReleaseNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 6,
                a => a.ItemModel != null && a.ItemModel.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .Select(a => a.ReleaseNo)
            .Distinct()
            .Count();
        return (pageList, allDataQuery);
    }
    /// <summary>
    /// è°ƒç”¨å­˜å‚¨è¿‡ç¨‹ï¼Œé‡æ–°èŽ·å–æ£€éªŒé¡¹ç›®
    /// </summary>
    /// <param name="itemNo">物料编号</param>
    /// <param name="quantity">数量</param>
    /// <param name="releaseNo">检验单号</param>
    /// <returns>执行结果</returns>
    public string[] SetItems(decimal itemNo, decimal quantity, string releaseNo)
    {
        // å®šä¹‰è¾“出参数
        var outputResult = new SugarParameter("PO_RESULT", null,
            System.Data.DbType.Int32, ParameterDirection.Output, 4000);
        var outputMessage = new SugarParameter("PO_TEXT", null,
            System.Data.DbType.String, ParameterDirection.Output, 4000);
        // å®šä¹‰è¾“入参数
        var parameters = new List<SugarParameter>
        {
            new("P_RELEASE_NO", releaseNo, System.Data.DbType.String, ParameterDirection.Input),
            new("P_ITEM_ID", itemNo, System.Data.DbType.Decimal, ParameterDirection.Input),
            outputResult,
            outputMessage
        };
        var db = SqlSugarHelper.GetInstance();
        // ä½¿ç”¨ SqlSugar æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
        db.Ado.ExecuteCommand(
            "BEGIN PRC_CQ_ITEM_INSERT_BTN(:P_RELEASE_NO, :P_ITEM_ID, :PO_RESULT, :PO_TEXT); END;",
            parameters.ToArray());
        // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
        var resultValue = outputResult.Value?.ToString();
        var messageValue = outputMessage.Value?.ToString();
        string[] msg = new string[2];
        msg[0] = resultValue;
        msg[1] = messageValue;
        return msg;
    }
    /// <summary>
    /// èŽ·å–æ£€éªŒé¡¹ç›®åˆ—è¡¨
    /// </summary>
    /// <param name="releaseNo">检验单号</param>
    /// <param name="id">项目ID</param>
    /// <returns>检验项目列表</returns>
    public List<MesCqItemsDetectDetail5> GetItems(string? releaseNo, decimal? id)
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Queryable<MesCqItemsDetectDetail5, MesCqItemsDetectDetail12>(
                (a, b) => new JoinQueryInfos(JoinType.Left, a.Id == b.MainId))
            .Where((a, b) => a.ReleaseNo == releaseNo)
            .GroupBy((a, b) => new
            {
                a.Id,
                a.ReleaseNo,
                a.FacLevel,
                a.FcheckItem,
                a.FcheckTool,
                a.FdownAllow,
                a.FcheckLevel,
                a.Fstand,
                a.FupAllow,
                a.SampleSizeNo,
                a.FspecRequ,
                a.FreQty,
                a.CheckQyt,
                a.FcheckResu,
                a.FcheckItemDesc,
                a.Funit,
                a.Meom,
                a.FngQty,  // æ·»åŠ ä¸åˆæ ¼æ•°
                a.FacQty   // æ·»åŠ AC数
            }).Select((a, b) => new MesCqItemsDetectDetail5
            {
                Id = a.Id,
                ReleaseNo = a.ReleaseNo,
                CheckQyt = a.CheckQyt,
                FacLevel = a.FacLevel,
                FcheckItem = a.FcheckItem,
                FcheckTool = a.FcheckTool,
                FdownAllow = a.FdownAllow,
                FcheckLevel = a.FcheckLevel,
                Fstand = a.Fstand,
                FupAllow = a.FupAllow,
                SampleSizeNo = a.SampleSizeNo,
                FspecRequ = a.FspecRequ,
                FreQty = a.FreQty,
                Factory = "1000",
                Company = "1000",
                FenterQty = SqlFunc.AggregateCount(b.Id),  // å·²å½•入数量
                FngQty = a.FngQty,  // ä¸åˆæ ¼æ•°ï¼ˆä»Žæ•°æ®åº“读取,由 updateDetail5 æ›´æ–°ï¼‰
                FacQty = a.FacQty,  // AC数
                FcheckResu = a.FcheckResu,
                FcheckItemDesc = a.FspecRequ,
                Funit = a.Funit,
                Meom = a.Meom
            })
            .OrderBy(a => SqlFunc.IIF(a.Fstand != null, 0, 1))
            .OrderBy(a => a.FcheckItem, OrderByType.Desc)
            .ToList();
    }
    /// <summary>
    /// åˆ é™¤è¶…期检验单
    /// </summary>
    /// <param name="releaseNo">检验单号</param>
    /// <returns>影响行数</returns>
    public int RemoveCqj(string? releaseNo)
    {
        var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            var commit = 0;
            // åˆ é™¤ä¸»è¡¨
            commit += db.Deleteable<MesCqItemsDetect01>()
                .Where(s => s.ReleaseNo == releaseNo)
                .ExecuteCommand();
            // åˆ é™¤å­è¡¨
            commit += db.Deleteable<MesCqItemsDetectDetail5>()
                .Where(s => s.ReleaseNo == releaseNo)
                .ExecuteCommand();
            // åˆ é™¤å­™è¡¨
            commit += db.Deleteable<MesCqItemsDetectDetail12>()
                .Where(s => s.ReleaseNo == releaseNo)
                .ExecuteCommand();
            return commit;
        });
        return withOracle;
    }
    /// <summary>
    /// ä¿å­˜ä¸è‰¯æè¿°åˆ°ä¸»è¡¨
    /// </summary>
    /// <param name="gid">主表ID</param>
    /// <param name="releaseNo">检验单号</param>
    /// <param name="fngDesc">不良描述</param>
    /// <returns>影响行数</returns>
    public int SaveRemarksGid(decimal gid, string? releaseNo, string? fngDesc)
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Updateable<MesCqItemsDetect01>()
            .SetColumns(it => new MesCqItemsDetect01
            {
                FngDesc = fngDesc  // ä½¿ç”¨FNG_DESC字段存储不良描述
            })
            .Where(it => it.Id == gid && it.ReleaseNo == releaseNo)
            .ExecuteCommand();
    }
    /// <summary>
    /// ä¿å­˜å¤‡æ³¨åˆ°ä¸»è¡¨
    /// </summary>
    /// <param name="gid">主表ID</param>
    /// <param name="releaseNo">检验单号</param>
    /// <param name="lotNo1">备注内容</param>
    /// <returns>影响行数</returns>
    public int SaveLotNo1(decimal gid, string? releaseNo, string? lotNo1)
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Updateable<MesCqItemsDetect01>()
            .SetColumns(it => new MesCqItemsDetect01
            {
                LotNo1 = lotNo1  // ä½¿ç”¨LOT_NO1字段存储备注
            })
            .Where(it => it.Id == gid && it.ReleaseNo == releaseNo)
            .ExecuteCommand();
    }
    /// <summary>
    /// ä¿å­˜ä¸è‰¯æè¿°åˆ°å­è¡¨
    /// </summary>
    /// <param name="pid">子表ID</param>
    /// <param name="funit">不良描述</param>
    /// <returns>影响行数</returns>
    public int SaveRemarksPid(decimal pid, string? funit)
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Updateable<MesCqItemsDetectDetail5>()
            .SetColumns(it => new MesCqItemsDetectDetail5
            {
                Funit = funit
            })
            .Where(it => it.Id == pid)
            .ExecuteCommand();
    }
    /// <summary>
    /// ä¿å­˜å¤‡æ³¨åˆ°å­è¡¨
    /// </summary>
    /// <param name="pid">子表ID</param>
    /// <param name="meom">备注</param>
    /// <returns>影响行数</returns>
    public int SaveMeom(decimal pid, string? meom)
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Updateable<MesCqItemsDetectDetail5>()
            .SetColumns(it => new MesCqItemsDetectDetail5
            {
                Meom = meom
            })
            .Where(it => it.Id == pid)
            .ExecuteCommand();
    }
    /// <summary>
    /// æ–°å¢žæ£€éªŒè¯¦æƒ…记录(批量)
    /// </summary>
    /// <param name="detail">检验详情对象</param>
    /// <returns>影响行数</returns>
    public int SetQSItemDetail(MesCqItemsDetectDetail12 detail)
    {
        var dbd = SqlSugarHelper.GetInstance();
        var oracle = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            List<MesCqItemsDetectDetail12> result = new();
            for (var i = 0; i < detail.count; i++)
            {
                var item = new MesCqItemsDetectDetail12();
                item.MainId = detail.MainId;
                item.ReleaseNo = detail.ReleaseNo;
                item.Fstand = detail.Fstand;
                item.FcheckResu = detail.FcheckResu;
                item.CreateBy = detail.LastupdateBy;
                item.CreateDate = DateTime.Now;
                item.Factory = "1000";
                item.Company = "1000";
                result.Add(item);
            }
            return db.Insertable(result).ExecuteCommand();
        });
        detail.CreateBy = detail.LastupdateBy;
        updateDetail5(detail);
        autoResult(detail);
        return oracle;
    }
    //更新检验明细已检、不合格数量
    private int updateDetail5(MesCqItemsDetectDetail12 detail)
    {
        var db = SqlSugarHelper.GetInstance();
        //查询这个检验项目下的检验数量
        var count = db.Queryable<MesCqItemsDetectDetail12>()
            .Where(s => s.MainId == detail.MainId).Count();
        //获取不合格数
        var countNo = db.Queryable<MesCqItemsDetectDetail12>()
            .Where(s => s.MainId == detail.MainId && s.Fstand == "×").Count();
        //更新检验明细已检数量
        var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<MesCqItemsDetectDetail5>()
                .SetColumns(s => s.FenterQty == count)
                .SetColumns(s => s.FngQty == countNo)
                .Where(s => s.Id == detail.MainId)
                .ExecuteCommand();
        });
        return withOracle;
    }
    private int autoResult(MesCqItemsDetectDetail12 detail)
    {
        var db = SqlSugarHelper.GetInstance();
        // Single æ²¡æœ‰æŸ¥è¯¢åˆ°ç»“果时返回Null,如果结果大于1条会抛出错误
        var QsItemOqcItem = db.Queryable<MesCqItemsDetectDetail5>()
            .Single(s => s.Id == detail.MainId);
        if (QsItemOqcItem == null) return 0;
        //查询这个检验项目下的检验结果
        var count = db.Queryable<MesCqItemsDetectDetail12>()
            .Where(s => s.MainId == detail.MainId).Count();
        updateDetail5(detail);
        var result = "";
        //检验实际结果不等于应该检验的个数时直接退出
        if (QsItemOqcItem.CheckQyt != count) return 0;
        //合格的有多少个
        var passCount = db.Queryable<MesCqItemsDetectDetail12>()
            .Where(s => s.MainId == detail.MainId && s.Fstand == "√").Count();
        //不合格的有多少个
        var noCount = db.Queryable<MesCqItemsDetectDetail12>()
            .Where(s => s.MainId == detail.MainId && s.Fstand == "×").Count();
        if (count == passCount)
            result = "合格";
        else if (noCount >= QsItemOqcItem.FreQty)
            result = "不合格";
        var useTransactionWithOracle = SqlSugarHelper.UseTransactionWithOracle(
            db =>
            {
                var commit = 0;
                commit += db.Updateable<MesCqItemsDetectDetail5>()
                    .SetColumns(s => s.FcheckResu == result)
                    .SetColumns(s => s.FenterQty == count)
                    .Where(s => s.Id == detail.MainId)
                    .ExecuteCommand();
                return commit;
            });
        return useTransactionWithOracle;
    }
    /// <summary>
    /// èŽ·å–æ£€éªŒè¯¦æƒ…è®°å½•åˆ—è¡¨
    /// </summary>
    /// <param name="id">主检验项目ID</param>
    /// <param name="releaseNo">检验单号</param>
    /// <returns>检验详情列表</returns>
    public List<MesCqItemsDetectDetail12> GetQSItemDetail(decimal id, string? releaseNo)
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Queryable<MesCqItemsDetectDetail12>()
            .Where(x => x.MainId == id && x.ReleaseNo == releaseNo)
            .OrderBy(x => x.CreateDate, OrderByType.Asc)
            .Select(x => new MesCqItemsDetectDetail12
            {
                Id = x.Id,
                MainId = x.MainId,
                ReleaseNo = x.ReleaseNo,
                Fstand = x.Fstand,
                FcheckResu = x.FcheckResu,
                CreateBy = x.CreateBy,
                CreateDate = x.CreateDate,
                LastupdateBy = x.LastupdateBy,
                Factory = x.Factory,
                Company = x.Company
                // ä¸åŒ…含 LastupdateDate å­—段
            })
            .ToList();
    }
    /// <summary>
    /// æ›´æ–°æ£€éªŒè¯¦æƒ…记录
    /// </summary>
    /// <param name="id">详情记录ID</param>
    /// <param name="mainId">主检验项目ID</param>
    /// <param name="releaseNo">检验单号</param>
    /// <param name="fstand">检验标准</param>
    /// <param name="fcheckResu">检验结果</param>
    /// <param name="updateBy">更新人</param>
    /// <returns>影响行数</returns>
    public int UpdateQSItemDetail(decimal id, decimal mainId, string? releaseNo, string? fstand, string? fcheckResu, string? updateBy)
    {
        var db = SqlSugarHelper.GetInstance();
        // å…ˆæ›´æ–°æ£€éªŒè¯¦æƒ…记录
        var updateResult = db.Updateable<MesCqItemsDetectDetail12>()
            .SetColumns(it => new MesCqItemsDetectDetail12
            {
                Fstand = fstand,
                FcheckResu = fcheckResu,
                LastupdateBy = updateBy
                // ä¸è®¾ç½® LastupdateDate,因为数据库中不存在此字段
            })
            .Where(it => it.Id == id && it.MainId == mainId && it.ReleaseNo == releaseNo)
            .ExecuteCommand();
        // æž„造 detail å¯¹è±¡ç”¨äºŽè°ƒç”¨ autoResult
        var detail = new MesCqItemsDetectDetail12
        {
            Id = id,
            MainId = mainId,
            ReleaseNo = releaseNo,
            Fstand = fstand,
            FcheckResu = fcheckResu,
            LastupdateBy = updateBy,
            CreateBy = updateBy
        };
        // æ›´æ–°å·²æ£€æ•°é‡å’Œä¸åˆæ ¼æ•°é‡ï¼ˆåœ¨æ›´æ–°è®°å½•之后执行,确保能查询到最新的 Fstand)
        updateDetail5(detail);
        // è‡ªåŠ¨åˆ¤å®šæ£€éªŒç»“æžœ
        autoResult(detail);
        return updateResult;
    }
    /// <summary>
    /// æ£€éªŒæäº¤
    /// </summary>
    /// <param name="userNo">用户账号</param>
    /// <param name="releaseNo">检验单号</param>
    /// <returns>执行结果</returns>
    public string[] SubmitInspection(string? userNo, string? releaseNo)
    {
        try
        {
            var db = SqlSugarHelper.GetInstance();
            // èŽ·å–æ£€éªŒå•ä¿¡æ¯ï¼ˆåªæŸ¥è¯¢éœ€è¦çš„å­—æ®µï¼Œé¿å…å®žä½“æ˜ å°„é”™è¯¯ï¼‰
            var fngDesc = db.Queryable<MesCqItemsDetect01>()
                .Where(x => x.ReleaseNo == releaseNo)
                .Select(x => x.FngDesc)
                .First();
            // æ£€æŸ¥æ£€éªŒå•是否存在
            var exists = db.Queryable<MesCqItemsDetect01>()
                .Where(x => x.ReleaseNo == releaseNo)
                .Any();
            if (!exists)
            {
                return new[] { "1", "检验单不存在" };
            }
            // å®šä¹‰è¾“出参数
            var outputResult = new SugarParameter("o_Result", null,
                System.Data.DbType.Int32, ParameterDirection.Output, 4000);
            var outputMessage = new SugarParameter("o_Msg", null,
                System.Data.DbType.String, ParameterDirection.Output, 4000);
            // å®šä¹‰è¾“入参数(参数顺序必须与存储过程定义完全一致)
            var parameters = new List<SugarParameter>
            {
                new("PI_FACTORY", "1000", System.Data.DbType.String, ParameterDirection.Input, 50),
                new("PI_COMPANY", "1000", System.Data.DbType.String, ParameterDirection.Input, 50),
                new("p_Release_No", releaseNo ?? "", System.Data.DbType.String, ParameterDirection.Input, 50),
                new("p_badReason", "", System.Data.DbType.String, ParameterDirection.Input, 200),  // ç©ºå­—符串而非NULL
                new("p_iqcStatus", "", System.Data.DbType.String, ParameterDirection.Input, 200),  // ç©ºå­—符串而非NULL
                new("p_workShop", "", System.Data.DbType.String, ParameterDirection.Input, 200),   // ç©ºå­—符串而非NULL
                new("p_remark", fngDesc ?? "", System.Data.DbType.String, ParameterDirection.Input, 4000),  // ä¸è‰¯æè¿°
                new("p_User", userNo ?? "", System.Data.DbType.String, ParameterDirection.Input, 50),
                outputResult,
                outputMessage
            };
            // è°ƒç”¨å­˜å‚¨è¿‡ç¨‹
            db.Ado.ExecuteCommand(
                "BEGIN Prc_Mes_CQJ_Qa_Submit(:PI_FACTORY, :PI_COMPANY, :p_Release_No, :p_badReason, :p_iqcStatus, :p_workShop, :p_remark, :p_User, :o_Result, :o_Msg); END;",
                parameters.ToArray());
            // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
            var resultValue = outputResult.Value?.ToString() ?? "1";
            var messageValue = outputMessage.Value?.ToString() ?? "提交失败";
            return new[] { resultValue, messageValue };
        }
        catch (Exception ex)
        {
            return new[] { "1", $"提交异常:{ex.Message}" };
        }
    }
}
StandardInterface/MESApplication/Controllers/QC/CqjController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,400 @@
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;
using Newtonsoft.Json.Linq;
namespace MESApplication.Controllers.QC;
/// <summary>
/// è¶…期检验控制器
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class CqjController : ControllerBase
{
    /// <summary>
    /// èŽ·å–è¶…æœŸæ£€éªŒåˆ—è¡¨ï¼ˆåˆ†é¡µï¼‰
    /// </summary>
    /// <param name="queryObj">查询参数</param>
    /// <returns>分页数据</returns>
    [HttpPost("getPage")]
    public ResponseResult getPage([FromBody] XJPageResult queryObj)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var (item, totalCount) = new CqjService().GetPage(queryObj);
            resultInfos.tbBillList = item;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos,
                TotalCount = totalCount
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// è°ƒç”¨å­˜å‚¨è¿‡ç¨‹ï¼ŒèŽ·å–æ£€éªŒé¡¹ç›®
    /// </summary>
    /// <param name="data">包含itemNo、quantity、releaseNo</param>
    /// <returns>执行结果</returns>
    [HttpPost("setJYItem")]
    public ResponseResult setJYItem([FromBody] JObject data)
    {
        var itemNo = Convert.ToDecimal(data["itemNo"].ToString());
        var quantity = Convert.ToDecimal(data["quantity"].ToString());
        var releaseNo = data["releaseNo"].ToString();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var result = new CqjService().SetItems(itemNo, quantity, releaseNo);
            resultInfos.tbBillList = result;
            // æ ¹æ®å­˜å‚¨è¿‡ç¨‹è¿”回结果判断是否成功
            var resultCode = result[0];
            var resultMessage = result[1];
            if (resultCode == "0")
            {
                return new ResponseResult
                {
                    status = 0,
                    message = resultMessage,
                    data = resultInfos
                };
            }
            else
            {
                return new ResponseResult
                {
                    status = 1,
                    message = resultMessage,
                    data = resultInfos
                };
            }
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// èŽ·å–æ£€éªŒé¡¹ç›®åˆ—è¡¨
    /// </summary>
    /// <param name="data">包含releaseNo、id</param>
    /// <returns>检验项目列表</returns>
    [HttpPost("getJYItem")]
    public ResponseResult getJYItem([FromBody] JObject data)
    {
        var id = data["id"]?.ToString();
        var releaseNo = data["releaseNo"]?.ToString();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new CqjService().GetItems(releaseNo,
                string.IsNullOrEmpty(id) ? null : Convert.ToDecimal(id));
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// åˆ é™¤è¶…期检验单
    /// </summary>
    /// <param name="data">包含releaseNo</param>
    /// <returns>执行结果</returns>
    [HttpPost("removeCqj")]
    public ResponseResult removeCqj([FromBody] JObject data)
    {
        var releaseNo = data["releaseNo"]?.ToString();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new CqjService().RemoveCqj(releaseNo);
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// ä¿å­˜ä¸è‰¯æè¿°åˆ°ä¸»è¡¨
    /// </summary>
    /// <param name="data">包含gid、releaseNo、fngDesc</param>
    /// <returns>执行结果</returns>
    [HttpPost("saveRemarksGid")]
    public ResponseResult saveRemarksGid([FromBody] JObject data)
    {
        var gid = Convert.ToDecimal(data["gid"].ToString());
        var releaseNo = data["releaseNo"]?.ToString();
        var fngDesc = data["fngDesc"]?.ToString();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new CqjService().SaveRemarksGid(gid, releaseNo, fngDesc);
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// ä¿å­˜å¤‡æ³¨åˆ°ä¸»è¡¨
    /// </summary>
    /// <param name="data">包含gid、releaseNo、lotNo1</param>
    /// <returns>执行结果</returns>
    [HttpPost("saveLotNo1")]
    public ResponseResult saveLotNo1([FromBody] JObject data)
    {
        var gid = Convert.ToDecimal(data["gid"].ToString());
        var releaseNo = data["releaseNo"]?.ToString();
        var lotNo1 = data["lotNo1"]?.ToString();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new CqjService().SaveLotNo1(gid, releaseNo, lotNo1);
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// ä¿å­˜ä¸è‰¯æè¿°åˆ°å­è¡¨
    /// </summary>
    /// <param name="data">包含pid、funit</param>
    /// <returns>执行结果</returns>
    [HttpPost("saveRemarksPid")]
    public ResponseResult saveRemarksPid([FromBody] JObject data)
    {
        var pid = Convert.ToDecimal(data["pid"].ToString());
        var funit = data["funit"]?.ToString();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new CqjService().SaveRemarksPid(pid, funit);
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// ä¿å­˜å¤‡æ³¨åˆ°å­è¡¨
    /// </summary>
    /// <param name="data">包含pid、meom</param>
    /// <returns>执行结果</returns>
    [HttpPost("saveMeom")]
    public ResponseResult saveMeom([FromBody] JObject data)
    {
        var pid = Convert.ToDecimal(data["pid"].ToString());
        var meom = data["meom"]?.ToString();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new CqjService().SaveMeom(pid, meom);
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// æ–°å¢ž/查询检验详情记录
    /// </summary>
    /// <param name="data">包含mainId、releaseNo、fstand、fcheckResu、LastupdateBy、count(新增时)或id、releaseNo(查询时)</param>
    /// <returns>执行结果</returns>
    [HttpPost("SetQSItemDetail")]
    public ResponseResult SetQSItemDetail([FromBody] JObject data)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            // åˆ¤æ–­æ˜¯æ–°å¢žè¿˜æ˜¯æŸ¥è¯¢
            if (data.ContainsKey("fcheckResu") && data["fcheckResu"] != null)
            {
                // æ–°å¢žæ“ä½œ - æŒ‰ç…§LLJ模式,使用对象接收参数
                var detail = new MesCqItemsDetectDetail12
                {
                    MainId = Convert.ToDecimal(data["mainId"].ToString()),
                    ReleaseNo = data["releaseNo"]?.ToString(),
                    Fstand = data["fstand"]?.ToString(),
                    FcheckResu = data["fcheckResu"]?.ToString(),
                    LastupdateBy = data["LastupdateBy"]?.ToString(),  // ä½¿ç”¨LastupdateBy而不createBy
                    count = data.ContainsKey("count") && data["count"] != null
                        ? Convert.ToInt32(data["count"].ToString())
                        : 1  // é»˜è®¤ä¸º1
                };
                var tbBillList = new CqjService().SetQSItemDetail(detail);
                resultInfos.tbBillList = tbBillList;
            }
            else
            {
                // æŸ¥è¯¢æ“ä½œ
                var id = Convert.ToDecimal(data["id"].ToString());
                var releaseNo = data["releaseNo"]?.ToString();
                var tbBillList = new CqjService().GetQSItemDetail(id, releaseNo);
                resultInfos.tbBillList = tbBillList;
            }
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// æ›´æ–°æ£€éªŒè¯¦æƒ…记录
    /// </summary>
    /// <param name="data">包含id、mainId、releaseNo、fstand、fcheckResu、updateBy</param>
    /// <returns>执行结果</returns>
    [HttpPost("UpdateQSItemDetail")]
    public ResponseResult UpdateQSItemDetail([FromBody] JObject data)
    {
        var id = Convert.ToDecimal(data["id"].ToString());
        var mainId = Convert.ToDecimal(data["mainId"].ToString());
        var releaseNo = data["releaseNo"]?.ToString();
        var fstand = data["fstand"]?.ToString();
        var fcheckResu = data["fcheckResu"]?.ToString();
        var updateBy = data["updateBy"]?.ToString();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new CqjService().UpdateQSItemDetail(id, mainId, releaseNo, fstand, fcheckResu, updateBy);
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// æ£€éªŒæäº¤
    /// </summary>
    /// <param name="data">包含userNo、releaseNo</param>
    /// <returns>执行结果</returns>
    [HttpPost("submitInspection")]
    public ResponseResult submitInspection([FromBody] JObject data)
    {
        var userNo = data["userNo"]?.ToString();
        var releaseNo = data["releaseNo"]?.ToString();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var result = new CqjService().SubmitInspection(userNo, releaseNo);
            resultInfos.tbBillList = result;
            // æ ¹æ®å­˜å‚¨è¿‡ç¨‹è¿”回结果判断是否成功
            var resultCode = result[0];
            var resultMessage = result[1];
            if (resultCode == "0")
            {
                return new ResponseResult
                {
                    status = 0,
                    message = resultMessage,
                    data = resultInfos
                };
            }
            else
            {
                return new ResponseResult
                {
                    status = 1,
                    message = resultMessage,
                    data = resultInfos
                };
            }
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// å¤„理OPTIONS请求(用于跨域预检)
    /// </summary>
    [HttpOptions("{**any}")]
    public IActionResult HandleOptions()
    {
        return Ok();
    }
}
StandardInterface/MESApplication/appsettings.json
@@ -10,6 +10,6 @@
  "AppSettings": {
    "TestErpUrl": "http://192.168.11.120:8098/WebService1.asmx/mesToErpinfo",
    "ProductionErpUrl": "http://192.168.11.120:8098/WebService1.asmx/mesToErpinfoFormal",
    "DataBaseConn": "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.22)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = hm_prd; Password=hmprd"
    "DataBaseConn": "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.22)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = test_dev; Password=hmprd"
  }
}