From 3dcb952e30036e2651d3d135905335d2cc45a3ce Mon Sep 17 00:00:00 2001
From: majian <780924089@qq.com>
Date: Fri, 11 Oct 2024 17:37:46 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A7=94=E5=A4=96=E6=94=B6=E8=B4=A7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Consts/ModuleConsts.cs | 8 +-
.../Entity/WmsOutsourceD.cs | 27 +-
.../Entity/WmsOutsourceH.cs | 24 ++
.../Tnb.WarehouseMgr/WareHouseService.cs | 8 +-
.../Tnb.WarehouseMgr/WmsOutsourceDService.cs | 305 ++++++++++++++++++
.../Tnb.WarehouseMgr/WmsOutsourceService.cs | 243 +++++++++++++-
.../Tnb.WarehouseMgr/WmsPurchaseService.cs | 2 +-
7 files changed, 608 insertions(+), 9 deletions(-)
create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceDService.cs
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
index 5052eca9..05e30c47 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
@@ -285,9 +285,13 @@ public class ModuleConsts
///
public const string MODULE_WMSPRDINSTOCK_ID = "34467501190677";
///
- /// 模块标识-委外收货 todo
+ /// 模块标识-委外收货
///
- public const string MODULE_WMSOUTSOURCEORDER_ID = "MODULE_WMSOUTSOURCEORDER_ID";//
+ public const string MODULE_WMSOUTSOURCE_ID = "36207808903445";
+ ///
+ /// 模块标识-委外收货子表
+ ///
+ public const string MODULE_WMSOUTSOURCED_ID = "36677621116949";
///
/// 模块标识-原材料调拨入库 todo
///
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs
index bc1d618a..b6999b4f 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs
@@ -18,7 +18,7 @@ public partial class WmsOutsourceD : BaseEntity
/// 主表id
///
public string? fk_wms_outsource_order_id { get; set; }
-
+
///
/// 物料id
///
@@ -39,6 +39,17 @@ public partial class WmsOutsourceD : BaseEntity
///
public string? unit { get; set; }
+ ///
+ /// 质检结果
+ ///
+ public string? qc_res { get; set; }
+
+
+ ///
+ /// 单位
+ ///
+ public string? unit_id { get; set; }
+
///
/// 委外数量
///
@@ -129,4 +140,18 @@ public partial class WmsOutsourceD : BaseEntity
///
public string? auxprop_gys { get; set; }
+ ///
+ /// erp仓库类型
+ ///
+ public string? erp_wh_type { get; set; }
+
+ ///
+ /// 单价
+ ///
+ public decimal? price { get; set; }
+
+ ///
+ /// erp到货单子表pk
+ ///
+ public string erp_arriveorder_b_pk { get; set; }
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceH.cs
index 4cc02641..e4b09bd5 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceH.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceH.cs
@@ -14,6 +14,15 @@ public partial class WmsOutsourceH : BaseEntity
{
id = SnowflakeIdHelper.NextId();
}
+
+ ///
+ /// 交易类型
+ ///
+ public string? transaction_type { get; set; }
+ ///
+ ///
+ ///
+ public string? erp_bill_code { get; set; }
///
/// 委外订单号
///
@@ -109,4 +118,19 @@ public partial class WmsOutsourceH : BaseEntity
///
public DateTime? ship_date { get; set; }
+ ///
+ /// erp到货单主表pk
+ ///
+ public string erp_arriveorder_pk { get; set; }
+
+ ///
+ /// 制单方式(自制 同步)
+ ///
+ public string make_method { get; set; }
+
+ ///
+ /// erp流水号
+ ///
+ public string service_num { get; set; }
+
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
index b36bde32..816edd99 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
@@ -3180,7 +3180,7 @@ namespace Tnb.WarehouseMgr
}).Where(r => r.id == dt.carry_id).ExecuteCommandAsync();
//自动签收投料更新载具状态
- WmsCarryH carry = await _db.Queryable().SingleAsync(x => x.id == dt.carry_id);
+ WmsCarryH carry = await db.Queryable().SingleAsync(x => x.id == dt.carry_id);
List clearCarryIds = new List();
clearCarryIds.Add(carry.id);
List memberCarryIds = new List();
@@ -3190,17 +3190,17 @@ namespace Tnb.WarehouseMgr
}
else
{
- memberCarryIds = await _db.Queryable().Where(x=>x.carry_id==carry.id).Select(x=>x.membercarry_id).ToListAsync();
+ memberCarryIds = await db.Queryable().Where(x=>x.carry_id==carry.id).Select(x=>x.membercarry_id).ToListAsync();
clearCarryIds.AddRange(memberCarryIds);
}
- await _db.Updateable()
+ await db.Updateable()
.SetColumns(x => x.carry_status == carryStatus)
.Where(x => clearCarryIds.Contains(x.id))
.ExecuteCommandAsync();
Logger.Information($"【TaskComplate】 更新载具状态 {JsonConvert.SerializeObject(clearCarryIds)}成功");
- await _db.Updateable()
+ await db.Updateable()
.SetColumns(x => x.is_check == isCheck)
.Where(x => clearCarryIds.Contains(x.id))
.ExecuteCommandAsync();
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceDService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceDService.cs
new file mode 100644
index 00000000..f22cd249
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceDService.cs
@@ -0,0 +1,305 @@
+using System.Collections;
+using JNPF.Common.Core.Manager;
+using JNPF.Common.Security;
+using JNPF.DependencyInjection;
+using JNPF.DynamicApiController;
+using JNPF.EventBus;
+using JNPF.Logging;
+using JNPF.Systems.Entitys.System;
+using JNPF.Systems.Interfaces.System;
+using JNPF.VisualDev;
+using JNPF.VisualDev.Interfaces;
+using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
+using SqlSugar;
+using Tnb.WarehouseMgr.Entities;
+using Tnb.ProductionMgr;
+using Tnb.WarehouseMgr.Entities.Entity;
+using Tnb.WarehouseMgr.Entities.Consts;
+using Tnb.BasicData.Entities;
+using Tnb.BasicData;
+using Tnb.ProductionMgr.Entities.Entity;
+using ModuleConst = Tnb.ProductionMgr.ModuleConst;
+using JNPF.Common.Dtos.VisualDev;
+using JNPF.Common.Extension;
+using JNPF.FriendlyException;
+using JNPF.VisualDev.Entitys;
+using Tnb.BasicData.Interfaces;
+
+namespace Tnb.WarehouseMgr
+{
+ ///
+ /// 采购收货子表
+ ///
+ [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 1102)]
+ [Route("api/[area]/[controller]/[action]")]
+ [OverideVisualDev(ModelId)]
+ // [OverideVisualDev(ModuleId)]
+ public class WmsOutsourceDService : IOverideVisualDevService, IDynamicApiController, ITransient
+ {
+
+ public const string ModelId = ModuleConsts.MODULE_WMSOUTSOURCED_ID;
+ private readonly ISqlSugarRepository _repository;
+ private readonly DataBaseManager _dbManager;
+ private readonly ISqlSugarClient _db;
+ private readonly IUserManager _userManager;
+ private readonly IDictionaryDataService _dictionaryDataService;
+ private readonly IThirdApiRecordService _thirdApiRecordService;
+ public static SemaphoreSlim s_SaveCheckResult = new(1);
+ public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
+
+ public WmsOutsourceDService(
+ ISqlSugarRepository repository,
+ DataBaseManager dbManager,
+ IUserManager userManager,
+ IThirdApiRecordService thirdApiRecordService,
+ IDictionaryDataService dictionaryDataService)
+ {
+ _repository = repository;
+ _db = repository.AsSugarClient();
+ _dbManager = dbManager;
+ _userManager = userManager;
+ _thirdApiRecordService = thirdApiRecordService;
+ _dictionaryDataService = dictionaryDataService;
+ }
+
+ public async Task SaveCheckResult(Dictionary dic)
+ {
+ try
+ {
+ await s_SaveCheckResult.WaitAsync();
+ string id = dic["id"];
+ string qcRes = dic["qc_res"];
+ WmsOutsourceD wmsOutsourceD = await _db.Queryable().SingleAsync(x => x.id == id);
+ string outsourceHId = wmsOutsourceD?.fk_wms_outsource_order_id ?? "";
+ WmsOutsourceH wmsOutsourceH = await _db.Queryable().SingleAsync(x => x.id == outsourceHId);
+
+ #region 插入质检记录
+ if (!string.IsNullOrEmpty(wmsOutsourceD.qc_res) && wmsOutsourceD.qc_res != "await")
+ {
+ throw Oops.Bah("当前收货明细行已操作过质检");
+ }
+ // 待检
+ if (string.IsNullOrEmpty(qcRes) || qcRes == "await")
+ {
+ return "保存成功";
+ }
+
+
+ string? create_id = _userManager.User.Id;
+
+ if (qcRes != (wmsOutsourceD.qc_res ?? ""))
+ {
+ BasMaterial basMaterial = await _db.Queryable().Where(r => r.id == wmsOutsourceD.matcode_id).FirstAsync();
+ WmsPurchaseQcrecord wmsPurchaseQcrecord = new WmsPurchaseQcrecord();
+ wmsPurchaseQcrecord.create_id = create_id;
+ wmsPurchaseQcrecord.create_time = DateTime.Now;
+ wmsPurchaseQcrecord.type = "委外收货";
+ wmsPurchaseQcrecord.ori_bill_code = wmsOutsourceH.outsource_order;
+ wmsPurchaseQcrecord.ori_detail_id = wmsOutsourceD.id;
+ wmsPurchaseQcrecord.warehouse_id = WmsWareHouseConst.WAREHOUSE_YCL_ID;
+ wmsPurchaseQcrecord.material_id = basMaterial.id;
+ wmsPurchaseQcrecord.material_code = basMaterial.code;
+ wmsPurchaseQcrecord.material_name = basMaterial.name;
+ wmsPurchaseQcrecord.material_spec = basMaterial.material_specification;
+ wmsPurchaseQcrecord.unit_id = wmsOutsourceD.unit;
+ wmsPurchaseQcrecord.batchno = wmsOutsourceD.code_batch;
+ wmsPurchaseQcrecord.purchase_qty = wmsOutsourceD.outsource_quantity;
+ wmsPurchaseQcrecord.purchase_prqty = wmsOutsourceD.actual_quantity;
+ wmsPurchaseQcrecord.purchase_arriveqty = wmsOutsourceD.actual_quantity;
+ wmsPurchaseQcrecord.result = qcRes;
+
+ await _db.Insertable(wmsPurchaseQcrecord).ExecuteCommandAsync();
+ }
+
+ #endregion
+ //自制的采购入库 不在质检保存里调用erp接口
+ if (string.IsNullOrEmpty(wmsOutsourceH.erp_bill_code))
+ {
+ return "保存成功";
+ }
+
+ // 托盘对应入库单
+ List instock_mains = await _db.Queryable().Where(x => x.source_id == wmsOutsourceD.fk_wms_outsource_order_id).ToListAsync();
+
+ List allInstockDetails = await _db.Queryable().Where(it => instock_mains.Select(r => r.id).Contains(it.bill_id) && it.material_id == wmsOutsourceD.matcode_id && it.code_batch == wmsOutsourceD.code_batch).OrderBy(x=>x.id).ToListAsync();
+
+ List> requestData = new List>();
+ List carryIds = instock_mains.Select(x => x.carry_id).ToList();
+ string wmsPurchaseOrderHId = wmsOutsourceH?.erp_bill_code ?? "";
+ WmsPurchaseOrderH wmsPurchaseOrderH = await _db.Queryable().SingleAsync(x => x.id == wmsPurchaseOrderHId);
+ WmsPurchaseOrderD wmsPurchaseOrderDs = await _db.Queryable().FirstAsync(x => x.fk_wms_purchase_order_id == wmsPurchaseOrderHId);
+
+ {
+ List materialIds = allInstockDetails.Select(x => x.material_id).Distinct().ToList();
+ List unitCodes = allInstockDetails.Select(x => x.unit_id).Distinct().ToList();
+ List unitDatas = await _db.Queryable()
+ .LeftJoin((x, y) => x.Id == y.DictionaryTypeId)
+ .Where((x, y) => x.EnCode == DictConst.MeasurementUnit && unitCodes.Contains(y.EnCode))
+ .Select((x, y) => y)
+ .ToListAsync();
+ List erpWarehouserelaHs = await _db.Queryable().Where(x=>x.id!=null).ToListAsync();
+
+ DictionaryDataEntity tranType = await _db.Queryable().Where(x=>x.DictionaryTypeId=="25043925951909" && x.EnCode== wmsOutsourceH.transaction_type).FirstAsync();
+ string tranTypeId = tranType?.Id ?? "";
+ string supplierId = wmsPurchaseOrderH?.supplier_id ?? "";
+ List tableIds = new List();
+ // tableIds.Add(_userManager.UserId);
+ // tableIds.Add(wmsPurchaseH.create_id);
+ tableIds.Add(WmsWareHouseConst.AdministratorOrgId);
+ tableIds.Add(instock_mains[0].warehouse_id);// 1001A11000000002OOGU
+ tableIds.AddRange(materialIds);
+ tableIds.Add(supplierId);
+ tableIds.Add(tranTypeId);
+ tableIds.AddRange(unitDatas.Select(x => x.Id).ToList());
+
+ string userId = wmsOutsourceH.create_id ?? WmsWareHouseConst.AdministratorUserId;
+ tableIds.Add(userId);
+ List erpExtendFields = await _db.Queryable().Where(x => tableIds.Contains(x.table_id)).ToListAsync();
+ // 暂时传 1001A110000000003NBJ 陈书会
+ //string erpCreateId = erpExtendFields.Find(x => x.table_id == userId)?.user_id ?? "";
+ //string erpCreateId = "1001A110000000003NBJ";
+ //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");
+
+ Dictionary erpRequestData = new Dictionary();
+ erpRequestData.Add("approver", erpCreateId);
+ erpRequestData.Add("billmaker", erpCreateId);
+ erpRequestData.Add("cbiztype", wmsOutsourceH?.transaction_type ?? "");
+ erpRequestData.Add("bitinbill", false);
+ erpRequestData.Add("cgeneralhid", null);
+ erpRequestData.Add("corpoid", erpOrg.corpoid);
+ erpRequestData.Add("corpvid", erpOrg.corpvid);
+ erpRequestData.Add("creationtime", nowStr);
+ erpRequestData.Add("creator", erpCreateId);
+ erpRequestData.Add("ctrantypeid", erpExtendFields.Find(x => x.table_id == tranTypeId)?.transaction_type_id ?? "");
+ erpRequestData.Add("cvendorid", erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_id ?? "");
+ erpRequestData.Add("cvendorvid", erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_vid ?? "");
+ // erpRequestData.Add("cwarehouseid", erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "");//类型视图里取
+ // erpWarehouserelaHs.Find(x => x.erp_warehousecode == wmsPurchaseD.erp_wh_type)?.erp_warehouseid ?? ""
+ // erpRequestData.Add("cwarehouseid", "1001A11000000002OOGU");
+ erpRequestData.Add("cwarehouseid", wmsOutsourceD?.erp_wh_type ?? "1001A11000000002OOGU");
+ erpRequestData.Add("dbilldate", nowStr);
+ erpRequestData.Add("dmakedate", nowStr);
+ erpRequestData.Add("fbillflag", 2);
+ erpRequestData.Add("fbuysellflag", 2);
+ erpRequestData.Add("ntotalnum", allInstockDetails.Sum(x => x.qty));
+ 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", wmsOutsourceH.outsource_order);
+ erpRequestData.Add("vtrantypecode", tranType?.EnCode ?? "");
+ erpRequestData.Add("csourcebillhid", wmsOutsourceH?.erp_arriveorder_pk ?? "");
+ erpRequestData.Add("vdef3", wmsOutsourceH?.service_num ?? "");
+
+ List> erpRequestDataDetails = new List>();
+ foreach (WmsInstockD item in allInstockDetails)
+ {
+ erpRequestDataDetails.Add(new Dictionary()
+ {
+ ["castunitid"] = erpExtendFields.Find(x => x.table_id == (unitDatas.Find(x => x.EnCode == item.unit_id)?.Id ?? ""))?.cunitid ?? "",
+ ["cbodytranstypecode"] = erpExtendFields.Find(x => x.table_id == tranTypeId)?.transaction_type_id ?? "",
+ // ["cbodywarehouseid"] = erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "",
+ //["cbodywarehouseid"] = erpWarehouserelaHs.Find(x => x.erp_warehousecode == basWarehouse.whcode)?.erp_warehouseid ?? "",
+ // ["cbodywarehouseid"] = "1001A11000000002OOGU",
+ ["cbodywarehouseid"] = wmsOutsourceD?.erp_wh_type ?? "1001A11000000002OOGU",
+ ["cgeneralbid"] = null,
+ ["cgeneralhid"] = null,
+ ["cmaterialoid"] = erpExtendFields.Find(x => x.table_id == item.material_id)?.cmaterialoid ?? "",
+ ["cmaterialvid"] = erpExtendFields.Find(x => x.table_id == item.material_id)?.cmaterialvid ?? "",
+ ["corpoid"] = erpOrg.corpoid,
+ ["corpvid"] = erpOrg.corpvid,
+ ["crowno"] = (allInstockDetails.FindIndex(x => x.id == item.id) + 1) * 10,
+ ["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"] = wmsOutsourceH.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"),
+ ["nnum"] = item.qty,
+ ["nshouldnum"] = item.pr_qty,
+ // ["pk_creqwareid"] = erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "",
+ // ["pk_creqwareid"] = "1001A11000000002OOGU",
+ ["pk_creqwareid"] = wmsOutsourceD?.erp_wh_type ?? "1001A11000000002OOGU",
+ ["pk_group"] = erpOrg.pk_group,
+ ["pk_org"] = erpOrg.pk_org,
+ ["pk_org_v"] = erpOrg.pk_org_v,
+ ["pseudocolumn"] = (allInstockDetails.FindIndex(x => x.id == item.id) + 1) * 10,
+ ["vbatchcode"] = item.code_batch,
+ ["csourcebillhid"] = wmsOutsourceH?.erp_arriveorder_pk ?? "",
+ ["csourcebillbid"] = wmsOutsourceD?.erp_arriveorder_b_pk ?? "",
+ ["vsourcebillcode"] = wmsOutsourceH?.outsource_order ?? "",
+ ["lineno"] = wmsPurchaseOrderDs?.lineno ?? "",
+ ["vfree1"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_id ?? "",
+ //["flargess"] = wmsOutsourceD.gift==1,
+ ["ntaxprice"] = wmsOutsourceD.price,
+
+ });
+ }
+ erpRequestData.Add("dtls", erpRequestDataDetails);
+ requestData.Add(erpRequestData);
+ }
+
+ await _db.Ado.BeginTranAsync();
+ await _db.Updateable()
+ .SetColumns(x => x.qc_res == qcRes)
+ .Where(x => x.id == id)
+ .ExecuteCommandAsync();
+
+ Dictionary dic2 = new()
+ {
+ { "ok", 1 },
+ { "no", 2 },
+ { "barelyOk", 4 },
+ { "await", 8 },
+ { "temporarily", 16 },
+ { "checking", 32 },
+ };
+ string isCheck = dic2[qcRes].ToString();
+ //await _db.Updateable()
+ // .SetColumns(x => x.is_check == isCheck)
+ // .Where(x => carryIds.Contains(x.id))
+ // .ExecuteCommandAsync();
+
+ if (requestData.IsEmpty())
+ {
+ throw Oops.Bah("没有请求数据");
+ }
+
+ BasFactoryConfig config = await _db.Queryable().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/purchaseIn/save";
+ thirdWebapiRecord.url = WmsWareHouseConst.BIP_DOMAIN + "uapws/rest/purchaseIn/save";
+ thirdWebapiRecord.request_data = JsonConvert.SerializeObject(requestData);
+ thirdWebapiRecord.create_time = DateTime.Now;
+ thirdWebapiRecord.remark = "【WmsPurchaseDService SaveCheckResult】委外收货单号:" + (wmsOutsourceH?.outsource_order ?? "")+ ",erp委外订单号:" + (wmsPurchaseOrderH?.erp_bill_code ?? "");
+
+ await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync();
+
+ BasFactoryConfig callErp = await _db.Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.CALLERP);
+ if(callErp.value=="1"){
+ await _thirdApiRecordService.Send(new List { thirdWebapiRecord }, "自动", _db);
+ }
+
+ await _db.Ado.CommitTranAsync();
+ }
+ catch (Exception e)
+ {
+ await _db.Ado.RollbackTranAsync();
+ Log.Error(e.Message,e);
+ throw Oops.Bah(e.Message);
+ }
+ finally
+ {
+ s_SaveCheckResult.Release();
+ }
+
+ return "保存成功";
+ }
+ }
+}
\ No newline at end of file
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceService.cs
index 711ae5db..ffda02bf 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceService.cs
@@ -8,6 +8,7 @@ using JNPF.Common.Extension;
using JNPF.Common.Security;
using JNPF.FriendlyException;
using JNPF.Logging;
+using JNPF.Systems.Entitys.System;
using JNPF.Systems.Interfaces.System;
using JNPF.VisualDev;
using JNPF.VisualDev.Interfaces;
@@ -15,10 +16,14 @@ using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
using Npgsql;
using SqlSugar;
+using Tnb.BasicData;
using Tnb.BasicData.Entities;
+using Tnb.BasicData.Interfaces;
using Tnb.Common.Utils;
+using Tnb.ProductionMgr.Entities.Entity;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
@@ -33,20 +38,23 @@ namespace Tnb.WarehouseMgr
///
/// 委外收货订单
///
- [OverideVisualDev(ModuleConsts.MODULE_WMSOUTSOURCEORDER_ID)]
+ [OverideVisualDev(ModuleConsts.MODULE_WMSOUTSOURCE_ID)]
public class WmsOutsourceService : BaseWareHouseService
{
+ private const string ModuleId = ModuleConsts.MODULE_WMSOUTSOURCE_ID;
private readonly ISqlSugarClient _db;
private readonly IUserManager _userManager;
private readonly IBillRullService _billRullService;
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
private readonly IWareHouseService _wareHouseService;
+ private readonly IThirdApiRecordService _thirdApiRecordService;
public WmsOutsourceService(
ISqlSugarRepository repository,
IUserManager userManager,
IBillRullService billRullService,
IRunService runService,
+ IThirdApiRecordService thirdApiRecordService,
IVisualDevService visualDevService, IWareHouseService wareHouseService)
{
_db = repository.AsSugarClient();
@@ -55,6 +63,7 @@ namespace Tnb.WarehouseMgr
_runService = runService;
_visualDevService = visualDevService;
_wareHouseService = wareHouseService;
+ _thirdApiRecordService = thirdApiRecordService;
}
public override async Task ModifyAsync(WareHouseUpInput input)
@@ -171,5 +180,237 @@ namespace Tnb.WarehouseMgr
throw;
}
}
+
+
+ ///
+ /// 采购收货
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task Purchase(PurchaseAndReceiveUpInput input)
+ {
+ var blFlag = true;
+ try
+ {
+ WmsPurchaseH wmsPurchaseH = await _db.Queryable().Where(r => r.bill_code == input.bill_code).FirstAsync();
+ if (wmsPurchaseH.make_method == "自制")
+ {
+ throw Oops.Bah("自制采购收货单不能操作此按钮");
+ }
+ await _db.Ado.BeginTranAsync();
+ WmsInstockH? instock = null;
+ var purchaseDs = await PurchaseAndSaleUpdate(input);
+ List instockDs = new();
+ if (purchaseDs?.Count > 0)
+ {
+ instock = input.Adapt();
+ instock.id = SnowflakeIdHelper.NextId();
+ instock.bill_code = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_INSTOCK_ENCODE);
+ instock.create_id = _userManager.UserId;
+ instock.create_time = DateTime.Now;
+ instock.org_id = _userManager.User.OrganizeId;
+ if (instock.source_code != null)
+ {
+ instock.sync_status = WmsWareHouseConst.SYNC_STATUS__NOTSYNC;
+ }
+ else
+ {
+ instock.sync_status = WmsWareHouseConst.SYNC_STATUS_NONEEDSYNC;
+ }
+ instock.audit_status = 0;
+ instock.print_status = "0";
+ instock.is_check = 0;
+ await _db.Insertable(instock).ExecuteCommandAsync();
+
+ instockDs = purchaseDs.Adapt>();
+ instockDs.ForEach(instockD =>
+ {
+ instockD.bill_id = instock.id;
+ instockD.create_id = _userManager.UserId;
+ instockD.create_time = DateTime.Now;
+ instockD.org_id = _userManager.User.OrganizeId;
+ });
+ await _db.Insertable(instockDs).ExecuteCommandAsync();
+
+ var purchase = await _db.Queryable().FirstAsync(it => it.id == purchaseDs.First().bill_id);
+
+ if (string.IsNullOrEmpty(purchase.supplier_id))
+ {
+ BasSupplier basSupplier = await _db.Queryable().Where(x => x.supplier_code == purchase.supplier_code).FirstAsync();
+ if (basSupplier != null)
+ {
+ await _db.Updateable()
+ .SetColumns(x => x.supplier_id == basSupplier.id)
+ .Where(x => x.id == purchase.id)
+ .ExecuteCommandAsync();
+
+ purchase.supplier_id = basSupplier.id;
+ }
+ }
+
+ //purchase.supplier_code
+
+
+
+ List dList = await _db.Queryable().Where(x => x.bill_id == purchaseDs.First().bill_id).OrderBy(x => x.id).ToListAsync();
+ List materialIds = purchaseDs.Select(x => x.material_id).Distinct().ToList();
+ List unitCodes = purchaseDs.Select(x => x.unit_id).Distinct().ToList();
+ List unitDatas = await _db.Queryable()
+ .LeftJoin((x, y) => x.Id == y.DictionaryTypeId)
+ .Where((x, y) => x.EnCode == DictConst.MeasurementUnit && (unitCodes.Contains(y.EnCode) || unitCodes.Contains(y.Id)))
+ .Select((x, y) => y)
+ .ToListAsync();
+ List erpWarehouserelaHs = await _db.Queryable().Where(x => x.id != null).ToListAsync();
+ WmsPurchaseOrderH wmsPurchaseOrderH = await _db.Queryable().SingleAsync(x => x.id == purchase.erp_bill_code);
+ //todo 先取采购订单第一条
+ //WmsPurchaseOrderD wmsPurchaseOrderDs = await _db.Queryable().FirstAsync(x=>x.fk_wms_purchase_order_id==purchase.erp_bill_code);
+
+ //自制的不调erp接口
+ if (!string.IsNullOrEmpty(wmsPurchaseOrderH.erp_bill_code))
+ {
+ List ids = new List();
+ // ids.Add(_userManager.UserId);
+ // ids.Add(WmsWareHouseConst.AdministratorUserId);
+ ids.Add(WmsWareHouseConst.AdministratorOrgId);
+ ids.Add(purchase.warehouse_id);
+ ids.AddRange(materialIds);
+ ids.Add(wmsPurchaseOrderH.supplier_id);
+ ids.AddRange(unitDatas.Select(x => x.Id).ToList());
+
+ string userId = _userManager.UserId ?? WmsWareHouseConst.AdministratorUserId;
+ ids.Add(userId);
+ List erpExtendFields = await _db.Queryable().Where(x => ids.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> requestData = new List>();
+ Dictionary erpRequestData = new Dictionary();
+ erpRequestData.Add("approver", erpCreateId);
+ erpRequestData.Add("billmaker", erpCreateId);
+ erpRequestData.Add("creationtime", nowStr);
+ erpRequestData.Add("creator", erpCreateId);
+ erpRequestData.Add("dbilldate", purchase.create_time.ToString("yyyy-MM-dd HH:mm:ss"));
+ erpRequestData.Add("dmakedate", nowStr);
+ erpRequestData.Add("ntotalastnum", purchaseDs.Sum(x => x.purchase_arriveqty));
+ erpRequestData.Add("pk_arriveorder", null);
+ // erpRequestData.Add("pk_dept","1001A1100000001JFOPQ");
+ // erpRequestData.Add("pk_dept_v","0001A1100000000AOMIQ");
+ erpRequestData.Add("Pk_receivepsndoc", erpCreateId);
+ 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("pk_pupsndoc", "");
+ erpRequestData.Add("csourceid", wmsPurchaseOrderH?.erp_pk ?? "");
+ erpRequestData.Add("pk_purchaseorg", erpOrg.pk_org);
+ erpRequestData.Add("pk_purchaseorg_v", erpOrg.pk_org_v);
+ erpRequestData.Add("pk_supplier", erpExtendFields.Find(x => x.table_id == purchase.supplier_id)?.supplier_id ?? "");//先写死
+ erpRequestData.Add("pk_supplier_v", erpExtendFields.Find(x => x.table_id == purchase.supplier_id)?.supplier_vid ?? "");//先写死
+ erpRequestData.Add("vbillcode", purchase.bill_code);
+ erpRequestData.Add("vmemo", purchase.remark);
+ erpRequestData.Add("vtrantypecode", "");
+
+ List> erpRequestDataDetails = new List>();
+ foreach (WmsPurchaseD item in dList)
+ {
+ erpRequestDataDetails.Add(new Dictionary()
+ {
+ ["castunitid"] = erpExtendFields.Find(x => x.table_id == (unitDatas.Find(x => x.EnCode == item.unit_id || x.Id == item.unit_id)?.Id ?? ""))?.cunitid ?? "",
+ ["cfirstbid"] = wmsPurchaseOrderH?.erp_pk ?? "",
+ ["cfirstid"] = item.erp_purchase_order_d_pk,
+ ["cfirsttypecode"] = "",
+ ["crececountryid"] = "0001Z010000000079UJJ",
+ ["crowno"] = item.erp_purchase_order_d_lineno,
+ ["csendcountryid"] = "0001Z010000000079UJJ",
+ ["csourcetypecode"] = "",
+ ["ctaxcountryid"] = "0001Z010000000079UJJ",
+ ["cunitid"] = erpExtendFields.Find(x => x.table_id == (unitDatas.Find(x => x.EnCode == item.unit_id || x.Id == item.unit_id)?.Id ?? ""))?.cunitid ?? "",
+ ["dbilldate"] = purchase.create_time.ToString("yyyy-MM-dd HH:mm:ss"),
+ ["dplanreceivedate"] = purchase.create_time.ToString("yyyy-MM-dd HH:mm:ss"),
+ ["dproducedate"] = purchase.create_time.ToString("yyyy-MM-dd HH:mm:ss"),
+ // ["fbuysellflag"] = 2,
+ ["fproductclass"] = 1,
+ // ["naccumchecknum"] = 0,
+ // ["nastnum"] = item.purchase_arriveqty,
+ ["nnum"] = item.purchase_arriveqty,
+ // ["nplanastnum"] = 0,
+ ["nplannum"] = item.purchase_qty,
+ ["pk_apfinanceorg"] = erpOrg.corpoid,
+ ["pk_apfinanceorg_v"] = erpOrg.corpvid,
+ ["pk_arriveorder"] = null,
+ ["pk_arriveorder_b"] = null,
+ ["pk_group"] = erpOrg.pk_group,
+ ["pk_material"] = erpExtendFields.Find(x => x.table_id == item.material_id)?.cmaterialoid ?? "",
+ ["pk_order"] = wmsPurchaseOrderH?.erp_pk ?? "",
+ ["pk_order_b"] = item.erp_purchase_order_d_pk,
+ ["pk_org"] = erpOrg.pk_org,
+ ["pk_org_v"] = erpOrg.pk_org_v,
+ ["pk_psfinanceorg"] = erpOrg.corpoid,
+ ["pk_psfinanceorg_v"] = erpOrg.corpvid,
+ // ["pk_receivestore"] = erpExtendFields.Find(x=>x.table_id==purchase.warehouse_id)?.cotherwhid ?? "",
+ // ["pk_receivestore"] = erpWarehouserelaHs.Find(x => x.erp_warehousecode == item.erp_wh_type)?.erp_warehouseid ?? "",
+ ["pk_receivestore"] = item.erp_wh_type,
+ ["pk_reqstoorg"] = erpOrg.pk_org,
+ ["pk_reqstoorg_v"] = erpOrg.pk_org_v,
+ ["pk_srcmaterial"] = erpExtendFields.Find(x => x.table_id == item.material_id)?.cmaterialoid ?? "",
+ ["vbatchcode"] = item.code_batch,
+ ["Vfree1"] = item.code_batch,
+ ["mes_detail_id"] = item.id,
+ ["bpresent"] = item.gift == 1,
+ ["csourceid"] = wmsPurchaseOrderH?.erp_pk ?? "",
+ ["vsourcecode"] = wmsPurchaseOrderH.erp_bill_code,
+ ["csourcebid"] = item.erp_purchase_order_d_pk,
+ ["IsType"] = 0,
+ ["csourcetypecode"] = null,
+ ["vsourcerowno"] = null,
+ ["vsourcetrantype"] = null,
+ ["cproductorid"] = item.production_unit,
+ });
+ }
+ erpRequestData.Add("dtls", erpRequestDataDetails);
+ requestData.Add(erpRequestData);
+ BasFactoryConfig config = await _db.Queryable().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/purarrvial/save";
+ thirdWebapiRecord.url = WmsWareHouseConst.BIP_DOMAIN + "uapws/rest/purarrvial/save";
+ thirdWebapiRecord.request_data = JsonConvert.SerializeObject(erpRequestData);
+ thirdWebapiRecord.create_time = DateTime.Now;
+ thirdWebapiRecord.remark = $"【WmsPurchaseService Purchase】erp采购订单:{wmsPurchaseOrderH.erp_bill_code}";
+
+ await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync();
+ BasFactoryConfig callErp = await _db.Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.CALLERP);
+ if (callErp.value == "1")
+ {
+ await _thirdApiRecordService.Send(new List { thirdWebapiRecord }, "自动", _db);
+ }
+ }
+
+
+ }
+ //通知Mes接口
+ //_ = SyncMesData(instock.id, instockDs.Select(x => x.material_id).ToList(), EnumTriggerEvent.入厂检按物料编号);
+ await _db.Ado.CommitTranAsync();
+ }
+ catch (Exception ex)
+ {
+ blFlag = false;
+ await _db.Ado.RollbackTranAsync();
+ Log.Error("采购收货失败", ex);
+ throw;
+ }
+ return await Task.FromResult(blFlag);
+ }
+
+
+
+
+
}
}
\ No newline at end of file
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs
index 8a369f5f..a3d406a9 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs
@@ -49,7 +49,7 @@ namespace Tnb.WarehouseMgr
[OverideVisualDev(ModuleConsts.MODULE_WMSPURCHASE_ID)]
public class WmsPurchaseService : WmsPurchaseAndSaleCommonService, IWmsPurchaseService
{
- private const string ModuleId = "29975280336405";
+ private const string ModuleId = ModuleConsts.MODULE_WMSPURCHASE_ID;
private readonly IBillRullService _billRullService;
private readonly ISqlSugarClient _db;
private readonly IUserManager _userManager;