tjx
2025-12-04 662c8acd89bdcbbd92d1b917d6128cbcce0134d7
三个检验增加钉钉推送
已修改3个文件
已添加3个文件
1121 ■■■■■ 文件已修改
MES.Service/Modes/QaRkj.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/QaSj.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/QaXj.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/QC/RKJService.cs 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/QC/SJService.cs 672 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/QC/XJService.cs 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/QaRkj.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
/// QA_RKJ æ£€éªŒè§†å›¾å®žä½“
/// </summary>
[SugarTable("QA_RKJ")]
public class QaRkj
{
    /// <summary>
    /// ID
    /// </summary>
    [SugarColumn(ColumnName = "ID")]
    public int Id { get; set; }
    /// <summary>
    /// å‘布单号
    /// </summary>
    [SugarColumn(ColumnName = "RELEASE_NO")]
    public string? ReleaseNo { 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 = "DAA020")]
    public string? Daa020 { get; set; }
    /// <summary>
    /// éƒ¨é—¨åç§°
    /// </summary>
    [SugarColumn(ColumnName = "DEPARTMENTNAME")]
    public string? Departmentname { get; set; }
    /// <summary>
    /// æäº¤äºº
    /// </summary>
    [SugarColumn(ColumnName = "FSUBMIT")]
    public string? Fsubmit { get; set; }
    /// <summary>
    /// ç”Ÿäº§è®¢å•号
    /// </summary>
    [SugarColumn(ColumnName = "DAA001")]
    public int? Daa001 { get; set; }
    /// <summary>
    /// æ£€éªŒç»“æžœ
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_RESU")]
    public string? FcheckResu { get; set; }
}
MES.Service/Modes/QaSj.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
/// QA_SJ æ£€éªŒè§†å›¾å®žä½“
/// </summary>
[SugarTable("QA_SJ")]
public class QaSj
{
    /// <summary>
    /// ID
    /// </summary>
    [SugarColumn(IsPrimaryKey = true, ColumnName = "ID")]
    public int Id { get; set; }
    /// <summary>
    /// å•据编号
    /// </summary>
    [SugarColumn(ColumnName = "BILL_NO")]
    public string? BillNo { 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 = "LINE_NAME")]
    public string? LineName { get; set; }
    /// <summary>
    /// è½¦é—´åç§°
    /// </summary>
    [SugarColumn(ColumnName = "WORKSHOP_NAME")]
    public string? WorkshopName { get; set; }
    /// <summary>
    /// æäº¤äºº
    /// </summary>
    [SugarColumn(ColumnName = "FSUBMIT")]
    public string? Fsubmit { get; set; }
    /// <summary>
    /// ç”Ÿäº§è®¢å•号
    /// </summary>
    [SugarColumn(ColumnName = "DAA001")]
    public int? Daa001 { get; set; }
    /// <summary>
    /// æ£€éªŒç»“æžœ
    /// </summary>
    [SugarColumn(ColumnName = "JYJG")]
    public string? Jyjg { get; set; }
}
MES.Service/Modes/QaXj.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
/// QA_XJ æ£€éªŒè§†å›¾å®žä½“
/// </summary>
[SugarTable("QA_XJ")]
public class QaXj
{
    /// <summary>
    /// ID
    /// </summary>
    [SugarColumn(ColumnName = "ID")]
    public int Id { get; set; }
    /// <summary>
    /// å‘布单号
    /// </summary>
    [SugarColumn(ColumnName = "RELEASE_NO")]
    public string? ReleaseNo { 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 = "LINE_NAME")]
    public string? LineName { get; set; }
    /// <summary>
    /// éƒ¨é—¨åç§°
    /// </summary>
    [SugarColumn(ColumnName = "DEPARTMENTNAME")]
    public string? Departmentname { get; set; }
    /// <summary>
    /// æäº¤äºº
    /// </summary>
    [SugarColumn(ColumnName = "FSUBMIT")]
    public string? Fsubmit { get; set; }
    /// <summary>
    /// ç”Ÿäº§è®¢å•号
    /// </summary>
    [SugarColumn(ColumnName = "DAA001")]
    public int? Daa001 { get; set; }
    /// <summary>
    /// æ£€éªŒç»“æžœ
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_RESU")]
    public string? FcheckResu { get; set; }
}
MES.Service/service/QC/RKJService.cs
@@ -87,7 +87,7 @@
        decimal? ID = db.Queryable<MesQa>()
            .Where(s => s.QsType == "3" && s.ItemNo == itemNo && s.Fsubmit == 1)
            .Select(s=> s.Id)
            .Select(s => s.Id)
            .First();
        // èŽ·å–è´¨é‡æ ‡å‡†
@@ -528,16 +528,19 @@
        var query = db
            .Queryable<QsItemOqcReq, MesItems, Womdaa, MesLine, SysUser, Womcaa, SysDepartment,MesUserDepartmentQc, SysUser>((a, b,
            .Queryable<QsItemOqcReq, MesItems, Womdaa, MesLine, SysUser, Womcaa,
                SysDepartment, MesUserDepartmentQc, SysUser>((a, b,
                    da, c, us, ca, d, dq, us2) =>
                new JoinQueryInfos(
                    JoinType.Left, a.ItemNo == b.ItemNo, // å…³è”物料信息
                    JoinType.Left, a.BillNo == da.Daa001, // å…³è”工单信息
                    JoinType.Left, da.Daa015 == c.LineNo, // å…³è”工单信息
                    JoinType.Left, us.Fcode == a.CreateBy, // å…³è”工单信息
                    JoinType.Left, da.Daa021 == ca.Caa020,//任务单,用于查询销售订单号
                    JoinType.Left, d.Departmentid == Convert.ToDecimal(da.Daa013),//查询车间
                    JoinType.Left, dq.Departmentcode == d.Departmentcode,//查询用户权限
                    JoinType.Left, da.Daa021 == ca.Caa020, //任务单,用于查询销售订单号
                    JoinType.Left,
                    d.Departmentid == Convert.ToDecimal(da.Daa013), //查询车间
                    JoinType.Left,
                    dq.Departmentcode == d.Departmentcode, //查询用户权限
                    JoinType.Left, us2.Fcode == a.FcheckBy
                ))
            // ç”¨æˆ·çº¿ä½“过滤条件
@@ -553,7 +556,7 @@
                (a, b, da, c, us) => a.Fsubmit == 1)
            // æœç´¢æ¡ä»¶ï¼ˆç‰©æ–™åç§°/编号)
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue),
                (a, b, da, c, us,ca) =>
                (a, b, da, c, us, ca) =>
                    b.ItemName.ToLower()
                        .Contains(queryObj.SearchValue.ToLower()) ||
                    ca.Caa015.ToLower()
