using System.Globalization;
|
using MES.Service.DB;
|
using MES.Service.Dto.webApi;
|
using MES.Service.Modes;
|
using SqlSugar;
|
|
namespace MES.Service.service.BasicData.Production;
|
|
public class ProductionOrderManager : Repository<Womcaa>
|
{
|
//当前类已经继承了 Repository 增、删、查、改的方法
|
|
private readonly ProductionOrderSubManager _productionOrderSubManager =
|
new();
|
|
|
//ErpWYOrder
|
public bool Save(ErpWYOrder wyOrder)
|
{
|
var erpProductionOrderDto = wyOrder.OrderDto;
|
var mesRohIn = ConvertErpToProductionOrder(erpProductionOrderDto);
|
var mesRohInDatas =
|
ConvertErpToProductionOrderSub(wyOrder.Items);
|
|
return UseTransaction(db =>
|
{
|
switch (erpProductionOrderDto.Type)
|
{
|
// case "2":
|
// return InsertData(db, mesRohIn, mesRohInDatas,
|
// rohInErpRohIn.FBILLTYPE)
|
// ? 1
|
// : 0;
|
case "3":
|
return UpdateData(db, mesRohIn, mesRohInDatas) ? 1 : 0;
|
case "2":
|
case "4":
|
return SaveOrUpdateData(db, mesRohIn, mesRohInDatas,
|
erpProductionOrderDto.Type)
|
? 1
|
: 0;
|
default:
|
throw new NotImplementedException(
|
$"type没有{erpProductionOrderDto.Type}这个类型");
|
}
|
}) > 0;
|
}
|
|
private bool UpdateData(SqlSugarScope db, Womcaa womcaaWW,
|
List<Womcab> mesRohInDatas)
|
{
|
var decimals = mesRohInDatas.Select(s => s.Id).ToArray();
|
var update = base.DeleteById(womcaaWW.Id);
|
var insertOrUpdate = db
|
.Deleteable<Womcab>().In(decimals)
|
.ExecuteCommand() > 0;
|
|
if (update && insertOrUpdate) return true;
|
throw new NotImplementedException("更新失败");
|
}
|
|
// 插入或更新数据的方法
|
private bool SaveOrUpdateData(SqlSugarScope db, Womcaa mesWomcaa,
|
List<Womcab> mesWomcabss, string type)
|
{
|
//if (StringUtil.CheckGuid(mesRohIn.Guid))
|
// db.Deleteable<ProductionOrder>()
|
// .Where(s => s.Guid == mesRohIn.Guid)
|
// .ExecuteCommand();
|
|
if (mesWomcaa.Id != null) base.DeleteById(mesWomcaa.Id);
|
|
if (mesWomcabss.Count > 0)
|
db.Deleteable<Womcab>()
|
.Where(s => s.Eid == mesWomcaa.Erpid).ExecuteCommand();
|
|
var orUpdate = db.Insertable(mesWomcaa)
|
.IgnoreColumns(true).ExecuteCommand() > 0;
|
|
|
var baOrUpdate = db.Insertable(mesWomcabss).PageSize(1)
|
.IgnoreColumnsNull()
|
.ExecuteCommand() > 0;
|
|
if (orUpdate && baOrUpdate) return true;
|
|
throw new NotImplementedException("插入或更新失败");
|
}
|
|
// 批量保存记录的方法
|
public bool SaveList(List<ErpWYOrder> rohIns)
|
{
|
var result = rohIns.Select(Save).ToList();
|
return result.All(b => b);
|
}
|
|
private Womcaa ConvertErpToProductionOrder(
|
ErpProductionOrderDto erpDto)
|
{
|
DateTime parsedDate;
|
|
// 时间格式转换函数,ERP时间格式为 "yyyy-MM-dd HH:mm:ss.fff"
|
DateTime? ParseDateTime(string dateStr)
|
{
|
if (DateTime.TryParseExact(dateStr, "yyyy-MM-dd HH:mm:ss.fff",
|
CultureInfo.InvariantCulture,
|
DateTimeStyles.None,
|
out parsedDate))
|
return parsedDate;
|
|
return null; // 如果转换失败,返回null
|
}
|
|
var entity = new Womcaa
|
{
|
Caa001 = erpDto.ppbombillno, /// 单号
|
//Caa001 = erpDto.FBillNo,
|
DepotCode = erpDto.FStockID,
|
CreateDate = erpDto.FDate, // ParseDateTime(erpDto.FDate) ?? null,
|
Caa004 = erpDto.FBillType,
|
Caa023 = erpDto.FStatus,
|
Caa006 = erpDto.FMaterialId,
|
Caa009 = erpDto.FUnitID,
|
Caa012 = Convert.ToDecimal(erpDto.FQty),
|
WorkGroupId = erpDto.FWorkGroupId,
|
PlanId = erpDto.FPlannerID,
|
Caa010 = erpDto.FPlanStartDate,
|
//ParseDateTime(erpDto.FPlanStartDate) ?? null,
|
Caa011 = erpDto.FPlanFinishDate,
|
//ParseDateTime(erpDto.FPlanFinishDate) ?? null,
|
|
PLANCONFIRMATION = erpDto.PlanConfirmation,
|
StockInlimith =
|
erpDto
|
.FStockInLimitH, //Convert.ToDecimal(erpDto.FStockInLimitH),
|
StockInlimitl =
|
erpDto
|
.FStockInLimitL, //Convert.ToDecimal(erpDto.FStockInLimitL),
|
Mtono = erpDto.FMTONO,
|
Lot = erpDto.FLot,
|
Caa013 = erpDto.FBomId,
|
//SalesOrderNo = erpDto.F_UNW_XSDDH,
|
CreateType = erpDto.FCreateType,
|
FSUBID = erpDto.FSUBID,
|
FSUBBILLNOSEQ = erpDto.FSUBBILLNOSEQ,
|
FSUBBILLNO = erpDto.FSUBBILLNO,
|
SrcBillType = erpDto.FSrcBillType,
|
SrcBillNo = erpDto.FSrcBillNo,
|
SrcBillentryseq = erpDto.FSrcBillEntrySeq,
|
FREQSRC = erpDto.FReqSrc,
|
SaleOrderNo = erpDto.FSALEORDERNO,
|
SaleOrderEntryseq = erpDto.FSaleOrderEntrySeq,
|
ForceCloserid = erpDto.FFORCECLOSERID,
|
CloseType = erpDto.FCloseType,
|
SrcSplitBillno = erpDto.FDescription,
|
SRCSPLITSEQ = erpDto.SrcSplitSeq,
|
Erpid = Convert.ToDecimal(erpDto.FID),
|
FSUBENTRYID = erpDto.FSUBENTRYID,
|
FPURORDERNO = erpDto.FPurOrderNo,
|
FPURORDERENTRYSEQ =
|
erpDto
|
.FPurOrderEntrySeq, //Convert.ToInt32(erpDto.FPurOrderEntrySeq),
|
FBASESTOCKINQTY = Convert.ToDecimal(erpDto.FBaseStockInQty),
|
FBASENOSTOCKINQTY = Convert.ToDecimal(erpDto.FBaseNoStockInQty),
|
FINSTOCKOWNERID = erpDto.FInStockOwnerId,
|
//PlanConfirmation = erpDto.PlanConfirmation != null
|
// ? DateTime.ParseExact(erpDto.PlanConfirmation,
|
// "yyyy-MM-dd HH:mm:ss", null)
|
// : null,
|
Typea = erpDto.TypeA,
|
F_WWDD_SCTZD = erpDto.F_WWDD_SCTZD,
|
F_WWDD_XH = erpDto.F_WWDD_XH,
|
F_XIFG_TEXT_TZK = erpDto.F_XIFG_Text_tzk
|
};
|
|
var single = base.GetSingle(it => it.Erpid == entity.Erpid);
|
if (single != null) entity.Id = single.Id;
|
|
return entity;
|
}
|
|
private List<Womcab> ConvertErpToProductionOrderSub(
|
List<ErpProductionOrderSubDto> erpDtoList)
|
{
|
var productionOrderSubList =
|
new List<Womcab>();
|
|
foreach (var erpDto in erpDtoList)
|
{
|
var productionOrderSub = new Womcab
|
{
|
Cab001 = erpDto.FBillNo,
|
Cab002 = erpDto.FSEQ, //Convert.ToInt32(erpDto.FSEQ),
|
Cab003 = erpDto.FMaterialID2,
|
MustQty = Convert.ToDecimal(erpDto.FMustQty),
|
Cab006 = Convert.ToDecimal(erpDto.FMustQty),
|
Cab007 = Convert.ToDecimal(erpDto.FPickedQty),
|
PositionNo = erpDto.FPositionNO,
|
OwnerId = erpDto.FOwnerID,
|
Mtono = erpDto.FMTONO,
|
Lot = erpDto.FLot,
|
DepotCode = erpDto.FStockID,
|
IssueType = erpDto.FIssueType,
|
//Unit = erpDto.FUnitID2,
|
SupplyType = erpDto.FSupplyType,
|
|
|
Numerator = Convert.ToDecimal(erpDto.FNumerator),
|
Denominator = Convert.ToDecimal(erpDto.FDenominator),
|
Erpid = Convert.ToDecimal(erpDto.FPPOMENTRYID),
|
Eid = Convert.ToDecimal(erpDto.FPPOMID),
|
SCRAPQTY = Convert.ToDecimal(erpDto.FFixScrapQty),
|
SCRAPRATE = Convert.ToDecimal(erpDto.FScrapRate),
|
MaterialType = erpDto.FMaterialType,
|
//Unit2 = erpDto.FUnitID3,
|
Freplacegroup = Convert.ToInt32(erpDto.FReplaceGroup),
|
//OwnerType = erpDto.FOwnerTypeId,
|
//Owner = erpDto.FOwnerID2,
|
|
Fisgetscrap = erpDto.FISGETSCRAP,
|
Fiskeycomponent = erpDto.FISKEYCOMPONENT,
|
Fsrctransorgid = erpDto.FSRCTRANSORGID,
|
Fsrctransstockid = erpDto.FSRCTRANSSTOCKID,
|
Fstockstatusid = erpDto.FSTOCKSTATUSID,
|
Fneeddate = erpDto.FNEEDDATE != null
|
? DateTime.ParseExact(erpDto.FNEEDDATE,
|
"yyyy-MM-dd HH:mm:ss", null)
|
: null,
|
Freservetype = erpDto.FRESERVETYPE,
|
Fmemo = erpDto.FMEMO,
|
Typeb = erpDto.TypeB,
|
ErpProductionEntryCode = erpDto.FSUBENTRYID,
|
FOWNERTYPEID = erpDto.FOwnerTypeId,
|
F_XIFG_BASE_RE5 = erpDto.F_XIFG_Base_re5,
|
FUNITID2 = erpDto.FUnitID2,
|
FUNITID3 = erpDto.FUnitID3
|
};
|
|
var single =
|
base.GetSingle(it => it.Erpid == productionOrderSub.Erpid);
|
if (single != null) productionOrderSub.Id = single.Id;
|
|
productionOrderSubList.Add(productionOrderSub);
|
}
|
|
return productionOrderSubList;
|
}
|
}
|