using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using MES.Service.DB;
|
using MES.Service.Modes;
|
using MES.Service.Dto.service;
|
using System.Globalization;
|
|
namespace MES.Service.service
|
{
|
public class MesBomMasterManager : Repository<MesBomMaster>
|
{
|
private readonly MesBomDetail1Manager MesBomDetail1Manager = new();
|
private readonly MesBomDetail2Manager MesBomDetail2Manager = new();
|
|
public bool Save(MesBomDto MesBom)
|
{
|
// var MesBomDto = MesBom.Main;
|
var mesMesBom = ConvertErpToMesBom(MesBom);
|
var mesMesBomDatas1 = ConvertErpToMesBomDetail1(MesBom);
|
var mesMesBomDatas2 = ConvertErpToMesBomDetail2(MesBom);
|
|
return UseTransaction(db =>
|
{
|
switch (MesBom.Type)
|
{
|
// case "2":
|
// return InsertData(db, mesSalesReturn, mesSalesReturnDatas,
|
// rohInErpRohIn.FBILLTYPE)
|
// ? 1
|
// : 0;
|
case "3":
|
return UpdateData(db, mesMesBom, mesMesBomDatas1, mesMesBomDatas2) ? 1 : 0;
|
case "2":
|
case "4":
|
return SaveOrUpdateData(db, mesMesBom, mesMesBomDatas1, mesMesBomDatas2, MesBom.Type)
|
? 1
|
: 0;
|
default:
|
throw new NotImplementedException(
|
$"type没有{MesBom.Type}这个类型");
|
}
|
}) > 0;
|
}
|
|
private bool UpdateData(SqlSugarScope db, MesBomMaster mesMesBom,
|
List<MesBomDetail1> mesMesBomDatas1, List<MesBomDetail2> mesMesBomDatas2)
|
{
|
|
//删除相同ERPID相同BOM更新类型的单据
|
var query = db.Queryable<MesBomMaster>()
|
.Where(s => s.Erpid == mesMesBom.Erpid);
|
|
if (mesMesBom.BomUpdateType != "1")
|
{
|
if (string.IsNullOrEmpty(mesMesBom.BomUpdateType))
|
{
|
query = query.Where(s => string.IsNullOrEmpty(s.BomUpdateType));
|
}
|
else
|
{
|
query = query.Where(s => s.BomUpdateType == mesMesBom.BomUpdateType);
|
}
|
|
decimal? ID = query.Select(s => s.Id).First();
|
|
var update = base.DeleteById(ID);
|
|
var insertOrUpdate1 = db.Deleteable<MesBomDetail1>()
|
.Where(s => s.Mid == ID)
|
.ExecuteCommand() > 0;
|
|
var insertOrUpdate2 = true;
|
|
if (mesMesBomDatas2.Count > 0)
|
{
|
insertOrUpdate2 = db.Deleteable<MesBomDetail2>()
|
.Where(s => s.Mid == ID)
|
.ExecuteCommand() > 0; ;
|
// deleted 为 true 表示有记录被删除
|
}
|
|
if (update && insertOrUpdate1 && insertOrUpdate2) return true;
|
throw new NotImplementedException("更新失败");
|
}
|
return true;
|
}
|
|
// 插入或更新数据的方法
|
private bool SaveOrUpdateData(SqlSugarScope db, MesBomMaster mesMesBom,
|
List<MesBomDetail1> mesMesBomDatas1, List<MesBomDetail2> mesMesBomDatas2, string type)
|
{
|
//相同ERPID不同BOM更新类型的单据保留
|
var query = db.Queryable<MesBomMaster>()
|
.Where(s => s.Erpid == mesMesBom.Erpid);
|
|
if (string.IsNullOrEmpty(mesMesBom.BomUpdateType))
|
{
|
query = query.Where(s => string.IsNullOrEmpty(s.BomUpdateType));
|
}
|
else
|
{
|
query = query.Where(s => s.BomUpdateType == mesMesBom.BomUpdateType);
|
}
|
|
decimal? ID = query.Select(s => s.Id).First();
|
|
if (ID != null)
|
{
|
if (mesMesBom.Erpid != null)
|
db.Deleteable<MesBomMaster>()
|
.Where(s => s.Id == ID)
|
.ExecuteCommand();
|
|
if (mesMesBomDatas1.Count > 0)
|
db.Deleteable<MesBomDetail1>()
|
.Where(s => s.Mid == ID).ExecuteCommand();
|
|
if (mesMesBomDatas2.Count > 0)
|
db.Deleteable<MesBomDetail2>()
|
.Where(s => s.Mid == ID).ExecuteCommand();
|
}
|
|
|
//var orUpdate = base.Insert(mesMesBom);
|
//var baOrUpdate = MesBomDetail1Manager.InsertRange(mesMesBomDatas1);
|
//if (orUpdate && baOrUpdate) return true;
|
var update_res = UseTransaction(db =>
|
{
|
//获取主表插入后的主键
|
var insertedId = db.Insertable(mesMesBom).ExecuteReturnIdentity();
|
|
for (int i = 0; i < mesMesBomDatas1.Count; i++)
|
{
|
var item = mesMesBomDatas1[i];
|
item.Mid = insertedId;
|
db.Insertable(item).IgnoreColumns(true).ExecuteCommand();
|
}
|
|
|
for (int i = 0; i < mesMesBomDatas2.Count; i++)
|
{
|
var item = mesMesBomDatas2[i];
|
item.Mid = insertedId;
|
db.Insertable(item).IgnoreColumns(true).ExecuteCommand();
|
}
|
|
return 1;
|
});
|
|
if (update_res == 1) return true;
|
throw new NotImplementedException("插入或更新失败");
|
}
|
|
// 批量保存记录的方法
|
public bool SaveList(List<MesBomDto> MesBomOrder)
|
{
|
var result = MesBomOrder.Select(Save).ToList();
|
return result.All(b => b);
|
}
|
|
private MesBomMaster ConvertErpToMesBom(
|
MesBomDto erpDto)
|
{
|
DateTime parsedDate;
|
|
var main = erpDto.Main;
|
var MesBomOrder = new MesBomMaster
|
{
|
Erpid = main.Erpid,
|
Fbilltype = main.Fbilltype,
|
Fbomcategory = main.Fbomcategory,
|
Fbomuse = main.Fbomuse,
|
Fgroup = main.Fgroup,
|
Fnumber = main.Fnumber,
|
FUnwBomBb = main.FUnwBomBb,
|
EffectiveDate = main.EffectiveDate,
|
ExpirationDate = main.ExpirationDate,
|
Fmaterialid = main.Fmaterialid,
|
Fitemname = main.Fitemname,
|
Fbaseunitid = main.Fbaseunitid,
|
Fcreatorid = main.Fcreatorid,
|
Fcreatedate = main.Fcreatedate,
|
Fitempproperty = main.Fitempproperty,
|
Fdescription = main.Fdescription,
|
Fmodifierid = main.Fmodifierid,
|
Fmodifydate = main.Fmodifydate,
|
Fapproverid = main.Fapproverid,
|
Fapprovedate = main.Fapprovedate,
|
Fforbidreson = main.Fforbidreson,
|
Fforbidstatus = main.Fforbidstatus,
|
Fforbidderid = main.Fforbidderid,
|
Fforbiddate = main.Fforbiddate,
|
CreateOrganization = main.CreateOrganization,
|
UsingOrganization = main.UsingOrganization,
|
Routing = main.Routing,
|
FUnwTextTpgy = main.FUnwTextTpgy,
|
BomUpdateType = main.BomUpdateType
|
};
|
|
// var single = base.GetSingle(it => it.Erpid == main.Erpid);
|
// if (single != null) MesBomOrder.Erpid = single.Erpid;
|
|
return MesBomOrder;
|
}
|
|
private List<MesBomDetail1> ConvertErpToMesBomDetail1(
|
MesBomDto erpDtoList)
|
|
{
|
var MesBomOrderSubList =
|
new List<MesBomDetail1>();
|
|
|
foreach (var erpDto in erpDtoList.DT1)
|
{
|
var MesBomOrderSub = new MesBomDetail1
|
{
|
Erpid = erpDto.Erpid,
|
Erphid = erpDto.Erphid,
|
Freplacegroup = erpDto.Freplacegroup,
|
Fscraprate = erpDto.Fscraprate,
|
Fpositionno = erpDto.Fpositionno,
|
Fmaterialidchild = erpDto.Fmaterialidchild,
|
Fnumerator = erpDto.Fnumerator,
|
Fdenominator = erpDto.Fdenominator,
|
Fchilditemname = erpDto.Fchilditemname,
|
Fchilditemproperty = erpDto.Fchilditemproperty,
|
Fsupplytype = erpDto.Fsupplytype,
|
Fmaterialtype = erpDto.Fmaterialtype,
|
FUnwBzds1 = erpDto.FUnwBzds1,
|
Fchildunitid = erpDto.Fchildunitid,
|
Fdosagetype = erpDto.Fdosagetype,
|
Fbomid = erpDto.Fbomid,
|
Fmemo = erpDto.Fmemo,
|
Fstockid = erpDto.Fstockid,
|
Fisskip = erpDto.Fisskip,
|
Fismulcsd = erpDto.Fismulcsd,
|
Feffectdate = erpDto.Feffectdate,
|
Fexpiredate = erpDto.Fexpiredate,
|
Fissuetype = erpDto.Fissuetype,
|
Fnetdemandrate = erpDto.Fnetdemandrate,
|
FUnwTextTpgyZ = erpDto.FUnwTextTpgyZ,
|
Fbackflushtype = erpDto.Fbackflushtype,
|
Fovercontrolmode = erpDto.Fovercontrolmode,
|
Fbpminissueqty = erpDto.Fbpminissueqty,
|
Fisminissueqty = erpDto.Fisminissueqty,
|
Fisgetscrap = erpDto.Fisgetscrap,
|
Foptqueue = erpDto.Foptqueue,
|
Foperid = erpDto.Foperid,
|
Fprocessid = erpDto.Fprocessid,
|
FUnwJjds1 = erpDto.FUnwJjds1
|
|
};
|
|
/*var single = MesBomDetail1Manager.GetSingle(it =>
|
it.Erpid == MesBomOrderSub.Erpid);
|
if (single != null) MesBomOrderSub.Erpid = single.Erpid;*/
|
|
MesBomOrderSubList.Add(MesBomOrderSub);
|
}
|
|
return MesBomOrderSubList;
|
}
|
|
|
|
|
private List<MesBomDetail2> ConvertErpToMesBomDetail2(
|
MesBomDto erpDtoList)
|
|
{
|
var MesBomOrderSubList =
|
new List<MesBomDetail2>();
|
|
foreach (var erpDto in erpDtoList.DT2)
|
{
|
var MesBomOrderSub = new MesBomDetail2
|
{
|
Erpid = erpDto.Erpid,
|
Erphid = erpDto.Erphid,
|
Fstartqty = erpDto.Fstartqty,
|
Fendqty = erpDto.Fendqty,
|
Funitidlot = erpDto.Funitidlot,
|
Ffixscrapqtylot = erpDto.Ffixscrapqtylot,
|
Fscrapratelot = erpDto.Fscrapratelot,
|
Fnumeratorlot = erpDto.Fnumeratorlot,
|
Fdenominatorlot = erpDto.Fdenominatorlot,
|
Fmaterialidlotbased = erpDto.Fmaterialidlotbased,
|
LineNumber = erpDto.LineNumber
|
|
};
|
|
/*var single = MesBomDetail2Manager.GetSingle(it =>
|
it.Erpid == MesBomOrderSub.Erpid);
|
if (single != null) MesBomOrderSub.Erpid = single.Erpid;*/
|
|
MesBomOrderSubList.Add(MesBomOrderSub);
|
}
|
|
return MesBomOrderSubList;
|
}
|
}
|
|
|
|
}
|