@@ -561,9 +564,10 @@
                    a.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
            // æ–°å¢žï¼šç”¨æˆ·code过滤
            .WhereIF(!string.IsNullOrEmpty(queryObj.LoginUser),
                (a, b, da, c, us, ca, d, dq) => dq.Usercode == queryObj.LoginUser)
                (a, b, da, c, us, ca, d, dq) =>
                    dq.Usercode == queryObj.LoginUser)
            // æŸ¥è¯¢å­—段
            .Select((a, b, da, c, us, ca,d,dq,us2) => new QsItemOqcReq
            .Select((a, b, da, c, us, ca, d, dq, us2) => new QsItemOqcReq
            {
                Id = a.Id,
                BillNo = a.BillNo,
@@ -572,13 +576,14 @@
                ItemModel = b.ItemModel,
                CreateDate = a.CreateDate,
                CreateBy = a.CreateBy,
                CreateUser = us.Fname==null ? a.CreateBy: us.Fname,
                CreateUser = us.Fname == null ? a.CreateBy : us.Fname,
                FcheckResu = a.FcheckResu,
                FcheckBy = us2.Fname,//a.FcheckBy,
                FcheckBy = us2.Fname, //a.FcheckBy,
                FcheckDate = a.FcheckDate,
                ReleaseNo = a.ReleaseNo,
                Remarks = a.Remarks,
                Daa015 = d.Departmentname=="注塑车间" ? da.Daa020:da.Daa015, // å·¥å•线体
                Daa015 =
                    d.Departmentname == "注塑车间" ? da.Daa020 : da.Daa015, // å·¥å•线体
                Fsubmit = a.Fsubmit,
                Quantity = da.Daa008,
                LineNo = d.Departmentname == "注塑车间" ? da.Daa020 : c.LineName,
@@ -909,17 +914,52 @@
    public int IqcQaSubmit(RKJDto dto)
    {
        SqlSugarHelper.UseTransactionWithOracle(db =>
        {
           return db.Updateable<QsItemOqcReq>()
                .SetColumns(a => a.Fsubmit == 1)
                .SetColumns(a => a.FsubmitBy == dto.userNo)
                .SetColumns(a => a.FsubmitDate == DateTime.Now)
                .Where(a => a.ReleaseNo == dto.releaseNo)
                .ExecuteCommand();
        });
        var useTransactionWithOracle =
            SqlSugarHelper.UseTransactionWithOracle(db =>
            {
                return db.Updateable<QsItemOqcReq>()
                    .SetColumns(a => a.Fsubmit == 1)
                    .SetColumns(a => a.FsubmitBy == dto.userNo)
                    .SetColumns(a => a.FsubmitDate == DateTime.Now)
                    .Where(a => a.ReleaseNo == dto.releaseNo)
                    .ExecuteCommand();
            });
        return 0;
        if (useTransactionWithOracle > 0)
        {
            var db = SqlSugarHelper.GetInstance();
            // æˆåŠŸæäº¤åŽæŽ¨é€é’‰é’‰æ¶ˆæ¯
            var qaRkj = db.Queryable<QaRkj>()
                .Where(s => s.ReleaseNo == dto.releaseNo)
                .First();
            if (qaRkj != null)
            {
                try
                {
                    var qaMsgDto = new
                    {
                        id = qaRkj.Id,
                        lineName = qaRkj.Daa020,
                        workshopName = qaRkj.Departmentname,
                        qaType = "入库检检验完成"
                    };
                    // è°ƒç”¨é’‰é’‰æ¶ˆæ¯æŽ¨é€æŽ¥å£
                    var client = new System.Net.Http.HttpClient();
                    var json = Newtonsoft.Json.JsonConvert.SerializeObject(qaMsgDto);
                    var content = new System.Net.Http.StringContent(json, System.Text.Encoding.UTF8, "application/json");
                    var response = client.PostAsync("http://192.168.0.100:9096/MesQaDingtalk/sendQaMsgRKJ", content).Result;
                }
                catch (Exception ex)
                {
                    // è®°å½•钉钉推送异常,但不影响主流程
                    Console.WriteLine($"钉钉消息推送失败: {ex.Message}");
                }
            }
        }
        return useTransactionWithOracle;
    }
    public int reSubmit(RKJDto dto)
@@ -927,11 +967,11 @@
        SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsItemOqcReq>()
                 .SetColumns(a => a.Fsubmit == 0)
                 .SetColumns(a => a.FsubmitBy == null)
                 .SetColumns(a => a.FsubmitDate == null)
                 .Where(a => a.ReleaseNo == dto.releaseNo)
                 .ExecuteCommand();
                .SetColumns(a => a.Fsubmit == 0)
                .SetColumns(a => a.FsubmitBy == null)
                .SetColumns(a => a.FsubmitDate == null)
                .Where(a => a.ReleaseNo == dto.releaseNo)
                .ExecuteCommand();
        });
        return 0;
MES.Service/service/QC/SJService.cs
@@ -48,7 +48,8 @@
    }
    //获取所有数据分页
    public (List<SJPageResult> items, int totalCount) getPage(SJPageResult queryObj)
    public (List<SJPageResult> items, int totalCount) getPage(
        SJPageResult queryObj)
    {
        var db = SqlSugarHelper.GetInstance();
@@ -59,14 +60,19 @@
        //if (StringUtil.IsNotNullOrEmpty(queryObj.StatusUser))
        //    lineNo = _baseService.getUserLineNo(queryObj.StatusUser);
        var data = db.Queryable<SJPageResult, Womdaa, Womcaa, SysDepartment, MesUserDepartmentQc,MesItems> ((a,
                    da,ca,d,dq,i) =>
        var data = db
            .Queryable<SJPageResult, Womdaa, Womcaa, SysDepartment,
                MesUserDepartmentQc, MesItems>((a,
                    da, ca, d, dq, i) =>
                new JoinQueryInfos(
                    JoinType.Left, Convert.ToDecimal(a.Pbaid) == da.Id, // å…³è”工单信息
                    JoinType.Left, da.Daa021 == ca.Caa020,//任务单,用于查询销售订单号
                    JoinType.Left, d.Departmentid == Convert.ToDecimal(da.Daa013),//查询车间
                    JoinType.Left, dq.Departmentcode == d.Departmentcode,//查询用户权限
                    JoinType.Left, i.Id == Convert.ToDecimal(da.Daa002)//查询用户权限
                    JoinType.Left,
                    Convert.ToDecimal(a.Pbaid) == da.Id, // å…³è”工单信息
                    JoinType.Left, da.Daa021 == ca.Caa020, //任务单,用于查询销售订单号
                    JoinType.Left,
                    d.Departmentid == Convert.ToDecimal(da.Daa013), //查询车间
                    JoinType.Left,
                    dq.Departmentcode == d.Departmentcode, //查询用户权限
                    JoinType.Left, i.Id == Convert.ToDecimal(da.Daa002) //查询用户权限
                ))
            //.WhereIF(lineNo != null && lineNo.Length > 0,
            //    a => lineNo.Contains(a.line))
@@ -86,11 +92,14 @@
                (a, da, ca, d, dq) => dq.Usercode == queryObj.LoginUser)
            //匹配搜索字符串
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue),
                (a, da, ca, d, dq,i) =>
                a.BillNo.ToLower().Contains(queryObj.SearchValue.ToLower())||
                i.ItemName.ToLower() .Contains(queryObj.SearchValue.ToLower()) ||
                ca.Caa015.ToLower().Contains(queryObj.SearchValue.ToLower()) ||
                i.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
                (a, da, ca, d, dq, i) =>
                    a.BillNo.ToLower()
                        .Contains(queryObj.SearchValue.ToLower()) ||
                    i.ItemName.ToLower()
                        .Contains(queryObj.SearchValue.ToLower()) ||
                    ca.Caa015.ToLower()
                        .Contains(queryObj.SearchValue.ToLower()) ||
                    i.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .Select((a, da, ca, d, dq) => new SJPageResult
            {
                Id = a.Id,
@@ -120,7 +129,8 @@
                PlanName = a.PlanName
            })
            .OrderBy(a => a.CreateTime, OrderByType.Desc);
        var items = data.ToPageList(queryObj.PageIndex, queryObj.Limit,ref totalCount);
        var items = data.ToPageList(queryObj.PageIndex, queryObj.Limit,
            ref totalCount);
        return (items, totalCount);
    }
