zjh
2025-02-28 148e3eea1fea2d45ab135c6e66e69d163a4dd811
StandardPda/MES.Service/service/BasicData/MesCustomerManager.cs
@@ -1,6 +1,7 @@
using MES.Service.DB;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using MES.Service.util;
using SqlSugar;
namespace MES.Service.service.BasicData;
@@ -16,20 +17,21 @@
            switch (customer.Type)
            {
                case "0":
                    if (UpdateCustomerStatus(db, entity.Id, "A"))
                    if (UpdateCustomerStatusBatch(db, entity, "A"))
                        return 1;
                    break;
                case "1":
                    if (UpdateCustomerStatus(db, entity.Id, "B"))
                    if (UpdateCustomerStatusBatch(db, entity, "B"))
                        return 1;
                    break;
                case "3":
                    if (DeleteCustomer(db, entity.Id))
                    if (DeleteCustomerBatch(db, entity))
                        return 1;
                    break;
                case "2":
                case "4":
                    if (InsertOrUpdate(db, entity))
                    //先删除,后新增
                    if (InsertOrUpdateBatch(db, entity))
                        return 1;
                    break;
                default:
@@ -43,8 +45,18 @@
    public bool SaveList(List<ErpCustomer> customers)
    {
        var list = customers.Select(GetSysDepartment).ToList();
        var groupBy = list.GroupBy(s => s.Type)
        //var list = customers.Select(GetSysDepartment).ToList();
        //因为U9的模式,会导致多组织的基础数据被处理成List<>,所以需要修改方法,SaveLits中应该是把单条处理出来的List数据加起来,而不是之前的方法处理。
        List<MesCustomer> mes_customers = new();
        foreach (var customer in customers)
        {
            var mesCustomerList = GetSysDepartment(customer);
            if (mesCustomerList != null)
                mes_customers.AddRange(mesCustomerList);
        }
        var groupBy = mes_customers.GroupBy(s => s.Type)
            .ToDictionary(g => g.Key, g => g.ToList());
        return UseTransaction(db =>
@@ -53,11 +65,13 @@
                switch (customerGroup.Key)
                {
                    case "0":
                        if (!UpdateCustomerStatusBatch(db, customerGroup.Value,"A"))
                        if (!UpdateCustomerStatusBatch(db, customerGroup.Value,
                                "A"))
                            throw new NotImplementedException("启用失败");
                        break;
                    case "1":
                        if (!UpdateCustomerStatusBatch(db, customerGroup.Value,"B"))
                        if (!UpdateCustomerStatusBatch(db, customerGroup.Value,
                                "B"))
                            throw new NotImplementedException("禁用失败");
                        break;
                    case "3":
@@ -110,39 +124,78 @@
        throw new NotImplementedException("删除失败");
    }
    private MesCustomer GetSysDepartment(ErpCustomer customer)
    private List<MesCustomer> GetSysDepartment(ErpCustomer customer)
    {
        return new MesCustomer
        var db = SqlSugarHelper.GetInstance();
        //var id = db.Insertable(insertObj).ExecuteReturnIdentity();
        //根据序列获取新的MES_ID
        List<MesCustomer> customers = new();
        foreach (var erpDetail in customer.ErpDetails)
        {
            Id = Convert.ToDecimal(customer.Id),
            CustNo = customer.FNumber,
            CustSname = customer.FShortName,
            CustName = customer.FName,
            Anred = customer.FContact,
            Telf1 = customer.FMobilephone,
            Fseller = customer.FSeller,
            decimal mesId = 0;
            var exists = db.Queryable<MesLinkU9>().Any(u =>
                u.U9Id == customer.Id && u.OrgId == erpDetail.FUseOrgId &&
                u.TableType == "MES_CUSTOMER");
            if (!exists)
            {
                mesId = GetSeqUtil.GetSeq("U9_MES_ID");
                var entity = new MesLinkU9
                {
                    CreateDate = DateTime.Now,
                    MesId = mesId.ToString(),
                    U9Id = customer.Id,
                    OrgId = erpDetail.FUseOrgId,
                    TableType = "MES_CUSTOMER"
                };
                var insertUser = db.Insertable(entity).ExecuteCommand();
            }
            else
            {
                mesId = Convert.ToDecimal(db.Queryable<MesLinkU9>()
                    .Where(u =>
                        u.U9Id == customer.Id &&
                        u.OrgId == erpDetail.FUseOrgId &&
                        u.TableType == "MES_CUSTOMER")
                    .Select(u => u.MesId) // 选择 MesId 字段
                    .First());
            }
            /// <summary>
            /// 接口字段调整:标准版接口新增 ERP单据状态 字段。
            /// </summary>
            /// <remarks>
            /// 修改人:<池南骏>
            /// 修改日期:<2024-12-27>
            /// 修改说明:
            /// - 原代码:空
            /// - 修改后:
            ///FDOCUMENTSTATUS = customer.FDocumentStatus,
            /// </remarks>
            FDOCUMENTSTATUS = customer.FDocumentStatus,
            var mesCustomer = new MesCustomer
            {
                Id = mesId,
                CustNo = customer.FNumber,
                CustSname = customer.FShortName,
                CustName = customer.FName,
                Anred = customer.FContact,
                Telf1 = customer.FMobilephone,
                Fseller = customer.FSeller,
                CUSTOMER_STATE = customer.State,
                Fforbidstatus = customer.FForbidStatus,
                UseOrg = Convert.ToDecimal(erpDetail.FUseOrgId),
                Type = customer.Type
            };
            Fforbidstatus = customer.FForbidStatus,
            Remark = customer.fremarks,
            CreateDate = DateTime.Now,
            CreateOrg= Convert.ToDecimal(customer.FCreateOrgId),
            UseOrg= Convert.ToDecimal(customer.FUseOrgId),
            Company = "1000",
            Factory = "1000"
        };
            customers.Add(mesCustomer);
        }
        //customers = customer.ErpDetails.Select(ErpDetails => new MesCustomer
        //{
        //    Id = GetSeqUtil.GetSeq("U9_MES_ID"),
        //    CustNo = customer.FNumber,
        //    CustSname = customer.FShortName,
        //    CustName = customer.FName,
        //    Anred = customer.FContact,
        //    Telf1 = customer.FMobilephone,
        //    Fseller = customer.FSeller,
        //    CUSTOMER_STATE = customer.State,
        //    Fforbidstatus = customer.FForbidStatus,
        //    UseOrg = Convert.ToDecimal(ErpDetails.FUseOrgId),
        //}).ToList();
        return customers;
    }
    private bool UpdateCustomerStatusBatch(SqlSugarScope db,
@@ -172,12 +225,35 @@
    private bool DeleteCustomerBatch(SqlSugarScope db,
        List<MesCustomer> customerList)
    {
        var ids = customerList.Select(it => it.Id).ToArray();
        var deleteByIds = db.Deleteable<MesCustomer>().In(ids).ExecuteCommand();
        if (deleteByIds > 0)
            return true;
        // 提取所有需要的 MesId 组合
        var mesIds = customerList.Select(customer => customer.Id.ToString())
            .ToList();
        throw new NotImplementedException("删除失败");
        // 使用这些 MesId 去查询 MesLinkU9 表,找到对应的 U9Id
        var u9Ids = db.Queryable<MesLinkU9>()
            .Where(u =>
                mesIds.Contains(u.MesId) && u.TableType == "MES_CUSTOMER")
            .Select(u => u.U9Id)
            .Distinct() // 应用 Distinct 去重
            .ToList();
        // 根据 U9Id 找到所有对应的 MesId,进行删除
        // 注意:这里假设您确实想要删除这些记录。如果不确定,请先查询以验证结果。
        var idsToDelete = db.Queryable<MesLinkU9>()
            .Where(u => u9Ids.Contains(u.U9Id) && u.TableType == "MES_CUSTOMER")
            .Select(u => u.MesId)
            .Distinct() // 应用 Distinct 去重
            .ToList();
        //以上方法可以考虑优化,将U9id找个新建字段存在MES_CUSTOMER中,就可以少一步查询了。
        var deleteByIds = db.Deleteable<MesCustomer>().In(idsToDelete)
            .ExecuteCommand();
        // if (deleteByIds > 0)
        //     return true;
        return true;
        //throw new NotImplementedException("删除失败");
    }
    /// <summary>
@@ -212,9 +288,9 @@
    /// 新代码
    private bool InsertOrUpdate(SqlSugarScope db, MesCustomer entity)
    {
        db.Deleteable<MesCustomer>()
            .Where(s => s.Id == entity.Id)
            .ExecuteCommand();
        //db.Deleteable<MesCustomer>()
        //    .Where(s => s.Id == entity.Id)
        //    .ExecuteCommand();
        var insert = db.Insertable(entity).ExecuteCommand();
        return insert > 0;
@@ -223,6 +299,10 @@
    private bool InsertOrUpdateBatch(SqlSugarScope db,
        List<MesCustomer> customerList)
    {
        //先删除,再新增
        if (!DeleteCustomerBatch(db, customerList))
            return false;
        foreach (var entity in customerList)
            if (!InsertOrUpdate(db, entity))
                return false;