啊鑫
2025-07-07 79e43ccffd15afcd99934ee43b706f6133398079
MES.Service/service/MesCgsqManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,219 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using MES.Service.DB;
using MES.Service.Modes;
using MES.Service.Dto.webApi;
using System.Globalization;
using MES.Service.Dto.service;
namespace MES.Service.service
{
public class CgsqManager : Repository<Cgsq>
{
        private readonly CgsqDetailManager CgsqDetailManager = new();
        public bool Save(CgsqDto Cgsq)
        {
           // var CgsqDto = Cgsq.CgsqMain;
            var mesCgsq = ConvertErpToCgsq(Cgsq);
            var mesCgsqDatas = ConvertErpToCgsqDetail(Cgsq);
            return UseTransaction(db =>
            {
                switch (Cgsq.Type)
                {
                    // case "2":
                    //     return InsertData(db, mesSalesReturn, mesSalesReturnDatas,
                    //         rohInErpRohIn.FBILLTYPE)
                    //         ? 1
                    //         : 0;
                    case "3":
                        return UpdateData(db, mesCgsq, mesCgsqDatas) ? 1 : 0;
                    case "2":
                    case "4":
                        return SaveOrUpdateData(db, mesCgsq, mesCgsqDatas, Cgsq.Type)
                            ? 1
                            : 0;
                    default:
                        throw new NotImplementedException(
                            $"type没有{Cgsq.Type}这个类型");
                }
            }) > 0;
        }
        private bool UpdateData(SqlSugarScope db, Cgsq mesCgsq,
            List<CgsqDetail> mesCgsqDatas)
        {
            var decimals = mesCgsqDatas.Select(s => s.ERPID).ToArray();
            var update = base.DeleteById(mesCgsq.ERPID);
            var insertOrUpdate = db
                .Deleteable<CgsqDetail>().In(decimals)
                .ExecuteCommand() > 0;
            if (update && insertOrUpdate) return true;
            throw new NotImplementedException("更新失败");
        }
        // æ’入或更新数据的方法
        private bool SaveOrUpdateData(SqlSugarScope db, Cgsq mesCgsq,
            List<CgsqDetail> mesCgsqDatas, string type)
        {
            if (mesCgsq.ERPID != null)
                base.DeleteById(mesCgsq.ERPID);
            if (mesCgsqDatas.Count > 0)
                db.Deleteable<CgsqDetail>()
                    .Where(s => s.ERPHID == mesCgsq.ERPID).ExecuteCommand();
            //var orUpdate = base.Insert(mesCgsq);
            //var baOrUpdate = CgsqDetailManager.InsertRange(mesCgsqDatas);
            //if (orUpdate && baOrUpdate) return true;
            var update_res = UseTransaction(db =>
            {
                db.Insertable(mesCgsq).ExecuteCommand();
                for (int i = 0; i < mesCgsqDatas.Count; i++)
                {
                    var item = mesCgsqDatas[i];
                    //item.PID = id;
                    db.Insertable(item).IgnoreColumns(true).ExecuteCommand();
                }
                return 1;
            });
            if (update_res == 1) return true;
            throw new NotImplementedException("插入或更新失败");
        }
        // æ‰¹é‡ä¿å­˜è®°å½•的方法
        public bool SaveList(List<CgsqDto> CgsqOrder)
        {
            var result = CgsqOrder.Select(Save).ToList();
            return result.All(b => b);
        }
        private Cgsq ConvertErpToCgsq(
            CgsqDto erpDto)
        {
            DateTime parsedDate;
            // æ—¶é—´æ ¼å¼è½¬æ¢å‡½æ•°ï¼ŒERP时间格式为 "yyyy-MM-dd HH:mm:ss"
            DateTime? ParseDateTime(string dateStr)
            {
                if (DateTime.TryParseExact(dateStr, "yyyy-MM-dd HH:mm:ss",
                        CultureInfo.InvariantCulture,
                        DateTimeStyles.None,
                        out parsedDate))
                    return parsedDate;
                return null; // å¦‚果转换失败,返回null
            }
            var main = erpDto.CgsqMain;
            var CgsqOrder = new Cgsq
            {
                ERPID=main.ERPID,
                Fbilltypeid = main.Fbilltypeid,
                Fbillno = main.Fbillno,
                Fapplicationdate = main.Fapplicationdate,
                Frequesttype = main.Frequesttype,
                FUnwComboZjmj = main.FUnwComboZjmj,
                ApplyingOrganizationId = main.ApplyingOrganizationId,
                Fapplicationdeptid = main.Fapplicationdeptid,
                Fapplicantid = main.Fapplicantid,
                Fcurrencyid = main.Fcurrencyid,
                Facctype = main.Facctype,
                Fdocumentstatus = main.Fdocumentstatus,
                Fnote = main.Fnote,
                Fcreatorid = main.Fcreatorid,
                Fcreatedate = main.Fcreatedate,
                Fapproverid = main.Fapproverid,
                Fapprovedate = main.Fapprovedate,
                Fclosestatus = main.Fclosestatus,
                Fclosedate = main.Fclosedate,
                Fcloserid = main.Fcloserid,
                Fclosereason = main.Fclosereason,
                Fmodifierid = main.Fmodifierid,
                Fmodifydate = main.Fmodifydate,
                Fmanualclose = main.Fmanualclose
            };
           // var single = base.GetSingle(it => it.ERPID == main.ERPID);
           // if (single != null) CgsqOrder.ERPID = single.ERPID;
            return CgsqOrder;
        }
        private List<CgsqDetail> ConvertErpToCgsqDetail(
            CgsqDto erpDtoList)
        {
            var CgsqOrderSubList =
                new List<CgsqDetail>();
            DateTime parsedDate;
            // æ—¶é—´æ ¼å¼è½¬æ¢å‡½æ•°ï¼ŒERP时间格式为 "yyyy-MM-dd HH:mm:ss"
            DateTime? ParseDateTime(string dateStr)
            {
                if (DateTime.TryParseExact(dateStr, "yyyy-MM-dd HH:mm:ss",
                        CultureInfo.InvariantCulture,
                        DateTimeStyles.None,
                        out parsedDate))
                    return parsedDate;
                return null; // å¦‚果转换失败,返回null
            }
            foreach (var erpDto in erpDtoList.CgsqDT)
            {
                var CgsqOrderSub = new CgsqDetail
                {
                    ERPID = erpDto.ERPID,
                    ERPHID = erpDto.ERPHID,
                    LineNumber = erpDto.LineNumber,
                    FUnwTextXsddh = erpDto.FUnwTextXsddh,
                    OwnerOrganizationId = erpDto.OwnerOrganizationId,
                    Fmaterialid = erpDto.Fmaterialid,
                    Fmaterialmodel = erpDto.Fmaterialmodel,
                    Fmaterialname = erpDto.Fmaterialname,
                    Funitid = erpDto.Funitid,
                    Freqqty = erpDto.Freqqty,
                    Fapproveqty = erpDto.Fapproveqty,
                    Farrivaldate = erpDto.Farrivaldate,
                    Fsuggestpurdate = erpDto.Fsuggestpurdate,
                    BuyerOrganizationId = erpDto.BuyerOrganizationId,
                    Fsuggestsupplierid = erpDto.Fsuggestsupplierid,
                    WarehouseId = erpDto.WarehouseId,
                    Freqstockunitid = erpDto.Freqstockunitid,
                    Freqstockqty = erpDto.Freqstockqty,
                    Fpriceunitid = erpDto.Fpriceunitid,
                    Fpriceunitqty = erpDto.Fpriceunitqty,
                    Fleadtime = erpDto.Fleadtime,
                    Fmtono = erpDto.Fmtono,
                    Freqtraceno = erpDto.Freqtraceno,
                    Fdemandbillno = erpDto.Fdemandbillno,
                    Fdemandbillentryseq = erpDto.Fdemandbillentryseq,
                    Fmrpterminatestatus = erpDto.Fmrpterminatestatus,
                    Fterminaterid = erpDto.Fterminaterid,
                    Fterminatedate = erpDto.Fterminatedate
                };
                /*var single = CgsqDetailManager.GetSingle(it =>
                    it.ERPID == CgsqOrderSub.ERPID);
                if (single != null) CgsqOrderSub.ERPID = single.ERPID;*/
                CgsqOrderSubList.Add(CgsqOrderSub);
            }
            return CgsqOrderSubList;
        }
    }
}