wbc
8 天以前 f56fcadd8d412fa1a65c873e77ad04ebb31fc954
StandardPda/MES.Service/service/QC/XJService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,531 @@
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 XJService
{
    private static readonly OracleSQLHelper SQLHelper = new();
    private readonly BaseService _baseService = new();
    private readonly string[] statusArray = ["开工", "待开工"];
    //生成最新的检验单号
    public string getMaxReleaseNo()
    {
        var sql =
            string.Format(
                "select max(RELEASE_NO) from QS_QA_ITEM_XJ where RELEASE_NO like 'XJN%' and to_char(CREATE_DATE,'yyyy-mm-dd') = '{0}'",
                DateTime.Now.ToString("yyyy-MM-dd"));
        var executeScalar = SQLHelper.ExecuteScalar(sql);
        var date = DateTime.Now.ToString("yyMMdd");
        var number = "0001";
        var olReleaseNo = executeScalar.ToString();
        //判断今天是否生成了巡检单
        if (string.IsNullOrEmpty(olReleaseNo)) return "XJN" + date + number;
        //截取后四位的流水号累加
        var substring = Convert.ToInt32(olReleaseNo.Substring(10));
        substring += 1;
        number = substring.ToString("D4");
        //如果为空直接返回0001
        return "XJN" + date + number;
    }
    public List<Womdaa> getItem(string daa001)
    {
        var db = SqlSugarHelper.GetInstance();
        //in的写法 https://www.donet5.com/Home/Doc?typeId=1187
        return db.Queryable<Womdaa>()
            .Where(a =>
                a.Daa001 == daa001 &&
                statusArray.Contains(a.Daa018))
            .ToList();
    }
    public List<MesLine> getLineAll()
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Queryable<Womdaa, MesLine>((a, b) =>
                new JoinQueryInfos(JoinType.Left, a.Daa015 == b.LineNo))
            .Where((a, b) => b.LineName != null &&
                             statusArray.Contains(a.Daa018))
            .GroupBy((a, b) => new
            {
                b.LineNo,
                b.LineName
            })
            .Select((a, b) => new MesLine
            {
                LineNo = b.LineNo,
                LineName = b.LineName
            }).OrderBy("b.LINE_NO").ToList();
    }
    public List<Womdaa> getDaa001(string daa020, string item)
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Queryable<Womdaa, MesItems>((a, b) =>
                new JoinQueryInfos(JoinType.Inner, a.Daa002 == b.Id.ToString()))
            .Where((a, b) =>
                a.Daa015 == daa020 &&
                b.ItemNo == item &&
                statusArray.Contains(a.Daa018))
            .Select<Womdaa>(a => new Womdaa
            {
                Id = a.Id,
                Daa001 = a.Daa001,
                Daa003 = a.Daa003,
                Daa008 = a.Daa008
            }).ToList();
    }
    public List<MesItems> getBoardItem(string lineNo)
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Queryable<Womdaa, MesItems>((a, b) =>
                new JoinQueryInfos(JoinType.Inner, a.Daa002 == b.Id.ToString()))
            .Where((a, b) => statusArray.Contains(a.Daa018) &&
                             a.Daa015 == lineNo)
            .OrderBy((a, b) => b.ItemName)
            .Select<MesItems>((a, b) =>
                new MesItems
                {
                    Id = b.Id,
                    ItemNo = b.ItemNo,
                    ItemName = b.ItemName,
                    ItemModel = b.ItemModel
                }).ToList();
    }
    public List<QsQaItemXj> getPage(XJPageResult queryObj)
    {
        var db = SqlSugarHelper.GetInstance();
        var id = Convert.ToDecimal(queryObj.id);
        string[]? lineNo = null;
        if (StringUtil.IsNotNullOrEmpty(queryObj.createUser))
            lineNo = _baseService.getUserLineNo(queryObj.createUser);
        return db
            .Queryable<QsQaItemXj, Womdaa, MesLine,
                MesItems>((s, a, c, b) =>
                new JoinQueryInfos(
                    JoinType.Inner, s.BillNo == a.Daa001,
                    JoinType.Left, a.Daa015 == c.LineNo,
                    JoinType.Left, s.ItemId == b.Id
                )
            )
            .WhereIF(lineNo != null && lineNo.Length > 0,
                (s, a, c, b) => lineNo.Contains(c.LineNo))
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                "未完成".Equals(queryObj.result),
                (s, a, c, b) => s.FcheckResu == null)
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                !"未完成".Equals(queryObj.result),
                (s, a, c, b) => s.FcheckResu != null)
            .WhereIF(id > 0, (s, a, c, b) => s.Id == id)
            .Select((s, a, c, b) => new QsQaItemXj
            {
                Daa020 = c.LineNo,
                Id = s.Id,
                PlanQty = a.Daa008,
                CreateBy = s.CreateBy,
                CreateDate = s.CreateDate,
                ReleaseNo = s.ReleaseNo,
                ItemNo = s.ItemNo,
                BillNo = s.BillNo,
                ItemName = b.ItemName,
                ItemModel = b.ItemModel,
                FcheckBy = s.FcheckBy,
                FcheckResu = s.FcheckResu,
                Remarks = s.Remarks
            }).OrderBy(s => s.CreateDate, OrderByType.Desc)
            .ToPageList(queryObj.PageIndex, queryObj.Limit);
    }
    public List<QsQaItemXj01> setJYItem(string itemNo)
    {
        var db = SqlSugarHelper.GetInstance();
        var count = db.Queryable<MesQa>().Where(s => s.QsType == "2"
            && s.ItemNo == itemNo && s.Fsubmit == 1).Count();
        if (count <= 0) return new List<QsQaItemXj01>();
        return db
            .Queryable<MesQualityStandard>()
            .Where(b => b.QsType == "2"
                        && b.ItemNo == itemNo).Select(b => new QsQaItemXj01
            {
                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,
                result = "未检测",
                isCheck = 0,
                Picture = b.Picture,
                Picturename = b.Picturename
            }).ToList();
    }
    public List<QsQaItemXj01> getJYItem(decimal? pid, decimal? id)
    {
        var db = SqlSugarHelper.GetInstance();
        var qsQaItemXj01s = db.Queryable<QsQaItemXj01>()
            .WhereIF(pid > 0, a => a.Pid == pid)
            .WhereIF(id > 0, a => a.Id == id)
            .ToList();
        var array = qsQaItemXj01s.Select(s => s.Id).ToArray();
        var qsQaItemDetails = db.Queryable<QsQaItemXj02>()
            .Where(s => array.Contains(s.Pid))
            .GroupBy(s => s.Pid)
            .Select(s => new
            {
                s.Pid,
                count = SqlFunc.AggregateCount(s.Id)
            }).ToList();
        qsQaItemXj01s.ForEach(s =>
        {
            var find = qsQaItemDetails.Find(a => s.Id == a.Pid);
            if (find == null)
            {
                s.isCheck = 0;
                s.result = "未完成";
            }
            else
            {
                s.isCheck = find.count;
                if (find.count == s.LevelNum && s.IsPass == 1)
                    s.result = "合格";
                else if (find.count == s.LevelNum && s.IsPass == 0)
                    s.result = "不合格";
                else
                    s.result = "未完成";
            }
            //过滤出图片id不为空的数据转为base64
            if (s.Picture is { Length: > 0 })
                s.imageData = Convert.ToBase64String(s.Picture);
        });
        //排序,未完成的排在前面
        qsQaItemXj01s = qsQaItemXj01s.OrderBy(s => s.isCheck).ToList();
        return qsQaItemXj01s;
    }
    public int save(XJDto xjDto)
    {
        var xj = xjDto.from;
        var items = xjDto.items;
        var userNo = xjDto.userNo;
        SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            var commit = 0;
            xj.CreateBy = userNo;
            xj.CreateDate = DateTime.Now;
            var pid = db.Insertable(xj).ExecuteReturnIdentity();
            xj.Id = pid;
            xjDto.gid = pid;
            foreach (var item in items) item.Pid = pid;
            commit += db.Insertable(items).ExecuteCommand();
            return commit;
        });
        xjDto.items = getJYItem(xj.Id, null);
        xjDto.items.ForEach(s =>
        {
            if (s.MaxValue != null || s.StandardValue != null ||
                s.MinValue != null) return;
            var detail = new QsQaItemXj02();
            detail.Pid = s.Id;
            detail.Gid = xjDto.gid;
            detail.Fstand = "√";
            detail.FcheckResu = "1";
            detail.UpdateBy = xjDto.userNo;
            detail.count = (int?)s.LevelNum;
            SetQSItemDetail(detail);
        });
        return Convert.ToInt32(xj.Id);
    }
    public int saveItem(XJDto xjDto)
    {
        var items = xjDto.items;
        var userNo = xjDto.userNo;
        SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            foreach (var item in items) item.Pid = xjDto.gid;
            return db.Insertable(items).ExecuteCommand();
        });
        xjDto.items = getJYItem(xjDto.gid, null);
        xjDto.items.ForEach(s =>
        {
            if (s.MaxValue != null || s.StandardValue != null ||
                s.MinValue != null) return;
            var detail = new QsQaItemXj02();
            detail.Pid = s.Id;
            detail.Gid = xjDto.gid;
            detail.Fstand = "√";
            detail.FcheckResu = "1";
            detail.UpdateBy = xjDto.userNo;
            detail.count = (int?)s.LevelNum;
            SetQSItemDetail(detail);
        });
        return Convert.ToInt32(xjDto.gid);
    }
    public XJDto getXjDetail02ById(decimal? id)
    {
        var xjDto = new XJDto();
        var db = SqlSugarHelper.GetInstance();
        var qsQaItemXj01 =
            db.Queryable<QsQaItemXj01>().Single(s => s.Id == id);
        if (qsQaItemXj01.IsPass == 0)
            qsQaItemXj01.result = "不合格";
        else if (qsQaItemXj01.IsPass == 1)
            qsQaItemXj01.result = "合格";
        else
            qsQaItemXj01.result = "未完成";
        if (qsQaItemXj01.Picture is { Length: > 0 })
            qsQaItemXj01.imageData =
                Convert.ToBase64String(qsQaItemXj01.Picture);
        xjDto.ItemXj01 = qsQaItemXj01;
        xjDto.ItemXj02s = db.Queryable<QsQaItemXj02>().Where(s => s.Pid == id)
            .ToList();
        return xjDto;
    }
    public int SetQSItemDetail(QsQaItemXj02 detail)
    {
        var oracle = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            List<QsQaItemXj02> result = new();
            for (var i = 0; i < detail.count; i++)
            {
                var item = new QsQaItemXj02();
                item.Gid = detail.Gid;
                item.Pid = detail.Pid;
                item.Fstand = detail.Fstand;
                item.FcheckResu = detail.FcheckResu;
                item.CreateBy = detail.UpdateBy;
                item.CreateDate = DateTime.Now;
                result.Add(item);
            }
            return db.Insertable(result).ExecuteCommand();
        });
        detail.CreateBy = detail.UpdateBy;
        autoResult(detail);
        return oracle;
    }
    private int autoResult(QsQaItemXj02 detail)
    {
        var db = SqlSugarHelper.GetInstance();
        // Single æ²¡æœ‰æŸ¥è¯¢åˆ°ç»“果时返回Null,如果结果大于1条会抛出错误
        var QsQaItemXj01 = db.Queryable<QsQaItemXj01>()
            .Single(s => s.Id == detail.Pid);
        if (QsQaItemXj01 == null) return 0;
        var count = db.Queryable<QsQaItemXj02>()
            .Where(s => s.Pid == detail.Pid).Count();
        var result = 0;
        if (QsQaItemXj01.LevelNum != count) return 0;
        var passCount = db.Queryable<QsQaItemXj02>()
            .Where(s => s.Pid == detail.Pid && s.Fstand == "√").Count();
        if (count == passCount) result = 1;
        var useTransactionWithOracle =
            SqlSugarHelper.UseTransactionWithOracle(db =>
            {
                var commit = 0;
                commit += db.Updateable<QsQaItemXj01>()
                    .SetColumns(s => s.IsPass == result)
                    .Where(s => s.Id == detail.Pid)
                    .ExecuteCommand();
                return commit;
            });
        //获取检验单的检验项目理论个数
        var sum = db.Queryable<QsQaItemXj01>()
            .Where(s => s.Pid == detail.Gid).Sum(it => it.LevelNum);
        if (sum == null || sum == 0) return 1;
        //获取检验单下的检验项目实际个数
        var icount = db.Queryable<QsQaItemXj02>()
            .Where(s => s.Gid == detail.Gid).Count();
        if (icount == 0) return 1;
        //实际个数等于理论个数时对检验单进行判定
        if (sum == icount)
        {
            var FcheckResu = "不合格";
            //获取这个检验单下的所有合格的检验结果
            passCount = db.Queryable<QsQaItemXj02>()
                .Where(s => s.Gid == detail.Gid && s.Fstand == "√").Count();
            //合格的检验结果等于总检验数视为合格
            if (icount == passCount) FcheckResu = "合格";
            SqlSugarHelper.UseTransactionWithOracle(db =>
            {
                return db.Updateable<QsQaItemXj>()
                    .SetColumns(s => s.FcheckResu == FcheckResu)
                    .SetColumns(s => s.FcheckDate == DateTime.Now)
                    .SetColumns(s => s.FcheckBy == detail.CreateBy)
                    .SetColumns(s => s.LastupdateBy == detail.CreateBy)
                    .SetColumns(s => s.LastupdateDate == DateTime.Now)
                    .Where(s => s.Id == detail.Gid)
                    .ExecuteCommand();
            });
        }
        return useTransactionWithOracle;
    }
    public int UpdateQSItemDetail(QsQaItemXj02 detail)
    {
        var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsQaItemXj02>()
                .SetColumns(s => s.UpdateBy == detail.UpdateBy)
                .SetColumns(s => s.UpdateDate == DateTime.Now)
                .SetColumnsIF(StringUtil.IsNotNullOrEmpty(detail.Fstand),
                    s => s.Fstand == detail.Fstand)
                .SetColumnsIF(StringUtil.IsNotNullOrEmpty(detail.FcheckResu),
                    s => s.FcheckResu == detail.FcheckResu)
                .Where(s => s.Id == detail.Id)
                .ExecuteCommand();
        });
        detail.CreateBy = detail.UpdateBy;
        withOracle += autoResult(detail);
        return withOracle;
    }
    //删除主表并且连级删除子表和孙表
    public int removeXJ(decimal? id)
    {
        var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            var commit = 0;
            commit += db.Deleteable<QsQaItemXj>().Where(s => s.Id == id)
                .ExecuteCommand();
            commit += db.Deleteable<QsQaItemXj01>().Where(s => s.Pid == id)
                .ExecuteCommand();
            commit += db.Deleteable<QsQaItemXj02>().Where(s => s.Gid == id)
                .ExecuteCommand();
            return commit;
        });
        return withOracle;
    }
    //主表修改备注字段
    public int saveRemarksGid(XJDto dto)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsQaItemXj>()
                .SetColumns(it =>
                    it.Remarks == dto.Remarks) //SetColumns是可以叠加的 å†™2个就2个字段赋值
                .Where(it => it.Id == dto.gid)
                .ExecuteCommand();
        });
    }
    //子表修改备注字段
    public int saveRemarksPid(XJDto dto)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsQaItemXj01>()
                .SetColumns(it =>
                    it.Remarks == dto.Remarks) //SetColumns是可以叠加的 å†™2个就2个字段赋值
                .Where(it => it.Id == dto.pid)
                .ExecuteCommand();
        });
    }
    //孙表修改备注字段
    public int saveRemarksById(XJDto dto)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsQaItemXj02>()
                .SetColumns(it =>
                    it.Remarks == dto.Remarks) //SetColumns是可以叠加的 å†™2个就2个字段赋值
                .Where(it => it.Id == dto.id)
                .ExecuteCommand();
        });
    }
}