@@ -154,66 +164,66 @@
    //                 result = "未检测"
    //             }).ToList();
    // }
    public List<QsItemIpiItem> SetQSItems(string itemNo,string planName)
    public List<QsItemIpiItem> SetQSItems(string itemNo, string planName)
    {
        var db = SqlSugarHelper.GetInstance();
        var count = db.Queryable<MesQa>().Where(s => s.QsType == "1"
            && s.ItemNo == itemNo &&s.QaPlan == planName && s.Fsubmit == 1).Count();
                && s.ItemNo == itemNo && s.QaPlan == planName && s.Fsubmit == 1)
            .Count();
        if (count <= 0) return [];
        //新增根据计划名称查询ID
        decimal? QsId = db.Queryable<MesQa>()
                            .Where(s => s.QsType == "1"
                                && s.ItemNo == itemNo
                                && s.QaPlan == planName
                                && s.Fsubmit == 1)
                            .Select(s => s.Id)
                            .First();
            .Where(s => s.QsType == "1"
                        && s.ItemNo == itemNo
                        && s.QaPlan == planName
                        && s.Fsubmit == 1)
            .Select(s => s.Id)
            .First();
        return db //根据主表ID查询
        .Queryable<MesQualityStandard>()
            .Where(b => b.Pid == QsId).Select(
                b => new QsItemIpiItem
                {
                    ProjName = b.ProjName,
                    ItemMod = b.ItemMod,
                    InspectionMethod = b.InspectionMethod,
                    UsingInstruments = b.UsingInstruments,
                    LevelNum = SqlFunc.IsNull(
                        SqlFunc.IsNull(b.LevelNum * b.InspectionLevel, 1),
                        b.InspectionLevel),
                    MaxValue = b.MaxValue,
                    StandardValue = b.StandardValue,
                    MinValue = b.MinValue,
                    Notes = b.Notes,
                    FcheckLevel = b.FcheckLevel,
                    FacLevel = b.FacLevel,
                    QsCode = b.QsCode,
                    QsName = b.QsName,
                    Picture = b.Picture,
                    Picturename = b.Picturename,
                    result = "未检测",
                    isCheck = 0
                }).ToList();
            .Queryable<MesQualityStandard>()
            .Where(b => b.Pid == QsId).Select(b => new QsItemIpiItem
            {
                ProjName = b.ProjName,
                ItemMod = b.ItemMod,
                InspectionMethod = b.InspectionMethod,
                UsingInstruments = b.UsingInstruments,
                LevelNum = SqlFunc.IsNull(
                    SqlFunc.IsNull(b.LevelNum * b.InspectionLevel, 1),
                    b.InspectionLevel),
                MaxValue = b.MaxValue,
                StandardValue = b.StandardValue,
                MinValue = b.MinValue,
                Notes = b.Notes,
                FcheckLevel = b.FcheckLevel,
                FacLevel = b.FacLevel,
                QsCode = b.QsCode,
                QsName = b.QsName,
                Picture = b.Picture,
                Picturename = b.Picturename,
                result = "未检测",
                isCheck = 0
            }).ToList();
    }
    public List<SJBadReason>? GetReason(string billNo)//纠正措施单获取不良信息
    public List<SJBadReason>? GetReason(string billNo) //纠正措施单获取不良信息
    {
        var db = SqlSugarHelper.GetInstance();
        var count = db.Queryable<SJBadReason>().Where(s => s.BillNo == billNo).Count();
        var count = db.Queryable<SJBadReason>().Where(s => s.BillNo == billNo)
            .Count();
        if (count <= 0) return null;
        var reason = db
            .Queryable<SJBadReason>()
            .Where(s => s.BillNo == billNo).Select(
                b => new SJBadReason
                {
                     Reason =b.Reason
                }).ToList();
            .Where(s => s.BillNo == billNo).Select(b => new SJBadReason
            {
                Reason = b.Reason
            }).ToList();
        return reason;
    }
@@ -221,10 +231,13 @@
    public List<QsItemIpiItem> getQSItems(decimal? pid, decimal? id)
    {
        var db = SqlSugarHelper.GetInstance();
        var qsItemIpiItems = db.Queryable<QsItemIpiItem>().WhereIF(pid > 0, a => a.Pid == pid).WhereIF(id > 0, a => a.Id == id).ToList();
        var qsItemIpiItems = db.Queryable<QsItemIpiItem>()
            .WhereIF(pid > 0, a => a.Pid == pid)
            .WhereIF(id > 0, a => a.Id == id).ToList();
        var array = qsItemIpiItems.Select(s => s.Id).ToArray();
        var qsItemIpiItemDetails = db.Queryable<QsItemIpiItemDetail>().Where(s => array.Contains(s.Pid)).GroupBy(s => s.Pid)
        var qsItemIpiItemDetails = db.Queryable<QsItemIpiItemDetail>()
            .Where(s => array.Contains(s.Pid)).GroupBy(s => s.Pid)
            .Select(s => new
            {
                s.Pid,
@@ -252,7 +265,8 @@
        });
        //使用linq表达式过滤出图片id不为空的数据
        var itemIpiItems =qsItemIpiItems.Where(s => s.Picture is { Length: > 0 }).ToList();
        var itemIpiItems = qsItemIpiItems
            .Where(s => s.Picture is { Length: > 0 }).ToList();
        if (itemIpiItems.Count > 0)
            itemIpiItems.ForEach(s =>
            {
@@ -271,19 +285,18 @@
    {
        var qsItemIpiReq = item.From;
        var qsItemIpiItems = item.Items;
        SqlSugarHelper.UseTransactionWithOracle(
            db =>
            {
                qsItemIpiReq.StatusDate = DateTime.Now;
                var pid = db.Insertable(qsItemIpiReq).ExecuteReturnIdentity();
                qsItemIpiReq.Id = pid;
        SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            qsItemIpiReq.StatusDate = DateTime.Now;
            var pid = db.Insertable(qsItemIpiReq).ExecuteReturnIdentity();
            qsItemIpiReq.Id = pid;
                item.gid = pid;
            item.gid = pid;
                qsItemIpiItems.ForEach(s => s.Pid = pid);
            qsItemIpiItems.ForEach(s => s.Pid = pid);
                return db.Insertable(qsItemIpiItems).ExecuteCommand();
            });
            return db.Insertable(qsItemIpiItems).ExecuteCommand();
        });
        item.Items = getQSItems(qsItemIpiReq.Id, null);
        //没有上下限的检验项目自动盘点为合格
@@ -314,7 +327,7 @@
        var db = SqlSugarHelper.GetInstance();
        var del = db.Deleteable<QsItemIpiItem>()
            .Where(s=>s.Pid == item.gid)
            .Where(s => s.Pid == item.gid)
            .ExecuteCommand();
        //QsItemIpiItemDetail
@@ -324,25 +337,22 @@
        var qsItemIpiItems = item.Items;
        SqlSugarHelper.UseTransactionWithOracle(
            db =>
            {
                // 1. è®¾ç½®çˆ¶çº§ID
                qsItemIpiItems.ForEach(s => s.Pid = item.gid);
        SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            // 1. è®¾ç½®çˆ¶çº§ID
            qsItemIpiItems.ForEach(s => s.Pid = item.gid);
                // 2. æ’å…¥
                db.Insertable(qsItemIpiItems).ExecuteCommand();
            // 2. æ’å…¥
            db.Insertable(qsItemIpiItems).ExecuteCommand();
                // 3. é‡æ–°ä»Žæ•°æ®åº“查询插入后的记录(按 pid æŸ¥è¯¢ï¼‰ é˜²æ­¢æ£€éªŒç»“果更新到旧项目上
                qsItemIpiItems = db.Queryable<QsItemIpiItem>()
                                    .Where(x => x.Pid == item.gid)
                                    .ToList();
            // 3. é‡æ–°ä»Žæ•°æ®åº“查询插入后的记录(按 pid æŸ¥è¯¢ï¼‰ é˜²æ­¢æ£€éªŒç»“果更新到旧项目上
            qsItemIpiItems = db.Queryable<QsItemIpiItem>()
                .Where(x => x.Pid == item.gid)
                .ToList();
                // âœ… è¿”回值不重要,只要保证事务提交即可
                return 1;
            });
            // âœ… è¿”回值不重要,只要保证事务提交即可
            return 1;
        });
        //item.Items = getQSItems(item.gid, null);
