505 lines
27 KiB
C#
505 lines
27 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Security.Cryptography.X509Certificates;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using JNPF.Common.Core.Manager;
|
||
using JNPF.Common.Dtos.VisualDev;
|
||
using JNPF.Common.Enums;
|
||
using JNPF.Common.Security;
|
||
using JNPF.FriendlyException;
|
||
using JNPF.Systems.Entitys.Permission;
|
||
using JNPF.Systems.Entitys.System;
|
||
using JNPF.Systems.Interfaces.System;
|
||
using JNPF.VisualDev;
|
||
using JNPF.VisualDev.Entitys;
|
||
using JNPF.VisualDev.Interfaces;
|
||
using Microsoft.Extensions.Logging;
|
||
using Newtonsoft.Json;
|
||
using NPOI.Util;
|
||
using SqlSugar;
|
||
using Tnb.BasicData;
|
||
using Tnb.BasicData.Entities;
|
||
using Tnb.ProductionMgr.Entities;
|
||
using Tnb.WarehouseMgr.Entities;
|
||
using Tnb.WarehouseMgr.Entities.Attributes;
|
||
using Tnb.WarehouseMgr.Entities.Consts;
|
||
using Tnb.WarehouseMgr.Entities.Dto;
|
||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||
using Tnb.WarehouseMgr.Entities.Entity;
|
||
using Tnb.WarehouseMgr.Interfaces;
|
||
using Tnb.ProductionMgr.Entities.Entity;
|
||
using System.Threading;
|
||
using Tnb.BasicData.Interfaces;
|
||
|
||
namespace Tnb.WarehouseMgr
|
||
{
|
||
[OverideVisualDev(ModuleConsts.MODULE_WMSPRDINSTOCK_ID)]
|
||
[ServiceModule(BizTypeId)]
|
||
public class WmsPrdInstockHService : BaseWareHouseService
|
||
{
|
||
private const string BizTypeId = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID;
|
||
private readonly ISqlSugarClient _db;
|
||
private readonly IRunService _runService;
|
||
private readonly IVisualDevService _visualDevService;
|
||
private readonly IWareHouseService _wareHouseService;
|
||
private readonly IBillRullService _billRullService;
|
||
private readonly IThirdApiRecordService _thirdApiRecordService;
|
||
|
||
public WmsPrdInstockHService(ISqlSugarRepository<WmsCarryH> repository, IRunService runService,
|
||
IVisualDevService visualDevService,
|
||
IWareHouseService wareHouseService,
|
||
IThirdApiRecordService thirdApiRecordService,
|
||
IBillRullService billRullService)
|
||
{
|
||
_db = repository.AsSugarClient();
|
||
_runService = runService;
|
||
_visualDevService = visualDevService;
|
||
_wareHouseService = wareHouseService;
|
||
_billRullService = billRullService;
|
||
_thirdApiRecordService = thirdApiRecordService;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 工单提报 第一次主表所有参数全传,后续主表只需要传工单号prd_bill_code和更新后的合格数pqty、不合格数rqty
|
||
/// </summary>
|
||
/// <param name="input"></param>
|
||
/// <returns></returns>
|
||
public async Task<Entities.Dto.Outputs.Result> PrdInstock(WmsPrdInstockInput input, ISqlSugarClient dbConn = null)
|
||
{
|
||
Logger.LogInformation($"【PrdInstock】传入参数 {JsonConvert.SerializeObject(input)}");
|
||
var db = _db;
|
||
if (dbConn != null)
|
||
db = dbConn;
|
||
|
||
string type = "";
|
||
SemaphoreSlim semaphoreSlim = null;
|
||
try
|
||
{
|
||
await db.Ado.BeginTranAsync();
|
||
|
||
WmsPrdInstockH prdInstockH = db.Queryable<WmsPrdInstockH>().Where(r => r.prd_bill_code == input.prd_bill_code).First();
|
||
|
||
string prd_instock_code_id = "";
|
||
// 新建主表
|
||
if (prdInstockH == null)
|
||
{
|
||
string bill_code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDOUTSTOCK_CODE);
|
||
|
||
WmsPrdInstockH wmsPrdInstockH = new ();
|
||
wmsPrdInstockH.create_id = "";
|
||
wmsPrdInstockH.create_time = DateTime.Now;
|
||
wmsPrdInstockH.prd_bill_code = input.prd_bill_code;
|
||
wmsPrdInstockH.bill_code = bill_code;
|
||
wmsPrdInstockH.material_id = input.material_id;
|
||
wmsPrdInstockH.material_code = input.material_code;
|
||
wmsPrdInstockH.material_name = input.material_name;
|
||
wmsPrdInstockH.material_spec = input.material_spec;
|
||
wmsPrdInstockH.planqty = input.planqty;
|
||
wmsPrdInstockH.pqty = input.pqty;
|
||
wmsPrdInstockH.rqty = input.rqty;
|
||
wmsPrdInstockH.type = input.type;
|
||
//wmsPrdInstockH.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
||
|
||
await db.Insertable(wmsPrdInstockH).ExecuteCommandAsync();
|
||
|
||
prd_instock_code_id = wmsPrdInstockH.id;
|
||
type = input.type;
|
||
}
|
||
else
|
||
{
|
||
prd_instock_code_id = prdInstockH.id;
|
||
|
||
await db.Updateable<WmsPrdInstockH>(r => new WmsPrdInstockH
|
||
{
|
||
pqty = input.pqty,
|
||
rqty = input.rqty
|
||
}).Where(r => r.id == prd_instock_code_id).ExecuteCommandAsync();
|
||
|
||
type = prdInstockH.type;
|
||
}
|
||
|
||
List<WmsPrdInstockD> WmsPrdInstockDs = new List<WmsPrdInstockD>();
|
||
#region 生产入库对应的bip仓库
|
||
string scwarehouse_id = "";
|
||
string rkwarehouse_id = "";
|
||
// bip变更为俩字段传一样或不传scwarehouse_id
|
||
if (type == DictConst.PrdMoTypeZS)
|
||
{
|
||
scwarehouse_id = WmsWareHouseConst.bipwarehouseid_zs;
|
||
rkwarehouse_id = WmsWareHouseConst.bipwarehouseid_zs;
|
||
}
|
||
else if (type == DictConst.PrdMoTypeJC)
|
||
{
|
||
scwarehouse_id = WmsWareHouseConst.bipwarehouseid_jc;
|
||
rkwarehouse_id = WmsWareHouseConst.bipwarehouseid_jc;
|
||
}
|
||
else if (type == DictConst.PrdMoTypeZZ)
|
||
{
|
||
scwarehouse_id = WmsWareHouseConst.bipwarehouseid_bz;
|
||
rkwarehouse_id = WmsWareHouseConst.bipwarehouseid_bz;
|
||
}
|
||
else if (type == DictConst.PrdMoTypeBZ)
|
||
{
|
||
scwarehouse_id = WmsWareHouseConst.bipwarehouseid_bz;
|
||
rkwarehouse_id = WmsWareHouseConst.bipwarehouseid_bz;
|
||
}
|
||
#endregion
|
||
List<WmsPrdInstockCode> WmsPrdInstockCodes = new List<WmsPrdInstockCode>();
|
||
WmsPrdInstockDInput prdInstockDInput = input.prdInstockD;
|
||
WmsPrdInstockD wmsPrdInstockD = new WmsPrdInstockD()
|
||
{
|
||
task_bill_code = prdInstockDInput.task_bill_code,
|
||
warehouse_id = prdInstockDInput.warehouse_id,
|
||
startlocation_id = prdInstockDInput.startlocation_id,
|
||
carry_id = prdInstockDInput.carry_id,
|
||
create_id = input.create_id,
|
||
create_time = DateTime.Now,
|
||
prd_instock_id = prd_instock_code_id,
|
||
status = WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID,
|
||
scwarehouse_id = scwarehouse_id,
|
||
rkwarehouse_id = rkwarehouse_id,
|
||
prd_report_id = input.prd_report_id
|
||
};
|
||
WmsPrdInstockDs.Add(wmsPrdInstockD);
|
||
|
||
foreach (WmsPrdInstockCodeInput prdInstockCodeInput in input.prdInstockCodes)
|
||
{
|
||
|
||
WmsPrdInstockCodes.Add(new WmsPrdInstockCode()
|
||
{
|
||
planqty = prdInstockCodeInput.planqty,
|
||
pqty = prdInstockCodeInput.pqty,
|
||
code_batch = prdInstockCodeInput.code_batch,
|
||
code = prdInstockCodeInput.code,
|
||
unit_id = prdInstockCodeInput.unit_id,
|
||
carry_id = prdInstockCodeInput.carry_id,
|
||
prd_instock_id = prd_instock_code_id,
|
||
prd_instockD_id = wmsPrdInstockD.id
|
||
});
|
||
}
|
||
|
||
|
||
|
||
await db.Insertable(wmsPrdInstockD).ExecuteCommandAsync();
|
||
|
||
await db.Insertable(WmsPrdInstockCodes).ExecuteCommandAsync();
|
||
|
||
if (type == DictConst.PrdMoTypeZS)
|
||
{
|
||
semaphoreSlim = _wareHouseService.GetSemaphore("instock", WmsWareHouseConst.WAREHOUSE_ZC_ID);
|
||
}
|
||
else if (type == DictConst.PrdMoTypeJC)
|
||
{
|
||
semaphoreSlim = _wareHouseService.GetSemaphore("instock", WmsWareHouseConst.WAREHOUSE_HCC_ID);
|
||
}
|
||
else if (type == DictConst.PrdMoTypeBZ)
|
||
{
|
||
semaphoreSlim = _wareHouseService.GetSemaphore("instock", WmsWareHouseConst.WAREHOUSE_DMJC_ID);
|
||
}
|
||
await semaphoreSlim.WaitAsync();
|
||
|
||
//入库取终点
|
||
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = wmsPrdInstockD.warehouse_id, Size = 1 };
|
||
List<BasLocation> endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
|
||
if (endLocations?.Count == 0)
|
||
{
|
||
throw new AppFriendlyException("没有可用的库位", 500);
|
||
}
|
||
BasLocation endLocation = endLocations[0];
|
||
|
||
BasLocation startLocation = db.Queryable<BasLocation>().Where(r => r.id == wmsPrdInstockD.startlocation_id).First();
|
||
if (startLocation == null)
|
||
{
|
||
throw new AppFriendlyException("系统中找不到起点ID的库位信息", 500);
|
||
}
|
||
|
||
BasLocation endlocation_ssx = null;
|
||
string startlocation_id_ssx = null;
|
||
|
||
|
||
if (type == DictConst.PrdMoTypeZS)
|
||
{
|
||
Logger.LogInformation($"【PrdInstock】注塑车间生产提报");
|
||
// 注塑线边库到2,4输送线
|
||
// 根据ZSSSXCTU01 ZSSSXCTU02任务数平均分配任务
|
||
endlocation_ssx = await db.Queryable<BasLocation>().Where(r => new string[2] { "32624148726549", "32624157608981" }.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
|
||
await db.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync();
|
||
|
||
// ZSSSXCTU01 对应 SSX-011-002
|
||
if (endlocation_ssx.location_code == "ZSSSXCTU01")
|
||
{
|
||
startlocation_id_ssx = "32609073591317";
|
||
}
|
||
// ZSSSXCTU02 对应 SSX-011-004
|
||
else if (endlocation_ssx.location_code == "ZSSSXCTU02")
|
||
{
|
||
startlocation_id_ssx = "32609093546005";
|
||
}
|
||
|
||
WmsCarryH wmsCarryH = await db.Queryable<WmsCarryH>().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync();
|
||
|
||
// 生成到输送线任务
|
||
CommonCreatePretaskInput commonCreatePretaskInput1 = new CommonCreatePretaskInput();
|
||
commonCreatePretaskInput1.startlocation_id = startLocation.id;
|
||
commonCreatePretaskInput1.endlocation_id = endlocation_ssx.id;
|
||
commonCreatePretaskInput1.carry_id = wmsCarryH.id;
|
||
commonCreatePretaskInput1.carry_code = wmsCarryH.carry_code;
|
||
commonCreatePretaskInput1.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID;
|
||
commonCreatePretaskInput1.biz_type = "";
|
||
commonCreatePretaskInput1.require_id = wmsPrdInstockD.id;
|
||
commonCreatePretaskInput1.isExcuteMission = false;
|
||
Entities.Dto.Outputs.Result res1 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput1, db);
|
||
if (res1.code != HttpStatusCode.OK)
|
||
{
|
||
throw new Exception($"注塑车间生成到输送线的任务失败 {res1.msg}");
|
||
}
|
||
|
||
// 生成到中储仓任务
|
||
CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput();
|
||
commonCreatePretaskInput2.startlocation_id = startlocation_id_ssx;
|
||
commonCreatePretaskInput2.endlocation_id = endLocation.id;
|
||
commonCreatePretaskInput2.carry_id = wmsCarryH.id;
|
||
commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code;
|
||
commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID;
|
||
commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID;
|
||
commonCreatePretaskInput2.require_id = wmsPrdInstockD.id;
|
||
commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false;
|
||
|
||
Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2, db);
|
||
if (res2.code != HttpStatusCode.OK)
|
||
{
|
||
throw new Exception($"注塑车间生成到中储仓的任务失败 {res2.msg}");
|
||
}
|
||
}
|
||
else if (type == DictConst.PrdMoTypeJC)
|
||
{
|
||
Logger.LogInformation($"【PrdInstock】挤出车间生产提报");
|
||
WmsCarryH wmsCarryH = await db.Queryable<WmsCarryH>().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync();
|
||
|
||
// 生成到中储仓任务
|
||
CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput();
|
||
commonCreatePretaskInput2.startlocation_id = startLocation.id;
|
||
commonCreatePretaskInput2.endlocation_id = endLocation.id;
|
||
commonCreatePretaskInput2.carry_id = wmsCarryH.id;
|
||
commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code;
|
||
commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID;
|
||
commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID;
|
||
commonCreatePretaskInput2.require_id = wmsPrdInstockD.id;
|
||
|
||
Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2, db);
|
||
if (res2.code != HttpStatusCode.OK)
|
||
{
|
||
throw new Exception($"挤出车间生成到中储仓的任务失败 {res2.msg}");
|
||
}
|
||
}
|
||
else if (type == DictConst.PrdMoTypeBZ)
|
||
{
|
||
Logger.LogInformation($"【PrdInstock】包装车间生产提报");
|
||
WmsCarryH wmsCarryH = await db.Queryable<WmsCarryH>().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync();
|
||
|
||
// 生成任务
|
||
CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput();
|
||
commonCreatePretaskInput2.startlocation_id = startLocation.id;
|
||
commonCreatePretaskInput2.endlocation_id = endLocation.id;
|
||
commonCreatePretaskInput2.carry_id = wmsCarryH.id;
|
||
commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code;
|
||
commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID;
|
||
commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID;
|
||
commonCreatePretaskInput2.require_id = wmsPrdInstockD.id;
|
||
|
||
Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2, db);
|
||
if (res2.code != HttpStatusCode.OK)
|
||
{
|
||
throw new Exception($"包装车间生成任务失败 {res2.msg}");
|
||
}
|
||
}
|
||
|
||
|
||
await db.Ado.CommitTranAsync();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
Logger.Error(ex.Message);
|
||
Logger.Error(ex.StackTrace);
|
||
await db.Ado.RollbackTranAsync();
|
||
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
||
}
|
||
finally
|
||
{
|
||
semaphoreSlim.Release();
|
||
|
||
_wareHouseService.GenTaskExecute();
|
||
}
|
||
|
||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||
}
|
||
|
||
public override async Task ModifyAsync(WareHouseUpInput input)
|
||
{
|
||
if (input == null)
|
||
{
|
||
throw new ArgumentNullException(nameof(input));
|
||
}
|
||
|
||
bool isOk = true;
|
||
// 如果生产入库 输送线到仓库这条任务完成,反写单据数据
|
||
if (input.bizTypeId == WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID)
|
||
{
|
||
|
||
|
||
isOk = await _db.Updateable<WmsPrdInstockD>()
|
||
.SetColumns(it => new WmsPrdInstockD { status = WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID })
|
||
.Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync();
|
||
|
||
WmsPrdInstockD wmsPrdInstockD = await _db.Queryable<WmsPrdInstockD>().SingleAsync(x=>x.id==input.requireId);
|
||
WmsPrdInstockH instock = await _db.Queryable<WmsPrdInstockH>().SingleAsync(x=>x.id==wmsPrdInstockD.prd_instock_id);
|
||
// BasWarehouse scWarehouse = await _db.Queryable<BasWarehouse>().SingleAsync(x=>x.id==wmsPrdInstockD.scwarehouse_id);
|
||
// BasWarehouse kcWarehouse = await _db.Queryable<BasWarehouse>().SingleAsync(x=>x.id==wmsPrdInstockD.warehouse_id);
|
||
// PrdReport prdReport = await _db.Queryable<PrdReport>().SingleAsync(x => x.id == instock.prd_report_id);
|
||
PrdReport prdReport = await _db.Queryable<PrdReport>().SingleAsync(x => x.id == wmsPrdInstockD.prd_report_id);
|
||
if (prdReport == null) return;
|
||
PrdMoTask prdMoTask = await _db.Queryable<PrdMoTask>().SingleAsync(x => x.id == prdReport.mo_task_id);
|
||
PrdMo prdMo = await _db.Queryable<PrdMo>().SingleAsync(x => x.id == prdMoTask.mo_id);
|
||
//来源erp才产成品入库
|
||
if (prdMo.mo_source != "1")
|
||
{
|
||
return;
|
||
}
|
||
|
||
if (await _db.Queryable<ThirdWebapiRecord>().AnyAsync(x => x.remark.Contains(prdReport.id) && x.name == "产成品入库"))
|
||
{
|
||
Logger.LogInformation($"【WmsPrdInstockHService ModifyAsync】重复调用入库");
|
||
return;
|
||
}
|
||
|
||
|
||
List<WmsPrdInstockCode> allInstockDetails = await _db.Queryable<WmsPrdInstockCode>().Where(it => it.prd_instockD_id == wmsPrdInstockD.id).ToListAsync();
|
||
|
||
List<String> materialIds = Arrays.AsList(instock.material_id);
|
||
List<String> unitIds = allInstockDetails.Select(x => x.unit_id).Distinct().ToList();
|
||
List<String> unitCodes = allInstockDetails.Select(x => x.unit_id).Distinct().ToList();
|
||
List<DictionaryDataEntity> unitDatas = await _db.Queryable<DictionaryTypeEntity>()
|
||
.LeftJoin<DictionaryDataEntity>((x, y) => x.Id == y.DictionaryTypeId)
|
||
.Where((x, y) => x.EnCode == DictConst.MeasurementUnit && unitCodes.Contains(y.EnCode))
|
||
.Select((x, y) => y)
|
||
.ToListAsync();
|
||
List<WmsErpWarehouserelaH> erpWarehouserelaHs = await _db.Queryable<WmsErpWarehouserelaH>().Where(x=>x.id!=null).ToListAsync();
|
||
string userId = prdReport?.create_id ?? WmsWareHouseConst.AdministratorUserId;
|
||
|
||
string supplierId = WmsWareHouseConst.TIANYIGONGYINGSHANG_ID;
|
||
List<string> tableIds = new List<string>();
|
||
tableIds.Add(userId);
|
||
tableIds.Add(WmsWareHouseConst.AdministratorOrgId);
|
||
tableIds.AddRange(materialIds);
|
||
tableIds.Add(supplierId);
|
||
tableIds.AddRange(unitDatas.Select(x => x.Id).ToList());
|
||
// tableIds.AddRange(unitIds);
|
||
|
||
List<ErpExtendField> erpExtendFields = await _db.Queryable<ErpExtendField>().Where(x => tableIds.Contains(x.table_id)).ToListAsync();
|
||
// string erpCreateId = erpExtendFields.Find(x => x.table_id == userId)?.user_id ?? WmsWareHouseConst.ERPUSERID;
|
||
string erpCreateId = WmsWareHouseConst.ERPUSERID;
|
||
ErpExtendField erpOrg = erpExtendFields.Find(x => x.table_id == (WmsWareHouseConst.AdministratorOrgId));
|
||
string nowStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||
|
||
List<Dictionary<string, object>> requestData = new List<Dictionary<string, object>>();
|
||
Dictionary<string, object> erpRequestData = new Dictionary<string, object>();
|
||
erpRequestData.Add("billmaker", erpCreateId);
|
||
erpRequestData.Add("corpoid", erpOrg.corpoid);
|
||
erpRequestData.Add("corpvid", erpOrg.corpvid);
|
||
erpRequestData.Add("cprocalbodyoid", erpOrg.pk_org);
|
||
erpRequestData.Add("cprocalbodyvid", erpOrg.pk_org_v);
|
||
erpRequestData.Add("creationtime", nowStr);
|
||
erpRequestData.Add("creator", erpCreateId);
|
||
erpRequestData.Add("ctrantypeid", "0001H11000000000D30X");//先写死
|
||
// erpRequestData.Add("cprowarehouseid", wmsPrdInstockD.scwarehouse_id);
|
||
erpRequestData.Add("cprowarehouseid", wmsPrdInstockD.scwarehouse_id); // 出库仓库
|
||
erpRequestData.Add("cwarehouseid", wmsPrdInstockD.rkwarehouse_id);//todo 现在是我们的仓库id 要改 // 库存仓库
|
||
erpRequestData.Add("cwhsmanagerid", null);
|
||
erpRequestData.Add("dbilldate", nowStr);
|
||
erpRequestData.Add("dmakedate", nowStr);
|
||
erpRequestData.Add("fbillflag", 2);
|
||
erpRequestData.Add("ntotalnum", allInstockDetails!=null ? allInstockDetails.Sum(x=>x.pqty) : 0);
|
||
erpRequestData.Add("pk_org", erpOrg.pk_org);
|
||
erpRequestData.Add("pk_org_v", erpOrg.pk_org_v);
|
||
erpRequestData.Add("pk_group", erpOrg.pk_group);
|
||
erpRequestData.Add("vbillcode", instock.bill_code);
|
||
erpRequestData.Add("vtrantypecode", "46-01");
|
||
erpRequestData.Add("csourcebillhid", prdReport?.erp_pk_wr ?? "");
|
||
erpRequestData.Add("report_id", prdReport?.id ?? "");
|
||
|
||
|
||
List<Dictionary<string, object>> erpRequestDataDetails = new List<Dictionary<string, object>>();
|
||
foreach (WmsPrdInstockCode item in allInstockDetails)
|
||
{
|
||
erpRequestDataDetails.Add(new Dictionary<string, object>()
|
||
{
|
||
["cbodytranstypecode"] = "46-01",
|
||
["cbodywarehouseid"] = wmsPrdInstockD.rkwarehouse_id, // 库存仓库
|
||
["cmaterialoid"] = erpExtendFields.Find(x => x.table_id == instock.material_id)?.cmaterialoid ?? "",
|
||
["cmaterialvid"] = erpExtendFields.Find(x => x.table_id == instock.material_id)?.cmaterialvid ?? "",
|
||
["corpoid"] = erpOrg.corpoid,
|
||
["corpvid"] = erpOrg.corpvid,
|
||
["cproductid"] = erpExtendFields.Find(x => x.table_id == instock.material_id)?.cmaterialoid ?? "",
|
||
["fproductclass"] = 1,
|
||
["crowno"] = (allInstockDetails.FindIndex(x => x.id == item.id) + 1) * 10,
|
||
["csourcebillhid"] = prdReport?.erp_pk_wr ?? "",
|
||
["csourcebillbid"] = prdReport?.erp_pk_wr_product ?? "",
|
||
["cunitid"] = erpExtendFields.Find(x => x.table_id == (unitDatas.Find(x=>x.EnCode==item.unit_id)?.Id ?? ""))?.cunitid ?? "",
|
||
["cvendorid"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_id ?? "",
|
||
["cvendorvid"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_vid ?? "",
|
||
["dbizdate"] = instock.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"),
|
||
["dplanarrivedate"] = instock.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"),
|
||
["dplanoutdate"] = instock.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"),
|
||
["nnum"] = item.pqty,
|
||
["nshouldnum"] = item.pqty,
|
||
["pk_group"] = erpOrg.pk_group,
|
||
["pk_org"] = erpOrg.pk_org,
|
||
["pk_org_v"] = erpOrg.pk_org_v,
|
||
["vbatchcode"] = item.code_batch,
|
||
["vproductbatch"] = prdMo.mo_code.Split("-")[0],
|
||
});
|
||
}
|
||
erpRequestData.Add("dtls", erpRequestDataDetails);
|
||
requestData.Add(erpRequestData);
|
||
BasFactoryConfig config = await _db.Queryable<BasFactoryConfig>().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.BIPURL);
|
||
ThirdWebapiRecord thirdWebapiRecord = new ThirdWebapiRecord();
|
||
thirdWebapiRecord.id = SnowflakeIdHelper.NextId();
|
||
thirdWebapiRecord.third_name = WmsWareHouseConst.BIP;
|
||
thirdWebapiRecord.name = "产成品入库";
|
||
thirdWebapiRecord.method = "POST";
|
||
// thirdWebapiRecord.url = config.value + "uapws/rest/productin/save";
|
||
thirdWebapiRecord.url = WmsWareHouseConst.BIP_DOMAIN + "uapws/rest/productin/save";
|
||
thirdWebapiRecord.request_data = JsonConvert.SerializeObject(requestData);
|
||
thirdWebapiRecord.create_time = DateTime.Now;
|
||
thirdWebapiRecord.remark = $"载具编号:{prdReport?.material_box_code ?? ""},提报id:{prdReport?.id}";
|
||
await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync();
|
||
|
||
BasFactoryConfig callErp = await _db.Queryable<BasFactoryConfig>().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.CALLERP);
|
||
if(callErp.value=="1")
|
||
{
|
||
Thread thread = new(() =>
|
||
{
|
||
_thirdApiRecordService.Send(new List<ThirdWebapiRecord> { thirdWebapiRecord }, "自动", _db);
|
||
});
|
||
thread.Start();
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
if (!isOk)
|
||
{
|
||
throw Oops.Oh(ErrorCode.COM1001);
|
||
}
|
||
}
|
||
|
||
private void Send(List<ThirdWebapiRecord> records, string send_type,ISqlSugarClient db=null)
|
||
{
|
||
_thirdApiRecordService.Send(new List<ThirdWebapiRecord> { thirdWebapiRecord }, "自动", _db);
|
||
}
|
||
}
|
||
}
|