Merge branch 'dev' of ssh://git.tuotong-tech.com:9105/tnb/tnb.server into dev
This commit is contained in:
@@ -179,6 +179,41 @@ public static class DictConst
|
||||
/// </summary>
|
||||
public const string SHENGCHANBULIAO = "24";
|
||||
|
||||
/// <summary>
|
||||
/// 出入库单据状态code
|
||||
/// </summary>
|
||||
public const string DOCUMENTSTATU = "DocumentStatu";
|
||||
|
||||
/// <summary>
|
||||
/// 出库单据状态新增
|
||||
/// </summary>
|
||||
public const string OUTSTOCKSTATUSADD = "1";
|
||||
|
||||
/// <summary>
|
||||
/// 出库单据状态作业中
|
||||
/// </summary>
|
||||
public const string OUTSTOCKSTATUSWORKING = "2";
|
||||
|
||||
/// <summary>
|
||||
/// 出库单据状态已呼叫
|
||||
/// </summary>
|
||||
public const string OUTSTOCKSTATUSCALLED = "3";
|
||||
|
||||
/// <summary>
|
||||
/// 出库单据状态待配送
|
||||
/// </summary>
|
||||
public const string OUTSTOCKSTATUSTOBEDELIVERED = "4";
|
||||
|
||||
/// <summary>
|
||||
/// 出库单据状态取消
|
||||
/// </summary>
|
||||
public const string OUTSTOCKSTATUSCANCEL = "7";
|
||||
|
||||
/// <summary>
|
||||
/// 出库单据状态完成
|
||||
/// </summary>
|
||||
public const string OUTSTOCKSTATUSCOMPLETED = "8";
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -4,6 +4,5 @@ namespace Tnb.ProductionMgr.Entities.Dto
|
||||
{
|
||||
public string equip_code { get; set; }
|
||||
public string label_code { get; set; }
|
||||
public string as_location_code { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
namespace Tnb.ProductionMgr.Entities.Dto
|
||||
{
|
||||
public class PrdKittingOutChangeStatusInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 来源单号
|
||||
/// </summary>
|
||||
public string code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 0 齐套出库 1 一般出库 2 物料出库
|
||||
/// </summary>
|
||||
public string type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 状态
|
||||
/// </summary>
|
||||
public string status { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -63,7 +63,7 @@ public partial class PrdOutstockH : BaseEntity<string>
|
||||
/// <summary>
|
||||
/// 发料工位
|
||||
/// </summary>
|
||||
public string? workstation { get; set; }
|
||||
public string? workstation_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 所属产线
|
||||
|
||||
@@ -43,5 +43,12 @@ namespace Tnb.ProductionMgr.Interfaces
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
public Task<string> InstockTubeThree(PrdReport prdReport);
|
||||
|
||||
/// <summary>
|
||||
/// 外包装入库申请
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
public Task<string> InstockOutPack(InstockInput inut);
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
using Tnb.ProductionMgr.Entities.Dto;
|
||||
|
||||
namespace Tnb.ProductionMgr.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
@@ -5,6 +7,11 @@ namespace Tnb.ProductionMgr.Interfaces
|
||||
/// </summary>
|
||||
public interface IPrdKittingOutService
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 齐套出库 一般出库 物料出库 改状态
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
public Task<dynamic> ChangeStatusById(List<PrdKittingOutChangeStatusInput> inputs);
|
||||
}
|
||||
}
|
||||
@@ -519,6 +519,7 @@ namespace Tnb.ProductionMgr
|
||||
|
||||
Dictionary<string, object> queryJson = string.IsNullOrEmpty(input.queryJson) ? new Dictionary<string, object>() : input.queryJson.ToObject<Dictionary<string, object>>();
|
||||
string? code = queryJson.ContainsKey("code") ? queryJson["code"].ToString() : "";
|
||||
string? status = queryJson.ContainsKey("status") ? queryJson["status"].ToString() : "";
|
||||
// DateTime? start_time = queryJson.ContainsKey("start_time") ? queryJson["start_time"].ToString() == "" ? null : Convert.ToDateTime(queryJson["start_time"]) : null;
|
||||
// DateTime? end_time = queryJson.ContainsKey("end_time") ? queryJson["end_time"].ToString() == "" ? null : Convert.ToDateTime(queryJson["end_time"]) : null;
|
||||
|
||||
@@ -527,11 +528,35 @@ namespace Tnb.ProductionMgr
|
||||
input.sidx = "create_time";
|
||||
input.sort = "desc";
|
||||
}
|
||||
|
||||
List<string> statusList = new();
|
||||
if (!string.IsNullOrEmpty(status))
|
||||
{
|
||||
switch (status)
|
||||
{
|
||||
case "1":
|
||||
statusList.Add(DictConst.OUTSTOCKSTATUSADD);
|
||||
statusList.Add(DictConst.OUTSTOCKSTATUSCALLED);
|
||||
break;
|
||||
case "2":
|
||||
statusList.Add(DictConst.OUTSTOCKSTATUSTOBEDELIVERED);
|
||||
statusList.Add(DictConst.OUTSTOCKSTATUSWORKING);
|
||||
break;
|
||||
case "3":
|
||||
statusList.Add(DictConst.OUTSTOCKSTATUSCANCEL);
|
||||
statusList.Add(DictConst.OUTSTOCKSTATUSCOMPLETED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
var queryable1 = db.Queryable<PrdKittingOutH>()
|
||||
.LeftJoin<UserEntity>((a, b) => a.create_id == b.Id)
|
||||
.LeftJoin<WmsKittingoutH>((a,b,c)=>a.id==c.source_id)
|
||||
.LeftJoin<DictionaryTypeEntity>((a,b,c,d)=>d.EnCode==DictConst.DOCUMENTSTATU)
|
||||
.LeftJoin<DictionaryDataEntity>((a,b,c,d,e)=>e.DictionaryTypeId==d.Id && c.status==e.Id)
|
||||
.Where((a,b)=>a.workstation_id==input.stationId)
|
||||
.Select((a, b) => new FeedingRecordListOutput()
|
||||
.WhereIF(statusList.Count>0,(a,b,c,d,e)=>statusList.Contains(e.EnCode))
|
||||
.Select((a, b,c,d,e) => new FeedingRecordListOutput()
|
||||
{
|
||||
id = a.id,
|
||||
code = a.code,
|
||||
@@ -539,13 +564,17 @@ namespace Tnb.ProductionMgr
|
||||
type = "0",
|
||||
create_name = b.RealName,
|
||||
create_time = a.create_time==null ? "" : a.create_time.Value.ToString(DbTimeFormat.SS),
|
||||
status = a.status
|
||||
status = e.FullName
|
||||
});
|
||||
|
||||
var queryable2 = db.Queryable<PrdOutstockH>()
|
||||
.LeftJoin<UserEntity>((a, b) => a.create_id == b.Id)
|
||||
.Where((a,b)=>a.workstation==input.stationId)
|
||||
.Select((a, b) => new FeedingRecordListOutput()
|
||||
.LeftJoin<WmsOutstockH>((a,b,c)=>a.id==c.source_id)
|
||||
.LeftJoin<DictionaryTypeEntity>((a,b,c,d)=>d.EnCode==DictConst.DOCUMENTSTATU)
|
||||
.LeftJoin<DictionaryDataEntity>((a,b,c,d,e)=>e.DictionaryTypeId==d.Id && c.status==e.Id)
|
||||
.Where((a,b)=>a.workstation_id==input.stationId)
|
||||
.WhereIF(statusList.Count>0,(a,b,c,d,e)=>statusList.Contains(e.EnCode))
|
||||
.Select((a, b,c,d,e) => new FeedingRecordListOutput()
|
||||
{
|
||||
id = a.id,
|
||||
code = a.bill_code,
|
||||
@@ -553,7 +582,7 @@ namespace Tnb.ProductionMgr
|
||||
type = a.type,
|
||||
create_name = b.RealName,
|
||||
create_time = a.create_time==null ? "" : a.create_time.Value.ToString(DbTimeFormat.SS),
|
||||
status = a.status
|
||||
status = e.FullName
|
||||
});
|
||||
var result = await db.UnionAll(queryable1,queryable2)
|
||||
.MergeTable()
|
||||
@@ -570,7 +599,7 @@ namespace Tnb.ProductionMgr
|
||||
var db = _repository.AsSugarClient();
|
||||
if (input.type == "0")
|
||||
{
|
||||
var result = db.Queryable<PrdKittingOutD>()
|
||||
var result = await db.Queryable<PrdKittingOutD>()
|
||||
.LeftJoin<BasMaterial>((a, b) => a.material_id == b.id)
|
||||
.LeftJoin<DictionaryTypeEntity>((a,b,c)=>c.EnCode==DictConst.MeasurementUnit)
|
||||
.LeftJoin<DictionaryDataEntity>((a,b,c,d)=>d.DictionaryTypeId==c.Id && a.unit_id==d.Id)
|
||||
@@ -588,7 +617,7 @@ namespace Tnb.ProductionMgr
|
||||
}
|
||||
else
|
||||
{
|
||||
var result = db.Queryable<PrdOutstockD>()
|
||||
var result = await db.Queryable<PrdOutstockD>()
|
||||
.LeftJoin<BasMaterial>((a, b) => a.material_id == b.id)
|
||||
.LeftJoin<DictionaryTypeEntity>((a,b,c)=>c.EnCode==DictConst.MeasurementUnit)
|
||||
.LeftJoin<DictionaryDataEntity>((a,b,c,d)=>d.DictionaryTypeId==c.Id && a.unit_id==d.Id)
|
||||
|
||||
@@ -263,7 +263,6 @@ namespace Tnb.ProductionMgr
|
||||
{
|
||||
string equip_code = inut.equip_code;
|
||||
string label_code = inut.label_code;
|
||||
string as_location_code = inut.as_location_code;
|
||||
string warehouse_id = "2";
|
||||
if (!string.IsNullOrEmpty(equip_code))
|
||||
{
|
||||
@@ -621,5 +620,15 @@ namespace Tnb.ProductionMgr
|
||||
|
||||
return result2.IsSuccess ? "true" : "false";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 外包装入库申请
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
public Task<string> InstockOutPack(InstockInput inut)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -165,6 +165,7 @@ namespace Tnb.ProductionMgr
|
||||
public async Task<dynamic> KittingOut(KittingOutInput kittingOutInput)
|
||||
{
|
||||
PrdKittingOutH prdKittingOutH = new();
|
||||
prdKittingOutH.code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDKITTINGOUTSTOCK_CODE);
|
||||
try
|
||||
{
|
||||
ISqlSugarClient db = _repository.AsSugarClient();
|
||||
@@ -184,6 +185,7 @@ namespace Tnb.ProductionMgr
|
||||
collocation_scheme_id = kittingOutInput.collocation_scheme_id,
|
||||
collocation_scheme_code = kittingOutInput.collocation_scheme_code,
|
||||
source_id = prdKittingOutH.id,
|
||||
source_code = prdKittingOutH.code,
|
||||
create_id = _userManager.UserId,
|
||||
wmsKittingoutDs = new List<MESKittingOutStkDInput>(),
|
||||
}
|
||||
@@ -205,7 +207,6 @@ namespace Tnb.ProductionMgr
|
||||
}
|
||||
else
|
||||
{
|
||||
prdKittingOutH.code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDKITTINGOUTSTOCK_CODE);
|
||||
prdKittingOutH.warehouse_id = kittingOutInput.warehouse_id;
|
||||
prdKittingOutH.location_code = kittingOutInput.location_code;
|
||||
prdKittingOutH.material_id = kittingOutInput.material_id;
|
||||
@@ -274,6 +275,7 @@ namespace Tnb.ProductionMgr
|
||||
public async Task<dynamic> KittingOutNew(KittingOutNewInput kittingOutInput)
|
||||
{
|
||||
PrdKittingOutH prdKittingOutH = new();
|
||||
prdKittingOutH.code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDKITTINGOUTSTOCK_CODE);
|
||||
string warehouse_id = "26103348825381";//二楼缓存仓
|
||||
try
|
||||
{
|
||||
@@ -310,6 +312,7 @@ namespace Tnb.ProductionMgr
|
||||
collocation_scheme_id = kittingOutInput.collocation_scheme_id,
|
||||
collocation_scheme_code = wmsCollocationSchemeH.bill_code,
|
||||
source_id = prdKittingOutH.id,
|
||||
source_code = prdKittingOutH.code,
|
||||
create_id = _userManager.UserId,
|
||||
wmsKittingoutDs = new List<MESKittingOutStkDInput>(),
|
||||
}
|
||||
@@ -344,7 +347,6 @@ namespace Tnb.ProductionMgr
|
||||
}
|
||||
else
|
||||
{
|
||||
prdKittingOutH.code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDKITTINGOUTSTOCK_CODE);
|
||||
prdKittingOutH.warehouse_id = warehouse_id;
|
||||
prdKittingOutH.location_code = kittingOutInput.location_code;
|
||||
prdKittingOutH.material_id = basMaterial.id;
|
||||
@@ -358,6 +360,7 @@ namespace Tnb.ProductionMgr
|
||||
prdKittingOutH.create_id = _userManager.UserId;
|
||||
prdKittingOutH.create_time = DateTime.Now;
|
||||
prdKittingOutH.org_id = _userManager.GetUserInfo().Result.organizeId;
|
||||
prdKittingOutH.status = DictConst.OUTSTOCKSTATUSADD;
|
||||
List<PrdKittingOutD> prdKittingOutDs = new();
|
||||
foreach (WmsCollocationSchemeD item in wmsCollocationSchemeDs)
|
||||
{
|
||||
@@ -401,5 +404,38 @@ namespace Tnb.ProductionMgr
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 齐套出库 一般出库 物料出库 改状态
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> ChangeStatusById(List<PrdKittingOutChangeStatusInput> inputs)
|
||||
{
|
||||
// if(string.IsNullOrEmpty(input.code) || string.IsNullOrEmpty(input.type) || string.IsNullOrEmpty(input.status))
|
||||
// throw Oops.Bah("参数错误");
|
||||
if (inputs == null || inputs.Count <= 0)
|
||||
{
|
||||
throw Oops.Bah("参数错误");
|
||||
}
|
||||
|
||||
ISqlSugarClient db = _repository.AsSugarClient();
|
||||
|
||||
foreach (var input in inputs)
|
||||
{
|
||||
if (input.type == "0")
|
||||
{
|
||||
await db.Updateable<PrdKittingOutH>().SetColumns(x => x.status == input.status)
|
||||
.Where(x => x.code == input.code).ExecuteCommandAsync();
|
||||
}else if (input.type == "1" || input.type == "2")
|
||||
{
|
||||
await db.Updateable<PrdOutstockH>().SetColumns(x => x.status == input.status)
|
||||
.Where(x => x.bill_code == input.code).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -147,6 +147,11 @@ namespace Tnb.ProductionMgr
|
||||
|
||||
string locationId = location.id;
|
||||
|
||||
PrdOutstockH prdOutstockH = new()
|
||||
{
|
||||
bill_code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDOUTSTOCK_CODE),
|
||||
};
|
||||
|
||||
input.outstock.bill_type = DictConst.SHENGCHANLINGLIAO;
|
||||
// input.outstock.bill_date = visualDevModelDataCrInput.data.ContainsKey("bill_date") ? Convert.ToDateTime(visualDevModelDataCrInput.data["bill_date"].ToString()) : DateTime.Now;
|
||||
input.outstock.bill_date = DateTime.Now;
|
||||
@@ -154,6 +159,8 @@ namespace Tnb.ProductionMgr
|
||||
input.outstock.warehouse_id = warehouse_id;
|
||||
input.outstock.create_id = _userManager.UserId;
|
||||
input.outstock.location_code = location?.location_code ?? "";
|
||||
input.outstock.source_code = prdOutstockH.bill_code;
|
||||
input.outstock.source_id = prdOutstockH.id;
|
||||
OrganizeEntity workline = await _organizeService.GetAnyParentByWorkstationId(generalOutstockInput.workstation_id, DictConst.RegionCategoryWorklineCode);
|
||||
|
||||
List<string> materialIds = generalOutstockInput.details.Select(x => x.material_id).ToList();
|
||||
@@ -195,20 +202,17 @@ namespace Tnb.ProductionMgr
|
||||
}
|
||||
else
|
||||
{
|
||||
PrdOutstockH prdOutstockH = new()
|
||||
{
|
||||
bill_code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDOUTSTOCK_CODE),
|
||||
bill_type = DictConst.SHENGCHANLINGLIAO,
|
||||
type = "1",
|
||||
warehouse_id = warehouse_id,
|
||||
location_code = generalOutstockInput.location_code,
|
||||
create_id = _userManager.UserId,
|
||||
org_id = _userManager.GetUserInfo().Result.organizeId,
|
||||
bill_date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
|
||||
create_time = DateTime.Now,
|
||||
workstation = generalOutstockInput.workstation_id,
|
||||
workline = workline?.Id ?? ""
|
||||
};
|
||||
prdOutstockH.bill_type = DictConst.SHENGCHANLINGLIAO;
|
||||
prdOutstockH.type = "1";
|
||||
prdOutstockH.warehouse_id = warehouse_id;
|
||||
prdOutstockH.location_code = generalOutstockInput.location_code;
|
||||
prdOutstockH.create_id = _userManager.UserId;
|
||||
prdOutstockH.org_id = _userManager.GetUserInfo().Result.organizeId;
|
||||
prdOutstockH.bill_date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
prdOutstockH.create_time = DateTime.Now;
|
||||
prdOutstockH.workstation_id = generalOutstockInput.workstation_id;
|
||||
prdOutstockH.workline = workline?.Id ?? "";
|
||||
prdOutstockH.status = DictConst.OUTSTOCKSTATUSADD;
|
||||
|
||||
List<PrdOutstockD> prdOutstockDs = new();
|
||||
foreach (GeneralOutstockDInput item in generalOutstockInput.details)
|
||||
@@ -266,6 +270,11 @@ namespace Tnb.ProductionMgr
|
||||
BasLocation location = await db.Queryable<BasLocation>().Where(x=>x.location_code==materialOutstockInput.location_code).FirstAsync();
|
||||
if (location == null) throw Oops.Bah("未找到库位");
|
||||
string locationId = location.id;
|
||||
|
||||
PrdOutstockH prdOutstockH = new()
|
||||
{
|
||||
bill_code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDOUTSTOCK_CODE),
|
||||
};
|
||||
|
||||
input.outstock.bill_type = DictConst.SHENGCHANLINGLIAO;
|
||||
// input.outstock.bill_date = visualDevModelDataCrInput.data.ContainsKey("bill_date") ? Convert.ToDateTime(visualDevModelDataCrInput.data["bill_date"].ToString()) : DateTime.Now;
|
||||
@@ -274,6 +283,8 @@ namespace Tnb.ProductionMgr
|
||||
input.outstock.warehouse_id = warehouse_id;
|
||||
input.outstock.create_id = _userManager.UserId;
|
||||
input.outstock.location_code = location?.location_code ?? "";
|
||||
input.outstock.source_code = prdOutstockH.bill_code;
|
||||
input.outstock.source_id = prdOutstockH.id;
|
||||
OrganizeEntity workline = await _organizeService.GetAnyParentByWorkstationId(materialOutstockInput.workstation_id, DictConst.RegionCategoryWorklineCode);
|
||||
|
||||
List<string> materialIds = materialOutstockInput.details.Select(x => x.material_id).ToList();
|
||||
@@ -315,8 +326,6 @@ namespace Tnb.ProductionMgr
|
||||
}
|
||||
else
|
||||
{
|
||||
PrdOutstockH prdOutstockH = new PrdOutstockH();
|
||||
prdOutstockH.bill_code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDOUTSTOCK_CODE);
|
||||
prdOutstockH.bill_type = DictConst.SHENGCHANLINGLIAO;
|
||||
prdOutstockH.type = "2";
|
||||
prdOutstockH.warehouse_id = warehouse_id;
|
||||
@@ -325,8 +334,9 @@ namespace Tnb.ProductionMgr
|
||||
prdOutstockH.org_id = _userManager.GetUserInfo().Result.organizeId;
|
||||
prdOutstockH.bill_date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
prdOutstockH.create_time = DateTime.Now;
|
||||
prdOutstockH.workstation = materialOutstockInput.workstation_id;
|
||||
prdOutstockH.workstation_id = materialOutstockInput.workstation_id;
|
||||
prdOutstockH.workline = workline?.Id ?? "";
|
||||
prdOutstockH.status = DictConst.OUTSTOCKSTATUSADD;
|
||||
|
||||
List<PrdOutstockD> prdOutstockDs = new List<PrdOutstockD>();
|
||||
foreach (var item in materialOutstockInput.details)
|
||||
|
||||
@@ -25,62 +25,74 @@ namespace Tnb.ProductionMgr
|
||||
//获取注塑装箱状态
|
||||
private void GetZSPackStatus(object state)
|
||||
{
|
||||
string[] strs = new string[1] { "TY4C-ZHUSU1" };
|
||||
string sign = "agvMode";
|
||||
foreach (string s in strs)
|
||||
try
|
||||
{
|
||||
Dictionary<string, string> dic = _redisData.HGetAll(s).Result;
|
||||
foreach (KeyValuePair<string, string> kv in dic)
|
||||
string[] strs = new string[1] { "TY4C-ZHUSU1" };
|
||||
string sign = "agvMode";
|
||||
foreach (string s in strs)
|
||||
{
|
||||
if (!kv.Key.Contains(sign))
|
||||
Dictionary<string, string> dic = _redisData.HGetAll(s).Result;
|
||||
foreach (KeyValuePair<string, string> kv in dic)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
JObject? res = JsonConvert.DeserializeObject<JObject>(kv.Value);
|
||||
if (res != null && res["Value"] != null)
|
||||
{
|
||||
if (int.Parse(res["Value"]!.ToString()) is not ((int)Eagvmode.无请求) and not ((int)Eagvmode.收到请求))
|
||||
if (!kv.Key.Contains(sign))
|
||||
{
|
||||
InstockInput instockInput = new()
|
||||
continue;
|
||||
}
|
||||
JObject? res = JsonConvert.DeserializeObject<JObject>(kv.Value);
|
||||
if (res != null && res["Value"] != null)
|
||||
{
|
||||
if (int.Parse(res["Value"]!.ToString()) is not ((int)Eagvmode.无请求) and not ((int)Eagvmode.收到请求))
|
||||
{
|
||||
equip_code = res["TagName"]!.ToString()
|
||||
};
|
||||
_ = _prdInstockService.InstockTypeOne(instockInput);
|
||||
InstockInput instockInput = new()
|
||||
{
|
||||
equip_code = res["DevName"]!.ToString(),
|
||||
label_code = res["TagName"]!.ToString()
|
||||
};
|
||||
_prdInstockService.InstockTypeOne(instockInput);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
//获取挤出装箱状态
|
||||
private void GetJCPackStatus(object state)
|
||||
{
|
||||
string[] strs = new string[1] { "TY4C-SHUSONG-JC" };
|
||||
string sign = "AGVFullCall";
|
||||
foreach (string s in strs)
|
||||
try
|
||||
{
|
||||
Dictionary<string, string> dic = _redisData.HGetAll(s).Result;
|
||||
foreach (KeyValuePair<string, string> kv in dic)
|
||||
string[] strs = new string[1] { "TY4C-SHUSONG-JC" };
|
||||
string sign = "AGVFullCall";
|
||||
foreach (string s in strs)
|
||||
{
|
||||
if (!kv.Key.Contains(sign))
|
||||
Dictionary<string, string> dic = _redisData.HGetAll(s).Result;
|
||||
foreach (KeyValuePair<string, string> kv in dic)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
JObject? res = JsonConvert.DeserializeObject<JObject>(kv.Value);
|
||||
if (res != null && res["Value"] != null)
|
||||
{
|
||||
if (res.Value<bool>("Value"))
|
||||
if (!kv.Key.Contains(sign))
|
||||
{
|
||||
InstockInput instockInput = new()
|
||||
continue;
|
||||
}
|
||||
JObject? res = JsonConvert.DeserializeObject<JObject>(kv.Value);
|
||||
if (res != null && res["Value"] != null)
|
||||
{
|
||||
if (res.Value<bool>("Value"))
|
||||
{
|
||||
equip_code = res["TagName"]!.ToString()
|
||||
};
|
||||
_ = _prdInstockService.InstockTypeOne(instockInput);
|
||||
InstockInput instockInput = new()
|
||||
{
|
||||
equip_code = res["DevName"]!.ToString(),
|
||||
label_code = res["TagName"]!.ToString()
|
||||
};
|
||||
_prdInstockService.InstockTypeOne(instockInput);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
//获取限位状态
|
||||
private void GetLimitStatus(object state)
|
||||
@@ -90,29 +102,38 @@ namespace Tnb.ProductionMgr
|
||||
Console.WriteLine($"获取挤出装箱状态");
|
||||
string data = _redisData.GetHash("TY4C-SHUSONG-JC", "AGVFullCall").Result;
|
||||
Console.WriteLine(data);*/
|
||||
/*
|
||||
string[] strs = new string[1] { "TY4C-WAIBAO" };
|
||||
string sign = "AGVCall";
|
||||
foreach (string s in strs)
|
||||
try
|
||||
{
|
||||
Dictionary<string, string> dic = _redisData.HGetAll(s).Result;
|
||||
foreach (KeyValuePair<string, string> kv in dic)
|
||||
string[] strs = new string[1] { "TY4C-WAIBAO" };
|
||||
string sign = "AGVCall";
|
||||
foreach (string s in strs)
|
||||
{
|
||||
if (!kv.Key.Contains(sign))
|
||||
Dictionary<string, string> dic = _redisData.HGetAll(s).Result;
|
||||
foreach (KeyValuePair<string, string> kv in dic)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
JObject? res = JsonConvert.DeserializeObject<JObject>(kv.Value);
|
||||
if (res != null && res["Value"] != null)
|
||||
{
|
||||
if (res.Value<bool>("Value"))
|
||||
if (!kv.Key.Contains(sign))
|
||||
{
|
||||
//
|
||||
continue;
|
||||
}
|
||||
JObject? res = JsonConvert.DeserializeObject<JObject>(kv.Value);
|
||||
if (res != null && res["Value"] != null)
|
||||
{
|
||||
if (res.Value<bool>("Value"))
|
||||
{
|
||||
InstockInput instockInput = new()
|
||||
{
|
||||
equip_code = res["DevName"]!.ToString(),
|
||||
label_code = res["TagName"]!.ToString()
|
||||
};
|
||||
_prdInstockService.InstockOutPack(instockInput);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
public void Dispose()
|
||||
{
|
||||
@@ -122,9 +143,9 @@ namespace Tnb.ProductionMgr
|
||||
}
|
||||
public Task StartAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
// ZSpacktimer = new Timer(GetZSPackStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(2));
|
||||
// JCpacktimer = new Timer(GetJCPackStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(2));
|
||||
// limittimer = new Timer(GetLimitStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(2));
|
||||
ZSpacktimer = new Timer(GetZSPackStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
|
||||
JCpacktimer = new Timer(GetJCPackStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
|
||||
limittimer = new Timer(GetLimitStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
public Task StopAsync(CancellationToken cancellationToken)
|
||||
|
||||
@@ -45,4 +45,26 @@ namespace Tnb.QcMgr.Entities
|
||||
/// </summary>
|
||||
public int? pronum { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class CreateTaskEntity
|
||||
{
|
||||
/// <summary>
|
||||
/// 物料方案编号
|
||||
/// </summary>
|
||||
public List<string> materialids { get; set; }
|
||||
/// <summary>
|
||||
/// 触发条件
|
||||
/// </summary>
|
||||
public EnumTriggerEvent? triggerevent { get; set; }
|
||||
|
||||
public string maintableid { get; set; }
|
||||
}
|
||||
public class TaskEntity
|
||||
{
|
||||
public List<string> materialids { get; set; }
|
||||
public QcCheckPlanH qcCheckPlanH { get; set; }
|
||||
public string maintableid { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,5 +32,7 @@ namespace Tnb.QcMgr.Interfaces
|
||||
/// <returns></returns>
|
||||
public Task CreateTask(TriggerPlanEntity entity);
|
||||
|
||||
public Task CreateWmsTask(CreateTaskEntity entity);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -286,6 +286,109 @@ namespace Tnb.QcMgr
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// WMS出库入库检
|
||||
/// </summary>
|
||||
/// <param name="CreateTaskEntity"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task CreateWmsTask(CreateTaskEntity entity)
|
||||
{
|
||||
ISugarQueryable<QcCheckPlanH, QcCheckPlanAdd> Query = _repository.AsSugarClient().Queryable<QcCheckPlanH, QcCheckPlanAdd>
|
||||
((a, b) => new object[] {
|
||||
JoinType.Inner,a.id== b.mainid,
|
||||
});
|
||||
GetQuery(Query, entity);
|
||||
List<QcCheckPlanH> list = await Query.ToListAsync();
|
||||
List<TaskEntity> taskEntities = new List<TaskEntity>();
|
||||
foreach (QcCheckPlanH data in list)
|
||||
{
|
||||
if (entity.materialids.Count>0)
|
||||
{
|
||||
if (_repository.AsSugarClient().Queryable<QcCheckPlanMaterial>().Where(p => p.planid == data.id).Any())
|
||||
{
|
||||
var Materials= _repository.AsSugarClient().Queryable<QcCheckPlanMaterial>().Where(p => p.planid == data.id).Select(p=>p.materialid).ToList();
|
||||
var Intersect = entity.materialids.Intersect(Materials).ToList();
|
||||
if (Intersect.Count > 0)
|
||||
{
|
||||
taskEntities.Add(new TaskEntity { maintableid=entity.maintableid, materialids = Intersect!, qcCheckPlanH = data });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (taskEntities.Count > 0)
|
||||
{
|
||||
await SaveTask(taskEntities);
|
||||
}
|
||||
}
|
||||
|
||||
private void GetQuery(ISugarQueryable<QcCheckPlanH, QcCheckPlanAdd> Query, CreateTaskEntity entity)
|
||||
{
|
||||
List<DictionaryDataEntity> DictionaryData = _repository.AsSugarClient().Queryable<DictionaryDataEntity, DictionaryTypeEntity>
|
||||
((a, b) => new object[] { JoinType.Left, a.DictionaryTypeId == b.Id, })
|
||||
.Where((a, b) => b.FullName == "质检类型选择").ToList();
|
||||
QcTriggerEvent TriggerEvent = new();
|
||||
EnumTriggerEvent? enumTriggerEvent = entity.triggerevent;
|
||||
RemarkAttribute remark = RemarkAttribute.GetRemark(enumTriggerEvent);
|
||||
string type = DictionaryData.Where(p => p.FullName == remark.CheckType).First().Id;
|
||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == type && p.name == remark.CheckContent).First();
|
||||
Query = Query.Where((a, b) => b.triggertype == "3" && b.content!.Contains(TriggerEvent.id));
|
||||
}
|
||||
|
||||
private async Task SaveTask(List<TaskEntity> taskEntities)
|
||||
{
|
||||
DictionaryDataEntity DictionaryData = _repository.AsSugarClient().Queryable<DictionaryDataEntity, DictionaryTypeEntity>
|
||||
((a, b) => new object[] { JoinType.Left, a.DictionaryTypeId == b.Id, })
|
||||
.Where((a, b) => b.FullName == "质检状态" && a.FullName == "待执行").First();
|
||||
foreach (var entity in taskEntities)
|
||||
{
|
||||
List<QcCheckPlanD> plands = await _repository.AsSugarClient().Queryable<QcCheckPlanD>().Where(p =>p.mainid== entity.qcCheckPlanH.id).ToListAsync();
|
||||
|
||||
foreach (string s in entity.materialids)
|
||||
{
|
||||
DateTime time = DateTime.Now;
|
||||
QcCheckExecH qcCheckExecH = new()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId(),
|
||||
checktype = entity.qcCheckPlanH.checktype,
|
||||
status = DictionaryData.Id,
|
||||
tasktime = time.ToString("yyyy-MM-dd HH:mm:ss"),
|
||||
materialid = s,
|
||||
create_id = _userManager.UserId,
|
||||
create_time = time,
|
||||
extras= entity.maintableid
|
||||
};
|
||||
List<QcCheckExecD> ExecDs = new();
|
||||
foreach (var pland in plands)
|
||||
{
|
||||
QcCheckExecD QcCheckExecD = new()
|
||||
{
|
||||
mainid = qcCheckExecH.id,
|
||||
extype = pland.extype,
|
||||
excontent = pland.excontent,
|
||||
check = pland.check,
|
||||
errorcause = pland.errorcause,
|
||||
errorlevel = pland.errorlevel,
|
||||
remark = pland.remark,
|
||||
attachment = pland.attachment,
|
||||
isexec = pland.isexec,
|
||||
custom = pland.custom,
|
||||
typeid = pland.typeid,
|
||||
itemid = pland.itemid,
|
||||
create_id = _userManager.UserId,
|
||||
create_time = time
|
||||
};
|
||||
ExecDs.Add(QcCheckExecD);
|
||||
}
|
||||
_ = await _repository.AsSugarClient().Insertable(qcCheckExecH).ExecuteCommandAsync();
|
||||
_ = await _repository.AsSugarClient().Insertable(ExecDs).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 根据计划生成任务
|
||||
/// </summary>
|
||||
|
||||
@@ -15,6 +15,8 @@ using SqlSugar;
|
||||
using Tnb.BasicData.Entities;
|
||||
using Tnb.QcMgr.Entities;
|
||||
using Tnb.QcMgr.Interfaces;
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
|
||||
namespace Tnb.QcMgr
|
||||
{
|
||||
@@ -29,12 +31,16 @@ namespace Tnb.QcMgr
|
||||
private const string ModuleId = "26745613138709";
|
||||
private readonly ISqlSugarRepository<QcCheckExecH> _repository;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IWmsSaleService _wmsSaleService;
|
||||
private readonly IWmsPurchaseService _wmsPurchaseService;
|
||||
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
|
||||
public QcCheckTaskService(ISqlSugarRepository<QcCheckExecH> repository, IUserManager userManager)
|
||||
public QcCheckTaskService(ISqlSugarRepository<QcCheckExecH> repository, IUserManager userManager, IWmsSaleService wmsSaleService, IWmsPurchaseService wmsPurchaseService)
|
||||
{
|
||||
_repository = repository;
|
||||
_userManager = userManager;
|
||||
OverideFuncs.GetListAsync = GetListAsync;
|
||||
_wmsSaleService= wmsSaleService;
|
||||
_wmsPurchaseService= wmsPurchaseService;
|
||||
}
|
||||
|
||||
private async Task<dynamic> GetListAsync(VisualDevModelListQueryInput input)
|
||||
@@ -44,7 +50,7 @@ namespace Tnb.QcMgr
|
||||
{
|
||||
{ "ok", "合格" },
|
||||
{ "no", "不合格" },
|
||||
{ "barelyok", "让步合格" },
|
||||
{ "barelyOk", "让步合格" },
|
||||
{ "await", "待检" },
|
||||
{ "temporarily", "暂控" }
|
||||
};
|
||||
@@ -197,6 +203,14 @@ namespace Tnb.QcMgr
|
||||
ISqlSugarClient db = _repository.AsSugarClient();
|
||||
try
|
||||
{
|
||||
Dictionary<string, int> dic = new()
|
||||
{
|
||||
{ "ok", 1 },
|
||||
{ "no", 2 },
|
||||
{ "barelyOk", 4 },
|
||||
{ "await", 8 },
|
||||
{ "temporarily", 16 }
|
||||
};
|
||||
QcCheckExecH QcCheckExecH = await db.Queryable<QcCheckExecH>().Where(p => p.id == CheckTaskInput.mainid).FirstAsync();
|
||||
DictionaryTypeEntity DictionaryType = await db.Queryable<DictionaryTypeEntity>().Where(p => p.FullName == "质检状态").FirstAsync();
|
||||
DictionaryDataEntity DictionaryData = await db.Queryable<DictionaryDataEntity>().Where(p => p.DictionaryTypeId == DictionaryType.Id && p.FullName == "已完成").FirstAsync();
|
||||
@@ -267,6 +281,22 @@ namespace Tnb.QcMgr
|
||||
_ = await db.Updateable(QcCheckExecH).ExecuteCommandAsync();
|
||||
_ = await db.Deleteable(QcCheckExecDdel).ExecuteCommandAsync();
|
||||
_ = await db.Insertable(QcCheckExecDinsert).ExecuteCommandAsync();
|
||||
//出厂检
|
||||
if (QcCheckExecH.checktype == "26589783783701" && !string.IsNullOrEmpty(QcCheckExecH.extras))
|
||||
{
|
||||
MesCheckdCallbackUpinput mesCheckdCallbackUpinput = new MesCheckdCallbackUpinput();
|
||||
mesCheckdCallbackUpinput.maintableid = QcCheckExecH.extras;
|
||||
mesCheckdCallbackUpinput.check_conclusion = dic.Where(p => p.Key == CheckTaskInput.result).Any() ? dic.Where(p => p.Key == CheckTaskInput.result).First().Value : 0;
|
||||
await _wmsSaleService.MesCheckdSaleCallback(mesCheckdCallbackUpinput);
|
||||
}
|
||||
//入厂检
|
||||
else if (QcCheckExecH.checktype == "26589773352981" && !string.IsNullOrEmpty(QcCheckExecH.extras))
|
||||
{
|
||||
MesCheckdCallbackUpinput mesCheckdCallbackUpinput = new MesCheckdCallbackUpinput();
|
||||
mesCheckdCallbackUpinput.maintableid = QcCheckExecH.extras;
|
||||
mesCheckdCallbackUpinput.check_conclusion = dic.Where(p => p.Key == CheckTaskInput.result).Any() ? dic.Where(p => p.Key == CheckTaskInput.result).First().Value : 0;
|
||||
await _wmsPurchaseService.MesCheckdPurchaseCallback(mesCheckdCallbackUpinput);
|
||||
}
|
||||
await db.Ado.CommitTranAsync();
|
||||
}
|
||||
catch (Exception)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\taskschedule\Tnb.TaskScheduler\Tnb.TaskScheduler.csproj" />
|
||||
<ProjectReference Include="..\..\visualdev\Tnb.VisualDev.Engine\Tnb.VisualDev.Engine.csproj" />
|
||||
<ProjectReference Include="..\..\WarehouseMgr\Tnb.WarehouseMgr.Interfaces\Tnb.WarehouseMgr.Interfaces.csproj" />
|
||||
<ProjectReference Include="..\Tnb.QcMgr.Interfaces\Tnb.QcMgr.Interfaces.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -20,5 +20,6 @@
|
||||
/// </summary>
|
||||
public string WriteTagUrl { get; set; }
|
||||
|
||||
public string Environment { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,5 +50,11 @@
|
||||
/// AGV心跳
|
||||
/// </summary>
|
||||
public const string AGVKeepalive = "AGVKeepalive";
|
||||
/// <summary>
|
||||
/// 运行环境名称
|
||||
/// </summary>
|
||||
public const string EnvironmentName = "TIANYI";
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Dto.Inputs
|
||||
{
|
||||
/// <summary>
|
||||
/// Mes检验后回传输入参数
|
||||
/// </summary>
|
||||
public class MesCheckdCallbackUpinput
|
||||
{
|
||||
/// <summary>
|
||||
/// 主表Id
|
||||
/// </summary>
|
||||
public string maintableid { get; set; }
|
||||
/// <summary>
|
||||
/// 检验结论
|
||||
/// </summary>
|
||||
public int check_conclusion { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Tnb.WarehouseMgr.Entities.Enums;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Dto.Inputs
|
||||
{
|
||||
/// <summary>
|
||||
/// 采购收货,销售发货,审核、审核反审核 输入参数
|
||||
/// </summary>
|
||||
public class PurchaseAndSaleAuditUpInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 要更新的id集合列表
|
||||
/// </summary>
|
||||
public List<string> ids { get; set; }
|
||||
/// <summary>
|
||||
/// 1、审核 2、反审核
|
||||
/// </summary>
|
||||
public EnumAuditType auditType { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity.Constraints
|
||||
{
|
||||
public interface IPurchaseAndSaleAuitEntity
|
||||
{
|
||||
/// <summary>
|
||||
/// 审核状态
|
||||
/// </summary>
|
||||
public int? audit_status { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity.Constraints
|
||||
{
|
||||
/// <summary>
|
||||
/// 修改出入库检验状态
|
||||
/// </summary>
|
||||
public interface InOutCheckStatusUpdateEntity
|
||||
{
|
||||
/// <summary>
|
||||
/// 检验状态
|
||||
/// </summary>
|
||||
public int? check_conclusion { get; set; }
|
||||
/// <summary>
|
||||
/// 是否检验
|
||||
/// </summary>
|
||||
public int? is_check { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
using Tnb.WarehouseMgr.Entities.Entity.Constraints;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities;
|
||||
|
||||
@@ -8,7 +9,7 @@ namespace Tnb.WarehouseMgr.Entities;
|
||||
/// 入库申请主表
|
||||
/// </summary>
|
||||
[SugarTable("wms_instock_h")]
|
||||
public partial class WmsInstockH : BaseEntity<string>
|
||||
public partial class WmsInstockH : BaseEntity<string>, InOutCheckStatusUpdateEntity
|
||||
{
|
||||
public WmsInstockH()
|
||||
{
|
||||
@@ -212,4 +213,8 @@ public partial class WmsInstockH : BaseEntity<string>
|
||||
/// 采购单号
|
||||
/// </summary>
|
||||
public string purchase_code { get; set; }
|
||||
/// <summary>
|
||||
/// 检验结论
|
||||
/// </summary>
|
||||
public int? check_conclusion { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
using Tnb.WarehouseMgr.Entities.Entity.Constraints;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities;
|
||||
|
||||
@@ -8,7 +9,7 @@ namespace Tnb.WarehouseMgr.Entities;
|
||||
/// 出库申请主表
|
||||
/// </summary>
|
||||
[SugarTable("wms_outstock_h")]
|
||||
public partial class WmsOutstockH : BaseEntity<string>
|
||||
public partial class WmsOutstockH : BaseEntity<string>, InOutCheckStatusUpdateEntity
|
||||
{
|
||||
public WmsOutstockH()
|
||||
{
|
||||
@@ -170,4 +171,12 @@ public partial class WmsOutstockH : BaseEntity<string>
|
||||
/// 载具Id
|
||||
/// </summary>
|
||||
public string carry_id { get; set; }
|
||||
/// <summary>
|
||||
/// 检验结论
|
||||
/// </summary>
|
||||
public int? check_conclusion { get; set; }
|
||||
/// <summary>
|
||||
/// 是否检验
|
||||
/// </summary>
|
||||
public int? is_check { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
using Tnb.WarehouseMgr.Entities.Entity.Constraints;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities;
|
||||
|
||||
@@ -8,7 +9,7 @@ namespace Tnb.WarehouseMgr.Entities;
|
||||
/// 采购收货主表
|
||||
/// </summary>
|
||||
[SugarTable("wms_purchase_h")]
|
||||
public partial class WmsPurchaseH : BaseEntity<string>
|
||||
public partial class WmsPurchaseH : BaseEntity<string>, IPurchaseAndSaleAuitEntity
|
||||
{
|
||||
public WmsPurchaseH()
|
||||
{
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
using Tnb.WarehouseMgr.Entities.Entity.Constraints;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities;
|
||||
|
||||
@@ -8,7 +9,7 @@ namespace Tnb.WarehouseMgr.Entities;
|
||||
/// 销售发货主表
|
||||
/// </summary>
|
||||
[SugarTable("wms_sale_h")]
|
||||
public partial class WmsSaleH : BaseEntity<string>
|
||||
public partial class WmsSaleH : BaseEntity<string>, IPurchaseAndSaleAuitEntity
|
||||
{
|
||||
public WmsSaleH()
|
||||
{
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Enums
|
||||
{
|
||||
public enum EnumAuditType
|
||||
{
|
||||
审核 = 1,
|
||||
反审核 = 2,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// 采购收货
|
||||
/// </summary>
|
||||
public interface IWmsPurchaseService
|
||||
{
|
||||
Task<dynamic> MesCheckdPurchaseCallback(MesCheckdCallbackUpinput input);
|
||||
}
|
||||
}
|
||||
17
WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsSaleService.cs
Normal file
17
WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsSaleService.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// 销售发货
|
||||
/// </summary>
|
||||
public interface IWmsSaleService
|
||||
{
|
||||
Task<dynamic> MesCheckdSaleCallback(MesCheckdCallbackUpinput input);
|
||||
}
|
||||
}
|
||||
@@ -9,11 +9,16 @@
|
||||
<Configurations>Debug;Release;tianyi</Configurations>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'" />
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'" />
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\BasicData\Tnb.BasicData.Interfaces\Tnb.BasicData.Interfaces.csproj" />
|
||||
<ProjectReference Include="..\..\EquipMgr\Tnb.EquipMgr.Entities\Tnb.EquipMgr.Entities.csproj" />
|
||||
<ProjectReference Include="..\..\message\Tnb.Message.Interfaces\Tnb.Message.Interfaces.csproj" />
|
||||
<ProjectReference Include="..\..\ProductionMgr\Tnb.ProductionMgr.Interfaces\Tnb.ProductionMgr.Interfaces.csproj" />
|
||||
<ProjectReference Include="..\..\QcMgr\Tnb.QcMgr.Interfaces\Tnb.QcMgr.Interfaces.csproj" />
|
||||
<ProjectReference Include="..\..\visualdev\Tnb.VisualDev.Engine\Tnb.VisualDev.Engine.csproj" />
|
||||
<ProjectReference Include="..\Tnb.WarehouseMgr.Interfaces\Tnb.WarehouseMgr.Interfaces.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -382,38 +382,42 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
await db.Ado.CommitTranAsync();
|
||||
|
||||
//呼梯操作
|
||||
//获取目标库位为电梯库位的任务
|
||||
List<(string endlocation_code, string device_id, string id, string? start_floor)> endLocCodes = disTasks
|
||||
.Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase) &&
|
||||
!it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase))
|
||||
.Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).ToList();
|
||||
if (endLocCodes?.Count > 0)
|
||||
if(_eleCtlCfg.Environment == ElevatorConsts.EnvironmentName)
|
||||
{
|
||||
|
||||
await CallingLanding(endLocCodes);
|
||||
}
|
||||
//执行电梯任务
|
||||
List<WmsDistaskH>? elevatorTasks = disTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
|
||||
if (elevatorTasks?.Count > 0)
|
||||
{
|
||||
Logger.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}");
|
||||
Logger.Information("准备执行电梯任务");
|
||||
Logger.Information("执行电梯任务");
|
||||
|
||||
foreach (WmsDistaskH? elevatorTask in elevatorTasks)
|
||||
//呼梯操作
|
||||
//获取目标库位为电梯库位的任务
|
||||
List<(string endlocation_code, string device_id, string id, string? start_floor)> endLocCodes = disTasks
|
||||
.Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase) &&
|
||||
!it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase))
|
||||
.Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).ToList();
|
||||
if (endLocCodes?.Count > 0)
|
||||
{
|
||||
await ExecuteTargetFloorTask(elevatorTask);
|
||||
}
|
||||
|
||||
await CallingLanding(endLocCodes);
|
||||
}
|
||||
//执行电梯任务
|
||||
List<WmsDistaskH>? elevatorTasks = disTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
|
||||
if (elevatorTasks?.Count > 0)
|
||||
{
|
||||
Logger.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}");
|
||||
Logger.Information("准备执行电梯任务");
|
||||
Logger.Information("执行电梯任务");
|
||||
|
||||
foreach (WmsDistaskH? elevatorTask in elevatorTasks)
|
||||
{
|
||||
await ExecuteTargetFloorTask(elevatorTask);
|
||||
}
|
||||
|
||||
}
|
||||
////调用AGV创建任务链接口
|
||||
List<WmsDistaskH> agvTasks = disTasks.Where(it => !it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
if (agvTasks?.Count > 0)
|
||||
{
|
||||
await AgvDispatch(agvTasks, agvCts.Token);
|
||||
}
|
||||
}
|
||||
////调用AGV创建任务链接口
|
||||
List<WmsDistaskH> agvTasks = disTasks.Where(it => !it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
if (agvTasks?.Count > 0)
|
||||
{
|
||||
await AgvDispatch(agvTasks, agvCts.Token);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex) when (ex is HttpRequestException hReqEx)
|
||||
|
||||
@@ -208,6 +208,9 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw new AppFriendlyException("没有匹配的空载具可以出库", 500);
|
||||
}
|
||||
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
public async Task<dynamic> OutStockApplyFor(VisualDevModelDataCrInput input)
|
||||
{
|
||||
List<WmsOutstockD> outStockDList = new();
|
||||
try
|
||||
{
|
||||
await _db.Ado.BeginTranAsync();
|
||||
@@ -131,10 +132,20 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
|
||||
List<string> carryIds = new();
|
||||
var mapKeys = new List<string> { "tablefield120", "details" };
|
||||
|
||||
//tablefield120 出库物料明细
|
||||
if (input.data.ContainsKey("tablefield120") && input.data["tablefield120"].IsNotEmptyOrNull())
|
||||
if (input.data.Keys.Any(k => mapKeys.Contains(k))) //input.data.ContainsKey("tablefield120") && input.data["tablefield120"].IsNotEmptyOrNull()
|
||||
{
|
||||
List<WmsOutstockD> outStockDList = input.data["tablefield120"].ToObject<List<WmsOutstockD>>();
|
||||
|
||||
if (input.data.ContainsKey("tablefield120") && input.data["tablefield120"].IsNotEmptyOrNull())
|
||||
{
|
||||
outStockDList = input.data["tablefield120"].ToObject<List<WmsOutstockD>>();
|
||||
}
|
||||
else
|
||||
{
|
||||
outStockDList = input.data["details"].ToObject<List<WmsOutstockD>>();
|
||||
}
|
||||
if (outStockDList?.Count > 0)
|
||||
{
|
||||
List<WmsCarryMat> carryMats = new();
|
||||
@@ -378,7 +389,7 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
await InvokeGenPretaskExcute();
|
||||
}
|
||||
return Task.FromResult(true);
|
||||
return Task.FromResult((input.data["ReturnIdentity"].ToString(), outStockDList));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Core.Manager;
|
||||
using JNPF.Common.Dtos.VisualDev;
|
||||
using JNPF.Common.Extension;
|
||||
using JNPF.FriendlyException;
|
||||
using SqlSugar;
|
||||
using Tnb.BasicData.Entities;
|
||||
@@ -13,7 +14,9 @@ using Tnb.Common.Utils;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
using Tnb.WarehouseMgr.Entities.Dto;
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||
using Tnb.WarehouseMgr.Entities.Entity.Constraints;
|
||||
using Tnb.WarehouseMgr.Entities.Enums;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
|
||||
namespace Tnb.WarehouseMgr
|
||||
@@ -21,71 +24,53 @@ namespace Tnb.WarehouseMgr
|
||||
/// <summary>
|
||||
/// 采购收货、销售发货,通用业务类
|
||||
/// </summary>
|
||||
/// <typeparam name="TEntity"></typeparam>
|
||||
public class WmsPurchaseAndSaleCommonService<TEntity> : BaseWareHouseService where TEntity : BaseEntity<string>, IPurchaseAndSaleEntity, IPurchaseAndSaleQueryEntity
|
||||
/// <typeparam name="TSubEntity"></typeparam>
|
||||
public class WmsPurchaseAndSaleCommonService<TSubEntity> : BaseWareHouseService where TSubEntity : BaseEntity<string>, IPurchaseAndSaleEntity, IPurchaseAndSaleQueryEntity
|
||||
{
|
||||
private readonly ISqlSugarClient _db;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IWmsPDAScanInStockService _wmsPDAScanInStockService;
|
||||
private readonly IWmsOutStockService _wmsOutStockService;
|
||||
private static Dictionary<string, object> s_materialMap = new();
|
||||
|
||||
public WmsPurchaseAndSaleCommonService(ISqlSugarRepository<WmsPurchaseH> repo, IUserManager userManager, IWmsOutStockService? wmsOutStockService = null)
|
||||
public WmsPurchaseAndSaleCommonService(ISqlSugarRepository<WmsPurchaseH> repo, IUserManager userManager)
|
||||
{
|
||||
_db = repo.AsSugarClient();
|
||||
_userManager = userManager;
|
||||
_wmsOutStockService = wmsOutStockService!;
|
||||
}
|
||||
|
||||
protected async Task<bool> PurchaseAndSaleUpdate(PurchaseAndReceiveUpInput input)
|
||||
protected async Task<List<TSubEntity>> PurchaseAndSaleUpdate(PurchaseAndReceiveUpInput input)
|
||||
{
|
||||
if (input == null) throw new ArgumentNullException("input");
|
||||
if (input.details == null) throw new ArgumentNullException(nameof(input.details));
|
||||
|
||||
|
||||
var dicMaterialPurchaseArriveQty = input.details.ToDictionary(x => x.material_id, x => x.purchase_arriveqty);
|
||||
var materialIds = input.details.Select(x => x.material_id).ToList();
|
||||
var purchaseDs = await _db.Queryable<TEntity>().Where(it => materialIds.Contains(it.material_id)).ToListAsync();
|
||||
var purchaseDs = await _db.Queryable<TSubEntity>().Where(it => materialIds.Contains(it.material_id)).ToListAsync();
|
||||
|
||||
if (purchaseDs?.Count > 0)
|
||||
{
|
||||
var errMaterialTipList = new List<(string materialName, decimal purchaseArriveQty, decimal topPurchaseQty)>();
|
||||
|
||||
foreach (var pd in purchaseDs)
|
||||
{
|
||||
pd.purchase_prqty += dicMaterialPurchaseArriveQty.ContainsKey(pd.material_id) ? dicMaterialPurchaseArriveQty[pd.material_id] : 0;
|
||||
var pdInput = input.details.Find(x => x.material_id == pd.material_id);
|
||||
if (pdInput != null)
|
||||
{
|
||||
pd.purchase_prqty += pdInput.purchase_arriveqty;
|
||||
|
||||
var topPurchaseQty = pd.purchase_qty - pd.purchase_prqty;
|
||||
if (pdInput.purchase_arriveqty > topPurchaseQty)
|
||||
if (pdInput.purchase_arriveqty > topPurchaseQty && s_materialMap.ContainsKey(pdInput.material_id) && s_materialMap[pdInput.material_id] != null)
|
||||
{
|
||||
if (s_materialMap.ContainsKey(pdInput.material_id) && s_materialMap[pdInput.material_id] != null)
|
||||
{
|
||||
errMaterialTipList.Add((s_materialMap[pdInput.material_id].ToString()!, pdInput.purchase_arriveqty, topPurchaseQty));
|
||||
continue;
|
||||
}
|
||||
errMaterialTipList.Add((s_materialMap[pdInput.material_id].ToString()!, pdInput.purchase_arriveqty, topPurchaseQty));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (pd.purchase_prqty >= pd.purchase_qty)
|
||||
{
|
||||
pd.line_status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID;
|
||||
}
|
||||
else
|
||||
{
|
||||
pd.line_status = WmsWareHouseConst.BILLSTATUS_ON_ID;
|
||||
}
|
||||
|
||||
pd.line_status = pd.purchase_prqty >= pd.purchase_qty ? WmsWareHouseConst.BILLSTATUS_COMPLETE_ID : WmsWareHouseConst.BILLSTATUS_ON_ID;
|
||||
}
|
||||
|
||||
if (errMaterialTipList.Count > 0)
|
||||
{
|
||||
var errMsgList = new List<string>();
|
||||
if (typeof(TEntity) == typeof(WmsPurchaseD))
|
||||
{
|
||||
errMsgList = errMaterialTipList.Select(x => $"物料:{x.materialName},实际收货数:{x.purchaseArriveQty}已超出可收货数:{x.topPurchaseQty}").ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
errMsgList = errMaterialTipList.Select(x => $"物料:{x.materialName},实际发货数:{x.purchaseArriveQty}已超出可发货数:{x.topPurchaseQty}").ToList();
|
||||
}
|
||||
var itemType = typeof(TSubEntity) == typeof(WmsPurchaseD) ? "收货数" : "发货数";
|
||||
var errMsgList = errMaterialTipList.Select(x => $"物料:{x.materialName},实际{itemType}:{x.purchaseArriveQty}已超出可{itemType}:{x.topPurchaseQty}").ToList();
|
||||
var errMsg = string.Join("\r\n", errMsgList);
|
||||
throw new AppFriendlyException(errMsg, 500);
|
||||
}
|
||||
@@ -95,40 +80,65 @@ namespace Tnb.WarehouseMgr
|
||||
x.modify_id = _userManager.UserId;
|
||||
x.modify_time = DateTime.Now;
|
||||
});
|
||||
|
||||
await _db.Updateable(purchaseDs).ExecuteCommandAsync();
|
||||
|
||||
if (purchaseDs.All(x => x.line_status == WmsWareHouseConst.BILLSTATUS_COMPLETE_ID))
|
||||
{
|
||||
var purchase = await _db.Queryable<WmsPurchaseH>().FirstAsync(it => it.bill_code == input.bill_code);
|
||||
var purchase = await _db.Queryable<WmsPurchaseH>().FirstAsync(it => it.id == purchaseDs.First().bill_id);
|
||||
|
||||
if (purchase != null)
|
||||
{
|
||||
purchase.status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID;
|
||||
purchase.modify_id = _userManager.UserId;
|
||||
purchase.modify_time = DateTime.Now;
|
||||
|
||||
await _db.Updateable(purchase).UpdateColumns(it => it.status).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
VisualDevModelDataCrInput visualDevModelDataInput = new();
|
||||
visualDevModelDataInput.data = PocoToDictionary.ToDictionary(input) as Dictionary<string, object>;
|
||||
if (_wmsOutStockService != null)
|
||||
{
|
||||
await _wmsOutStockService.OutStockApplyFor(visualDevModelDataInput);
|
||||
}
|
||||
|
||||
return await Task.FromResult(true);
|
||||
|
||||
return await Task.FromResult(purchaseDs);
|
||||
}
|
||||
|
||||
protected async Task<List<TEntity>> GetDetailsByPkId(string pkId)
|
||||
|
||||
protected async Task<List<TSubEntity>> GetDetailsByPkId(string pkId)
|
||||
{
|
||||
if (s_materialMap.Count == 0)
|
||||
{
|
||||
s_materialMap = await _db.Queryable<BasMaterial>().ToDictionaryAsync(x => x.id, x => x.name);
|
||||
}
|
||||
var list = await _db.Queryable<TEntity>().Where(it => it.bill_id == pkId)
|
||||
var list = await _db.Queryable<TSubEntity>().Where(it => it.bill_id == pkId)
|
||||
.Mapper(it => it.material_name = s_materialMap.ContainsKey(it.material_id) ? s_materialMap[it.material_id]?.ToString() ?? "" : "")
|
||||
.ToListAsync();
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
protected async Task<bool> Audit<TEntity>(PurchaseAndSaleAuditUpInput input) where TEntity : BaseEntity<string>, IPurchaseAndSaleAuitEntity, new()
|
||||
{
|
||||
return await _db.Updateable<TEntity>().SetColumns(it => it.audit_status == (int)input.auditType).Where(it => input.ids.Contains(it.id)).ExecuteCommandHasChangeAsync();
|
||||
}
|
||||
|
||||
protected async Task<bool> UpdateChackStatus<TEntity>(MesCheckdCallbackUpinput input) where TEntity : BaseEntity<string>, InOutCheckStatusUpdateEntity, new()
|
||||
{
|
||||
var stock = await _db.Queryable<TEntity>().SingleAsync(it => it.id == input.maintableid);
|
||||
stock.check_conclusion = input.check_conclusion;
|
||||
stock.is_check = 1;
|
||||
var isOk = await _db.Updateable(stock).UpdateColumns(it => new { it.check_conclusion, it.is_check }).ExecuteCommandHasChangeAsync();
|
||||
var preTask = await _db.Queryable<WmsPretaskH>().FirstAsync(it => it.require_id == input.maintableid);
|
||||
if (preTask != null)
|
||||
{
|
||||
var carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == preTask.carry_id);
|
||||
if (carry != null)
|
||||
{
|
||||
carry.check_conclusion = input.check_conclusion;
|
||||
carry.is_check = 1;
|
||||
isOk = await _db.Updateable(carry).UpdateColumns(it => new { it.check_conclusion, it.is_check }).ExecuteCommandHasChangeAsync();
|
||||
}
|
||||
}
|
||||
return isOk;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,9 @@ using NPOI.OpenXmlFormats.Dml.Diagram;
|
||||
using SqlSugar;
|
||||
using Tnb.BasicData.Entities;
|
||||
using Tnb.Common.Utils;
|
||||
using Tnb.QcMgr.Entities;
|
||||
using Tnb.QcMgr.Entities.Enums;
|
||||
using Tnb.QcMgr.Interfaces;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
using Tnb.WarehouseMgr.Entities.Dto;
|
||||
@@ -30,15 +33,17 @@ namespace Tnb.WarehouseMgr
|
||||
/// 采购收货
|
||||
/// </summary>
|
||||
[OverideVisualDev(ModuleConsts.MODULE_WMSPURCHASE_ID)]
|
||||
public class WmsPurchaseService : WmsPurchaseAndSaleCommonService<WmsPurchaseD>
|
||||
public class WmsPurchaseService : WmsPurchaseAndSaleCommonService<WmsPurchaseD>, IWmsPurchaseService
|
||||
{
|
||||
private readonly ISqlSugarClient _db;
|
||||
private readonly IUserManager _userManager;
|
||||
public WmsPurchaseService(ISqlSugarRepository<WmsPurchaseH> repo, IUserManager userManager)
|
||||
private readonly IQcCheckPlanService _qcCheckPlanService;
|
||||
public WmsPurchaseService(ISqlSugarRepository<WmsPurchaseH> repo, IUserManager userManager, IQcCheckPlanService qcCheckPlanService)
|
||||
: base(repo, userManager)
|
||||
{
|
||||
_db = repo.AsSugarClient();
|
||||
_userManager = userManager;
|
||||
_qcCheckPlanService = qcCheckPlanService;
|
||||
}
|
||||
|
||||
private async Task<dynamic> xxx(VisualDevModelDataCrInput input)
|
||||
@@ -62,24 +67,33 @@ namespace Tnb.WarehouseMgr
|
||||
try
|
||||
{
|
||||
await _db.Ado.BeginTranAsync();
|
||||
|
||||
blFlag = await PurchaseAndSaleUpdate(input);
|
||||
if (blFlag)
|
||||
WmsInstockH? instock = null;
|
||||
var purchaseDs = await PurchaseAndSaleUpdate(input);
|
||||
List<WmsInstockD> instockDs = new();
|
||||
if (purchaseDs?.Count > 0)
|
||||
{
|
||||
var instock = input.Adapt<WmsInstockH>();
|
||||
instock = input.Adapt<WmsInstockH>();
|
||||
instock.id = SnowflakeIdHelper.NextId();
|
||||
instock.create_id = _userManager.UserId;
|
||||
instock.create_time = DateTime.Now;
|
||||
instock.org_id = _userManager.User.OrganizeId;
|
||||
await _db.Insertable(instock).ExecuteCommandAsync();
|
||||
|
||||
var instockD = input.details.Adapt<WmsInstockD>();
|
||||
instockD.create_id = _userManager.UserId;
|
||||
instockD.create_time = DateTime.Now;
|
||||
instockD.org_id = _userManager.User.OrganizeId;
|
||||
await _db.Insertable(instockD).ExecuteCommandAsync();
|
||||
instockDs = purchaseDs.Adapt<List<WmsInstockD>>();
|
||||
instockDs.ForEach(instockD =>
|
||||
{
|
||||
instockD.create_id = _userManager.UserId;
|
||||
instockD.create_time = DateTime.Now;
|
||||
instockD.org_id = _userManager.User.OrganizeId;
|
||||
});
|
||||
await _db.Insertable(instockDs).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
//通知Mes接口
|
||||
CreateTaskEntity ctEntity = new();
|
||||
ctEntity.maintableid = instock.id;
|
||||
ctEntity.materialids = instockDs.Select(x => x.material_id).ToList();
|
||||
ctEntity.triggerevent = EnumTriggerEvent.入厂检按物料编号;
|
||||
_ = _qcCheckPlanService.CreateWmsTask(ctEntity);
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -101,5 +115,29 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
return await GetDetailsByPkId(id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 审核反审核
|
||||
/// </summary>
|
||||
/// <param name="input">
|
||||
///
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<bool> Audit(PurchaseAndSaleAuditUpInput input)
|
||||
{
|
||||
return await Audit<WmsPurchaseH>(input);
|
||||
}
|
||||
/// <summary>
|
||||
/// mes 检验完后通知wms(采购) 回调接口
|
||||
/// </summary>
|
||||
/// <param name="input">
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> MesCheckdPurchaseCallback(MesCheckdCallbackUpinput input)
|
||||
{
|
||||
return await UpdateChackStatus<WmsInstockH>(input);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,36 +4,95 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using JNPF.Common.Core.Manager;
|
||||
using JNPF.Common.Dtos.VisualDev;
|
||||
using Mapster;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SqlSugar;
|
||||
using Tnb.Common.Utils;
|
||||
using Tnb.QcMgr.Entities.Enums;
|
||||
using Tnb.QcMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Dto;
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
using Tnb.QcMgr.Interfaces;
|
||||
|
||||
namespace Tnb.WarehouseMgr
|
||||
{
|
||||
/// <summary>
|
||||
/// 销售发货
|
||||
/// </summary>
|
||||
public class WmsSaleService : WmsPurchaseAndSaleCommonService<WmsSaleD>
|
||||
public class WmsSaleService : WmsPurchaseAndSaleCommonService<WmsSaleD>, IWmsSaleService
|
||||
{
|
||||
public WmsSaleService(ISqlSugarRepository<WmsPurchaseH> repo, IUserManager userManager, IWmsOutStockService wmsOutStockService)
|
||||
: base(repo, userManager, wmsOutStockService: wmsOutStockService)
|
||||
private readonly IWmsOutStockService _wmsOutStockService;
|
||||
private readonly IQcCheckPlanService _qcCheckPlanService;
|
||||
|
||||
public WmsSaleService(ISqlSugarRepository<WmsPurchaseH> repo, IUserManager userManager, IWmsOutStockService wmsOutStockService, IQcCheckPlanService qcCheckPlanService)
|
||||
: base(repo, userManager)
|
||||
{
|
||||
|
||||
_wmsOutStockService = wmsOutStockService;
|
||||
_qcCheckPlanService = qcCheckPlanService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 销售发货
|
||||
/// </summary>
|
||||
/// <param name="input">
|
||||
///
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> Sale(PurchaseAndReceiveUpInput input)
|
||||
{
|
||||
return await PurchaseAndSaleUpdate(input);
|
||||
}
|
||||
_ = await PurchaseAndSaleUpdate(input);
|
||||
VisualDevModelDataCrInput visualDevModelDataInput = new();
|
||||
visualDevModelDataInput.data = PocoToDictionary.ToDictionary(input) as Dictionary<string, object>;
|
||||
visualDevModelDataInput.data["location_id"] = "26412597341221";
|
||||
visualDevModelDataInput.data["location_code"] = "YCL01-01-01";
|
||||
|
||||
(string pkId, List <WmsOutstockD> outStockDList) multi = await _wmsOutStockService.OutStockApplyFor(visualDevModelDataInput);
|
||||
|
||||
CreateTaskEntity ctEntity = new();
|
||||
ctEntity.maintableid = multi.pkId;
|
||||
ctEntity.materialids = multi.outStockDList?.Select(x => x.material_id!).ToList() ?? Array.Empty<string>().ToList();
|
||||
ctEntity.triggerevent = EnumTriggerEvent.出厂检按入厂频次;
|
||||
_ = _qcCheckPlanService.CreateWmsTask(ctEntity);
|
||||
|
||||
return await Task.FromResult(1);
|
||||
}
|
||||
/// <summary>
|
||||
/// 根据销售发货主表Id获取子表明细
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("id")]
|
||||
public async Task<dynamic> GetSaleDetailsByBillId(string id)
|
||||
{
|
||||
return await GetDetailsByPkId(id);
|
||||
}
|
||||
/// <summary>
|
||||
/// 审核反审核
|
||||
/// </summary>
|
||||
/// <param name="input">
|
||||
///
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<bool> Audit(PurchaseAndSaleAuditUpInput input)
|
||||
{
|
||||
return await Audit<WmsSaleH>(input);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// mes 检验完后通知wms(销售) 回调接口
|
||||
/// </summary>
|
||||
/// <param name="input">
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> MesCheckdSaleCallback(MesCheckdCallbackUpinput input)
|
||||
{
|
||||
return await UpdateChackStatus<WmsOutstockH>(input);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,5 +3,6 @@
|
||||
"token": "780BE4144636CF47DDF3920B0F1D069B",
|
||||
"GetTagListUrl": "http://192.168.11.110:9100/Dev/GetTagList",
|
||||
"GetTagUrl": "http://192.168.11.110:9100/Dev/GetTag",
|
||||
"WriteTagUrl": "http://192.168.11.110:9100/Dev/writeTag"
|
||||
"WriteTagUrl": "http://192.168.11.110:9100/Dev/writeTag",
|
||||
"Environment": ""
|
||||
}
|
||||
Reference in New Issue
Block a user