@@ -350,10 +360,12 @@
        //没有上下限的检验项目自动盘点为合格
        qsItemIpiItems.ForEach(s =>
        {
            if (s.MaxValue != null || s.StandardValue != null || s.MinValue != null)
            if (s.MaxValue != null || s.StandardValue != null ||
                s.MinValue != null)
            {
                return;
            }
            var detail = new QsItemIpiItemDetail();
            detail.Pid = s.Id;
            detail.Gid = item.gid;
@@ -369,32 +381,34 @@
        return item;
    }
    public decimal SavePlan(decimal pid,string PlanName)
    public decimal SavePlan(decimal pid, string PlanName)
    {
        var db = SqlSugarHelper.GetInstance();
        var res = db.Updateable<QsItemIpiReq>()
                          .SetColumns(a => a.QaPlan == PlanName)
                          .Where(a => a.Id == pid)
                          .ExecuteCommand();
            .SetColumns(a => a.QaPlan == PlanName)
            .Where(a => a.Id == pid)
            .ExecuteCommand();
        return res;
    }
        public List<string?> GetItemProj(string? itemNo)
    { //获取物料所有的检验计划名称
    public List<string?> GetItemProj(string? itemNo)
    {
        //获取物料所有的检验计划名称
        var db = SqlSugarHelper.GetInstance();
        var plans = db.Queryable<MesQa>().Where(a => a.ItemNo == itemNo && a.QsType == "1")
                                .Select(s => s.QaPlan)
                                .Distinct()
                                .ToList();
        var plans = db.Queryable<MesQa>()
            .Where(a => a.ItemNo == itemNo && a.QsType == "1")
            .Select(s => s.QaPlan)
            .Distinct()
            .ToList();
        return plans;
    }
    public (decimal?,string?, string?) CreateNew(string? DaaNo,string? userNo,string? planName)
    public (decimal?, string?, string?) CreateNew(string? DaaNo, string? userNo,
        string? planName)
    {
        var db = SqlSugarHelper.GetInstance();
        // åˆ›å»ºå‚æ•°
@@ -403,12 +417,13 @@
        var FplanName = new SugarParameter("P_PLAN_NAME", planName);
        var FRes = new SugarParameter("po_result", null, true);            // è¾“出参数
        var FRes = new SugarParameter("po_result", null, true); // è¾“出参数
        var FMsg = new SugarParameter("po_Message", null, true);
        var FBillNo = new SugarParameter("po_BILL_NO", null, true);
        // æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
        db.Ado.UseStoredProcedure().GetDataTable("PRC_PQC_ITEM_INSERT_JK", FitemNo, FuserNo, FplanName, FRes, FMsg, FBillNo);
        db.Ado.UseStoredProcedure().GetDataTable("PRC_PQC_ITEM_INSERT_JK",
            FitemNo, FuserNo, FplanName, FRes, FMsg, FBillNo);
        // èŽ·å–è¾“å‡ºç»“æžœ
        var Res = Convert.ToInt32(FRes.Value);
@@ -417,7 +432,7 @@
        Console.WriteLine($"结果: {Res}, è¿”回消息: {Msg},单据号:{BillNo}");
        return (Res,Msg, BillNo);
        return (Res, Msg, BillNo);
    }
    public int SetQSItemDetail(QsItemIpiItemDetail detail)
@@ -436,6 +451,7 @@
                item.CreateDate = DateTime.Now;
                result.Add(item);
            }
            return db.Insertable(result).ExecuteCommand();
        });
@@ -480,8 +496,8 @@
        if (count == passCount) result = 1;
        var useTransactionWithOracle = SqlSugarHelper.UseTransactionWithOracle(
            db =>
        var useTransactionWithOracle =
            SqlSugarHelper.UseTransactionWithOracle(db =>
            {
                var commit = 0;
                commit += db.Updateable<QsItemIpiItem>()
@@ -552,14 +568,15 @@
        var db = SqlSugarHelper.GetInstance();
        // åˆ›å»ºå‚æ•°
        var FId= new SugarParameter("P_ID", detail.Gid);
        var FId = new SugarParameter("P_ID", detail.Gid);
        // è¾“出参数
        var FRes = new SugarParameter("c_result", null, true);
        var FMsg = new SugarParameter("c_msg", null, true);
        // æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
        db.Ado.UseStoredProcedure().GetDataTable("PRC_SJ_UPDATE_RESU", FId, FRes, FMsg);
        db.Ado.UseStoredProcedure()
            .GetDataTable("PRC_SJ_UPDATE_RESU", FId, FRes, FMsg);
        // èŽ·å–è¾“å‡ºç»“æžœ
        var Res = Convert.ToInt32(FRes.Value);
@@ -610,15 +627,16 @@
                .ExecuteCommand();
        });
    }
    //NOTES
    public int saveNotesPid(QsItem dto)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsItemIpiItem>()
                .SetColumns(it =>it.Notes == dto.Remarks) //SetColumns是可以叠加的 å†™2个就2个字段赋值
                .SetColumns(it =>
                    it.Notes == dto.Remarks) //SetColumns是可以叠加的 å†™2个就2个字段赋值
                .Where(it => it.Id == dto.pid)
                .ExecuteCommand();
        });
@@ -630,7 +648,8 @@
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsItemIpiItemDetail>()
                .SetColumns(it =>it.Remarks == dto.Remarks) //SetColumns是可以叠加的 å†™2个就2个字段赋值
                .SetColumns(it =>
                    it.Remarks == dto.Remarks) //SetColumns是可以叠加的 å†™2个就2个字段赋值
                .Where(it => it.Id == dto.id)
                .ExecuteCommand();
        });
