123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- using SqlSugar;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using WMS.Info;
- using WMS.Info.Models;
- namespace WMS.Core.APPBLL
- {
- public class CheckBLL : AppCoreBLL
- {
- public ResInfo GetCheckLinesByTray(string trayNo)
- {
- using (var ctx = SysDbCore.GetDbCtx())
- {
- var line = ctx.Queryable<BILL_InventoryReportLine>().Where(c => c.F_trayNo == trayNo).ToList();
- if (line == null || line.Count < 1)
- throw SysExCore.ThrowFailException("未匹配到托盘对应的盘点单号!");
- var lines = ctx.Queryable<BILL_InventoryReportLine>().Where(c => c.F_pNo == line.First().F_pNo).ToList();
- var statistical = new
- {
- checkNo = line.First().F_pNo,
- checkTotal = lines.Count,
- checkedTotal = lines.Where(c => c.F_actualQty > 0).Count(),
- notCheckTotal = lines.Where(c => c.F_actualQty == 0).Count()
- };
- return SysExCore.GetResSucc("查询成功", data: new
- {
- sumEntity = statistical,
- checkList = line
- });
- }
- }
- public ResInfo CheckSubmit(CheckSubmitRequest checkRequest)
- {
- using (var ctx = SysDbCore.GetDbCtx())
- {
- try
- {
- ctx.BeginTran();
- var checks = ctx.Queryable<BILL_InventoryReport, BILL_InventoryReportLine>((inv, line) => new object[] { JoinType.Inner, inv.F_no == line.F_pNo })
- .Where(inv => inv.F_no == checkRequest.CheckNo);
- if (checks.Count() < 1)
- throw SysExCore.ThrowFailException("未匹配到有效的盘点数据!");
- if (checks.Any((inv, line) => inv.F_checkStatus == (int)ECheckStatus.Checkfinish))
- throw SysExCore.ThrowFailException("该盘点单已经完成不能重复盘点!");
- if (checks.Any((inv, line) => line.F_quantity != line.F_actualQty && line.F_actualQty != 0))
- {
- ctx.Updateable<BILL_InventoryReport>().SetColumns(it => new BILL_InventoryReport
- {
- F_checkStatus = (int)ECheckStatus.Checking,
- F_editUserNo = LoginUser.UserNo,
- F_editTime = DateTime.Now
- }).Where(c => c.F_no == checkRequest.CheckNo);
- }
- else
- {
- ctx.Updateable<BILL_InventoryReport>().SetColumns(it => new BILL_InventoryReport
- {
- F_checkStatus = (int)ECheckStatus.Checkfinish,
- F_editUserNo = LoginUser.UserNo,
- F_editTime = DateTime.Now
- }).Where(c => c.F_no == checkRequest.CheckNo).ExecuteCommand();
- }
- foreach (var item in checkRequest.checkLines)
- {
- ctx.Updateable<BILL_InventoryReportLine>().SetColumns(it =>
- new BILL_InventoryReportLine
- {
- F_editTime = DateTime.Now,
- F_addUserNo = LoginUser.UserNo,
- F_actualQty = item.F_actualQty
- });
- var inv = ctx.Queryable<BILL_INVENTORY>().Where(c => c.F_matNo == item.F_matNo && c.F_trayNo == checkRequest.TrayNo).First();
- if (inv.F_quantity != item.F_actualQty)
- {
- ctx.Updateable<BILL_INVENTORY>().SetColumns(it =>
- new BILL_INVENTORY
- {
- F_editTime = DateTime.Now,
- F_addUserNo = LoginUser.UserNo,
- F_quantity = item.F_actualQty
- }).Where(c => c.F_matNo == inv.F_matNo && c.F_trayNo == inv.F_trayNo).ExecuteCommand();
- ctx.Insertable(new BILL_INVENTORYTRANSACTION
- {
- F_addTime = DateTime.Now,
- F_addUserNo = LoginUser.UserNo,
- F_batchNo = inv.F_batchNo,
- F_boxNo = inv.F_boxNo,
- F_matName = inv.F_matName,
- F_matNo = inv.F_matNo,
- F_matType = inv.F_matType,
- F_sourceLockQty = inv.F_lockQty,
- F_targetLockQty = inv.F_lockQty,
- F_memo = inv.F_memo,
- F_projectNo = inv.F_projectNo,
- F_sourceTrayNo = inv.F_trayNo,
- F_targetTrayNo = checkRequest.TrayNo,
- F_warehouseNo = inv.F_warehouseNo,
- F_UID = inv.F_uid,
- F_sourceQuantity = inv.F_quantity,
- F_targetQuantity = item.F_actualQty
- }).ExecuteCommand();
- }
- ctx.Updateable<BASE_LOCATION>().SetColumns(it =>
- new BASE_LOCATION
- {
- F_editTime = DateTime.Now,
- F_addUserNo = LoginUser.UserNo,
- F_status = (int)EWareCellState.Empty,
- F_trayNo = string.Empty,
- F_matHeight = default,
- F_isBonded = false,
- }).Where(c => c.F_trayNo == checkRequest.TrayNo).ExecuteCommand(); ;
- }
- ctx.CommitTran();
- return SysExCore.GetResSucc("盘点成功");
- }
- catch (Exception)
- {
- ctx.RollbackTran();
- throw;
- }
- }
- }
- public ResInfo Entry(ScanCodeRequest reqData)
- {
- using (var ctx = SysDbCore.GetDbCtx())
- {
- try
- {
- if (string.IsNullOrWhiteSpace(reqData?.LocationNo) || string.IsNullOrWhiteSpace(reqData.TrayNo))
- throw SysExCore.ThrowFailException("参数不能为空");
- var inv = ctx.Queryable<BILL_INVENTORY>().Where(c => c.F_trayNo == reqData.TrayNo).ToList();
- if (inv == null)
- throw SysExCore.ThrowFailException("未找到托盘信息,请扫码正确的托盘码");
- ctx.BeginTran();
- var task = new WMS_TASK
- {
- F_addTime = DateTime.Now,
- F_addUserNo = LoginUser.UserNo,
- F_editTime = DateTime.Now,
- F_trayNo = reqData.TrayNo,
- F_posidTo = GetFreePointInfoByType((int)EPointType.RKDFPHWDW).F_no,
- F_priority = (int)EPriority.NotUrgent,
- F_taskStatus = (int)ETaskStatus.NotExecute,
- F_taskType = (int)ETaskComType.InStock,
- F_posidFrom = reqData.LocationNo,
- F_posidcur = reqData.LocationNo,
- F_EquipmentType = (int)EEquipmentType.Convey
- };
- var entryOrder = new BILL_ENTRYORDER
- {
- F_no = SerialNumberProvider.Instance.OrderNumber("wms", "RK"),
- F_addTime = DateTime.Now,
- F_addUserNo = LoginUser.UserNo,
- F_editTime = DateTime.Now,
- F_locationNo = reqData.LocationNo,
- F_orderStatus = (int)EOrderState.New,
- F_totalOrderLines = inv.Count,
- F_orderType = (int)EEntryOrderType.EntryOrderTypeProduct,
- F_trayNo = reqData.TrayNo,
- F_warehouseNo = SysSetCore.GetSysSet().DefaultWarehouseNo
- };
- task.F_orderNo = entryOrder.F_no;
- ctx.Insertable(entryOrder).ExecuteCommand();
- inv.ToList().ForEach(orderLine =>
- {
- task.F_orderType = orderLine.F_matType == (int)EMatType.Mat ? (int)ETaskOrderType.EntryOrderTypeMaterial :
- orderLine.F_matType == (int)EMatType.Product ? (int)ETaskOrderType.EntryOrderTypeProduct : (int)ETaskOrderType.StockOutOrderTypeTray;
- ctx.Insertable(new BILL_ENTRYORDERLINEDETAIL
- {
- F_addTime = DateTime.Now,
- F_addUserNo = LoginUser.UserNo,
- F_quantity = orderLine.F_quantity,
- F_matNo = orderLine.F_matNo,
- F_matName = orderLine.F_matName,
- F_matType = orderLine.F_matType,
- F_boxNo = orderLine.F_boxNo,
- F_trayNo = orderLine.F_trayNo,
- F_pNo = entryOrder.F_no,
- F_batchNo = orderLine.F_batchNo,
- F_UID = orderLine.F_uid
- }).ExecuteCommand();
- });
- ctx.Insertable(task).ExecuteCommand();
- ////更新货位
- //var upd = ctx.Updateable<BASE_LOCATION>().SetColumns(it => new BASE_LOCATION()
- //{
- // F_status = (int)EWareCellState.In,
- // F_editTime = DateTime.Now,
- // F_editUserNo = LoginUser.UserNo,
- // F_trayNo = reqData.TrayNo
- //}).Where(w => w.F_no == task.F_posidTo).ExecuteCommand();
- //if (upd <= 0)
- // throw SysExCore.ThrowFailException("更新货位状态失败,请重试。");
- ctx.CommitTran();
- return SysExCore.GetResSucc("盘点入库任务生成成功");
- }
- catch (Exception ex)
- {
- ctx.RollbackTran();
- throw ex;
- }
- }
- }
- }
- }
|