using MES.Service.DB;
|
using System.Data;
|
using System.Globalization;
|
using MES.Service.Dto.webApi;
|
using MES.Service.Modes;
|
using SqlSugar;
|
using DbType = System.Data.DbType;
|
|
namespace MES.Service.service.BasicData;
|
|
public class SalesOrderManager : Repository<SalesOrder>
|
{
|
//当前类已经继承了 Repository 增、删、查、改的方法
|
|
private readonly SalesOrderDetailManager _SalesOrderDetailManager =
|
new();
|
//ErpSalesOrder
|
public bool Save(ErpSalesOrder SalesOrder)
|
{
|
var erpSalesOrderDto = SalesOrder.OrderDto;
|
var mesSalesOrder = ConvertErpToSalesOrder(SalesOrder);
|
var mesSalesOrderDatas = ConvertErpToSalesOrderDetail(SalesOrder);
|
|
return UseTransaction(db =>
|
{
|
switch (erpSalesOrderDto.Type)
|
{
|
// case "2":
|
// return InsertData(db, mesSalesOrder, mesSalesOrderDatas,
|
// rohInErpRohIn.FBILLTYPE)
|
// ? 1
|
// : 0;
|
case "3":
|
return UpdateData(db, mesSalesOrder, mesSalesOrderDatas) ? 1 : 0;
|
case "2":
|
case "4":
|
return SaveOrUpdateData(db, mesSalesOrder, mesSalesOrderDatas, erpSalesOrderDto.Type)
|
? 1
|
: 0;
|
default:
|
throw new NotImplementedException(
|
$"type没有{erpSalesOrderDto.Type}这个类型");
|
}
|
}) > 0;
|
}
|
|
private bool UpdateData(SqlSugarScope db, SalesOrder mesSalesOrder,
|
List<SalesOrderDetail> mesSalesOrderDatas)
|
{
|
var decimals = mesSalesOrderDatas.Select(s => s.Id).ToArray();
|
var update = base.DeleteById(mesSalesOrder.Id);
|
var insertOrUpdate = db
|
.Deleteable<SalesOrderDetail>().In(decimals)
|
.ExecuteCommand() > 0;
|
|
if (update && insertOrUpdate) return true;
|
throw new NotImplementedException("更新失败");
|
}
|
|
// 插入或更新数据的方法
|
private bool SaveOrUpdateData(SqlSugarScope db, SalesOrder mesSalesOrder,
|
List<SalesOrderDetail> mesSalesOrderDatas,string type)
|
{
|
if (mesSalesOrder.Id != null) base.DeleteById(mesSalesOrder.Id);
|
|
if (mesSalesOrderDatas.Count > 0)
|
db.Deleteable<SalesOrderDetail>()
|
.Where(s => s.Ehid == mesSalesOrder.Erpid).ExecuteCommand();
|
|
var orUpdate = base.Insert(mesSalesOrder);
|
var baOrUpdate = _SalesOrderDetailManager.InsertRange(mesSalesOrderDatas);
|
if (orUpdate && baOrUpdate) return true;
|
|
|
throw new NotImplementedException("插入或更新失败");
|
}
|
|
// 批量保存记录的方法
|
public bool SaveList(List<ErpSalesOrder> salesOrder)
|
{
|
var result = salesOrder.Select(Save).ToList();
|
return result.All(b => b);
|
}
|
|
private SalesOrder ConvertErpToSalesOrder(
|
ErpSalesOrder erpDto1)
|
{
|
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 erpDto = erpDto1.OrderDto;
|
var salesOrder = new SalesOrder
|
{
|
Id = erpDto.Id,
|
Erpid = erpDto.Erpid,
|
Fbillno = erpDto.Fbillno,
|
Fbilltypeid = erpDto.Fbilltypeid,
|
Fdocumentstatus = erpDto.Fdocumentstatus,
|
Fdate = erpDto.Fdate,
|
Fbusinesstype = erpDto.Fbusinesstype,
|
Fheaddeliveryway = erpDto.Fheaddeliveryway,
|
Fheadlocid = erpDto.Fheadlocid,
|
Fsaleorgid = erpDto.Fsaleorgid,
|
Fcustid = erpDto.Fcustid,
|
Fclosestatus = erpDto.Fclosestatus,
|
Fsaledeptid = erpDto.Fsaledeptid,
|
Fsalerid = erpDto.Fsalerid,
|
Fchangereason = erpDto.Fchangereason,
|
Fnote = erpDto.Fnote,
|
Fsettleid = erpDto.Fsettleid,
|
Fapproverid = erpDto.Fapproverid,
|
Flinkman = erpDto.Flinkman,
|
Fchargeid = erpDto.Fchargeid,
|
Flinkphone = erpDto.Flinkphone,
|
Fcreatorid = erpDto.Fcreatorid,
|
Fcreatedate = erpDto.Fcreatedate,
|
Fmodifierid = erpDto.Fmodifierid,
|
Fmodifydate = erpDto.Fmodifydate,
|
Fapprovedate = erpDto.Fapprovedate,
|
Fcloserid = erpDto.Fcloserid,
|
Fclosedate = erpDto.Fclosedate,
|
Fchangedate = erpDto.Fchangedate,
|
Fcancelstatus = erpDto.Fcancelstatus,
|
Fcancellerid = erpDto.Fcancellerid,
|
Fversionno = erpDto.Fversionno,
|
Fchangerid = erpDto.Fchangerid,
|
FWwcDate = erpDto.FWwcDate,
|
FWwcCheckbox = erpDto.FWwcCheckbox,
|
FWwcLargetext = erpDto.FWwcLargetext,
|
FWwcLargetext1 = erpDto.FWwcLargetext1,
|
Fentrynote = erpDto.Fentrynote
|
//ParseDateTime() ?? null
|
//long.Parse()
|
//Convert.ToDecimal()
|
//Convert.ToDouble()
|
};
|
|
var single = base.GetSingle(it => it.Erpid == erpDto.Erpid);
|
if (single != null) salesOrder.Id = single.Id;
|
|
return salesOrder;
|
}
|
|
private List<SalesOrderDetail> ConvertErpToSalesOrderDetail(
|
ErpSalesOrder erpDtoList)
|
{
|
var salesOrderSubList =
|
new List<SalesOrderDetail>();
|
|
|
foreach (var erpDto in erpDtoList.Items)
|
{
|
var salesOrderSub = new SalesOrderDetail
|
{
|
Id = erpDto.Id,
|
Erpid = erpDto.Erpid,
|
Ehid = erpDto.Ehid,
|
Fmaterialid = erpDto.Fmaterialid,
|
Funitid = erpDto.Funitid,
|
Fqty = erpDto.Fqty,
|
Fpriceunitid = erpDto.Fpriceunitid,
|
Fpriceunitqty = erpDto.Fpriceunitqty,
|
Fdeliverydate = erpDto.Fdeliverydate,
|
Fisfree = erpDto.Fisfree,
|
Fsettleorgids = erpDto.Fsettleorgids,
|
Fownertypeid = erpDto.Fownertypeid,
|
Fownerid = erpDto.Fownerid,
|
Fentrynote = erpDto.Fentrynote,
|
Fmtono = erpDto.Fmtono,
|
Flot = erpDto.Flot,
|
Fdeliverymaxqty = erpDto.Fdeliverymaxqty,
|
Fdeliveryminqty = erpDto.Fdeliveryminqty,
|
Foutlmtunitid = erpDto.Foutlmtunitid,
|
Fmrpclosestatus = erpDto.Fmrpclosestatus,
|
Fmrpterminatestatus = erpDto.Fmrpterminatestatus,
|
Fterminatedate = erpDto.Fterminatedate,
|
Fterminaterid = erpDto.Fterminaterid,
|
Fsrctype = erpDto.Fsrctype,
|
Fsrcbillno = erpDto.Fsrcbillno,
|
Fdeliqty = erpDto.Fdeliqty,
|
Fstockoutqty = erpDto.Fstockoutqty,
|
Fbaseretnoticeqty = erpDto.Fbaseretnoticeqty,
|
Fbasereturnqty = erpDto.Fbasereturnqty,
|
Fbaseremainoutqty = erpDto.Fbaseremainoutqty,
|
Fbasearqty = erpDto.Fbasearqty,
|
Fmapid = erpDto.Fmapid,
|
Fmapname = erpDto.Fmapname,
|
Fmapspec = erpDto.Fmapspec
|
};
|
|
var single = _SalesOrderDetailManager.GetSingle(it =>
|
it.Erpid == salesOrderSub.Erpid);
|
if (single != null) salesOrderSub.Id = single.Id;
|
|
salesOrderSubList.Add(salesOrderSub);
|
}
|
|
return salesOrderSubList;
|
}
|
}
|