@@ -659,7 +678,6 @@
    public bool SJQaSubmit(QsItem item)
    {
        if (item == null)
            throw new ArgumentNullException(nameof(item), "质检项数据不能为空");
@@ -670,21 +688,23 @@
        try
        {
            // å®šä¹‰è¾“出参数
            var outputResult = new SugarParameter("o_Result", null, DbType.Int32, ParameterDirection.Output,
            var outputResult = new SugarParameter("o_Result", null,
                DbType.Int32, ParameterDirection.Output,
                4000);
            var outputMessage = new SugarParameter("o_Msg", null, DbType.String, ParameterDirection.Output, 4000);
            var outputMessage = new SugarParameter("o_Msg", null, DbType.String,
                ParameterDirection.Output, 4000);
            // å®šä¹‰è¾“入参数
            var parameters = new List<SugarParameter>
         {
             new("p_Id", item.gid, DbType.Int32,ParameterDirection.Input),
             new("p_Flag", 1, DbType.Int32,ParameterDirection.Input),
             new("p_User", item.userNo, DbType.String, ParameterDirection.Input),
             outputResult,
             outputMessage
         };
            {
                new("p_Id", item.gid, DbType.Int32, ParameterDirection.Input),
                new("p_Flag", 1, DbType.Int32, ParameterDirection.Input),
                new("p_User", item.userNo, DbType.String,
                    ParameterDirection.Input),
                outputResult,
                outputMessage
            };
            var db = SqlSugarHelper.GetInstance();
@@ -697,8 +717,51 @@
            var resultValue = outputResult.Value?.ToString();
            var messageValue = outputMessage.Value?.ToString();
            if ("1".Equals(resultValue)) { throw new Exception(messageValue); }
            if ("0".Equals(resultValue)) { throw new Exception(messageValue); }
            if ("1".Equals(resultValue))
            {
                throw new Exception(messageValue);
            }
            if ("0".Equals(resultValue))
            {
                // æˆåŠŸæäº¤åŽæŽ¨é€é’‰é’‰æ¶ˆæ¯
                var qaSjSuccess = db.Queryable<QaSj>()
                    .Where(s => s.Id == item.gid)
                    .First();
                if (qaSjSuccess != null)
                {
                    try
                    {
                        var qaMsgDto = new
                        {
                            id = qaSjSuccess.Id,
                            lineName = qaSjSuccess.LineName,
                            workshopName = qaSjSuccess.WorkshopName,
                            qaType = "首件首检完成"
                        };
                        // è°ƒç”¨é’‰é’‰æ¶ˆæ¯æŽ¨é€æŽ¥å£
                        var client = new System.Net.Http.HttpClient();
                        var json =
                            Newtonsoft.Json.JsonConvert.SerializeObject(
                                qaMsgDto);
                        var content = new System.Net.Http.StringContent(json,
                            System.Text.Encoding.UTF8, "application/json");
                        var response = client
                            .PostAsync(
                                "http://192.168.0.100:9096/MesQaDingtalk/sendQaMsgSJ",
                                content).Result;
                    }
                    catch (Exception ex)
                    {
                        // è®°å½•钉钉推送异常,但不影响主流程
                        Console.WriteLine($"钉钉消息推送失败: {ex.Message}");
                    }
                }
                throw new Exception(messageValue);
            }
            return true;
        }
@@ -710,7 +773,6 @@
    public bool SJQaReSubmit(QsItem item)
    {
        if (item == null)
            throw new ArgumentNullException(nameof(item), "质检项数据不能为空");
@@ -721,21 +783,23 @@
        try
        {
            // å®šä¹‰è¾“出参数
            var outputResult = new SugarParameter("o_Result", null, DbType.Int32, ParameterDirection.Output,
            var outputResult = new SugarParameter("o_Result", null,
                DbType.Int32, ParameterDirection.Output,
                4000);
            var outputMessage = new SugarParameter("o_Msg", null, DbType.String, ParameterDirection.Output, 4000);
            var outputMessage = new SugarParameter("o_Msg", null, DbType.String,
                ParameterDirection.Output, 4000);
            // å®šä¹‰è¾“入参数
            var parameters = new List<SugarParameter>
         {
             new("p_Id", item.gid, DbType.Int32,ParameterDirection.Input),
             new("p_Flag", 2, DbType.Int32,ParameterDirection.Input),
             new("p_User", item.userNo, DbType.String, ParameterDirection.Input),
             outputResult,
             outputMessage
         };
            {
                new("p_Id", item.gid, DbType.Int32, ParameterDirection.Input),
                new("p_Flag", 2, DbType.Int32, ParameterDirection.Input),
                new("p_User", item.userNo, DbType.String,
                    ParameterDirection.Input),
                outputResult,
                outputMessage
            };
            var db = SqlSugarHelper.GetInstance();
@@ -748,8 +812,15 @@
            var resultValue = outputResult.Value?.ToString();
            var messageValue = outputMessage.Value?.ToString();
            if ("1".Equals(resultValue)) { throw new Exception(messageValue); }
            if ("0".Equals(resultValue)) { throw new Exception(messageValue); }
            if ("1".Equals(resultValue))
            {
                throw new Exception(messageValue);
            }
            if ("0".Equals(resultValue))
            {
                throw new Exception(messageValue);
            }
            return true;
        }
@@ -783,8 +854,6 @@
                .Where(s => s.Id == id)
                .ExecuteCommand();
        });
    }
    /// <summary>
@@ -795,13 +864,13 @@
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Queryable<DingDept>()
                .Where(b => b.NoChild== 1)
                .Select(b => new DingDept
                {
                    Id=b.Id,
                    Name=b.Name
                })
                .ToList();
            .Where(b => b.NoChild == 1)
            .Select(b => new DingDept
            {
                Id = b.Id,
                Name = b.Name
            })
            .ToList();
    }
    public List<DeptNode> BuildDeptTree()
@@ -844,14 +913,13 @@
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Queryable<DingStaff>()
                .Select(b => new DingStaff
                {
                        StaffName=b.StaffName,
                        Id=b .Id
                })
                .ToList();
            .Select(b => new DingStaff
            {
                StaffName = b.StaffName,
                Id = b.Id
            })
            .ToList();
    }
    /// <summary>
