| | |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>物料编码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="SkuNo" type="text" lay-verify="stock" lang langholder |
| | | placeholder="请输入物料编码" autocomplete="off" class="layui-input"> |
| | | <input id="SkuNo" type="text" lay-verify="stock" lang langholder placeholder="请输入物料编码" |
| | | autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div><div id="" class="layui-form-item layout-input"> |
| | | </div> |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>批次号:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="LotNo2" type="text" lay-verify="stock" lang langholder |
| | | placeholder="请输入批次" autocomplete="off" class="layui-input"> |
| | | <input id="LotNo2" type="text" lay-verify="stock" lang langholder placeholder="请输入批次" |
| | | autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div id="" class="layui-form-item layout-input"> |
| | |
| | | |
| | | |
| | | //箱码回车事件 |
| | | $("#BoxCode").keydown(function (e) { |
| | | if (e.keyCode === 13) { |
| | | // $("#BoxCode").keydown(function (e) { |
| | | // if (e.keyCode === 13) { |
| | | // if ($("#BoxCode").val() == "") { |
| | | // layer.msg('请先扫描箱码', { |
| | | // icon: 2, |
| | | // time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | // }); |
| | | // return |
| | | // } |
| | | // checkBoxInfo() |
| | | // } |
| | | // }); |
| | | |
| | | // 箱码失去焦点时出发 |
| | | $("#BoxCode").blur(function () { |
| | | if ($("#BoxCode").val() == "") { |
| | | layer.msg('请先扫描箱码', { |
| | | icon: 2, |
| | |
| | | return |
| | | } |
| | | checkBoxInfo() |
| | | } |
| | | }); |
| | | }) |
| | | |
| | | //箱回车事件 |
| | | function checkBoxInfo() { |
| | |
| | | |
| | | <!DOCTYPE html> |
| | | <html> |
| | | |
| | | <head> |
| | | <meta charset="UTF-8" /> |
| | | <meta name="viewport" content="user-scalable=0,width=device-width,initial-scale=1.0" /> |
| | |
| | | .layout-bill-info { |
| | | height: 255px; |
| | | } |
| | | |
| | | .layout-tbl-submit { |
| | | margin-top: 10px; |
| | | } |
| | | </style> |
| | | </head> |
| | | |
| | | <body> |
| | | <div id="" class="main-content"> |
| | | <div id="" class="layout-title"> |
| | |
| | | </ul> |
| | | </div> |
| | | <div> |
| | | <button id="click" class="layout-btn" type="button" style="background-color: #999; width: 100%;text-align: center; margin-top: 2px;">连接蓝牙</button> |
| | | <button id="click" class="layout-btn" type="button" |
| | | style="background-color: #999; width: 100%;text-align: center; margin-top: 2px;">连接蓝牙</button> |
| | | </div> |
| | | <div id="zongDiv2" class="layout-bill-info" style="height: 255px;"> |
| | | <form class="layui-form" id="form2" action=""> |
| | |
| | | <div class="layui-form-item layout-input" style="margin-top: 10px;"> |
| | | <label class="layui-form-label">物料名称:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="skuName" type="text" placeholder="" |
| | | autocomplete="off" class="layui-input" > |
| | | <input id="skuName" type="text" placeholder="" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item layout-input" style="margin-top: 10px;"> |
| | | <label class="layui-form-label">批次号:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="lotNo" type="text" placeholder="" |
| | | autocomplete="off" class="layui-input" > |
| | | <input id="lotNo" type="text" placeholder="" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item layout-input" style="margin-top: 10px;"> |
| | | <label class="layui-form-label">生产日期:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="timeFrom" type="date" placeholder="请选择日期" |
| | | autocomplete="off" class="measureDate" style="padding-left: 0px;"> |
| | | <input id="timeFrom" type="date" placeholder="请选择日期" autocomplete="off" class="measureDate" |
| | | style="padding-left: 0px;"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item layout-input" style="margin-top: 10px;"> |
| | | <label class="layui-form-label">有效期:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="timeEnd" type="date" placeholder="请选择日期" |
| | | autocomplete="off" class="measureDate" style="padding-left: 0px;"> |
| | | <input id="timeEnd" type="date" placeholder="请选择日期" autocomplete="off" class="measureDate" |
| | | style="padding-left: 0px;"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item layout-input" style="margin-top: 10px;"> |
| | | <label class="layui-form-label">箱内数量:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="skuNum" type="text" placeholder="" |
| | | autocomplete="off" class="layui-input" > |
| | | <input id="skuNum" type="text" placeholder="" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | if (res.code == 0 && res.data != null) { //成功 |
| | | console.log(res.data); |
| | | dataLists = res.data; |
| | | }else{ |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | |
| | | }); |
| | | |
| | | let data = { |
| | | type: "print", |
| | |
| | | uni.postMessage({ |
| | | data: data, |
| | | }); |
| | | } else { |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | |
| | | }); |
| | | |
| | | |
| | | }); |
| | | }); |
| | | |
| | |
| | | |
| | | </script> |
| | | </body> |
| | | |
| | | </html> |
| | | |
| | | |
| | |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>物料编码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="SkuNo" type="text" lay-verify="stock" lang langholder |
| | | placeholder="请输入物料编码" autocomplete="off" class="layui-input"> |
| | | <input id="SkuNo" type="text" lay-verify="stock" lang langholder placeholder="请输入物料编码" |
| | | autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div><div id="" class="layui-form-item layout-input"> |
| | | </div> |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>批次号:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="LotNo2" type="text" lay-verify="stock" lang langholder |
| | | placeholder="请输入批次" autocomplete="off" class="layui-input"> |
| | | <input id="LotNo2" type="text" lay-verify="stock" lang langholder placeholder="请输入批次" |
| | | autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div id="" class="layui-form-item layout-input"> |
| | |
| | | |
| | | |
| | | //箱码回车事件 |
| | | $("#BoxCode").keydown(function (e) { |
| | | if (e.keyCode === 13) { |
| | | // $("#BoxCode").keydown(function (e) { |
| | | // if (e.keyCode === 13) { |
| | | // if ($("#BoxCode").val() == "") { |
| | | // layer.msg('请先扫描箱码', { |
| | | // icon: 2, |
| | | // time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | // }); |
| | | // return |
| | | // } |
| | | // checkBoxInfo() |
| | | // } |
| | | // }); |
| | | |
| | | |
| | | // 箱码失去焦点时出发 |
| | | $("#BoxCode").blur(function () { |
| | | if ($("#BoxCode").val() == "") { |
| | | layer.msg('请先扫描箱码', { |
| | | icon: 2, |
| | |
| | | return |
| | | } |
| | | checkBoxInfo() |
| | | } |
| | | }); |
| | | }) |
| | | |
| | | |
| | | //箱回车事件 |
| | | function checkBoxInfo() { |
| | |
| | | if (string.IsNullOrWhiteSpace(detailModel.LotNo)) |
| | | { |
| | | string toDayTime = DateTime.Now.ToString("yyyyMM"); |
| | | var maxBoxCodeStr = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && m.BoxCodeStr.Contains("BK") && m.CreateTime.ToString("yyyyMMdd") == DateTime.Now.ToString("yyyyMMdd")).Max(m => m.BoxCodeStr); |
| | | var maxBoxCodeStr = Db.Queryable<BllArrivalNoticeDetail>() |
| | | .Where(m => m.IsDel == "0" && m.BoxCodeStr.Contains("BK") |
| | | && m.CreateTime.ToString("yyyyMM") == DateTime.Now.ToString("yyyyMM")).Max(m => m.BoxCodeStr); |
| | | if(string.IsNullOrWhiteSpace(maxBoxCodeStr)) |
| | | { |
| | | maxBoxCodeStr = "BK" + toDayTime.Substring(2, 4) + "0001"; |
| | |
| | | // } |
| | | //} |
| | | //detailModel.LotNo = maxLotNo; |
| | | var maxBoxCodeStr = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && m.BoxCodeStr.Contains("BK") && m.CreateTime.ToString("yyyyMMdd") == DateTime.Now.ToString("yyyyMMdd")).Max(m => m.BoxCodeStr); |
| | | var maxBoxCodeStr = Db.Queryable<BllArrivalNoticeDetail>() |
| | | .Where(m => m.IsDel == "0" && m.BoxCodeStr.Contains("BK") |
| | | && m.CreateTime.ToString("yyyyMM") == DateTime.Now.ToString("yyyyMM")).Max(m => m.BoxCodeStr); |
| | | if (string.IsNullOrWhiteSpace(maxBoxCodeStr)) |
| | | { |
| | | maxBoxCodeStr = "BK" + toDayTime.Substring(2, 4) + "0001"; |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | // 车间绑定托盘-贴标 |
| | | public void ChejianIn(string palletNo,string boxNo,decimal qty,string areaNo,int userId) |
| | | { |
| | | try |
| | |
| | | var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';"; |
| | | ////添加托盘记录表数据 |
| | | //sqlStr += $"insert into LogPalletTrack values('{palletNo}','{boxNo}','组盘','0',getDate(),{userId},NULL,NULL);"; |
| | | //Db.Ado.ExecuteCommand(sqlStr); |
| | | Db.Ado.ExecuteCommand(sqlStr); |
| | | new OperationASNServer().AddLogOperationAsn("PDA模块", "车间入库", boxNo, "添加", $"添加了托盘码为:{palletNo}、{msgStr}的入库信息", userId); |
| | | |
| | | //提交事务 |
| | |
| | | SkuName = boxInfo.SkuName, |
| | | LotNo = boxInfo.LotNo, |
| | | BoxNoList = new List<string>() { boxNoNew } , |
| | | Date1 = boxInfo.ProductionTime.ToString(), |
| | | Date2 = boxInfo.ExpirationTime.ToString(), |
| | | |
| | | Date1 = boxInfo.ProductionTime == null ? "" : Convert.ToDateTime(boxInfo.ProductionTime).ToString("yyyy-MM-dd"), |
| | | Date2 = boxInfo.ExpirationTime == null ? "" : Convert.ToDateTime(boxInfo.ExpirationTime).ToString("yyyy-MM-dd"), |
| | | }; |
| | | |
| | | #endregion |
| | |
| | | } |
| | | } |
| | | |
| | | //车间pda拣货 |
| | | //车间pda拣货 - 标签 |
| | | public async Task ChejianPick(string palletNo, string boxNo, int userId) |
| | | { |
| | | Db.BeginTran(); |
| | |
| | | } |
| | | if (string.IsNullOrEmpty(boxNo)) |
| | | { |
| | | throw Oops.Bah("追溯条码和拣货数量不能同时输入"); |
| | | throw Oops.Bah("箱码不可为空"); |
| | | } |
| | | |
| | | //箱码明细 |
| | |
| | | boxInfos = await boxInfo.ToListAsync(); |
| | | |
| | | //库存明细 |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == boxInfos.First().SkuNo && m.LotNo == boxInfos.First().LotNo); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>() |
| | | .FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo |
| | | && m.SkuNo == boxInfos.First().SkuNo && m.LotNo == boxInfos.First().LotNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw Oops.Bah("未查询到该托盘分配的库存明细信息!"); |
| | | } |
| | | |
| | | // 验证是否车间线边仓库 |
| | | var areaList = new List<string>() { "B06", "B07", "B09" }; |
| | | if (!areaList.Contains(stockDetail.AreaNo)) |
| | | { |
| | | throw Oops.Bah("托盘不是车间托盘!"); |
| | | } |
| | | |
| | | //库存总表 |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | var stock = await Db.Queryable<DataStock>() |
| | | .FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw Oops.Bah("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | var pickQty = boxInfos.Sum(m => m.Qty); |
| | | |
| | | // 删除箱任务 |
| | | await Db.Deleteable(boxInfos).ExecuteCommandAsync(); |
| | | |
| | | |
| | | //删除或修改库存明细 |
| | |
| | | { |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (num2 <= 0) |
| | | { |
| | |
| | | } |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "车间出库", boxNo, "拣货", $"在PDA上对箱号为:{boxNo}的托盘码为:{palletNo}的拣货操作", userId); |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "车间出库", |
| | | boxNo, "拣货", $"在PDA上对箱号为:{boxNo}的托盘码为:{palletNo}的拣货操作", userId); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (AppFriendlyException e) |
| | |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using Microsoft.Extensions.Options; |
| | | using Model.InterFaceModel; |
| | | using Model.ModelDto; |
| | | using Model.ModelDto.BllAsnDto; |
| | | using Model.ModelDto.DataDto; |
| | | using Model.ModelVm; |
| | |
| | | using Model.ModelVm.SysVm; |
| | | using Newtonsoft.Json; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Security.Claims; |
| | | using Utility; |
| | | using Utility.Tools; |
| | |
| | | _PdaAsnSvc = pdaAsnSvc; |
| | | _userManager = userManager; |
| | | } |
| | | |
| | | |
| | | #region JC34 |
| | | |
| | |
| | | model.userId = int.Parse(UserId); |
| | | var models = _PdaAsnSvc.AddLabels(model); |
| | | |
| | | return Ok(new { code = 0, msg = "箱码生成成功!", data = models }); |
| | | var data = new BoxListInfoDto(); |
| | | data.SkuNo = model.SkuNo; |
| | | data.SkuName = model.SkuName; |
| | | data.LotNo = model.LotNo; |
| | | data.Date1 = model.TimeFrom == null ? "" : Convert.ToDateTime(model.TimeFrom).ToString("yyyy-MM-dd"); |
| | | data.Date2 = model.TimeEnd == null ? "" : Convert.ToDateTime(model.TimeEnd).ToString("yyyy-MM-dd"); |
| | | data.BoxNoList = models.Select(m => m.BoxNo).ToList(); |
| | | |
| | | |
| | | return Ok(new { code = 0, msg = "箱码生成成功!", data = data }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | |
| | | private readonly IPdaAsnServer _pdaAsnServer;// PDA |
| | | private readonly IHttpServer _http; |
| | | |
| | | private string logStr = $@".\log\SAP赋码\Sap下发报文" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | |
| | | public UpApiController(IOptions<ApiUrlConfig> setting, IExportNoticeServer exNoticeSvc, IArrivalNoticeServer arrivalNoticeServer, IStockCheckServer stockCheckSvc, IProcurePlanServer procurePlanSvc, IPdaAsnServer pdaAsnServer, IHttpServer http) |
| | | { |
| | | _config = setting.Value; |
| | |
| | | #endregion |
| | | |
| | | #region JC34 |
| | | |
| | | |
| | | /// <summary> |
| | | /// 物料下发 |
| | | /// </summary> |
| | |
| | | [HttpPost] |
| | | public IActionResult CreateSku(object model) |
| | | { |
| | | |
| | | try |
| | | { |
| | | |
| | | LogFile.SaveLogToFile($"Sap物料主数据:( {model} ),", logStr); |
| | | return Ok(new { result = true, code = "1" ,message = "success" }); |
| | | } |
| | | catch (Exception e) |
| | |
| | | |
| | | try |
| | | { |
| | | LogFile.SaveLogToFile($"Sap客户信息主数据:( {model} ),", logStr); |
| | | return Ok(new { result = true, code = "1", message = "success" }); |
| | | } |
| | | catch (Exception e) |
| | |
| | | |
| | | try |
| | | { |
| | | LogFile.SaveLogToFile($"Sap入库单下发:( {model} ),", logStr); |
| | | return Ok(new { result = true, code = "1", message = "success" }); |
| | | } |
| | | catch (Exception e) |
| | |
| | | |
| | | try |
| | | { |
| | | LogFile.SaveLogToFile($"Sap出库单下发:( {model} ),", logStr); |
| | | return Ok(new { result = true, code = "1", message = "success" }); |
| | | } |
| | | catch (Exception e) |
| | |
| | | { |
| | | // var sd = JsonConvert.SerializeObject(model); |
| | | // var sd2 = JsonConvert.DeserializeObject<BoxPalletBindVm>(sd); |
| | | |
| | | LogFile.SaveLogToFile($"Sap质量状态变更:( {model} ),", logStr); |
| | | return Ok(new { result = true, code = "1", message = "success" }); |
| | | } |
| | | catch (Exception e) |