南骏 池
2025-06-06 a4ae3bf5f1826e8e29a95da3dc2c947d713d4ebb
MES.Service/service/WomcaaManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,225 @@
using MES.Service.DB;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using MES.Service.util;
using SqlSugar;
namespace MES.Service.service;
public class WomcaaManager : Repository<Womcaa>
{
    //当前类已经继承了 Repository å¢žã€åˆ ã€æŸ¥ã€æ”¹çš„æ–¹æ³•
    //这里面写的代码不会给覆盖,如果要重新生成请删除 WomcaaManager.cs
    private readonly WomcabManager _womcabManager = new();
    public bool SaveList(List<ErpWOM> rohIns)
    {
        var result = rohIns.Select(Save).ToList();
        return result.All(b => b);
    }
    public bool Save(ErpWOM wom)
    {
        var womErpCaa = wom.ErpCaa;
        var mesWomcaa = MapErpCAAtoWomcaa(womErpCaa, wom.ErpCabs[0].FBillNo);
        var mesWomcabs =
            MapErpCABtoWomcab(wom.ErpCabs);
        return UseTransaction(db =>
        {
            switch (womErpCaa.Type)
            {
                case "3":
                    return UpdateData(db, mesWomcaa, mesWomcabs) ? 1 : 0;
                case "2":
                case "4":
                //kyy 2024-09-13 å˜æ›´
                case "5":
                    return SaveOrUpdateData(db, mesWomcaa, mesWomcabs)
                        ? 1
                        : 0;
                default:
                    throw new NotImplementedException(
                        $"type没有{womErpCaa.Type}这个类型");
            }
        }) > 0;
    }
    private bool SaveOrUpdateData(SqlSugarScope db, Womcaa mesWomcaa,
        List<Womcab> mesWomcabs)
    {
        if (StringUtil.CheckGuid(mesWomcaa.Guid))
            base.DeleteById(mesWomcaa.Guid);
        if (mesWomcabs.Count > 0)
            db.Deleteable<Womcab>()
                .Where(s => s.Pid == mesWomcaa.Erpid).ExecuteCommand();
        //单条插入忽略空字段
        var orUpdate = db.Insertable(mesWomcaa)
            .IgnoreColumns(true).ExecuteCommand() > 0;
        //批量插入忽略空字段
        var baOrUpdate = db.Insertable(mesWomcabs).PageSize(1)
            .IgnoreColumnsNull()
            .ExecuteCommand() > 0;
        if (orUpdate && baOrUpdate) return true;
        throw new NotImplementedException("插入或更新失败");
    }
    private bool UpdateData(SqlSugarScope db, Womcaa mesWomcaa,
        List<Womcab> mesWomcabs)
    {
        var decimals = mesWomcabs.Select(s => s.Guid).ToArray();
        var update = base.DeleteById(mesWomcaa.Guid);
        var insertOrUpdate = db
            .Deleteable<Womcab>().In(decimals)
            .ExecuteCommand() > 0;
        if (update && insertOrUpdate) return true;
        throw new NotImplementedException("更新失败");
    }
    private Womcaa MapErpCAAtoWomcaa(ErpCAA dto,string PPBOMNO)
    {
        var entity = new Womcaa
        {
            Erpid = Convert.ToInt32(dto.Id), ///     ERPID
            Caa001 = PPBOMNO, ///     å•号
            Caa021 = dto.FWorkShopID, ///     å·¥ä½œè½¦é—´
            RoutingId = dto.FRoutingId, ///     å·¥è‰ºè·¯çº¿
            WorkShopId = dto.FREMWorkShopId, ///     äº§çº¿
            DepotCode = dto.FStockId, ///     ä»“库
            CreateDate = dto.FDate, ///     å•据日期
            Caa004 = dto.FBILLTYPE, ///     å•据类型
            Caa023 = dto.FStatus, ///     çŠ¶æ€ å®Œå·¥ï¼Œæœªå®Œå·¥
            Caa006 = dto.FMaterialId, ///     äº§å“ç¼–码
            Caa009 = dto.FUnitId, ///     å•位
            Caa012 = !string.IsNullOrEmpty(dto.FQty)
                ? Convert.ToDecimal(dto.FQty)
                : null, ///     æ•°é‡
            WorkGroupId = dto.FWorkGroupId, ///     è®¡åˆ’组
            PlanId = dto.FPlannerID, ///     è®¡åˆ’员
            Caa010 = dto.FPlanStartDate, ///     é¢„计开工时间
            Caa011 = dto.FPlanFinishDate, ///     é¢„计完工时间
            Caa005 = DateTime.TryParse(dto.FConveyDate, out var conveyDate)
            ? (conveyDate <= new DateTime(1900, 1, 1) ? null : conveyDate.ToString())
                : null, ///     å¼€å•日期
            StockInlimith = dto.FStockInLimitH, ///     å…¥åº“上限
            StockInlimitl = dto.FStockInLimitL, ///     å…¥åº“下限
            Mtono = dto.FMTONO, ///     è®¡åˆ’跟踪号
            Lot = dto.FLot, ///     æ‰¹å·
            Caa013 = dto.FBomId, ///     BOM版次
            CreateType = dto.FCreateType, ///     ç”Ÿæˆæ–¹å¼
            SrcBillType = dto.FSrcBillType, ///     æºå•类型
            SrcBillNo = dto.FSrcBillNo, ///     æºå•编号
            SrcBillentryseq = dto.FSrcBillEntrySeq, ///     æºå•分录行号
            SaleOrderNo = dto.FSaleOrderNo, ///     éœ€æ±‚单据号
            SaleOrderEntryseq = dto.FSaleOrderEntrySeq, ///     éœ€æ±‚单据行号
            ForceCloserid = dto.FForceCloserId, ///     ç»“案人
            CloseType = dto.FCloseType, ///     ç»“案类型
            SrcSplitBillno = dto.FSrcSplitBillNo, ///     æºæ‹†åˆ†è®¢å•编号
            Caa016 = dto.FDESCRIPTION, ///     å¤‡æ³¨
            Caa018 = !string.IsNullOrEmpty(dto.PLAN_ID)
                ? Convert.ToInt32(dto.PLAN_ID)
                : null, ///     ERP源单ID
            Caa019 = !string.IsNullOrEmpty(dto.PLAN_SEQ)
                ? Convert.ToInt32(dto.PLAN_SEQ)
                : null, ///     ERP源单行号
            Caa020 = dto.PLAN_NUM, ///     ERP源单单号(任务单号)
            //Caa015 = dto.F_UNW_Text_xsddh, ///     é”€å”®è®¢å•号
            ErpSczz = Convert.ToInt32(dto.FPrdOrgId), ///     ç”Ÿäº§ç»„织ID
            ErpWtzz = Convert.ToInt32(dto.FEnTrustOrgId), ///     å§”托组织ID
            Btbz = dto.Btbz, ///     å§”托组织ID
            //Caa015Head = dto.F_XIFG_Integer_tzk, ///     é”€å”®è®¢å•行号
            //MainProductNo = dto.F_XIFG_Base_w5c, ///     ä¸»äº§å“ç¼–码
            // MainProductQty =
            //     Convert.ToInt32(dto.F_XIFG_Qty_yrr), ///     ä¸»äº§å“ç”Ÿäº§æ•°é‡
            // CustomerItemNumber = dto.F_XIFG_Text_fg2, ///     å®¢æˆ·è´§å·
            // PackingListNumber = dto.F_XIFG_Text_yrr, ///     åŒ…装单号
            // CustomerName = dto.F_XIFG_Text_qtr1, ///     å®¢æˆ·åç§°
            // Customer = dto.F_XIFG_Base_83g1, ///     å®¢æˆ·
            Caa0111 = dto.FPlanFinishDate, ///     é¢„计完工时间备份
            Typea = dto.TypeA, ///     é¢„计完工时间备份
            //Typeb = dto.TypeB ///     é¢„计完工时间备份
            SynchronousDate = DateTime.Now
        };
        var single = base.GetSingle(it => it.Erpid == entity.Erpid);
        if (single != null) entity.Guid = single.Guid;
        return entity;
    }
    private List<Womcab> MapErpCABtoWomcab(List<ErpCAB> dtoList)
    {
        var womcabList = new List<Womcab>();
        foreach (var dto in dtoList)
        {
            var womcab = new Womcab
            {
                Erpid = Convert.ToInt32(dto.Id), /// ERPID
                Cab001 = dto.FBillNo, /// å·¥å•单号
                Cab002 = Convert.ToInt32(dto.FSeq), /// åºå·
                Cab003 = dto.FMaterialID, /// ææ–™ç¼–码
                Cab006 = !string.IsNullOrEmpty(dto.FNeedQty)
                    ? Convert.ToDecimal(dto.FNeedQty)
                    : null, /// éœ€é¢†ç”¨é‡
                Cab007 = !string.IsNullOrEmpty(dto.FPickedQty)
                    ? Convert.ToDecimal(dto.FPickedQty)
                    : null, /// å·²é¢†ç”¨é‡
                PositionNo = dto.FPositionNO, /// ä½ç½®å·
                SupplyOrganization = dto.FChildSupplyOrgId, /// ä¾›åº”组织
                IssuingOrganization = dto.FSUPPLYORG, /// å‘料组织
                OwnerId = dto.FOwnerID, /// è´§ä¸»
                Mtono = dto.FMTONO, /// è®¡åˆ’跟踪号
                Lot = dto.FLot, /// æ‰¹å·
                DepotCode = dto.FStockID, /// ä»“库
                IssueType = dto.FIssueType, /// å‘料方式
                // Cab008 = dto.F_UNW_Text_tpgy, /// å·¥è‰º
                Cab009 = dto.FUnitID, /// å•位
                SupplyType = dto.FSupplyType, /// ä¾›åº”类型(C采购 Z自制 W委外)
                Cab012 = !string.IsNullOrEmpty(dto.FStdQty)
                    ? Convert.ToDecimal(dto.FStdQty)
                    : null, /// ç»„成用量
                Cab014 = dto.FIsKeyItem, /// æ˜¯å¦æ›¿æ–™
                Numerator = dto.FNumerator, /// åˆ†å­
                Denominator = dto.FDenominator, /// åˆ†æ¯
                Pid = Convert.ToInt32(dto.PID), /// ERP头ID
                Eid = Convert.ToInt32(dto.Id), /// ERP ID
                Scrapqty = dto.FFixScrapQty, /// å›ºå®šæŸè€—
                Scraprate = dto.FScrapRate, /// å˜åŠ¨æŸè€—çŽ‡
                Freplacegroup = Convert.ToInt32(dto.FReplaceGroup),
                UseRate = Convert.ToDecimal(dto.FUseRate),
                MaterialType = dto.FMaterialType,
                MustQty = Convert.ToDecimal(dto.FMustQty),
                Typeb = dto.TypeB
                // Fsaleorderno = dto.FSALEORDERNO, /// é”€å”®è®¢å•
                //
                // CustomerItemNumber = dto.F_XIFG_Text_re5, /// å®¢æˆ·è´§å·
                // PackingListNumber = dto.F_XIFG_Text_apv, /// åŒ…装单号
                // MainProduct = dto.F_XIFG_Base_re5, /// ä¸»äº§å“
                // MainProductQty =
                //     Convert.ToInt32(dto.F_XIFG_Qty_apv), /// ä¸»äº§å“æ•°é‡
                // ParentItemName = dto.F_XIFG_Base_apv /// çˆ¶é¡¹ç‰©æ–™åç§°
            };
            var entity = Db.Queryable<Womcab>()
                .Where(s => s.Eid == womcab.Eid).Single();
            if (entity != null) womcab.Guid = entity.Guid;
            womcabList.Add(womcab);
        }
        return womcabList;
    }
}