@@ -860,7 +928,8 @@
    /// <returns></returns>
    public static AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client CreateClient()
    {
        AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();
        AlibabaCloud.OpenApiClient.Models.Config config =
            new AlibabaCloud.OpenApiClient.Models.Config();
        config.Protocol = "https";
        config.RegionId = "central";
        return new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client(config);
@@ -868,7 +937,8 @@
    public static AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client CreateClient1()
    {
        AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();
        AlibabaCloud.OpenApiClient.Models.Config config =
            new AlibabaCloud.OpenApiClient.Models.Config();
        config.Protocol = "https";
        config.RegionId = "central";
        return new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client(config);
@@ -878,11 +948,15 @@
    public string GetToken()
    {
        AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateClient1();
        AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest getAccessTokenRequest = new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest
        {
            AppKey = "dingyzos0r1bizj7g6lr",
            AppSecret = "-HP4RvK2OUbqhG3iBUpd_TPe5MZRj8cfLc0b8Skt8rhC3I38kVLY9SS8P3kLWFcH",
        };
        AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest
            getAccessTokenRequest =
                new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.
                    GetAccessTokenRequest
                    {
                        AppKey = "dingyzos0r1bizj7g6lr",
                        AppSecret =
                            "-HP4RvK2OUbqhG3iBUpd_TPe5MZRj8cfLc0b8Skt8rhC3I38kVLY9SS8P3kLWFcH",
                    };
        try
        {
@@ -891,7 +965,8 @@
        }
        catch (TeaException err)
        {
            Console.WriteLine($"TeaException: Code={err.Code}, Message={err.Message}");
            Console.WriteLine(
                $"TeaException: Code={err.Code}, Message={err.Message}");
            return null;
        }
        catch (Exception _err)
@@ -904,7 +979,7 @@
    public bool DingJZCSD(JzcsdData InData)
    {
        if (string.IsNullOrWhiteSpace(InData.Imodel))
            throw new Exception( "产品型号不能为空");
            throw new Exception("产品型号不能为空");
        if (string.IsNullOrWhiteSpace(InData.selectedDeptID))
            throw new Exception("请选择接收部门");
@@ -922,7 +997,6 @@
            throw new Exception("审批部门不能为空");
        var db = SqlSugarHelper.GetInstance();
        string numUserId = db.Queryable<DingStaff>()
@@ -935,7 +1009,8 @@
            // ä½¿ç”¨ JSON åºåˆ—化输出对象的详细内容
            string InDataJson = JsonConvert.SerializeObject(InData, Formatting.Indented);
            string InDataJson =
                JsonConvert.SerializeObject(InData, Formatting.Indented);
            Debug.WriteLine("InDataDetail: " + InDataJson);
            // èŽ·å– Access Token
@@ -945,10 +1020,15 @@
                throw new Exception("获取 Access Token å¤±è´¥");
            }
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient();
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceHeaders startProcessInstanceHeaders = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceHeaders();
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client
                client = CreateClient();
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                StartProcessInstanceHeaders startProcessInstanceHeaders =
                    new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                        StartProcessInstanceHeaders();
            Debug.WriteLine(accessToken);
            startProcessInstanceHeaders.XAcsDingtalkAccessToken = accessToken; // ä½¿ç”¨èŽ·å–åˆ°çš„ Access Token
            startProcessInstanceHeaders.XAcsDingtalkAccessToken =
                accessToken; // ä½¿ç”¨èŽ·å–åˆ°çš„ Access Token
            /*
            äº§å“åž‹å·    TextField-K2AD4O5B
            çº æ­£äº‹é¡¹æ¥æº    DDMultiSelectField_19MZJHE2ZWM80
@@ -961,111 +1041,192 @@
            å®¡æ‰¹é€‰æ‹©    DDSelectField_WE67NWABXM80
            */
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues1 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                //纠正事项来源
                Name = "DDMultiSelectField_19MZJHE2ZWM80",
                Value = InData.Source
                /* Value = JsonConvert.SerializeObject(new[] {
                         new { value = InData.Source, label = "内部审核" }
                     })*/
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues2 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                //提出人员
                Name = "InnerContactField_WY9BZDYT7W00",
                Value = "[\"" + string.Join("\",\"", UserId) + "\"]",
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues3 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                //提出日期
                Name = "DDDateField_JD4ISXXCNLS0",
                Value = DateTime.Now.ToString("yyyy-MM-dd"),
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues4 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                //接收部门
                Name = "DepartmentField_SLLT1GL6RC00",
                Value = InData.selectedDeptID,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues5 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                //负责人
                Name = "InnerContactField_1I3FYOICN4N40",
                Value = "[\"" + string.Join("\",\"", InData.selectedUserID) + "\"]"
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues6 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                //回复日期
                Name = "DDDateField_1NPTPIPNEI1S0",
                Value = InData.ReplyDate,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues7 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                //问题描述
                Name = "TextareaField_1FUN513WLK4G0",
                Value = InData.Reason,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues8 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                //审批选择
                Name = "DDSelectField_WE67NWABXM80",
                Value = InData.selectedADept,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues9 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                //提出部门
                Name = "DepartmentField_184EOWTFMJUK0",
                Value = "975745197",//固定为MES部门
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues10 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                //产品型号
                Name = "TextField-K2AD4O5B",
                Value = InData.Imodel,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                StartProcessInstanceRequest.
                StartProcessInstanceRequestFormComponentValues
                formComponentValues1 =
                    new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                        StartProcessInstanceRequest.
                        StartProcessInstanceRequestFormComponentValues
                        {
                            //纠正事项来源
                            Name = "DDMultiSelectField_19MZJHE2ZWM80",
                            Value = InData.Source
                            /* Value = JsonConvert.SerializeObject(new[] {
                                     new { value = InData.Source, label = "内部审核" }
                                 })*/
                        };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                StartProcessInstanceRequest.
                StartProcessInstanceRequestFormComponentValues
                formComponentValues2 =
                    new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                        StartProcessInstanceRequest.
                        StartProcessInstanceRequestFormComponentValues
                        {
                            //提出人员
                            Name = "InnerContactField_WY9BZDYT7W00",
                            Value =
                                "[\"" + string.Join("\",\"", UserId) + "\"]",
                        };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                StartProcessInstanceRequest.
                StartProcessInstanceRequestFormComponentValues
                formComponentValues3 =
                    new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                        StartProcessInstanceRequest.
                        StartProcessInstanceRequestFormComponentValues
                        {
                            //提出日期
                            Name = "DDDateField_JD4ISXXCNLS0",
                            Value = DateTime.Now.ToString("yyyy-MM-dd"),
                        };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                StartProcessInstanceRequest.
                StartProcessInstanceRequestFormComponentValues
                formComponentValues4 =
                    new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                        StartProcessInstanceRequest.
                        StartProcessInstanceRequestFormComponentValues
                        {
                            //接收部门
                            Name = "DepartmentField_SLLT1GL6RC00",
                            Value = InData.selectedDeptID,
                        };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                StartProcessInstanceRequest.
                StartProcessInstanceRequestFormComponentValues
                formComponentValues5 =
                    new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                        StartProcessInstanceRequest.
                        StartProcessInstanceRequestFormComponentValues
                        {
                            //负责人
                            Name = "InnerContactField_1I3FYOICN4N40",
                            Value = "[\"" +
                                    string.Join("\",\"",
                                        InData.selectedUserID) + "\"]"
                        };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                StartProcessInstanceRequest.
                StartProcessInstanceRequestFormComponentValues
                formComponentValues6 =
                    new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                        StartProcessInstanceRequest.
                        StartProcessInstanceRequestFormComponentValues
                        {
                            //回复日期
                            Name = "DDDateField_1NPTPIPNEI1S0",
                            Value = InData.ReplyDate,
                        };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                StartProcessInstanceRequest.
                StartProcessInstanceRequestFormComponentValues
                formComponentValues7 =
                    new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                        StartProcessInstanceRequest.
                        StartProcessInstanceRequestFormComponentValues
                        {
                            //问题描述
                            Name = "TextareaField_1FUN513WLK4G0",
                            Value = InData.Reason,
                        };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                StartProcessInstanceRequest.
                StartProcessInstanceRequestFormComponentValues
                formComponentValues8 =
                    new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                        StartProcessInstanceRequest.
                        StartProcessInstanceRequestFormComponentValues
                        {
                            //审批选择
                            Name = "DDSelectField_WE67NWABXM80",
                            Value = InData.selectedADept,
                        };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                StartProcessInstanceRequest.
                StartProcessInstanceRequestFormComponentValues
                formComponentValues9 =
                    new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                        StartProcessInstanceRequest.
                        StartProcessInstanceRequestFormComponentValues
                        {
                            //提出部门
                            Name = "DepartmentField_184EOWTFMJUK0",
                            Value = "975745197", //固定为MES部门
                        };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                StartProcessInstanceRequest.
                StartProcessInstanceRequestFormComponentValues
                formComponentValues10 =
                    new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                        StartProcessInstanceRequest.
                        StartProcessInstanceRequestFormComponentValues
                        {
                            //产品型号
                            Name = "TextField-K2AD4O5B",
                            Value = InData.Imodel,
                        };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest startProcessInstanceRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest
            {
                OriginatorUserId = UserId,
                ProcessCode = "PROC-2752201A-3896-4CA7-82A1-ADBBE9F1B36A",
                DeptId = 987012076,
                FormComponentValues = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues>
            {
                 formComponentValues1,formComponentValues2,formComponentValues3, formComponentValues4, formComponentValues5, formComponentValues6, formComponentValues7, formComponentValues8,
                 formComponentValues9,formComponentValues10//, formComponentValues11, formComponentValues12, formComponentValues13, formComponentValues14
            },
            //    TargetSelectActioners = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestTargetSelectActioners>
            //{
            //    targetSelectActioners0
            //},
            //    Approvers = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestApprovers>
            //{
            //    approvers0
            //},
                CcList = new List<string>
            {
               UserId
            },
                CcPosition = "START",
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                StartProcessInstanceRequest startProcessInstanceRequest =
                    new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
                        StartProcessInstanceRequest
                        {
                            OriginatorUserId = UserId,
                            ProcessCode =
                                "PROC-2752201A-3896-4CA7-82A1-ADBBE9F1B36A",
                            DeptId = 987012076,
                            FormComponentValues =
                                new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.
                                    Models.StartProcessInstanceRequest.
                                    StartProcessInstanceRequestFormComponentValues>
                                {
                                    formComponentValues1, formComponentValues2,
                                    formComponentValues3, formComponentValues4,
                                    formComponentValues5, formComponentValues6,
                                    formComponentValues7, formComponentValues8,
                                    formComponentValues9,
                                    formComponentValues10 //, formComponentValues11, formComponentValues12, formComponentValues13, formComponentValues14
                                },
                            //    TargetSelectActioners = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestTargetSelectActioners>
                            //{
                            //    targetSelectActioners0
                            //},
                            //    Approvers = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestApprovers>
                            //{
                            //    approvers0
                            //},
                            CcList = new List<string>
                            {
                                UserId
                            },
                            CcPosition = "START",
                        };
            // åºåˆ—化 FormComponentValues åˆ—表为 JSON æ ¼å¼
            string formComponentValuesJson = JsonConvert.SerializeObject(startProcessInstanceRequest.FormComponentValues, Formatting.Indented);
            string formComponentValuesJson = JsonConvert.SerializeObject(
                startProcessInstanceRequest.FormComponentValues,
                Formatting.Indented);
            Debug.WriteLine("FormComponentValues: " + formComponentValuesJson);
            try
            {
                string requestContent = Newtonsoft.Json.JsonConvert.SerializeObject(startProcessInstanceRequest);
                string requestContent =
                    Newtonsoft.Json.JsonConvert.SerializeObject(
                        startProcessInstanceRequest);
                Debug.WriteLine("startProcessInstanceRequest内容:");
                Debug.WriteLine(requestContent);
                var response = client.StartProcessInstanceWithOptions(startProcessInstanceRequest, startProcessInstanceHeaders, new RuntimeOptions());
                var response = client.StartProcessInstanceWithOptions(
                    startProcessInstanceRequest, startProcessInstanceHeaders,
                    new RuntimeOptions());
                //return $"钉钉工作流实例启动成功: {Newtonsoft.Json.JsonConvert.SerializeObject(response.Body)}";
                return true;
            }
            catch (TeaException err)
            {
                string requestContent = Newtonsoft.Json.JsonConvert.SerializeObject(startProcessInstanceRequest);
                string requestContent =
                    Newtonsoft.Json.JsonConvert.SerializeObject(
                        startProcessInstanceRequest);
                Debug.WriteLine("startProcessInstanceRequest内容:");
                Debug.WriteLine(startProcessInstanceRequest);
@@ -1088,5 +1249,4 @@
            //return "您不是公司成员或还未被加入到数据库中或名字填写错误,未找到匹配的用户信息";
        }
    }
}
MES.Service/service/QC/XJService.cs
@@ -15,7 +15,7 @@
    private readonly BaseService _baseService = new();
    private readonly string[] statusArray = ["开工", "待开工","已开工" ,"未开工"];
    private readonly string[] statusArray = ["开工", "待开工", "已开工", "未开工"];
    //生成最新的检验单号
    public string getMaxReleaseNo()
@@ -49,7 +49,7 @@
        public decimal? Daa008 { get; set; }
        public string? Daa015 { get; set; }
        public string? Daa020 { get; set; }
        public string? ItemNo { get; set; }   // æ¥è‡ªå…³è”表
        public string? ItemNo { get; set; } // æ¥è‡ªå…³è”表
        public string? ItemName { get; set; }
    }
@@ -59,22 +59,22 @@
        //in的写法 https://www.donet5.com/Home/Doc?typeId=1187
        return db.Queryable<Womdaa,MesItems>((a, b) => new JoinQueryInfos(
            JoinType.Inner, a.Daa002 == b.Id.ToString()))
        return db.Queryable<Womdaa, MesItems>((a, b) => new JoinQueryInfos(
                JoinType.Inner, a.Daa002 == b.Id.ToString()))
            .Where(a =>
                a.Daa001 == daa001 &&
                statusArray.Contains(a.Daa018))
            .Select((a, b) => new DaaInfoDto
            {
                Daa001= daa001,
                Daa003=a.Daa003,
                Daa004=a.Daa004,
                Daa008=a.Daa008,
                Daa015=a.Daa015,
                Daa020=a.Daa020,
                ItemNo=b.ItemNo,
                Daa001 = daa001,
                Daa003 = a.Daa003,
                Daa004 = a.Daa004,
                Daa008 = a.Daa008,
                Daa015 = a.Daa015,
                Daa020 = a.Daa020,
                ItemNo = b.ItemNo,
                ItemName = b.ItemName,
                Id =a.Id
                Id = a.Id
            })
            .ToList();
    }
