diff --git a/ZR.Admin.WebApi/Controllers/mes/wms/WMentryWarehousing_productController.cs b/ZR.Admin.WebApi/Controllers/mes/wms/WMentryWarehousing_productController.cs
index 94161311..d2a17bd9 100644
--- a/ZR.Admin.WebApi/Controllers/mes/wms/WMentryWarehousing_productController.cs
+++ b/ZR.Admin.WebApi/Controllers/mes/wms/WMentryWarehousing_productController.cs
@@ -104,27 +104,35 @@ namespace ZR.Admin.WebApi.Controllers.mes.wms
[Log(Title = "入库")]
public IActionResult IntoProductwarehouse([FromBody] WmgoodsDto wmgoodsDto)
{
- if (wmgoodsDto == null)
+ try
{
- return ToResponse(new ApiResult(200, "传入为空", false));
- }
- string msg = "";
+ if (wmgoodsDto == null)
+ {
+ return ToResponse(new ApiResult(200, "传入参数为空", false));
+ }
+ string msg = "";
- string createName = HttpContext.GetName();
- int num = this.wm_entryWarehousing_productService.IntoProductwarehouse(wmgoodsDto, createName);
- if (num == 0)
+ string createName = HttpContext.GetName();
+ int num = this.wm_entryWarehousing_productService.IntoProductwarehouse(wmgoodsDto, createName);
+ if (num == 0)
+ {
+ msg = "入库数为0!";
+
+
+ }
+ else if (num >= 1)
+ {
+ msg = "成功入库" + num + "箱";
+
+
+ }
+ return ToResponse(new ApiResult(200, msg, num));
+ }
+ catch (Exception e)
{
- msg = "数据插入异常";
-
-
+ return ToResponse(new ApiResult(500, e.Message, e.Message));
}
- else if (num >= 1)
- {
- msg = "成功入库" + num + "个";
-
-
- }
- return ToResponse(new ApiResult(200, msg, num));
+
}
diff --git a/ZR.Admin.WebApi/Controllers/mes/wms/WmGoodsRecordController.cs b/ZR.Admin.WebApi/Controllers/mes/wms/WmGoodsRecordController.cs
new file mode 100644
index 00000000..cd80987f
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/mes/wms/WmGoodsRecordController.cs
@@ -0,0 +1,107 @@
+using Microsoft.AspNetCore.Mvc;
+using ZR.Admin.WebApi.Extensions;
+using ZR.Admin.WebApi.Filters;
+using ZR.Model.MES.wms;
+using ZR.Model.MES.wms.Dto;
+using ZR.Service.mes.wms.IService;
+
+//创建时间:2024-08-05
+namespace ZR.Admin.WebApi.Controllers
+{
+ ///
+ /// 成品库数据变动表
+ ///
+ // [Verify]
+ [Route("/mes/wm/WmGoodsRecord")]
+ public class WmGoodsRecordController : BaseController
+ {
+ ///
+ /// 成品库数据变动表接口
+ ///
+ private readonly IWmGoodsRecordService _WmGoodsRecordService;
+
+ public WmGoodsRecordController(IWmGoodsRecordService WmGoodsRecordService)
+ {
+ _WmGoodsRecordService = WmGoodsRecordService;
+ }
+
+ ///
+ /// 查询成品库数据变动表列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ [ActionPermissionFilter(Permission = "business:wmgoodsrecord:list")]
+ public IActionResult QueryWmGoodsRecord([FromQuery] WmGoodsRecordQueryDto parm)
+ {
+ var response = _WmGoodsRecordService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 查询成品库数据变动表详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ [ActionPermissionFilter(Permission = "business:wmgoodsrecord:query")]
+ public IActionResult GetWmGoodsRecord(string Id)
+ {
+ var response = _WmGoodsRecordService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加成品库数据变动表
+ ///
+ ///
+ [HttpPost]
+ [ActionPermissionFilter(Permission = "business:wmgoodsrecord:add")]
+ [Log(Title = "成品库数据变动表", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddWmGoodsRecord([FromBody] WmGoodsRecordDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _WmGoodsRecordService.AddWmGoodsRecord(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新成品库数据变动表
+ ///
+ ///
+ [HttpPut]
+ [ActionPermissionFilter(Permission = "business:wmgoodsrecord:edit")]
+ [Log(Title = "成品库数据变动表", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateWmGoodsRecord([FromBody] WmGoodsRecordDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _WmGoodsRecordService.UpdateWmGoodsRecord(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除成品库数据变动表
+ ///
+ ///
+ [HttpDelete("{ids}")]
+ [ActionPermissionFilter(Permission = "business:wmgoodsrecord:delete")]
+ [Log(Title = "成品库数据变动表", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteWmGoodsRecord(string ids)
+ {
+ int[] idsArr = Tools.SpitIntArrary(ids);
+ if (idsArr.Length <= 0)
+ {
+ return ToResponse(ApiResult.Error($"删除失败Id 不能为空"));
+ }
+
+ var response = _WmGoodsRecordService.Delete(idsArr);
+
+ return ToResponse(response);
+ }
+ }
+}
diff --git a/ZR.Admin.WebApi/Controllers/mes/wms/WmOutOrderController.cs b/ZR.Admin.WebApi/Controllers/mes/wms/WmOutOrderController.cs
index 14ab2c85..7ff1faff 100644
--- a/ZR.Admin.WebApi/Controllers/mes/wms/WmOutOrderController.cs
+++ b/ZR.Admin.WebApi/Controllers/mes/wms/WmOutOrderController.cs
@@ -39,7 +39,6 @@ namespace ZR.Admin.WebApi.Controllers
return SUCCESS(response);
}
-
///
/// 查询出货单(物料+客户)详情
///
@@ -100,9 +99,10 @@ namespace ZR.Admin.WebApi.Controllers
[Log(Title = "出货单(物料+客户)", BusinessType = BusinessType.DELETE)]
public IActionResult DeleteWmOutOrder(string ids)
{
-
- if (string.IsNullOrEmpty(ids)) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
-
+ if (string.IsNullOrEmpty(ids))
+ {
+ return ToResponse(ApiResult.Error($"删除失败Id 不能为空"));
+ }
var response = _WmOutOrderService.Delete(ids.Split(","));
// 删除外键 物料清单
@@ -128,15 +128,12 @@ namespace ZR.Admin.WebApi.Controllers
///
///
[HttpGet("getmaterial_list")]
-
public IActionResult QueryWmMaterial([FromQuery] WmMaterialQueryDto parm)
{
var response = _WmOutOrderService.GetmaterialList(parm);
return SUCCESS(response);
}
-
-
///
/// 生成出货单的物料信息
///
@@ -147,13 +144,13 @@ namespace ZR.Admin.WebApi.Controllers
if (shipment_num == null)
{
return SUCCESS(null);
-
}
- List data = _WmOutOrderService.Queryoutoder_matrials(shipment_num);
+ List data = _WmOutOrderService.Queryoutoder_matrials(
+ shipment_num
+ );
return SUCCESS(data);
}
-
///
/// 8.1根据出库单生成出库计划
///
@@ -168,7 +165,9 @@ namespace ZR.Admin.WebApi.Controllers
}
// TODO 1.返回值修改为 对象 返回是否可生成计划,计划结果:{canPlan:true,resultList:[]}
// XXX 无计划返回空即可
- List WmOutOrderPlanList = _WmOutOrderService.Generate_outorderplan(shipment_num);
+ List WmOutOrderPlanList = _WmOutOrderService.Generate_outorderplan(
+ shipment_num
+ );
return SUCCESS(WmOutOrderPlanList);
}
@@ -219,6 +218,7 @@ namespace ZR.Admin.WebApi.Controllers
int result = _WmOutOrderService.PersistenceOutorderplan(shipment_num);
return SUCCESS(result);
}
+
///
/// 8.5 PDA端 获取出库单的持久化存储出库计划并计算计划批次当前已出库数量
///
@@ -226,13 +226,19 @@ namespace ZR.Admin.WebApi.Controllers
/// 物料号(零件号)
///
[HttpGet("getOutOrderPlanAndOutProductionNum")]
- public IActionResult GetOutOrderPlanAndOutProductionNum(string shipment_num, string partnumber)
+ public IActionResult GetOutOrderPlanAndOutProductionNum(
+ string shipment_num,
+ string partnumber
+ )
{
if (shipment_num == null)
{
return ToResponse(new ApiResult(500, "传入工单号为空!", "传入工单号为空!"));
}
- var result = _WmOutOrderService.GetOutOrderPlanAndOutProductionNum(shipment_num, partnumber);
+ var result = _WmOutOrderService.GetOutOrderPlanAndOutProductionNum(
+ shipment_num,
+ partnumber
+ );
if (result == null)
{
return ToResponse(new ApiResult(500, "获取计划异常!", "获取计划异常!"));
@@ -245,23 +251,28 @@ namespace ZR.Admin.WebApi.Controllers
///
///
///
- ///
+ ///
///
[HttpPost("doMaterialOut")]
[Log(Title = "成品出库", BusinessType = BusinessType.INSERT)]
public IActionResult DoMaterialOut([FromBody] WmDoMaterialOut_Dto doMaterialOut)
{
- if (doMaterialOut == null || doMaterialOut.ShipmentNum == null)
+ try
{
- return SUCCESS(null);
+ if (doMaterialOut == null || doMaterialOut.ShipmentNum == null)
+ {
+ return ToResponse(new ApiResult(500, "出库数据为空!", "出库数据为空!"));
+ }
+ string createName = HttpContext.GetName();
+ (int, int) data = _WmOutOrderService.DoMaterialOut(doMaterialOut, createName);
+ return SUCCESS(data);
+ }
+ catch (Exception e)
+ {
+ return ToResponse(new ApiResult(500, "出库异常!" + e.Message, "出库异常!"));
}
- string createName = HttpContext.GetName();
- (int, int) data = _WmOutOrderService.DoMaterialOut(doMaterialOut, createName);
-
- return SUCCESS(data);
}
-
///
/// 6 出库单完成
///
@@ -286,14 +297,22 @@ namespace ZR.Admin.WebApi.Controllers
/// 出库单号
///
[HttpGet("checkProductionOut")]
- public IActionResult CheckProductionOut(string partnumber, string production_packcode = "", string shipment_num = "")
+ public IActionResult CheckProductionOut(
+ string partnumber,
+ string production_packcode = "",
+ string shipment_num = ""
+ )
{
if (string.IsNullOrEmpty(partnumber))
{
return ToResponse(new ApiResult(200, "请选择物料号", false));
}
string msg = "";
- msg = _WmOutOrderService.CheckProductionOut(partnumber, production_packcode, shipment_num);
+ msg = _WmOutOrderService.CheckProductionOut(
+ partnumber,
+ production_packcode,
+ shipment_num
+ );
if (msg != "ok")
{
return ToResponse(new ApiResult(200, msg, false));
@@ -303,6 +322,5 @@ namespace ZR.Admin.WebApi.Controllers
return ToResponse(new ApiResult(200, msg, true));
}
}
-
}
-}
\ No newline at end of file
+}
diff --git a/ZR.Model/MES/wms/Dto/WmGoodsRecordDto.cs b/ZR.Model/MES/wms/Dto/WmGoodsRecordDto.cs
new file mode 100644
index 00000000..4dbd054c
--- /dev/null
+++ b/ZR.Model/MES/wms/Dto/WmGoodsRecordDto.cs
@@ -0,0 +1,52 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace ZR.Model.MES.wms.Dto
+{
+ ///
+ /// 成品库数据变动表查询对象
+ ///
+ public class WmGoodsRecordQueryDto : PagerInfo {
+ public string FkInventoryId { get; set; }
+ public string Code { get; set; }
+ public string Partnumber { get; set; }
+ public int? ChangeType { get; set; }
+ public string CreatedBy { get; set; }
+ public string Remark { get; set; }
+ public DateTime? StartActionTime { get; set; }
+ public DateTime? EndActionTime { get; set; }
+ }
+
+ ///
+ /// 成品库数据变动表输入输出对象
+ ///
+ public class WmGoodsRecordDto
+ {
+ public string Id { get; set; }
+
+ public string FkInventoryId { get; set; }
+
+ public string Code { get; set; }
+
+ public string Partnumber { get; set; }
+
+ public string BlankNum { get; set; }
+
+ public int? ChangeType { get; set; }
+
+ public int? ChangeQuantity { get; set; }
+
+ public DateTime? ActionTime { get; set; }
+
+ public int? Status { get; set; }
+
+ public string Remark { get; set; }
+
+ public string CreatedBy { get; set; }
+
+ public DateTime? CreatedTime { get; set; }
+
+ public string UpdatedBy { get; set; }
+
+ public DateTime? UpdatedTime { get; set; }
+ }
+}
diff --git a/ZR.Model/MES/wms/WmGoodsRecord.cs b/ZR.Model/MES/wms/WmGoodsRecord.cs
new file mode 100644
index 00000000..1d12e75f
--- /dev/null
+++ b/ZR.Model/MES/wms/WmGoodsRecord.cs
@@ -0,0 +1,89 @@
+namespace ZR.Model.MES.wms
+{
+ ///
+ /// 成品库数据变动表
+ ///
+ [SugarTable("wm_goods_record")]
+ public class WmGoodsRecord
+ {
+ ///
+ /// 主键
+ ///
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = false)]
+ public string Id { get; set; }
+
+ ///
+ /// 库存主键
+ ///
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = false, ColumnName = "fk_inventory_id")]
+ public string FkInventoryId { get; set; }
+
+ ///
+ /// 关联记录字段,识别记录字段如PDA
+ ///
+ public string Code { get; set; }
+
+ ///
+ /// 零件号
+ ///
+ public string Partnumber { get; set; }
+
+ ///
+ /// 毛坯号
+ ///
+ [SugarColumn(ColumnName = "blank_num")]
+ public string BlankNum { get; set; }
+
+ ///
+ /// 变动类别 1-入库 2-出库 3-盘点
+ ///
+ [SugarColumn(ColumnName = "change_type")]
+ public int? ChangeType { get; set; }
+
+ ///
+ /// 变动数量
+ ///
+ [SugarColumn(ColumnName = "change_quantity")]
+ public int? ChangeQuantity { get; set; }
+
+ ///
+ /// 时间(操作时间)
+ ///
+ [SugarColumn(ColumnName = "action_time")]
+ public DateTime? ActionTime { get; set; }
+
+ ///
+ /// 状态(暂定)
+ ///
+ public int? Status { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string Remark { get; set; }
+
+ ///
+ /// 创建人
+ ///
+ [SugarColumn(ColumnName = "cREATED_BY")]
+ public string CreatedBy { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ [SugarColumn(ColumnName = "cREATED_TIME")]
+ public DateTime? CreatedTime { get; set; }
+
+ ///
+ /// 更新人
+ ///
+ [SugarColumn(ColumnName = "uPDATED_BY")]
+ public string UpdatedBy { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ [SugarColumn(ColumnName = "uPDATED_TIME")]
+ public DateTime? UpdatedTime { get; set; }
+ }
+}
diff --git a/ZR.Service/Utils/MaterialUtils.cs b/ZR.Service/Utils/MaterialUtils.cs
index 4cef6830..3bf8cdbd 100644
--- a/ZR.Service/Utils/MaterialUtils.cs
+++ b/ZR.Service/Utils/MaterialUtils.cs
@@ -10,7 +10,7 @@ namespace ZR.Service.Utils
//解析外箱标签码
public ResultionPackageCodeDto ResolutionPackage(string code)
{
- if (code.Contains("^"))
+ if (code.Contains('^'))
{
// 初步进行解析检测,增加解析成功率
string[] splitstr = code.Split('^');
diff --git a/ZR.Service/mes/wms/IService/IWmGoodsRecordService.cs b/ZR.Service/mes/wms/IService/IWmGoodsRecordService.cs
new file mode 100644
index 00000000..897e2d0b
--- /dev/null
+++ b/ZR.Service/mes/wms/IService/IWmGoodsRecordService.cs
@@ -0,0 +1,21 @@
+using ZR.Model;
+using ZR.Model.MES.wms;
+using ZR.Model.MES.wms.Dto;
+
+namespace ZR.Service.mes.wms.IService
+{
+ ///
+ /// 成品库数据变动表service接口
+ ///
+ public interface IWmGoodsRecordService : IBaseService
+ {
+ PagedInfo GetList(WmGoodsRecordQueryDto parm);
+
+ WmGoodsRecord GetInfo(string Id);
+
+ WmGoodsRecord AddWmGoodsRecord(WmGoodsRecord parm);
+
+ int UpdateWmGoodsRecord(WmGoodsRecord parm);
+
+ }
+}
diff --git a/ZR.Service/mes/wms/WMentryWarehousing_productService.cs b/ZR.Service/mes/wms/WMentryWarehousing_productService.cs
index 4cdfe42c..0e37af2e 100644
--- a/ZR.Service/mes/wms/WMentryWarehousing_productService.cs
+++ b/ZR.Service/mes/wms/WMentryWarehousing_productService.cs
@@ -1,8 +1,8 @@
-using Infrastructure.Attribute;
-using SqlSugar;
-using System;
+using System;
using System.Linq;
using System.Text.RegularExpressions;
+using Infrastructure.Attribute;
+using SqlSugar;
using ZR.Model.MES.wms;
using ZR.Model.MES.wms.Dto;
using ZR.Service.mes.wms.IService;
@@ -10,30 +10,66 @@ using ZR.Service.Utils;
namespace ZR.Service.mes.wms
{
- [AppService(ServiceType = typeof(IWMentryWarehousing_productService), ServiceLifetime = LifeTime.Transient)]
- public class WMentryWarehousing_productService : BaseService, IWMentryWarehousing_productService
+ [AppService(
+ ServiceType = typeof(IWMentryWarehousing_productService),
+ ServiceLifetime = LifeTime.Transient
+ )]
+ public class WMentryWarehousing_productService
+ : BaseService,
+ IWMentryWarehousing_productService
{
-
private NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
+
//货物入库
public int IntoProductwarehouse(WmgoodsDto wmgoods, string createName)
{
- List preparegoodsList = new List();
- if (wmgoods.packagelist != null && wmgoods.packagelist.Count() > 0)
+ try
{
- for (int i = 0; i < wmgoods.packagelist.Count(); i++)
+ Context.Ado.BeginTran();
+ List preparegoodsList = new();
+ string location = wmgoods.location;
+ if (string.IsNullOrEmpty(wmgoods.location))
{
-
- ResultionPackageCodeDto resultionPackage = ResolutionPackage(wmgoods.packagelist[i]);
- // XXX 入库时查出此批次号箱已入库,则跳过
- bool hasWarehouse = Context.Queryable().Where(it => it.PackageCodeClient == resultionPackage.PatchCode).Any();
+ location = "LS";
+ }
+ string[] packageArray = wmgoods.packagelist;
+ if (packageArray == null || packageArray.Length <= 0)
+ {
+ Context.Ado.RollbackTran();
+ throw new Exception("无入库箱,请检查传入数据!");
+ }
+ // 统计记录
+ List partnumbers = new();
+ int totalPackage = 0;
+ int totalPartnumber = 0;
+ List packageCodeRemark = new();
+ for (int i = 0; i < packageArray.Length; i++)
+ {
+ // 解析箱标签
+ ResultionPackageCodeDto resultionPackage = ResolutionPackage(packageArray[i]);
+ if (resultionPackage == null)
+ {
+ Context.Ado.RollbackTran();
+ throw new Exception("其中一箱外标签解析失败,第" + (i + 1) + "箱");
+ }
+ // 入库时查出此批次号箱已入库,则报警提示
+ bool hasWarehouse = Context
+ .Queryable()
+ .Where(it => it.PackageCodeClient == resultionPackage.PatchCode)
+ .Any();
if (hasWarehouse)
{
- continue;
+ Context.Ado.RollbackTran();
+ throw new Exception("箱" + resultionPackage.PatchCode + "已在库中,不可重复入库!");
}
- WmGoodsNowProduction wmGood = new WmGoodsNowProduction();
- wmGood.Id = SnowFlakeSingle.Instance.NextId().ToString();
-
+ // 通过校验,插入入库数据
+ totalPackage++;
+ totalPartnumber += resultionPackage.Quantity ?? 0;
+ packageCodeRemark.Add(resultionPackage.PatchCode);
+ WmGoodsNowProduction wmGood = new WmGoodsNowProduction
+ {
+ Id = SnowFlakeSingle.Instance.NextId().ToString()
+ };
string flow = resultionPackage.PatchCode.Split('_')[1];
int flow_num = 0;
try
@@ -44,63 +80,89 @@ namespace ZR.Service.mes.wms
{
flow_num = -1;
}
-
- wmGood.PackageCode = Getpack_no(resultionPackage.WorkoderID, flow_num.ToString("000"));
-
+ wmGood.PackageCode =
+ Getpack_no(resultionPackage.WorkoderID, flow_num.ToString("000"))
+ ?? "Iminate";
wmGood.PackageCodeClient = resultionPackage.PatchCode;
wmGood.Partnumber = resultionPackage.PartNumner;
+ if (!partnumbers.Contains(wmGood.Partnumber))
+ {
+ partnumbers.Add(wmGood.Partnumber);
+ }
wmGood.PackageCodeOriginal = resultionPackage.originalCode;
-
- wmGood.LocationCode = wmgoods.location;
-
+ wmGood.LocationCode = location;
string workorder_id = resultionPackage.WorkoderID;
-
-
- //wmGood.GoodsNumLogic = Context.Queryable()
- // .Where(it => it.WorkOrderNum == workorder_id)
- // .Count();
-
wmGood.GoodsNumLogic = (resultionPackage.Quantity) ?? 0;
wmGood.GoodsNumAction = wmGood.GoodsNumLogic;
wmGood.EntryWarehouseTime = DateTime.Now;
wmGood.CreatedBy = createName;
wmGood.CreatedTime = DateTime.Now;
preparegoodsList.Add(wmGood);
-
-
}
-
- }
- // 修改入库检验 为入库完成 WmFgentryInspect
- UseTran2(() =>
- {
- if (preparegoodsList != null && preparegoodsList.Count() > 0)
+ // 修改入库检验 为入库完成 WmFgentryInspect
+ if (preparegoodsList != null && preparegoodsList.Count > 0)
{
foreach (var preparegood in preparegoodsList)
{
if (!string.IsNullOrEmpty(preparegood.PackageCode))
{
- Context.Updateable()
- .SetColumns(it => it.Bitwm == 1)
- .Where(it => it.Packcode == preparegood.PackageCode)
- .ExecuteCommand();
-
+ Context
+ .Updateable()
+ .SetColumns(it => it.Bitwm == 1)
+ .Where(it => it.Packcode == preparegood.PackageCode)
+ .ExecuteCommand();
}
-
-
}
-
}
-
- });
-
-
- int result = Context.Insertable(preparegoodsList).ExecuteCommand();
- return result;
+ int result = Context.Insertable(preparegoodsList).ExecuteCommand();
+ if (result == 0)
+ {
+ Context.Ado.RollbackTran();
+ throw new Exception("入库记录插入失败");
+ }
+ packageCodeRemark.Sort();
+ // 插入记录
+ WmGoodsRecord record =
+ new()
+ {
+ Id = SnowFlakeSingle.Instance.NextId().ToString(),
+ FkInventoryId = SnowFlakeSingle.Instance.NextId().ToString(),
+ Code = "PDA_IN",
+ Partnumber = string.Join(',', partnumbers),
+ BlankNum = "",
+ ChangeType = 1,
+ ChangeQuantity = totalPartnumber,
+ ActionTime = DateTime.Now,
+ Status = 1,
+ Remark =
+ "PDA入库"
+ + "\n仓库号:"
+ + location
+ + "\n总箱数:"
+ + totalPackage
+ + "\n总零件数:"
+ + totalPartnumber
+ + "\n涉及批次号:\n"
+ + string.Join(',', packageCodeRemark),
+ CreatedBy = createName,
+ CreatedTime = DateTime.Now,
+ };
+ int recordNum = Context.Insertable(record).ExecuteCommand();
+ if (recordNum == 0)
+ {
+ Context.Ado.RollbackTran();
+ throw new Exception("操作记录插入失败");
+ }
+ Context.Ado.CommitTran();
+ return result;
+ }
+ catch (Exception e)
+ {
+ Context.Ado.RollbackTran();
+ throw new Exception(e.Message);
+ }
}
-
-
///
/// 获取mes的箱子码
///
@@ -109,14 +171,12 @@ namespace ZR.Service.mes.wms
///
private string Getpack_no(string workordorid, string flow)
{
-
-
- WmPackingrecord record = Context.Queryable()
+ WmPackingrecord record = Context
+ .Queryable()
.Where(it => it.WorkOrderNum == workordorid)
.Where(it => it.PackingCode.EndsWith(flow))
.First();
-
if (record == null)
{
return null;
@@ -135,15 +195,13 @@ namespace ZR.Service.mes.wms
}
string packingCode = Identity.PatchCode.Split('_')[1];
-
- bool isExist = Context.Queryable()
+ bool isExist = Context
+ .Queryable()
.Where(it => it.WorkOrderNum == Identity.WorkoderID)
.Where(it => it.PackingCode.EndsWith(packingCode))
.Where(it => it.BFilled == true)
.Any();
-
-
return isExist;
}
@@ -154,31 +212,24 @@ namespace ZR.Service.mes.wms
///
public int isProductionPackage(string production_packcode)
{
-
-
Regex r = new Regex("Code=BNW\\d{9}_\\d{0,3}");
-
//todo 不是箱子
if (!r.IsMatch(production_packcode))
{
return 2;
}
-
ResultionPackageCodeDto Identity = ResolutionPackage(production_packcode);
if (Identity == null)
{
return 0;
}
-
string packingCode = Identity.PatchCode.Split('_')[1];
-
-
-
- bool isExist = Context.Queryable()
+ bool isExist = Context
+ .Queryable()
.Where(it => it.WorkOrderNum == Identity.WorkoderID)
.Where(it => it.PackingCode.EndsWith(packingCode))
.Any();
@@ -187,29 +238,30 @@ namespace ZR.Service.mes.wms
return 0;
}
-
return 1;
-
}
+
//1 判断是否为库位码
- bool IWMentryWarehousing_productService.IsProductionLoacation(string production_location_code)
+ bool IWMentryWarehousing_productService.IsProductionLoacation(
+ string production_location_code
+ )
{
-
- return Context.Queryable().Where(it => it.WarehouseNum == 1)
- .Where(it => it.Location.Equals(production_location_code)).Any();
-
+ return Context
+ .Queryable()
+ .Where(it => it.WarehouseNum == 1)
+ .Where(it => it.Location.Equals(production_location_code))
+ .Any();
}
-
//获取库位已经存在的货物
public List Getpackagelist(string location)
{
- return Context.Queryable().Where(it => it.LocationCode == location).ToList();
-
+ return Context
+ .Queryable()
+ .Where(it => it.LocationCode == location)
+ .ToList();
}
-
-
//解析外箱标签码
public ResultionPackageCodeDto ResolutionPackage(string code)
{
@@ -222,7 +274,8 @@ namespace ZR.Service.mes.wms
return null;
}
string SerialNumber = packageCodeDto.PatchCode.Split('_')[1] ?? "000";
- WmPackageLcl packageLcl = Context.Queryable()
+ WmPackageLcl packageLcl = Context
+ .Queryable()
.Where(it => it.WorkOrderId == packageCodeDto.WorkoderID)
.Where(it => it.SerialNumber == SerialNumber)
.OrderByDescending(it => it.CreatedTime)
@@ -268,7 +321,6 @@ namespace ZR.Service.mes.wms
return null;*/
}
-
///
/// 判断箱子是否在成品库中
///
@@ -279,10 +331,12 @@ namespace ZR.Service.mes.wms
{
ResultionPackageCodeDto resultionPackage = ResolutionPackage(originalCode);
- return Context.Queryable().Where(it => it.PackageCodeClient == resultionPackage.PatchCode).Any();
+ return Context
+ .Queryable()
+ .Where(it => it.PackageCodeClient == resultionPackage.PatchCode)
+ .Any();
}
-
// 检查是否可入库(返回ok 可入库,其余返回情况)【使用中接口】
public string checkWarehousing(string production_packcode, string location, bool isStrict)
{
@@ -299,21 +353,29 @@ namespace ZR.Service.mes.wms
return "标签解析异常!";
}
-
// 2.1判断是否已入库
- bool isExistedWarehouse = Context.Queryable().Where(it => it.PackageCodeClient == resultionPackage.PatchCode).Any();
+ bool isExistedWarehouse = Context
+ .Queryable()
+ .Where(it => it.PackageCodeClient == resultionPackage.PatchCode)
+ .Any();
if (isExistedWarehouse)
{
return "该箱号已入库!";
}
// 2.2判断是否有出库记录
- bool isoutWarehouse = Context.Queryable().Where(it => it.PackageCodeClient == resultionPackage.PatchCode).Any();
+ bool isoutWarehouse = Context
+ .Queryable()
+ .Where(it => it.PackageCodeClient == resultionPackage.PatchCode)
+ .Any();
if (isoutWarehouse)
{
return "该箱号已有出库记录,需要删除后再入库!";
}
// 提取库位信息
- WmInfo wmInfo = Context.Queryable().Where(it => it.Location == location).First();
+ WmInfo wmInfo = Context
+ .Queryable()
+ .Where(it => it.Location == location)
+ .First();
if (wmInfo == null)
{
return "库位参数异常";
@@ -324,11 +386,14 @@ namespace ZR.Service.mes.wms
string package_no = resultionPackage.PatchCode.Split("_")[1];
// 3.1 isStrict = TRUE 时判断是否是满箱标签
- WmPackingrecord recourd = Context.Queryable()
+ WmPackingrecord recourd = Context
+ .Queryable()
.Where(it => it.WorkOrderNum == resultionPackage.WorkoderID)
// .Where(it => it.PackingCode.EndsWith(packingCode))
// .Where(it => packingCode == int.Parse(it.PackingCode.Substring(7)).ToString())
- .Where(it => package_no == int.Parse(SqlFunc.Right(it.PackingCode, 5)).ToString())
+ .Where(it =>
+ package_no == int.Parse(SqlFunc.Right(it.PackingCode, 5)).ToString()
+ )
.Where(it => it.BFilled == true)
.First();
if (recourd == null)
@@ -336,11 +401,12 @@ namespace ZR.Service.mes.wms
return "该标签不为满箱标签!请入临时仓库!";
}
//3.2 GP12检测
- var inspect = Context.Queryable()
- .Where(it => it.Workorder == resultionPackage.WorkoderID)
- .Where(it => it.Packcode.EndsWith(package_no))
- .OrderByDescending(it => it.CreatedTime)
- .First();
+ var inspect = Context
+ .Queryable()
+ .Where(it => it.Workorder == resultionPackage.WorkoderID)
+ .Where(it => it.Packcode.EndsWith(package_no))
+ .OrderByDescending(it => it.CreatedTime)
+ .First();
// XXX 添加校验,如果是编号为4号的打印机打出来的就跳过GP12,满箱与测试标签校验
if (recourd.Machine != "4")
{
@@ -371,7 +437,10 @@ namespace ZR.Service.mes.wms
flow_num = -1;
}
//mes追溯码
- string PackageCode = Getpack_no(resultionPackage.WorkoderID, flow_num.ToString("000"));
+ string PackageCode = Getpack_no(
+ resultionPackage.WorkoderID,
+ flow_num.ToString("000")
+ );
if (PackageCode == null)
{
return "该标签可能为测试标签,不可追溯!请入临时仓库!";
@@ -383,8 +452,6 @@ namespace ZR.Service.mes.wms
{
return "标签存在异常!" + e.Message;
}
-
}
-
}
}
diff --git a/ZR.Service/mes/wms/WmGoodsRecordService.cs b/ZR.Service/mes/wms/WmGoodsRecordService.cs
new file mode 100644
index 00000000..a8572b77
--- /dev/null
+++ b/ZR.Service/mes/wms/WmGoodsRecordService.cs
@@ -0,0 +1,96 @@
+using Infrastructure.Attribute;
+using SqlSugar;
+using System;
+using ZR.Model;
+using ZR.Model.MES.wms;
+using ZR.Model.MES.wms.Dto;
+using ZR.Repository;
+using ZR.Service.mes.wms.IService;
+
+namespace ZR.Service.mes.wms
+{
+ ///
+ /// 成品库数据变动表Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IWmGoodsRecordService), ServiceLifetime = LifeTime.Transient)]
+ public class WmGoodsRecordService : BaseService, IWmGoodsRecordService
+ {
+ ///
+ /// 查询成品库数据变动表列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(WmGoodsRecordQueryDto parm)
+ {
+ var predicate = Expressionable.Create()
+ .AndIF(parm.ChangeType > 0, it => it.ChangeType == parm.ChangeType)
+ .AndIF(!string.IsNullOrEmpty(parm.Partnumber), it => it.Partnumber.Contains(parm.Partnumber))
+ .AndIF(!string.IsNullOrEmpty(parm.Code), it => it.Code.Contains(parm.Code))
+ .AndIF(!string.IsNullOrEmpty(parm.Remark), it => it.Remark.Contains(parm.Remark))
+ .AndIF(!string.IsNullOrEmpty(parm.CreatedBy), it => it.CreatedBy.Contains(parm.CreatedBy))
+ // 当天0点
+ .AndIF(parm.StartActionTime > DateTime.MinValue, it => it.ActionTime >= parm.StartActionTime.Value.ToLocalTime())
+ // 当天23点59分59秒
+ .AndIF(parm.EndActionTime > DateTime.MinValue, it => it.ActionTime <= parm.EndActionTime.Value.ToLocalTime())
+ ;
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public WmGoodsRecord GetInfo(string Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加成品库数据变动表
+ ///
+ ///
+ ///
+ public WmGoodsRecord AddWmGoodsRecord(WmGoodsRecord model)
+ {
+ return Context.Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改成品库数据变动表
+ ///
+ ///
+ ///
+ public int UpdateWmGoodsRecord(WmGoodsRecord model)
+ {
+ //var response = Update(w => w.Id == model.Id, it => new WmGoodsRecord()
+ //{
+ // Code = model.Code,
+ // Partnumber = model.Partnumber,
+ // BlankNum = model.BlankNum,
+ // ChangeType = model.ChangeType,
+ // ChangeQuantity = model.ChangeQuantity,
+ // ActionTime = model.ActionTime,
+ // Status = model.Status,
+ // Remark = model.Remark,
+ // CreatedBy = model.CreatedBy,
+ // CreatedTime = model.CreatedTime,
+ // UpdatedBy = model.UpdatedBy,
+ // UpdatedTime = model.UpdatedTime,
+ //});
+ //return response;
+ return Update(model, true);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/mes/wms/WmOutOrderService.cs b/ZR.Service/mes/wms/WmOutOrderService.cs
index df43f13c..f8263334 100644
--- a/ZR.Service/mes/wms/WmOutOrderService.cs
+++ b/ZR.Service/mes/wms/WmOutOrderService.cs
@@ -1,9 +1,9 @@
-using Infrastructure.Attribute;
-using Mapster;
-using SqlSugar;
using System;
using System.Data;
using System.Linq;
+using Infrastructure.Attribute;
+using Mapster;
+using SqlSugar;
using ZR.Model;
using ZR.Model.MES.wms;
using ZR.Model.MES.wms.Dto;
@@ -20,12 +20,12 @@ namespace ZR.Service.mes.wms
public class WmOutOrderService : BaseService, IWmOutOrderService
{
private NLog.Logger logger;
+
public WmOutOrderService()
{
logger = NLog.LogManager.GetCurrentClassLogger();
}
-
///
/// 查询出货单(物料+客户)列表
///
@@ -33,15 +33,21 @@ namespace ZR.Service.mes.wms
///
public PagedInfo GetList(WmOutOrderQueryDto parm)
{
- var predicate = Expressionable.Create()
- .AndIF(!string.IsNullOrEmpty(parm.ShipmentNum), it => it.ShipmentNum.Contains(parm.ShipmentNum))
- .AndIF(!string.IsNullOrEmpty(parm.CustomNo), it => it.CustomNo.Contains(parm.CustomNo))
+ var predicate = Expressionable
+ .Create()
+ .AndIF(
+ !string.IsNullOrEmpty(parm.ShipmentNum),
+ it => it.ShipmentNum.Contains(parm.ShipmentNum)
+ )
+ .AndIF(
+ !string.IsNullOrEmpty(parm.CustomNo),
+ it => it.CustomNo.Contains(parm.CustomNo)
+ )
.AndIF(parm.Type > 0, it => it.Type == parm.Type)
.AndIF(parm.Status > -1, it => it.Status == parm.Status)
.AndIF(parm.Year > 0, it => it.Year == parm.Year)
.AndIF(parm.Week > 0, it => it.Year == parm.Week)
- .AndIF(parm.Date > 0, it => it.Year == parm.Date)
- ;
+ .AndIF(parm.Date > 0, it => it.Year == parm.Date);
var response = Queryable()
.Where(predicate.ToExpression())
.OrderByDescending(it => it.CreatedTime)
@@ -50,7 +56,6 @@ namespace ZR.Service.mes.wms
return response;
}
-
///
/// 获取详情
///
@@ -58,10 +63,10 @@ namespace ZR.Service.mes.wms
///
public WmOutOrder_material_num GetInfo(string ShipmentNum)
{
-
- WmOutOrder WmOutOrderList = Context.Queryable()
- .Where(it => it.ShipmentNum == ShipmentNum)
- .First();
+ WmOutOrder WmOutOrderList = Context
+ .Queryable()
+ .Where(it => it.ShipmentNum == ShipmentNum)
+ .First();
WmOutOrder_material_num wmOutOrderItem = null;
@@ -69,31 +74,34 @@ namespace ZR.Service.mes.wms
{
wmOutOrderItem = WmOutOrderList.Adapt();
- List moList = Context.Queryable()
- .Where(it => it.FkOutorderId == WmOutOrderList.ShipmentNum)
- .ToList();
+ List moList = Context
+ .Queryable()
+ .Where(it => it.FkOutorderId == WmOutOrderList.ShipmentNum)
+ .ToList();
if (moList != null && moList.Count > 0)
{
- List Material_stock = new List();
+ List Material_stock =
+ new List();
foreach (var moItem in moList)
{
- WmMaterial material = Context.Queryable().Where(it => it.Id == moItem.FkMaterialId).First();
+ WmMaterial material = Context
+ .Queryable()
+ .Where(it => it.Id == moItem.FkMaterialId)
+ .First();
if (material != null)
{
- WmMaterialQuery_stockQuantityDto2 dto2 = material.Adapt();
+ WmMaterialQuery_stockQuantityDto2 dto2 =
+ material.Adapt();
dto2.requireOutNum = moItem.OuthouseNum;
Material_stock.Add(dto2);
}
-
}
wmOutOrderItem.MaterialList = Material_stock;
}
}
-
-
return wmOutOrderItem;
}
@@ -107,17 +115,24 @@ namespace ZR.Service.mes.wms
try
{
string today_id = "EG" + DateTime.Now.ToString("yyMMdd");
- string last_outorder_ShipmentNum = Context.Queryable().Where(it => it.ShipmentNum.StartsWith(today_id)).Max(it => it.ShipmentNum);
+ string last_outorder_ShipmentNum = Context
+ .Queryable()
+ .Where(it => it.ShipmentNum.StartsWith(today_id))
+ .Max(it => it.ShipmentNum);
if (string.IsNullOrEmpty(last_outorder_ShipmentNum))
{
model.ShipmentNum = today_id + "001";
-
}
else
{
- int flow = int.Parse(last_outorder_ShipmentNum.Substring(last_outorder_ShipmentNum.Length - 3, 3)) + 1;
+ int flow =
+ int.Parse(
+ last_outorder_ShipmentNum.Substring(
+ last_outorder_ShipmentNum.Length - 3,
+ 3
+ )
+ ) + 1;
model.ShipmentNum = today_id + flow.ToString("000");
-
}
WmOutOrder wmOutOrder = model.Adapt();
@@ -126,7 +141,8 @@ namespace ZR.Service.mes.wms
{
if (model.MaterialList.Count > 0)
{
- List materialOutorderList = new List();
+ List materialOutorderList =
+ new List();
foreach (var item in model.MaterialList)
{
@@ -137,10 +153,10 @@ namespace ZR.Service.mes.wms
materialOutorder.CreatedBy = model.CreatedBy;
materialOutorder.CreatedTime = DateTime.Now;
materialOutorderList.Add(materialOutorder);
- };
+ }
+ ;
int result = Context.Insertable(materialOutorderList).ExecuteCommand();
}
-
}
return Context.Insertable(wmOutOrder).ExecuteReturnEntity();
@@ -149,8 +165,8 @@ namespace ZR.Service.mes.wms
{
return null;
}
-
}
+
///
/// 删除出货单关联的物料出货单
///
@@ -162,12 +178,13 @@ namespace ZR.Service.mes.wms
{
for (int i = 0; i < primarys.Length; i++)
{
- Context.Deleteable().Where(it => it.FkOutorderId == primarys[i]).ExecuteCommand();
+ Context
+ .Deleteable()
+ .Where(it => it.FkOutorderId == primarys[i])
+ .ExecuteCommand();
}
-
}
return 1;
-
}
///
@@ -197,18 +214,13 @@ namespace ZR.Service.mes.wms
return Update(model, true);
}
-
-
-
///
/// 获取用户信息
///
- ///
+ ///
public List GetCustominfo()
{
-
return Context.Queryable().ToList();
-
}
///
@@ -216,41 +228,52 @@ namespace ZR.Service.mes.wms
///
///
///
- public (List, int) GetmaterialList(WmMaterialQueryDto parm)
+ public (List, int) GetmaterialList(
+ WmMaterialQueryDto parm
+ )
{
int total = 0;
- var predicate = Expressionable.Create()
+ var predicate = Expressionable
+ .Create()
.AndIF(parm.Partnumber != null, it => it.Partnumber.Contains(parm.Partnumber))
- .AndIF(parm.U8InventoryCode != null, it => it.U8InventoryCode.Contains(parm.U8InventoryCode))
+ .AndIF(
+ parm.U8InventoryCode != null,
+ it => it.U8InventoryCode.Contains(parm.U8InventoryCode)
+ )
.AndIF(parm.ProductName != null, it => it.ProductName.Contains(parm.ProductName))
.AndIF(parm.Color != null, it => it.Color.Contains(parm.Color))
- .AndIF(parm.Specification != null, it => it.Specification.Contains(parm.Specification))
+ .AndIF(
+ parm.Specification != null,
+ it => it.Specification.Contains(parm.Specification)
+ )
.AndIF(parm.Description != null, it => it.Description.Contains(parm.Description))
- .AndIF(parm.Search1 != null, it => it.Search1.Contains(parm.Search1) || it.Search2.Contains(parm.Search1))
+ .AndIF(
+ parm.Search1 != null,
+ it => it.Search1.Contains(parm.Search1) || it.Search2.Contains(parm.Search1)
+ )
.AndIF(parm.Status > -1, it => it.Status == parm.Status);
-
- List materialList = Context.Queryable()
+ List materialList = Context
+ .Queryable()
.Where(predicate.ToExpression())
.OrderByDescending(it => it.CreatedTime)
.ToPageList(parm.PageNum, parm.PageSize, ref total);
-
- List material_stockQuantity_list = new List();
-
+ List material_stockQuantity_list =
+ new List();
if (materialList.Count > 0)
{
foreach (WmMaterial item in materialList)
{
-
- WmMaterialQuery_stockQuantityDto wmMaterialQuery_Stock_item = item.Adapt();
+ WmMaterialQuery_stockQuantityDto wmMaterialQuery_Stock_item =
+ item.Adapt();
int material_num = 0;
List productioList = Context
- .Queryable()
- .Where(it => it.Partnumber == item.Partnumber)
- .ToList();
+ .Queryable()
+ .Where(it => it.Partnumber == item.Partnumber)
+ .ToList();
if (productioList.Count > 0)
{
@@ -261,22 +284,13 @@ namespace ZR.Service.mes.wms
}
}
-
wmMaterialQuery_Stock_item.stockQuantity = material_num;
material_stockQuantity_list.Add(wmMaterialQuery_Stock_item);
-
-
-
-
-
}
}
return (material_stockQuantity_list, total);
}
-
-
-
///
/// 查询出货单的物料信息
///
@@ -284,38 +298,47 @@ namespace ZR.Service.mes.wms
///
public List Queryoutoder_matrials(string shipment_num)
{
-
- List stockList = Context.Queryable()
- .LeftJoin((mo, m) => mo.FkMaterialId == m.Id)
- .Where(mo => mo.FkOutorderId == shipment_num)
- .Select((mo, m) => new WmMaterialQuery_print()
- {
- //物料号
- Partnumber = m.Partnumber,
- // 描述
- ProductName = m.ProductName,
- //需求零件数
- RequireOutNum = mo.OuthouseNum
- }).ToList();
-
+ List stockList = Context
+ .Queryable()
+ .LeftJoin((mo, m) => mo.FkMaterialId == m.Id)
+ .Where(mo => mo.FkOutorderId == shipment_num)
+ .Select(
+ (mo, m) =>
+ new WmMaterialQuery_print()
+ {
+ //物料号
+ Partnumber = m.Partnumber,
+ // 描述
+ ProductName = m.ProductName,
+ //需求零件数
+ RequireOutNum = mo.OuthouseNum
+ }
+ )
+ .ToList();
if (stockList != null && stockList.Count > 0)
{
foreach (var stock in stockList)
{
//库存箱数
- stock.PackageNum = Context.Queryable()
- .Where(it => it.Partnumber == stock.Partnumber).Count();
+ stock.PackageNum = Context
+ .Queryable()
+ .Where(it => it.Partnumber == stock.Partnumber)
+ .Count();
//库存零件数
- int? num = Context.Queryable()
+ int? num = Context
+ .Queryable()
.Where(it => it.Partnumber == stock.Partnumber)
.Sum(it => it.GoodsNumAction);
stock.ItemNum = num ?? 0;
// 需求箱数
- List list = Context.Queryable()
- .Where(it => it.Partnumber == stock.Partnumber).OrderByDescending(it => it.PackageCodeClient).ToList();
+ List list = Context
+ .Queryable()
+ .Where(it => it.Partnumber == stock.Partnumber)
+ .OrderByDescending(it => it.PackageCodeClient)
+ .ToList();
int sum = 0;
foreach (var item in list)
@@ -326,20 +349,11 @@ namespace ZR.Service.mes.wms
stock.Require_pack_num = list.IndexOf(item) + 1;
break;
}
-
}
-
-
-
}
}
-
-
return stockList;
-
-
-
}
///
@@ -352,7 +366,9 @@ namespace ZR.Service.mes.wms
// 最终结果
List planList = new List();
// 获取当前出货单下的物料信息
- List materialQuery_Prints = this.Queryoutoder_matrials(shipment_num);
+ List materialQuery_Prints = this.Queryoutoder_matrials(
+ shipment_num
+ );
if (materialQuery_Prints != null && materialQuery_Prints.Count > 0)
{
// 物料解析
@@ -363,11 +379,12 @@ namespace ZR.Service.mes.wms
// 物料号
string partnumber = material.Partnumber;
// 该物料下 ,现有货物列表,零件号相同,根据批次号从小到大排序
- List wmGoodsNowsList = Context.Queryable()
- .Where(it => it.Partnumber == partnumber)
- .Where(it => it.LocationCode != "Z1-01")
- .OrderBy(it => it.PackageCodeClient)
- .ToList();
+ List wmGoodsNowsList = Context
+ .Queryable()
+ .Where(it => it.Partnumber == partnumber)
+ .Where(it => it.LocationCode != "Z1-01")
+ .OrderBy(it => it.PackageCodeClient)
+ .ToList();
// 判断要出多少批次的货
List wmOutOrderPlans = new List();
@@ -398,25 +415,25 @@ namespace ZR.Service.mes.wms
if (wmOutOrderPlans.Count > 0)
{
// 根据批次号下划线前进行聚合
- List material_plan_item = wmOutOrderPlans.GroupBy(it => it.Patchcode_short).Select(g => new
- WmOutOrderPlan
- {
- FkOutOrderId = g.Max(p => p.FkOutOrderId),
- Patchcode = g.Max(p => p.Patchcode_short),
- Patchcode_short = g.Max(p => p.Patchcode_short),
- WarehouseCode = g.Max(p => p.WarehouseCode),
- MaterialCode = g.Max(p => p.MaterialCode),
- PackageNum = g.Count(),
- PartnumberNum = g.Sum(p => p.PartnumberNum),
- RequireNum = g.Max(p => p.RequireNum),
- ReceivedPackNum = 0,
- Patchtime = g.Max(p => p.Patchtime),
- }).ToList();
+ List material_plan_item = wmOutOrderPlans
+ .GroupBy(it => it.Patchcode_short)
+ .Select(g => new WmOutOrderPlan
+ {
+ FkOutOrderId = g.Max(p => p.FkOutOrderId),
+ Patchcode = g.Max(p => p.Patchcode_short),
+ Patchcode_short = g.Max(p => p.Patchcode_short),
+ WarehouseCode = g.Max(p => p.WarehouseCode),
+ MaterialCode = g.Max(p => p.MaterialCode),
+ PackageNum = g.Count(),
+ PartnumberNum = g.Sum(p => p.PartnumberNum),
+ RequireNum = g.Max(p => p.RequireNum),
+ ReceivedPackNum = 0,
+ Patchtime = g.Max(p => p.Patchtime),
+ })
+ .ToList();
planList = planList.Concat(material_plan_item).ToList();
}
-
-
}
}
// 添加序号
@@ -427,19 +444,18 @@ namespace ZR.Service.mes.wms
witem.Outorder = count;
count++;
- witem.Inventory_pack_num = Context.Queryable()
+ witem.Inventory_pack_num = Context
+ .Queryable()
.Where(it => it.PackageCodeClient.Contains(witem.Patchcode))
.Count();
- witem.Inventory_num = Context.Queryable()
- .Where(it => it.PackageCodeClient.Contains(witem.Patchcode))
- .Sum(it => it.GoodsNumLogic) ?? 0;
-
-
+ witem.Inventory_num =
+ Context
+ .Queryable()
+ .Where(it => it.PackageCodeClient.Contains(witem.Patchcode))
+ .Sum(it => it.GoodsNumLogic) ?? 0;
}
-
return planList;
-
}
///
@@ -449,88 +465,127 @@ namespace ZR.Service.mes.wms
///
public (int, int) DoMaterialOut(WmDoMaterialOut_Dto doMaterialOut, string Createby)
{
- int sum_delete = 0;
- int sum_insert = 0;
- string shipnumber = doMaterialOut.ShipmentNum;
- if (doMaterialOut.PatchCode != null && doMaterialOut.PatchCode.Length > 0)
+ try
{
+ Context.Ado.BeginTran();
+ List deleteList = new();
+ List insertList = new();
+ string shipnumber = doMaterialOut.ShipmentNum;
+ if (doMaterialOut.PatchCode == null || doMaterialOut.PatchCode.Length == 0)
+ {
+ Context.Ado.RollbackTran();
+ throw new Exception("批次号列表为空,不可出库" + doMaterialOut.PatchCode);
+ }
+ // 统计记录
+ List partnumbers = new();
+ int totalPackage = 0;
+ int totalPartnumber = 0;
+ List packageCodeRemark = new();
foreach (var item in doMaterialOut.PatchCode)
{
- /*
- *
- * #region 保证 同一出货单下 同一物料下最早批次
- // 取出同一出货单下 同一物料下 未满箱的最早批次
-
- string short_patch = item.Split("_")[0];
- WmOutOrderPlan plan_item = Context.Queryable()
+ Context
+ .Updateable()
+ .SetColumns(it => it.ReceivedPackNum == it.ReceivedPackNum + 1)
.Where(it => it.FkOutOrderId == shipnumber)
- .Where(it => it.Patchcode==short_patch).OrderBy(it => it.Outorder).First();
- if (plan_item != null)
- {
- var plan_earliest = Context.Queryable()
- .Where(it => it.FkOutOrderId == shipnumber)
- .Where(it => it.MaterialCode == plan_item.MaterialCode)
- .Where(it => it.PackageNum > it.ReceivedPackNum)
- .OrderBy(it => it.Outorder)
- .First();
- //已经出库完成,没有可以出库的了
- if (plan_earliest == null)
- {
- return (100, 100);
- }
- if (plan_earliest.Id == plan_item.Id)
- {
- #endregion
-
-
- */
-
-
- // TODO 每次出库要出库计划累加
-
- Context.Updateable()
- .SetColumns(it => it.ReceivedPackNum == it.ReceivedPackNum + 1)
- .Where(it => it.FkOutOrderId == shipnumber)
- .Where(it => it.Patchcode == item)
- .ExecuteCommand();
-
-
- WmGoodsOutRecord record = new WmGoodsOutRecord();
- record.Id = SnowFlakeSingle.Instance.NextId().ToString();
-
- WmGoodsNowProduction nowProduction = Context.Queryable()
- .Where(it => it.PackageCodeClient == item).First();
-
- if (nowProduction != null)
- {
- record.FkNowProductionId = nowProduction.Id;
- record.PackageCodeClient = nowProduction.PackageCodeClient;
- record.PackageCode = nowProduction.PackageCode;
- record.PackageCodeOriginal = nowProduction.PackageCodeOriginal;
- record.LocationCode = nowProduction.LocationCode;
- record.Partnumber = nowProduction.Partnumber;
- record.GoodsNumLogic = nowProduction.GoodsNumLogic;
- record.GoodsNumAction = nowProduction.GoodsNumAction;
- record.EntryWarehouseTime = nowProduction.EntryWarehouseTime;
- record.OutTime = DateTime.Now;
- record.CreatedTime = DateTime.Now;
- record.CreatedBy = Createby;
- record.FkOutOrderId = shipnumber;
- sum_insert = Context.Insertable(record).ExecuteCommand();
- sum_delete += Context.Deleteable()
- .Where(it => it.PackageCodeClient == item)
+ .Where(it => it.Patchcode == item)
.ExecuteCommand();
+ WmGoodsOutRecord record =
+ new() { Id = SnowFlakeSingle.Instance.NextId().ToString() };
+ WmGoodsNowProduction nowProduction = Context
+ .Queryable()
+ .Where(it => it.PackageCodeClient == item)
+ .First();
+ if (nowProduction == null)
+ {
+ Context.Ado.RollbackTran();
+ throw new Exception("成品仓库未查到此货物,无法出库!" + item);
}
+ record.FkNowProductionId = nowProduction.Id;
+ record.PackageCodeClient = nowProduction.PackageCodeClient;
+ record.PackageCode = nowProduction.PackageCode;
+ record.PackageCodeOriginal = nowProduction.PackageCodeOriginal;
+ record.LocationCode = nowProduction.LocationCode;
+ record.Partnumber = nowProduction.Partnumber;
+ record.GoodsNumLogic = nowProduction.GoodsNumLogic;
+ record.GoodsNumAction = nowProduction.GoodsNumAction;
+ record.EntryWarehouseTime = nowProduction.EntryWarehouseTime;
+ record.OutTime = DateTime.Now;
+ record.CreatedTime = DateTime.Now;
+ record.CreatedBy = Createby;
+ record.FkOutOrderId = shipnumber;
+ insertList.Add(record);
+ deleteList.Add(nowProduction.Id);
+ // 记录统计
+ totalPackage++;
+ if (!partnumbers.Contains(nowProduction.Partnumber))
+ {
+ partnumbers.Add(nowProduction.Partnumber);
+ }
+ totalPartnumber += nowProduction.GoodsNumAction ?? 0;
+ packageCodeRemark.Add(nowProduction.PackageCodeClient);
}
+ int sum_insert = Context.Insertable(insertList).ExecuteCommand();
+ int sum_delete = Context
+ .Deleteable()
+ .In(deleteList.ToArray())
+ .ExecuteCommand();
+ if (sum_insert != sum_delete)
+ {
+ Context.Ado.RollbackTran();
+ throw new Exception(
+ "出库操作出现异常!失败原因记录不一致:添加数据" + sum_insert + "删除数据:" + sum_delete
+ );
+ }
+ packageCodeRemark.Sort();
+ // 插入记录
+ WmGoodsRecord wmGoodsRecord =
+ new()
+ {
+ Id = SnowFlakeSingle.Instance.NextId().ToString(),
+ FkInventoryId = SnowFlakeSingle.Instance.NextId().ToString(),
+ Code = "PDA_OUT",
+ Partnumber = string.Join(',', partnumbers),
+ BlankNum = "",
+ ChangeType = 2,
+ ChangeQuantity = totalPartnumber,
+ ActionTime = DateTime.Now,
+ Status = 1,
+ Remark =
+ "PDA出库"
+ + "\n出库单:"
+ + shipnumber
+ + "\n总箱数:"
+ + totalPackage
+ + "\n总零件数:"
+ + totalPartnumber
+ + "\n涉及批次号:\n"
+ + string.Join(',', packageCodeRemark),
+ CreatedBy = Createby,
+ CreatedTime = DateTime.Now,
+ };
+ int recordNum = Context.Insertable(wmGoodsRecord).ExecuteCommand();
+ if (recordNum == 0)
+ {
+ Context.Ado.RollbackTran();
+ throw new Exception("记录插入失败");
+ }
+ Context.Ado.CommitTran();
+ return (sum_delete, sum_insert);
+ }
+ catch (Exception e)
+ {
+ Context.Ado.RollbackTran();
+ throw new Exception(e.Message);
}
- return (sum_delete, sum_insert);
}
public bool OverOutorderplan(string shipment_num)
{
- int reult = Context.Updateable().Where(it => it.ShipmentNum == shipment_num)
- .SetColumns(it => it.Type == 2)
- .ExecuteCommand();
+ int reult = Context
+ .Updateable()
+ .Where(it => it.ShipmentNum == shipment_num)
+ .SetColumns(it => it.Type == 2)
+ .ExecuteCommand();
if (reult > 0)
{
return true;
@@ -549,39 +604,48 @@ namespace ZR.Service.mes.wms
private string Resolution_bath(string production_packcode)
{
MaterialUtils materialToos = new MaterialUtils();
- ResultionPackageCodeDto resultionPackage = materialToos.ResolutionPackage(production_packcode);
+ ResultionPackageCodeDto resultionPackage = materialToos.ResolutionPackage(
+ production_packcode
+ );
if (resultionPackage == null)
{
return "时间解析异常";
}
return resultionPackage.ProductionTime;
}
+
///
/// 8.5 PDA端 获取出库单的持久化存储出库计划并计算计划批次当前已出库数量
///
/// 出库单号
///
- public List GetOutOrderPlanAndOutProductionNum(string shipment_num, string partnumber)
+ public List GetOutOrderPlanAndOutProductionNum(
+ string shipment_num,
+ string partnumber
+ )
{
try
{
List result = new();
// 当前工单出库计划
- var exp = Expressionable.Create()
- .And(it => it.FkOutOrderId == shipment_num)
- .AndIF(!string.IsNullOrEmpty(partnumber), it => it.MaterialCode == partnumber)
- .ToExpression();
- List wmOutOrderPlan = Context.Queryable()
- .Where(exp)
- .OrderBy(it => it.Outorder)
- .ToList();
+ var exp = Expressionable
+ .Create()
+ .And(it => it.FkOutOrderId == shipment_num)
+ .AndIF(!string.IsNullOrEmpty(partnumber), it => it.MaterialCode == partnumber)
+ .ToExpression();
+ List wmOutOrderPlan = Context
+ .Queryable()
+ .Where(exp)
+ .OrderBy(it => it.Outorder)
+ .ToList();
// 查询每个计划具体出库数据
foreach (WmOutOrderPlan item in wmOutOrderPlan)
{
// 库存记录
- List nowProductionList = Context.Queryable()
- .Where(it => it.PackageCodeClient.Contains(item.Patchcode))
- .ToList();
+ List nowProductionList = Context
+ .Queryable()
+ .Where(it => it.PackageCodeClient.Contains(item.Patchcode))
+ .ToList();
int nowPackageNum = 0;
int nowPartnumberNum = 0;
foreach (WmGoodsNowProduction outItem in nowProductionList)
@@ -590,10 +654,11 @@ namespace ZR.Service.mes.wms
nowPartnumberNum += (int)outItem.GoodsNumAction;
}
// 出库记录
- List outPackageList = Context.Queryable()
- .Where(it => it.PackageCodeClient.Contains(item.Patchcode))
- .Where(it => it.FkOutOrderId == shipment_num)
- .ToList();
+ List outPackageList = Context
+ .Queryable()
+ .Where(it => it.PackageCodeClient.Contains(item.Patchcode))
+ .Where(it => it.FkOutOrderId == shipment_num)
+ .ToList();
int outPackageNum = 0;
int outPartnumberNum = 0;
foreach (WmGoodsOutRecord outItem in outPackageList)
@@ -601,26 +666,30 @@ namespace ZR.Service.mes.wms
outPackageNum += 1;
outPartnumberNum += (int)outItem.GoodsNumAction;
}
- WmMaterial material = Context.Queryable()
- .Where(it => it.Partnumber.Contains(item.MaterialCode))
- .First();
- WmOutPlanAndGoodsOutProductionNumDto newItem = new()
- {
- OutOrder = (int)item.Outorder,
- PackageCode = item.Patchcode,
- Partnumber = item.MaterialCode,
- Description = !string.IsNullOrEmpty(material.Description) ? material.Description : material.ProductName,
- WarehouseCode = item.WarehouseCode,
- RequireNum = (int)item.RequireNum,
- PackageNum = (int)nowPackageNum,
- PartnumberNum = (int)nowPartnumberNum,
- PackagePlanNum = (int)item.PackageNum,
- PartnumberPlanNum = (int)item.PartnumberNum,
- OutPackageNum = outPackageNum,
- OutPartnumberNum = outPartnumberNum,
- IsError = (nowPartnumberNum + outPartnumberNum) != item.PartnumberNum,
- IsOver = outPartnumberNum > item.PartnumberNum
- };
+ WmMaterial material = Context
+ .Queryable()
+ .Where(it => it.Partnumber.Contains(item.MaterialCode))
+ .First();
+ WmOutPlanAndGoodsOutProductionNumDto newItem =
+ new()
+ {
+ OutOrder = (int)item.Outorder,
+ PackageCode = item.Patchcode,
+ Partnumber = item.MaterialCode,
+ Description = !string.IsNullOrEmpty(material.Description)
+ ? material.Description
+ : material.ProductName,
+ WarehouseCode = item.WarehouseCode,
+ RequireNum = (int)item.RequireNum,
+ PackageNum = (int)nowPackageNum,
+ PartnumberNum = (int)nowPartnumberNum,
+ PackagePlanNum = (int)item.PackageNum,
+ PartnumberPlanNum = (int)item.PartnumberNum,
+ OutPackageNum = outPackageNum,
+ OutPartnumberNum = outPartnumberNum,
+ IsError = (nowPartnumberNum + outPartnumberNum) != item.PartnumberNum,
+ IsOver = outPartnumberNum > item.PartnumberNum
+ };
result.Add(newItem);
}
return result;
@@ -637,7 +706,11 @@ namespace ZR.Service.mes.wms
///
///
///
- public string CheckProductionOut(string parnumber, string production_packcode, string shipment_num)
+ public string CheckProductionOut(
+ string parnumber,
+ string production_packcode,
+ string shipment_num
+ )
{
try
{
@@ -647,7 +720,11 @@ namespace ZR.Service.mes.wms
}
// 1.判断工单是否处于已完成状态
- bool isOutOrderCanUse = Context.Queryable().Where(it => it.ShipmentNum == shipment_num).Where(it => it.Type == 1).Any();
+ bool isOutOrderCanUse = Context
+ .Queryable()
+ .Where(it => it.ShipmentNum == shipment_num)
+ .Where(it => it.Type == 1)
+ .Any();
if (!isOutOrderCanUse)
{
return "出库单已完成或已弃用!请检查出库单";
@@ -655,7 +732,9 @@ namespace ZR.Service.mes.wms
MaterialUtils materialToos = new MaterialUtils();
// 2.解析标签编码
- ResultionPackageCodeDto resultionPackage = materialToos.ResolutionPackage(production_packcode);
+ ResultionPackageCodeDto resultionPackage = materialToos.ResolutionPackage(
+ production_packcode
+ );
if (resultionPackage == null)
{
return "标签解析异常!请检查标签";
@@ -667,20 +746,21 @@ namespace ZR.Service.mes.wms
}
// 3.1判断是否已入库
- bool isExistedWarehouse = Context.Queryable().Where(it => it.PackageCodeClient == resultionPackage.PatchCode).Any();
+ bool isExistedWarehouse = Context
+ .Queryable()
+ .Where(it => it.PackageCodeClient == resultionPackage.PatchCode)
+ .Any();
if (!isExistedWarehouse)
{
return "该箱号未入库!请先入库";
}
// 3.2 判断是否是计划中的物料(大概率不执行)
bool flag1 = false;
- List materialOutorders = Context.Queryable()
+ List materialOutorders = Context
+ .Queryable()
.LeftJoin((wmo, wm) => wmo.FkMaterialId == wm.Id)
.Where(wmo => wmo.FkOutorderId == shipment_num)
- .Select((wmo, wm) => new WmMaterial
- {
- Partnumber = wm.Partnumber
- })
+ .Select((wmo, wm) => new WmMaterial { Partnumber = wm.Partnumber })
.ToList();
foreach (WmMaterial materialOption in materialOutorders)
{
@@ -694,7 +774,10 @@ namespace ZR.Service.mes.wms
return "该箱标签物料号不在出库单物料清单内!";
}
// 4. 判断出库单是否启用出库规则
- var shipment = Context.Queryable().Where(it => it.ShipmentNum == shipment_num).First();
+ var shipment = Context
+ .Queryable()
+ .Where(it => it.ShipmentNum == shipment_num)
+ .First();
if (shipment.Status == 0)
{
return "ok";
@@ -728,19 +811,21 @@ namespace ZR.Service.mes.wms
return "此物料在计划中已经全部出库完成,无法继续出库";
}
// 批次号是最早批次
- *//*if (plan_earliest.Id == plan_item.Id)
- {
- return "ok";
- }*//*
- if (plan_earliest.Patchcode == short_path)
- {
- return "ok";
- }
- else
- {
- return "不是此物料最早批次,无法出库";
- }
- }*/
+ */
+ /*if (plan_earliest.Id == plan_item.Id)
+ {
+ return "ok";
+ }*/
+ /*
+ if (plan_earliest.Patchcode == short_path)
+ {
+ return "ok";
+ }
+ else
+ {
+ return "不是此物料最早批次,无法出库";
+ }
+ }*/
// 6 .还差一个 数量超过要出库的箱子
return "此箱标签不可出库,批次号不在出库单计划内!请检查出库单计划!";
}
@@ -748,10 +833,8 @@ namespace ZR.Service.mes.wms
{
return "此箱标签存在异常不可出库!";
}
-
}
-
///
/// 持久化存储
///
@@ -762,11 +845,12 @@ namespace ZR.Service.mes.wms
{
List orderPlans = Generate_outorderplan(shipment_num);
- var x = Context.Storageable(orderPlans)
- .WhereColumns(it => it.FkOutOrderId)
- .WhereColumns(it => it.MaterialCode)
- .WhereColumns(it => it.Patchcode)
- .ToStorage();
+ var x = Context
+ .Storageable(orderPlans)
+ .WhereColumns(it => it.FkOutOrderId)
+ .WhereColumns(it => it.MaterialCode)
+ .WhereColumns(it => it.Patchcode)
+ .ToStorage();
int result = x.AsInsertable.ExecuteCommand(); //执行插入
x.AsUpdateable.ExecuteCommand(); //执行更新
return result;
@@ -779,28 +863,30 @@ namespace ZR.Service.mes.wms
/// 短批次号
/// "ok" 代表通过,其余返回错误提示
///
- public string CheckRuleJudgmentFirstInFirstOut(string shipment_num, string shortPackageCode, string parnumber)
+ public string CheckRuleJudgmentFirstInFirstOut(
+ string shipment_num,
+ string shortPackageCode,
+ string parnumber
+ )
{
// 1.检查是否有记录
- var exp1 = Expressionable.Create()
+ var exp1 = Expressionable
+ .Create()
.And(it => it.FkOutOrderId == shipment_num)
.And(it => it.Patchcode == shortPackageCode)
.ToExpression();
- bool hasRecord = Context.Queryable()
- .Where(exp1)
- .Any();
+ bool hasRecord = Context.Queryable().Where(exp1).Any();
if (!hasRecord)
{
return "此批次号不在出库单计划中!";
}
-
-
// 1.取出出库单计划
- List plans = Context.Queryable()
- .Where(it => it.FkOutOrderId == shipment_num)
- .OrderBy(it => it.Outorder)
- .ToList();
+ List plans = Context
+ .Queryable()
+ .Where(it => it.FkOutOrderId == shipment_num)
+ .OrderBy(it => it.Outorder)
+ .ToList();
foreach (WmOutOrderPlan plan in plans)
{
// 不是同零件号的跳过
@@ -809,14 +895,16 @@ namespace ZR.Service.mes.wms
continue;
}
// 2.此出库单下的批次号的已出库记录
- var exp2 = Expressionable.Create()
- .And(it => it.PackageCodeClient.Contains(plan.Patchcode))
- .And(it => it.Partnumber == plan.MaterialCode)
- .And(it => it.FkOutOrderId == shipment_num)
- .ToExpression();
- List outPackageList = Context.Queryable()
- .Where(exp2)
- .ToList();
+ var exp2 = Expressionable
+ .Create()
+ .And(it => it.PackageCodeClient.Contains(plan.Patchcode))
+ .And(it => it.Partnumber == plan.MaterialCode)
+ .And(it => it.FkOutOrderId == shipment_num)
+ .ToExpression();
+ List outPackageList = Context
+ .Queryable()
+ .Where(exp2)
+ .ToList();
int outPackageNum = 0;
int outPartnumberNum = 0;
foreach (WmGoodsOutRecord outItem in outPackageList)
@@ -828,10 +916,11 @@ namespace ZR.Service.mes.wms
if (plan.Patchcode != shortPackageCode)
{
// 此批次是否还有库存
- bool hasAny = Context.Queryable()
- .Where(it => it.PackageCodeClient.Contains(plan.Patchcode))
- .Where(it => it.Partnumber == plan.MaterialCode)
- .Any();
+ bool hasAny = Context
+ .Queryable()
+ .Where(it => it.PackageCodeClient.Contains(plan.Patchcode))
+ .Where(it => it.Partnumber == plan.MaterialCode)
+ .Any();
// 检查此批次是否出完
if (outPartnumberNum >= plan.RequireNum || !hasAny)
{
@@ -854,11 +943,10 @@ namespace ZR.Service.mes.wms
{
// 出完了
return "此批次已在出库计划中出完! 当前已出库:" + outPartnumberNum + "个零件!";
-
}
}
}
return "经检查,此批次号不在出库单计划中!";
}
}
-}
\ No newline at end of file
+}