using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using MES.Service.DB;
|
using MES.Service.Dto.webApi;
|
using MES.Service.Modes;
|
|
namespace MES.Service.service
|
{
|
public class DbckaManager : Repository<Dbcka>
|
{
|
public bool SaveList(List<ERPDBCK> list)
|
{
|
var result = list.Select(Save).ToList();
|
return result.All(b => b);
|
}
|
|
public bool Save(ERPDBCK data)
|
{
|
var head = MapErpDbckaToDbcka(data.erpDbcka);
|
var details = MapErpDbckbToDbckb(data.erpDbckB);
|
|
return UseTransaction(db =>
|
{
|
switch (data.erpDbcka.type)
|
{
|
case "3":
|
return UpdateData(db, head, details) ? 1 : 0;
|
case "2":
|
case "4":
|
case "5":
|
return SaveOrUpdateData(db, head, details) ? 1 : 0;
|
default:
|
throw new NotImplementedException($"type没有 {data.erpDbcka.type} 这个类型");
|
}
|
}) > 0;
|
}
|
|
private Dbcka MapErpDbckaToDbcka(ErpDBCKA dto)
|
{
|
var entity = new Dbcka
|
{
|
Billno = dto.billno,
|
DjLx = dto.dj_lx,
|
DbLx1 = dto.db_lx1,
|
DbFx = dto.db_fx,
|
DbLx = dto.db_lx,
|
YwLx = dto.yw_lx,
|
DjZt = dto.dj_zt,
|
SqBm = dto.sq_bm,
|
SqZz = dto.sq_zz,
|
SqTime = DateTime.TryParse(dto.sq_time, out var d) ? d : null,
|
DcHz = dto.dc_hz,
|
Bz = dto.bz,
|
Type = dto.type,
|
Erpid = dto.erpid,
|
CreateDate = DateTime.Now
|
};
|
|
var single = base.GetSingle(it => it.Erpid == entity.Erpid);
|
if (single != null) entity.Id = single.Id;
|
|
return entity;
|
}
|
|
private List<Dbckb> MapErpDbckbToDbckb(List<ErpDBCKB> list)
|
{
|
var result = new List<Dbckb>();
|
|
foreach (var dto in list)
|
{
|
var item = new Dbckb
|
{
|
Itemid = dto.itemid,
|
Unit = dto.unit,
|
Quantity = decimal.TryParse(dto.quantity, out var qty) ? qty : null,
|
DcOrg = dto.dc_org,
|
DcDepot = dto.dc_depot,
|
DrOrg = dto.dr_org,
|
DrDepot = dto.dr_depot,
|
DcHz = dto.dc_hz,
|
DrHz = dto.dr_hz,
|
Bz = dto.bz,
|
Erpid = dto.erpid,
|
Eid = dto.eid
|
};
|
|
var existing = Db.Queryable<Dbckb>().Where(s => s.Erpid == item.Erpid).Single();
|
if (existing != null) item.Id = existing.Id;
|
|
result.Add(item);
|
}
|
|
return result;
|
}
|
|
private bool SaveOrUpdateData(SqlSugarScope db, Dbcka head, List<Dbckb> details)
|
{
|
if (head.Id != null)
|
base.DeleteById(head.Id);
|
|
db.Deleteable<Dbckb>()
|
.Where(d => d.Eid == head.Erpid)
|
.ExecuteCommand();
|
|
var insertedHead = db.Insertable(head)
|
.IgnoreColumns(true)
|
.ExecuteReturnEntity();
|
|
foreach (var item in details)
|
item.Pid = Convert.ToDecimal(insertedHead.Id);
|
|
var success = db.Insertable(details)
|
.PageSize(10)
|
.IgnoreColumnsNull()
|
.ExecuteCommand() > 0;
|
|
return insertedHead.Id != null && success;
|
}
|
|
private bool UpdateData(SqlSugarScope db, Dbcka head, List<Dbckb> details)
|
{
|
var ids = details.Select(d => d.Id).ToArray();
|
var deletedHead = base.DeleteById(head.Id);
|
var deletedDetails = db.Deleteable<Dbckb>().In(ids).ExecuteCommand() > 0;
|
|
return deletedHead && deletedDetails;
|
}
|
}
|
}
|