@@ -82,7 +82,7 @@
    public List<QCUserLine> getLineAll(string UserNo)
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Queryable<QCUserLine>()
            .Where(a => a.UserCode == UserNo)
            .Select(a => new QCUserLine
@@ -93,7 +93,6 @@
    }
    public List<Womdaa> getDaa001(JObject data)
    {
        var daa020 = data["daa020"]?.ToString();
@@ -102,7 +101,8 @@
        var db = SqlSugarHelper.GetInstance();
        return db.Queryable<Womdaa, MesItems>((a, b) =>
                new JoinQueryInfos(JoinType.Inner, a.Daa002 == b.Id.ToString()))
            .WhereIF(!string.IsNullOrEmpty(daa020), (a, b) => a.Daa015 == daa020)
            .WhereIF(!string.IsNullOrEmpty(daa020),
                (a, b) => a.Daa015 == daa020)
            .WhereIF(!string.IsNullOrEmpty(item), (a, b) => b.ItemNo == item)
            .Where((a, b) => statusArray.Contains(a.Daa018))
            .Select<Womdaa>(a => new Womdaa
@@ -133,14 +133,16 @@
    }
    public List<string?> GetItemProj(string? itemNo)
    { //获取物料所有的检验计划名称
    {
        //获取物料所有的检验计划名称
        var db = SqlSugarHelper.GetInstance();
        var plans = db.Queryable<MesQa>().Where(a => a.ItemNo == itemNo && a.QsType == "2")
                                .Select(s => s.QaPlan)
                                .Distinct()
                                .ToList();
        var plans = db.Queryable<MesQa>()
            .Where(a => a.ItemNo == itemNo && a.QsType == "2")
            .Select(s => s.QaPlan)
            .Distinct()
            .ToList();
        return plans;
    }
@@ -161,7 +163,8 @@
        var query = db
            .Queryable<QsQaItemXj, Womdaa, MesLine,
                MesItems, SysUser,Womcaa,SysDepartment, MesUserDepartmentQc,MesItems, SysUser>((s, a, c, b, us,ca,d,dq,i,us2) =>
                MesItems, SysUser, Womcaa, SysDepartment, MesUserDepartmentQc,
                MesItems, SysUser>((s, a, c, b, us, ca, d, dq, i, us2) =>
                new JoinQueryInfos(
                    JoinType.Inner, s.BillNo == a.Daa001,
                    JoinType.Left, a.Daa015 == c.LineNo,
@@ -169,7 +172,8 @@
                    JoinType.Left, us.Fcode == s.CreateBy,
                    JoinType.Left, ca.Caa020 == a.Daa021,
                    JoinType.Left, d.Departmentcode == c.Departmentcode,
                    JoinType.Left, dq.Departmentcode == d.Departmentcode,//查询用户权限
                    JoinType.Left,
                    dq.Departmentcode == d.Departmentcode, //查询用户权限
                    JoinType.Left, i.Id == Convert.ToDecimal(a.Daa002),
                    JoinType.Left, us2.Fcode == s.SubmitBy
                )
@@ -185,22 +189,26 @@
                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                !"未完成".Equals(queryObj.result),
                (s, a, c, b, us) => s.SubmitStatus == 1)
            .WhereIF(id > 0, (s, a, c, b, us,ca) => s.Id == id)
            .WhereIF(id > 0, (s, a, c, b, us, ca) => s.Id == id)
            .WhereIF(!string.IsNullOrEmpty(queryObj.LoginUser),
                (s, a, c, b, us, ca, d, dq) => dq.Usercode == queryObj.LoginUser)
                (s, a, c, b, us, ca, d, dq) =>
                    dq.Usercode == queryObj.LoginUser)
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue),
                (s, a, c, b, us, ca, d, dq,i) =>
                s.ReleaseNo.ToLower().Contains(queryObj.SearchValue.ToLower()) ||
                i.ItemName.ToLower().Contains(queryObj.SearchValue.ToLower()) ||
                ca.Caa015.ToLower().Contains(queryObj.SearchValue.ToLower()) ||
                i.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .Select((s, a, c, b, us,ca,d,dq,i,us2) => new QsQaItemXj
                (s, a, c, b, us, ca, d, dq, i) =>
                    s.ReleaseNo.ToLower()
                        .Contains(queryObj.SearchValue.ToLower()) ||
                    i.ItemName.ToLower()
                        .Contains(queryObj.SearchValue.ToLower()) ||
                    ca.Caa015.ToLower()
                        .Contains(queryObj.SearchValue.ToLower()) ||
                    i.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .Select((s, a, c, b, us, ca, d, dq, i, us2) => new QsQaItemXj
            {
                Daa020 = c.LineNo,
                Id = s.Id,
                PlanQty = a.Daa008,
                LineName = d.Departmentname == "注塑车间" ?  a.Daa020:c.LineName,
                CreateUser = us.Fname==null ? s.CreateBy : us.Fname,
                LineName = d.Departmentname == "注塑车间" ? a.Daa020 : c.LineName,
                CreateUser = us.Fname == null ? s.CreateBy : us.Fname,
                CreateBy = s.CreateBy,
                CreateDate = s.CreateDate,
                ReleaseNo = s.ReleaseNo,
@@ -215,9 +223,8 @@
                DepartName = d.Departmentname,
                PlanName = s.PlanName,
                fcheckBy = us2.Fname,
                SubmitDate= s.SubmitDate,
                SubmitDate = s.SubmitDate,
                SubmitStatus = s.SubmitStatus
            }).OrderBy(s => s.CreateDate, OrderByType.Desc);
        var items = query.ToPageList(queryObj.PageIndex, queryObj.Limit,
            ref totalCount);
@@ -231,21 +238,22 @@
        var db = SqlSugarHelper.GetInstance();
        var count = db.Queryable<MesQa>().Where(s => s.QsType == "2"
            && s.ItemNo == itemNo && s.Fsubmit == 1 && s.QaPlan == planName).Count();
                && s.ItemNo == itemNo && s.Fsubmit == 1 && s.QaPlan == planName)
            .Count();
        if (count <= 0) return new List<QsQaItemXj01>();
        decimal? QsId = db.Queryable<MesQa>()
                            .Where(s => s.QsType == "2"
                                && s.ItemNo == itemNo
                                && s.QaPlan == planName
                                && s.Fsubmit == 1)
                            .Select(s => s.Id)
                            .First();
            .Where(s => s.QsType == "2"
                        && s.ItemNo == itemNo
                        && s.QaPlan == planName
                        && s.Fsubmit == 1)
            .Select(s => s.Id)
            .First();
        return db
            .Queryable<MesQualityStandard>()
            .Where(b => b.Pid== QsId).Select(b => new QsQaItemXj01
            .Where(b => b.Pid == QsId).Select(b => new QsQaItemXj01
            {
                ProjName = b.ProjName,
                ItemMod = b.ItemMod,
@@ -381,14 +389,17 @@
        var FID = new SugarParameter("P_ID", rkjDto.gid);
        var FRes = new SugarParameter("c_result", null, true);            // è¾“出参数
        var FRes = new SugarParameter("c_result", null, true); // è¾“出参数
        var FMsg = new SugarParameter("c_msg", null, true);
        // æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
        db.Ado.UseStoredProcedure().GetDataTable("PRC_XJ_UPDATE_RES_JK", FID, FRes, FMsg);
        db.Ado.UseStoredProcedure()
            .GetDataTable("PRC_XJ_UPDATE_RES_JK", FID, FRes, FMsg);
        int result = int.Parse((string)FRes.Value);
        string message = FMsg.Value == DBNull.Value ? string.Empty : (string)FMsg.Value;
        string message = FMsg.Value == DBNull.Value
            ? string.Empty
            : (string)FMsg.Value;
        if (result == 1)
        {
            //存储过程失败则事务进行回滚
@@ -396,6 +407,40 @@
            throw new Exception(message);
        }
        // æˆåŠŸæäº¤åŽæŽ¨é€é’‰é’‰æ¶ˆæ¯
        var qaXj = db.Queryable<QaXj>()
            .Where(s => s.Id == rkjDto.gid)
            .First();
        if (qaXj != null)
        {
            try
            {
                var qaMsgDto = new
                {
                    id = qaXj.Id,
                    lineName = qaXj.LineName,
                    workshopName = qaXj.Departmentname,
                    qaType = "巡检检验完成"
                };
                // è°ƒç”¨é’‰é’‰æ¶ˆæ¯æŽ¨é€æŽ¥å£
                var client = new System.Net.Http.HttpClient();
                var json =
                    Newtonsoft.Json.JsonConvert.SerializeObject(qaMsgDto);
                var content = new System.Net.Http.StringContent(json,
                    System.Text.Encoding.UTF8, "application/json");
                var response = client
                    .PostAsync(
                        "http://192.168.0.100:9096/MesQaDingtalk/sendQaMsgXJ",
                        content).Result;
            }
            catch (Exception ex)
            {
                // è®°å½•钉钉推送异常,但不影响主流程
                Console.WriteLine($"钉钉消息推送失败: {ex.Message}");
            }
        }
        return useTransactionWithOracle > 0;
    }
@@ -800,7 +845,7 @@
                .ExecuteCommand();
        });
    }
    public int saveNotesPid(XJDto dto)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
