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 ZzcxManager : Repository<ZZCX>
|
{
|
public bool SaveList(List<ERPZZCXD> list)
|
{
|
var result = list.Select(Save).ToList();
|
return result.All(b => b);
|
}
|
|
public bool Save(ERPZZCXD data)
|
{
|
var head = MapErpToMesHead(data.Main);
|
var children = MapErpChildren(data.Children, data.Main.erpid);
|
|
return UseTransaction(db =>
|
{
|
switch (data.Main.type)
|
{
|
case "3": // 删除 / 禁用
|
return UpdateData(db, head, children) ? 1 : 0;
|
|
case "2":
|
case "4":
|
case "5": // 新增或更新
|
return SaveOrUpdateData(db, head, children) ? 1 : 0;
|
|
default:
|
throw new NotImplementedException($"type 没有 {data.Main.type} 这个类型");
|
}
|
}) > 0;
|
}
|
|
private ZZCX MapErpToMesHead(ERPZZCXMain dto)
|
{
|
var entity = new ZZCX
|
{
|
BillNo = dto.bill_no, // 单据编码
|
Erpid = string.IsNullOrEmpty(dto.erpid) ? (decimal?)null : Convert.ToDecimal(dto.erpid),
|
// ERP 主表 ID
|
DjLx = dto.dj_lx,
|
KcZz = dto.kc_zz,
|
SwLx = dto.sw_lx,
|
// Time = string.IsNullOrEmpty(dto.time) ? (DateTime?)null : DateTime.Parse(dto.time),
|
Time = dto.time,
|
Bm = dto.bm,
|
Cgy = dto.cgy,
|
Kcz = dto.kcz,
|
DjZt = dto.dj_zt,
|
Memo = dto.memo,
|
Cphzlx = dto.cphzlx,
|
Cphz = dto.cphz,
|
Zjhzlx = dto.zjhzlx,
|
Zjhz = dto.zjhz,
|
};
|
|
var single = Db.Queryable<ZZCX>()
|
.Where(it => it.Erpid == entity.Erpid)
|
.First();
|
if (single != null)
|
entity.Id = single.Id;
|
|
return entity;
|
}
|
|
private List<ZZCXA> MapErpChildren(List<ERPZZCXA> list, string mainErpId)
|
{
|
var result = new List<ZZCXA>();
|
|
foreach (var dto in list)
|
{
|
var item = new ZZCXA
|
{
|
/* BillNo = dto.bill_no,
|
DjLx = dto.dj_lx,
|
KcZz = dto.kc_zz,
|
SwLx = dto.sw_lx,
|
// Time = string.IsNullOrEmpty(dto.time) ? (DateTime?)null : DateTime.Parse(dto.time),
|
Time = dto.time,
|
Bm = dto.bm,
|
Cgy = dto.cgy,
|
Kcz = dto.kcz,
|
DjZt = dto.dj_zt,
|
Memo = dto.memo,
|
Cphzlx = dto.cphzlx,
|
Cphz = dto.cphz,
|
Zjhzlx = dto.zjhzlx,
|
Zjhz = dto.zjhz,*/
|
Erpid = string.IsNullOrEmpty(dto.erpid) ? (decimal?)null : Convert.ToDecimal(dto.erpid),
|
YdId = string.IsNullOrEmpty(dto.yd_id) ? (decimal?)null : Convert.ToDecimal(dto.yd_id),
|
ItemId = string.IsNullOrEmpty(dto.item_id) ? (decimal?)null : Convert.ToDecimal(dto.item_id),
|
Qty = string.IsNullOrEmpty(dto.qty) ? (decimal?)null : Convert.ToDecimal(dto.qty),
|
Unit = dto.unit,
|
DepotId = string.IsNullOrEmpty(dto.depot_id) ? (decimal?)null : Convert.ToDecimal(dto.depot_id)
|
|
};
|
|
var existing = Db.Queryable<ZZCXA>().Where(s => s.Erpid == item.Erpid).Single();
|
if (existing != null) item.Id = existing.Id;
|
|
result.Add(item);
|
|
// 孙表处理
|
if (dto.SubItems != null && dto.SubItems.Count > 0)
|
{
|
foreach (var subDto in dto.SubItems)
|
{
|
var subEntity = new ZZCXB
|
{
|
Eid = string.IsNullOrEmpty(subDto.eid) ? (decimal?)null : Convert.ToDecimal(subDto.eid),
|
Erpid = string.IsNullOrEmpty(subDto.erpid) ? (decimal?)null : Convert.ToDecimal(subDto.erpid),
|
YdId = string.IsNullOrEmpty(subDto.yd_id) ? (decimal?)null : Convert.ToDecimal(subDto.yd_id),
|
ItemId = string.IsNullOrEmpty(subDto.item_id) ? (decimal?)null : Convert.ToDecimal(subDto.item_id),
|
Qty = string.IsNullOrEmpty(subDto.qty) ? (decimal?)null : Convert.ToDecimal(subDto.qty),
|
Unit = subDto.unit,
|
DepotId = string.IsNullOrEmpty(subDto.depot_id) ? (decimal?)null : Convert.ToDecimal(subDto.depot_id),
|
LotNo = subDto.lot_no,
|
Memo = subDto.memo
|
};
|
|
var existingSub = Db.Queryable<ZZCXB>().Where(s => s.Eid == subEntity.Eid).Single();
|
if (existingSub != null) subEntity.Id = existingSub.Id;
|
|
item.SubItems ??= new List<ZZCXB>();
|
item.SubItems.Add(subEntity);
|
}
|
}
|
}
|
|
return result;
|
}
|
|
private bool SaveOrUpdateData(SqlSugarScope db, ZZCX head, List<ZZCXA> children)
|
{
|
// 1. 校验是否存在领料记录(MES_INV_ITEM_OUTS)
|
var hasMaterialOut = db.Queryable<MesInvItemOuts>()
|
.Any(x => x.WorkNo == head.BillNo);
|
|
if (hasMaterialOut)
|
{
|
throw new Exception($"MES已有领料记录,单号:{head.BillNo},不能更新!");
|
}
|
|
if (head.Id != null)
|
base.DeleteById(head.Id);
|
|
db.Deleteable<ZZCXA>().Where(d => d.YdId == head.Erpid).ExecuteCommand();
|
db.Deleteable<ZZCXB>().Where(d => d.Erpid == head.Erpid).ExecuteCommand();
|
|
var insertedHead = db.Insertable(head)
|
.IgnoreColumns(true)
|
.ExecuteReturnIdentity();
|
if (insertedHead <= 0)
|
throw new Exception("主表插入失败,未返回ID");
|
|
foreach (var child in children)
|
{
|
child.Pid = insertedHead;
|
var childId = db.Insertable(child).IgnoreColumns(true).ExecuteReturnIdentity();
|
|
if (child.SubItems != null && child.SubItems.Count > 0)
|
{
|
foreach (var sub in child.SubItems)
|
{
|
sub.Pid = childId;
|
db.Insertable(sub).IgnoreColumns(true).ExecuteCommand();
|
}
|
}
|
}
|
|
return true;
|
}
|
|
/* private bool UpdateData(SqlSugarScope db, ZZCX head, List<ZZCXA> children)
|
{
|
// 删除主表 & 子孙表
|
var deletedHead = base.DeleteById(head.Id);
|
var deletedChildren = db.Deleteable<ZZCXA>().Where(d => d.YdId == head.Erpid).ExecuteCommand();
|
var deletedGrand = db.Deleteable<ZZCXB>().Where(d => d.Erpid == head.Erpid).ExecuteCommand();
|
|
if (deletedHead && deletedChildren >= 0 && deletedGrand >= 0) return true;
|
throw new NotImplementedException("删除失败");
|
}*/
|
|
private bool UpdateData(SqlSugarScope db, ZZCX head, List<ZZCXA> children)
|
{
|
|
// 1. 校验是否存在领料记录(MES_INV_ITEM_OUTS)
|
var hasMaterialOut = db.Queryable<MesInvItemOuts>()
|
.Any(x => x.WorkNo == head.BillNo);
|
|
if (hasMaterialOut)
|
{
|
throw new Exception($"MES已有领料记录,单号:{head.BillNo},不能删除!");
|
}
|
|
// 删除主表
|
var deletedHead = db.Deleteable<ZZCX>()
|
.Where(d => d.Erpid == head.Erpid)
|
.ExecuteCommand();
|
|
// 删除子表
|
var deletedChildren = db.Deleteable<ZZCXA>()
|
.Where(d => d.YdId == head.Erpid)
|
.ExecuteCommand();
|
|
// 删除孙表
|
var deletedGrand = db.Deleteable<ZZCXB>()
|
.Where(d => d.Erpid == head.Erpid)
|
.ExecuteCommand();
|
|
// 如果主表没删到记录,也认为允许(可能之前就不存在)
|
if (deletedHead >= 0 && deletedChildren >= 0 && deletedGrand >= 0)
|
return true;
|
|
throw new NotImplementedException("删除失败");
|
}
|
|
|
}
|
}
|