啊鑫
2024-08-28 481e4bef4be32a5a9754d01faf80bf0bc4e14951
MES.Service/service/Warehouse/MesInvItemOutsManager.cs
@@ -3,6 +3,7 @@
using MES.Service.Dto.service;
using MES.Service.Modes;
using MES.Service.util;
using Newtonsoft.Json;
using SqlSugar;
using DbType = System.Data.DbType;
@@ -12,6 +13,114 @@
{
    //当前类已经继承了 Repository 增、删、查、改的方法
    //这里面写的代码不会给覆盖,如果要重新生成请删除 MesInvItemOutsManager.cs
    public List<MesInvItemOuts> GetProductionPickPage(WarehouseQuery query)
    {
        return Db.Queryable<MesInvItemOuts, MesDepots>((a, o) =>
                new JoinQueryInfos(
                    JoinType.Left,
                    o.DepotCode == a.DepotCode && a.Company == o.Company &&
                    a.Factory == o.Factory
                ))
            .Where((a, o) => a.BillTypeId == 200 &&
                             a.TransactionNo == 201 &&
                             a.Factory == "1000" &&
                             a.Company == "1000" &&
                             a.IsVisual == 1)
            .WhereIF(query.status != null, (a, o) => a.Status == query.status)
            .WhereIF(query.id != null, (a, o) => a.Id == query.id)
            .Select((a, o) => new MesInvItemOuts
            {
                Id = a.Id,
                Sapstatus = a.Sapstatus,
                OutDate = a.OutDate,
                CheckDate = a.CheckDate,
                BoardItem = a.BoardItem,
                WorkNo = a.WorkNo,
                OutPart = a.OutPart,
                PbillNo = a.PbillNo,
                OutType = a.OutType,
                CreateBy = a.CreateBy,
                Status = a.Status,
                CheckUser = a.CheckUser,
                ItemOutNo = a.ItemOutNo,
                DepotName = o.DepotName // 需要动态添加的字段
            })
            .ToPageList(query.PageIndex, query.Limit);
    }
    public MaterialReceipt GetProductionPick(WarehouseQuery query)
    {
        var form = new MaterialReceipt();
        if (query.id != null)
        {
            var mesInvItemOutsList = GetProductionPickPage(query);
            if (mesInvItemOutsList.Count <= 0) return form;
            form.ItemOuts = mesInvItemOutsList[0];
            form.ItemsList = getProductionItemsList(query);
            form.InvItemoutCDetails = GetProductionDetails(query);
        }
        return form;
    }
    private List<MesInvItemOutItems> getProductionItemsList(
        WarehouseQuery query)
    {
        return Db.Queryable<MesInvItemOutItems, MesItems, MesDepTaskInfo>(
                (c, s, f) => new JoinQueryInfos(
                    JoinType.Inner, c.ItemNo == s.ItemNo,
                    JoinType.Left, f.TaskNo == c.TaskNo && f.ItemNo == c.ItemNo
                ))
            .Where((c, s, f) => c.ItemOutId == query.id)
            .OrderBy(c => c.Id)
            .Select((c, s, f) => new MesInvItemOutItems
            {
                Id = c.Id,
                ItemNo = c.ItemNo,
                Quantity = c.Quantity,
                TaskNo = c.TaskNo,
                Remark = c.Remark,
                ItemName = s.ItemName, // 动态字段
                ItemModel = s.ItemModel, // 动态字段
                ItemUnit = SqlFunc.Subqueryable<MesItems>()
                    .Where(si => si.ItemUnit == s.ItemUnit)
                    .Select(si =>
                        SqlFunc.MappingColumn<string>(
                            "F_GETUNITNAME(si.Item_Unit)")) // 动态字段
            })
            .ToList();
    }
    private List<MesInvItemOutCDetails> GetProductionDetails(
        WarehouseQuery query)
    {
        return Db
            .Queryable<MesInvItemOutCDetails, MesItems, MesDepots>(
                (b, c, d) => new JoinQueryInfos(
                    JoinType.Left,
                    b.ItemNo == c.ItemNo && b.Company == c.Company &&
                    b.Factory == c.Factory,
                    JoinType.Left,
                    d.DepotCode == b.DepotCode && b.Company == d.Company &&
                    b.Factory == d.Factory
                ))
            .Where((b, c, d) => b.ItemOutId == query.id)
            .Select((b, c, d) => new MesInvItemOutCDetails
            {
                ForceOutFlag = b.ForceOutFlag,
                DepotSectionCode = b.DepotSectionCode,
                ItemNo = b.ItemNo,
                Quantity = b.Quantity,
                ItemBarcode = b.ItemBarcode,
                ItemName = c.ItemName,
                ItemModel = c.ItemModel,
                DepotName = d.DepotName,
                DepotCode = b.DepotCode
            })
            .ToList();
    }
    public bool ScanCode(WarehouseQuery query)
    {
@@ -703,4 +812,157 @@
        return ItemOutNos;
    }
    //生产领料单审核前校验
    public MessageCenter SaveProductionMessageCenter(WarehouseQuery entity)
    {
        var message = ProductionMesToErpParam(entity);
        var executeReturnIdentity =
            Db.Insertable(message).ExecuteReturnIdentity();
        if (executeReturnIdentity > 0)
        {
            message.Id = executeReturnIdentity;
            message.Pid = executeReturnIdentity;
            return message;
        }
        throw new Exception("获取数据失败");
    }
    private MessageCenter ProductionMesToErpParam(WarehouseQuery query)
    {
        var erpParameters = "";
        var title = "";
        var tableName = "INV_ITEM_OUTS_" + query.Type;
        if ("A".Equals(query.Type))
        {
            erpParameters =
                GetProductionErpParameters(query.billNo, query.userName);
            title = "生产领料单" + query.billNo + "审核";
        }
        var ErpUrl = AppsettingsUtility.Settings.ProductionErpUrl;
        var message = new MessageCenter
        {
            TableName = tableName,
            Url = ErpUrl,
            Status = 1,
            CreateBy = query.userName,
            Route = query.billNo,
            Title = title,
            PageName = "Warehouse/ProductionPick/Add?id=" + query.id +
                       "&itemOutNo=" + query.billNo,
            CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
            Method = "POST",
            Seq = 1,
            Data = erpParameters,
            IsMessage = 0,
            ContentType = "application/x-www-form-urlencoded"
        };
        return message;
    }
    private string GetProductionErpParameters(string? queryBillNo,
        string? userName)
    {
        userName ??= "system";
        var mesInvItemOuts = Db.Queryable<MesInvItemOuts>()
            .Where(it => it.ItemOutNo == queryBillNo)
            .First();
        if (mesInvItemOuts == null) throw new Exception("领料单号不存在");
        var womcaa = Db.Queryable<Womcaa>()
            .Where(it => it.Caa020 == mesInvItemOuts.WorkNo)
            .First();
        if (womcaa == null) throw new Exception("任务单号不存在");
        var Departmentcode = Db.Queryable<SysDepartment, MesInvItemOuts>(
                (a, b) =>
                    new JoinQueryInfos(JoinType.Left,
                        a.Departmentname == b.OutPart
                    )).Where((a, b) =>
                b.OutPart == mesInvItemOuts.OutPart &&
                b.ItemOutNo == queryBillNo).Select(a => a.Departmentcode)
            .First();
        if (string.IsNullOrEmpty(Departmentcode))
            throw new Exception("部门信息不存在");
        // 检查领料单状态
        if (mesInvItemOuts.Status == 1) throw new Exception("领料单已审核,不能重复推送");
        var C_OUT_ITEMS = Db
            .Queryable<MesInvItemOutItems, Womdab, Womdaa, Womcaa, Womcab>(
                (c, b, d, e, f) =>
                    new JoinQueryInfos(
                        JoinType.Left, b.Id == c.ItemDabid,
                        JoinType.Left, d.Id == b.Pid,
                        JoinType.Left, e.Caa001 == d.Daa021,
                        JoinType.Left, f.Eid == e.Erpid
                    ))
            .Where((c, b, d, e, f) => c.ItemOutId == mesInvItemOuts.Id)
            .Select((c, b, d, e, f) => new
            {
                c.Id,
                c.ItemNo,
                c.Quantity,
                c.DepotCode,
                c.DepotSectionCode,
                c.ItemId,
                erpId = b.ErpId,
                e.Caa015,
                f.PositionNo
            }).ToList();
        var scllentryList = new List<dynamic>();
        foreach (var item in C_OUT_ITEMS)
        {
            var sql =
                "SELECT FNAME FROM MES_UNIT WHERE ID = (SELECT ITEM_UNIT FROM MES_ITEMS WHERE ID = '" +
                item.ItemId + "')";
            var C_ITEM_UNIT = Db.Ado.SqlQuerySingle<string>(sql);
            scllentryList.Add(new
            {
                FMaterialId = item.ItemNo,
                FUnitID = C_ITEM_UNIT,
                FAppQty = item.Quantity,
                FActualQty = item.Quantity,
                FStockId = item.DepotCode,
                FPPBomEntryId = item.erpId,
                F_UNW_Text_xsddh = item.Caa015,
                F_UNW_TEXT_WZH = item.PositionNo,
                F_MES_ENTRYID = item.Id
            });
        }
        var dataJson = new
        {
            F_MES_ID = mesInvItemOuts.Id,
            FDate = mesInvItemOuts.CreateBy,
            FPickerId = userName,
            F_UNW_LargeText_BZ = " ",
            F_UNW_KH = " ",
            F_UNW_DDSL = womcaa.Caa012,
            F_UNW_Text_CZG = userName,
            scllentry = scllentryList
        };
        return "taskname=SCLL&mesid=" + mesInvItemOuts.Id +
               "&optype=create&datajson=" +
               JsonConvert.SerializeObject(
                   dataJson);
    }
    public bool AuditProduction(WarehouseQuery query)
    {
        query.status = 1;
        //审核
        return Update(query);
    }
}