@@ -830,17 +875,17 @@
    {
        var db = SqlSugarHelper.GetInstance();
        var count = db.Queryable<XJBadReason>().Where(s => s.BillNo == billNo).Count();
        var count = db.Queryable<XJBadReason>().Where(s => s.BillNo == billNo)
            .Count();
        if (count <= 0) return null;
        var reason = db
            .Queryable<XJBadReason>()
            .Where(s => s.BillNo == billNo).Select(
                b => new XJBadReason
                {
                    Reason = b.Reason
                }).ToList();
            .Where(s => s.BillNo == billNo).Select(b => new XJBadReason
            {
                Reason = b.Reason
            }).ToList();
        return reason;
    }
@@ -849,15 +894,15 @@
    {
        var db = SqlSugarHelper.GetInstance();
        var res = db.Updateable<QsQaItemXj>()
                          .SetColumns(a => a.PlanName == PlanName)
                          .Where(a => a.Id == pid)
                          .ExecuteCommand();
            .SetColumns(a => a.PlanName == PlanName)
            .Where(a => a.Id == pid)
            .ExecuteCommand();
        return res;
    }
    public (decimal?, string?, string?) CreateNew(string? DaaNo, string? userNo, string? planName)
    public (decimal?, string?, string?) CreateNew(string? DaaNo, string? userNo,
        string? planName)
    {
        var db = SqlSugarHelper.GetInstance();
        // åˆ›å»ºå‚æ•°
@@ -866,12 +911,13 @@
        var FplanName = new SugarParameter("P_PLAN_NAME", planName);
        var FRes = new SugarParameter("P_FLAG", null, true);            // è¾“出参数
        var FRes = new SugarParameter("P_FLAG", null, true); // è¾“出参数
        var FMsg = new SugarParameter("P_TEXT", null, true);
        var FBillNo = new SugarParameter("po_BILL_NO", null, true);
        // æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
        db.Ado.UseStoredProcedure().GetDataTable("PRC_XJ_GENERATE_JK", FitemNo, FuserNo, FplanName, FRes, FMsg, FBillNo);
        db.Ado.UseStoredProcedure().GetDataTable("PRC_XJ_GENERATE_JK", FitemNo,
            FuserNo, FplanName, FRes, FMsg, FBillNo);
        // èŽ·å–è¾“å‡ºç»“æžœ
        var Res = Convert.ToInt32(FRes.Value);
@@ -882,5 +928,4 @@
        return (Res, Msg, BillNo);
    }
}