using System.Data;
|
using MES.Service.DB;
|
using MES.Service.Dto.webApi;
|
using MES.Service.Modes;
|
using SqlSugar;
|
using DbType = System.Data.DbType;
|
|
namespace MES.Service.service;
|
|
public class WomcaaWWManager : Repository<Womcaa>
|
{
|
//当前类已经继承了 Repository 增、删、查、改的方法
|
|
//这里面写的代码不会给覆盖,如果要重新生成请删除 WomcaaManager.cs
|
|
private readonly WomcabManager _womcabWWManager = new();
|
|
public bool SaveList(List<ErpWOM> rohIns)
|
{
|
var result = rohIns.Select(SaveWw).ToList();
|
return result.All(b => b);
|
}
|
|
public bool SaveWw(ErpWOM wom)
|
{
|
var womErpCaa = wom.ErpCaa;
|
var mesWomcaa = MapErpCAAtoWomcaaWw(womErpCaa);
|
var mesWomcabs = MapErpCABtoWomcabWw(wom.ErpCabs);
|
|
return UseTransaction(db =>
|
{
|
switch (womErpCaa.Type)
|
{
|
case "3":
|
return UpdateData(db, mesWomcaa, mesWomcabs) ? 1 : 0;
|
case "2":
|
case "4":
|
//kyy 2024-09-13 变更
|
case "5":
|
return SaveOrUpdateDataWw(db, mesWomcaa, mesWomcabs)
|
? 1
|
: 0;
|
default:
|
throw new NotImplementedException(
|
$"type没有{womErpCaa.Type}这个类型");
|
}
|
}) > 0;
|
}
|
|
private bool SaveOrUpdateDataWw(SqlSugarScope db, Womcaa mesWomcaa,
|
List<Womcab> mesWomcabss)
|
{
|
if (mesWomcaa.Id != null) base.DeleteById(mesWomcaa.Id);
|
|
if (mesWomcabss.Count > 0)
|
db.Deleteable<Womcab>()
|
.Where(s => s.Eid == mesWomcaa.Erpid).ExecuteCommand();
|
|
//var orUpdate = base.Insert(mesWomcaa);
|
|
//var baOrUpdate = _womcabWWManager.InsertRange(mesWomcabss);
|
|
//单条插入忽略空字段
|
var orUpdate = db.Insertable(mesWomcaa)
|
.IgnoreColumns(true).ExecuteCommand() > 0;
|
|
//批量插入数据库时忽略空字段
|
var baOrUpdate = db.Insertable(mesWomcabss).PageSize(1)
|
.IgnoreColumnsNull()
|
.ExecuteCommand() > 0;
|
|
// 定义输入参数
|
var inputParam = mesWomcaa.Erpid;
|
|
// // 2024-12-09定义输出参数
|
var outputResult = new SugarParameter("p_flag", null,
|
DbType.Int32, ParameterDirection.Output,
|
4000);
|
var outputMessage = new SugarParameter("p_text", null,
|
DbType.String,
|
ParameterDirection.Output, 4000);
|
// // 2024-12-09定义输入参数
|
var parameters = new List<SugarParameter>
|
{
|
new("P_ID", inputParam, DbType.String, ParameterDirection.Input),
|
outputResult,
|
outputMessage
|
};
|
|
// 使用 SqlSugar 执行存储过程
|
Db.Ado.ExecuteCommand(
|
"BEGIN PRC_UPDATE_DAA1(:P_ID,:p_flag,:p_text); END;",
|
// new SugarParameter("P_ID", inputParam, DbType.Decimal)
|
parameters.ToArray());
|
|
// 2024-12-09获取输出参数的值
|
var resultValue = outputResult.Value?.ToString();
|
var messageValue = outputMessage.Value?.ToString();
|
|
// 2024-12-09 Console.WriteLine(messageValue);
|
if ("1".Equals(resultValue)) throw new Exception(messageValue);
|
|
if (orUpdate && baOrUpdate) return true;
|
throw new NotImplementedException("插入或更新失败");
|
}
|
|
private bool UpdateData(SqlSugarScope db, Womcaa mesWomcaa,
|
List<Womcab> mesWomcabs)
|
{
|
var decimals = mesWomcabs.Select(s => s.Id).ToArray();
|
var update = base.DeleteById(mesWomcaa.Id);
|
var insertOrUpdate = db
|
.Deleteable<Womcab>().In(decimals)
|
.ExecuteCommand() > 0;
|
|
if (update && insertOrUpdate) return true;
|
throw new NotImplementedException("更新失败");
|
}
|
|
private Womcaa MapErpCAAtoWomcaaWw(ErpCAA dto)
|
{
|
var entity = new Womcaa
|
{
|
Erpid = Convert.ToDecimal(dto.Id), /// ERPID
|
Caa001 = dto.FBillNo, /// 单号
|
// Caa021 = dto.FWorkShopID,/// 工作车间
|
RoutingId = dto.FRoutingId, /// 工艺路线
|
// WorkShopId = dto.FREMWorkShopId, /// 产线
|
DepotCode = dto.FStockId, /// 仓库
|
CreateDate = dto.FDate, /// 单据日期
|
Caa004 = dto.FBILLTYPE, /// 单据类型
|
Caa023 = dto.FStatus, /// 状态 完工,未完工
|
Caa006 = dto.FMaterialId, /// 产品编码
|
Caa009 = dto.FUnitId, /// 单位
|
Caa012 = !string.IsNullOrEmpty(dto.FQty)
|
? Convert.ToDecimal(dto.FQty)
|
: null, /// 数量
|
WorkGroupId = dto.FWorkGroupId, /// 计划组
|
PlanId = dto.FPlannerID, /// 计划员
|
Caa010 = dto.FPlanStartDate, /// 预计开工时间
|
Caa011 = dto.FPlanFinishDate, /// 预计完工时间
|
Caa005 = dto.FConveyDate, /// 开单日期
|
StockInlimith = dto.FStockInLimitH, /// 入库上限
|
StockInlimitl = dto.FStockInLimitL, /// 入库下限
|
Mtono = dto.FMTONO, /// 计划跟踪号
|
Lot = dto.FLot, /// 批号
|
Caa013 = dto.FBomId, /// BOM版次
|
|
CreateType = dto.FCreateType, /// 生成方式
|
SrcBillType = dto.FSrcBillType, /// 源单类型
|
SrcBillNo = dto.FSrcBillNo, /// 源单编号
|
SrcBillentryseq = dto.FSrcBillEntrySeq, /// 源单分录行号
|
SaleOrderNo = dto.FSaleOrderNo, /// 需求单据号
|
SaleOrderEntryseq = dto.FSaleOrderEntrySeq, /// 需求单据行号
|
ForceCloserid = dto.FForceCloserId, /// 结案人
|
CloseType = dto.FCloseType, /// 结案类型
|
SrcSplitBillno = dto.FSrcSplitBillNo, /// 源拆分订单编号
|
Caa016 = dto.FDESCRIPTION, /// 备注
|
|
Caa018 = !string.IsNullOrEmpty(dto.PLAN_ID)
|
? Convert.ToDecimal(dto.PLAN_ID)
|
: null, /// ERP源单ID
|
Caa019 = !string.IsNullOrEmpty(dto.PLAN_SEQ)
|
? Convert.ToDecimal(dto.PLAN_SEQ)
|
: null, /// ERP源单行号
|
Caa020 = dto.PLAN_NUM, /// ERP源单单号(任务单号)
|
Caa015 = dto.F_UNW_Text_xsddh, /// 销售订单号
|
// EerSczz = dto.erP_SCZZ,/// 生产组织ID
|
// EerWtzz = dto.erP_WTZZ,/// 委托组织ID
|
Caa015Head = dto.F_XIFG_Integer_tzk, /// 销售订单行号
|
//MainProductNo = dto.F_XIFG_Base_w5c, /// 主产品编码
|
//MainProductQty = dto.F_XIFG_Qty_yrr, /// 主产品生产数量
|
CustomerItemNumber = dto.F_XIFG_Text_fg2, /// 客户货号
|
//PackingListNumber = dto.F_XIFG_Text_yrr,/// 包装单号
|
//CustomerName = dto.F_XIFG_Text_qtr1, /// 客户名称
|
//Customer = dto.F_XIFG_Base_83g1,/// 客户
|
Yjwg = dto.FPlanFinishDate, /// 预计完工时间备份
|
//委外
|
ErpGyzz = !string.IsNullOrEmpty(dto.ErpGyzz)
|
? Convert.ToDecimal(dto.ErpGyzz)
|
: null, //供应组织
|
ErpFlzz = !string.IsNullOrEmpty(dto.ErpFlzz)
|
? Convert.ToDecimal(dto.ErpFlzz)
|
: null, //发料组织
|
ErpSlzz = !string.IsNullOrEmpty(dto.ErpSlzz)
|
? Convert.ToDecimal(dto.ErpSlzz)
|
: null, //收料组织
|
ErpRkzz = !string.IsNullOrEmpty(dto.ErpRkzz)
|
? Convert.ToDecimal(dto.ErpRkzz)
|
: null, //入库组织
|
ErpRkhz = !string.IsNullOrEmpty(dto.ErpRkhz)
|
? Convert.ToDecimal(dto.ErpRkhz)
|
: null, //入库货主
|
ErpJjds = !string.IsNullOrEmpty(dto.ErpJjds)
|
? Convert.ToDecimal(dto.ErpJjds)
|
: null, //计件点数
|
ErpBzds = !string.IsNullOrEmpty(dto.ErpBzds)
|
? Convert.ToDecimal(dto.ErpBzds)
|
: null, //标准点数
|
Caa025 = !string.IsNullOrEmpty(dto.Caa025)
|
? Convert.ToDecimal(dto.Caa025)
|
: null, //未入库数量
|
Caa024 = !string.IsNullOrEmpty(dto.Caa024)
|
? Convert.ToDecimal(dto.Caa024)
|
: null, //已入库数量
|
FPurOrderNo = dto.FPurOrderNo, //采购订单
|
FPurOrderEntrySeq = dto.FPurOrderEntrySeq, //采购订单行号
|
ElectricalProductModel = dto.ElectricalProductModel, //电气成品型号
|
ElectricalProductName = dto.ElectricalProductName, //电气成品名称
|
FSUBENTRYID = dto.fsubentryid, /// 委外订单分录内码
|
// Caa024 = !string.IsNullOrEmpty(dto.FStockInQuaAuxQty)
|
// ? Convert.ToDecimal(dto.FStockInQuaAuxQty)
|
// : null, //合格品入库数量
|
ErpUpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), //当前时间
|
FbillNo = dto.F_XIFG_Text_zzjxqd, //组织间需求单
|
Moid = Convert.ToDecimal(dto.moid) /// 生产订单分录内嘛
|
};
|
|
var single = base.GetSingle(it => it.Erpid == entity.Erpid);
|
if (single != null) entity.Id = single.Id;
|
|
return entity;
|
}
|
|
private List<Womcab> MapErpCABtoWomcabWw(List<ErpCAB> dtoList)
|
{
|
var womcabList = new List<Womcab>();
|
|
foreach (var dto in dtoList)
|
{
|
var womcab = new Womcab
|
{
|
Erpid = Convert.ToDecimal(dto.FENTRYID), /// ERPID
|
Cab001 = dto.FBillNo, /// 工单单号
|
Cab002 = dto.FSeq, /// 序号
|
Cab003 = dto.FMaterialID, /// 材料编码
|
/*Cab006 = !string.IsNullOrEmpty(dto.FNeedQty)
|
? Convert.ToDecimal(dto.FNeedQty)
|
: null, /// 需领用量*/
|
/*Cab007 = !string.IsNullOrEmpty(dto.FPickedQty)
|
? Convert.ToDecimal(dto.FPickedQty)
|
: null, /// 已领用量 */
|
//Cab009 = dto.FUnitID,/// 单位
|
/*Cab012 = !string.IsNullOrEmpty(dto.FStdQty)
|
? Convert.ToDecimal(dto.FStdQty)
|
: null, /// 组成用量 */
|
//2024-11-15 14:05 用料清单克转千克
|
Cab006 = !string.IsNullOrEmpty(dto.FNeedQty) &&
|
int.TryParse(dto.FUnitID, out var unitId)
|
? unitId == 10097
|
? Convert.ToDecimal(dto.FNeedQty) / 1000
|
: Convert.ToDecimal(dto.FNeedQty)
|
: null,
|
Cab007 = !string.IsNullOrEmpty(dto.FPickedQty) &&
|
int.TryParse(dto.FUnitID, out var pickedQty)
|
? pickedQty == 10097
|
? Convert.ToDecimal(dto.FPickedQty) / 1000
|
: Convert.ToDecimal(dto.FPickedQty)
|
: null,
|
Cab009 = int.TryParse(dto.FUnitID, out var unitId1)
|
? unitId1 == 10097
|
? 10095.ToString()
|
: Convert.ToDecimal(dto.FUnitID).ToString()
|
: null,
|
Cab012 = !string.IsNullOrEmpty(dto.FStdQty) &&
|
int.TryParse(dto.FUnitID, out var fStdQty)
|
? fStdQty == 10097
|
? Convert.ToDecimal(dto.FStdQty) / 1000
|
: Convert.ToDecimal(dto.FStdQty)
|
: null,
|
|
PositionNo = dto.FPositionNO, /// 位置号
|
SupplyOrganization = dto.FChildSupplyOrgId, /// 供应组织
|
IssuingOrganization = dto.FSUPPLYORG, /// 发料组织
|
OwnerId = dto.FOwnerID, /// 货主
|
Mtono = dto.FMTONO, /// 计划跟踪号
|
Lot = dto.FLot, /// 批号
|
DepotCode = dto.FStockID, /// 仓库
|
IssueType = dto.FIssueType, /// 发料方式
|
Cab008 = dto.F_UNW_Text_tpgy, /// 工艺
|
SupplyType = dto.FSupplyType, /// 供应类型(C采购 Z自制 W委外)
|
|
Cab014 = dto.FIsKeyItem, /// 是否替料
|
Numerator = dto.FNumerator, /// 分子
|
Denominator = dto.FDenominator, /// 分母
|
Eid = Convert.ToDecimal(dto.FID), /// ERP头ID
|
|
Scrapqty = dto.FFixScrapQty, /// 固定损耗
|
Scraprate = dto.FScrapRate, /// 变动损耗率
|
Fsaleorderno = dto.FSALEORDERNO, /// 销售订单
|
|
//CustomerItemNumber = dto.F_XIFG_Text_re5, /// 客户货号
|
//PackingListNumber = dto.F_XIFG_Text_apv, /// 包装单号
|
//MainProduct = dto.F_XIFG_Base_re5, /// 主产品
|
//MainProductQty = Convert.ToDecimal(dto.F_XIFG_Qty_apv), /// 主产品数量
|
//ParentItemName = dto.F_XIFG_Base_apv, /// 父项物料名称
|
|
FReplaceGroup = dto.FReplaceGroup, /// 项次号
|
FOwnerTypeId = dto.FOwnerTypeId, /// 货主类型
|
FMaterialType = dto.FMaterialType, /// 子项类型
|
Cab020 = !string.IsNullOrEmpty(dto.FACTUALPICKOTY)
|
? Convert.ToDecimal(dto.FACTUALPICKOTY)
|
: null //实领数量
|
};
|
|
var entity = Db.Queryable<Womcab>()
|
.Where(s => s.Erpid == womcab.Erpid).Single();
|
if (entity != null) womcab.Id = entity.Id;
|
|
womcabList.Add(womcab);
|
}
|
|
return womcabList;
|
}
|
}
|