using System; using System.Collections.Generic; using System.Linq; using HH.WCS.Mobox3.RiDong.dto; using HH.WCS.Mobox3.RiDong.generalMethod; using HH.WCS.Mobox3.RiDong.models; using HH.WCS.Mobox3.RiDong.util; using HH.WCS.Mobox3.RiDong.wms; namespace HH.WCS.Mobox3.RiDong.apiMethod; /// /// 入库流程方法类 /// public static class EnterWareHouseService { /// /// 组盘 /// /// 组盘模型 /// public static ApiModel.SimpleResult SetDisk(SetDiskDto input) { var result = new ApiModel.SimpleResult(); var sqlSugarClient = AdoSqlMethod.QuerySqlSugarClient(); var container = ContainerHelper.GetCntr(input.cntrCode, input.type); // 托盘不可用 if (container.C_ENABLE == 'N') { result.resultCode = -1; result.resultMsg = "当前托盘不可用"; return result; } // 判断该托盘是否存在容器货品货位数据(即判断容器是否在库里) if (AdoSqlMethod.QueryCount(p => p.S_CNTR_CODE == input.cntrCode) > 0) { result.resultCode = -1; result.resultMsg = "当前托盘已存在立库,请勿重复入库"; return result; } try { sqlSugarClient.BeginTran(); List cntrItemDetails = new List(); foreach (var inputSetDiskDetailDto in input.SetDiskDetailDtos) { // 查找该托盘的该规格(物料编码)是否存在数据 var containerGood = AdoSqlMethod .QueryFirst(p => p.S_CNTR_CODE == input.cntrCode && p.S_ITEM_CODE == inputSetDiskDetailDto.specifications); // 存在该条容器货品数据 if (containerGood != null) { containerGood.F_QTY = inputSetDiskDetailDto.number; AdoSqlMethod.UpdateFirstTran(sqlSugarClient, containerGood, p => new { p.F_QTY }); } // 不存在该条容器货品数据 else { // 新增容器货品数据 containerGood = new CntrItemDetail() { S_CNTR_CODE = input.cntrCode, S_ITEM_CODE = inputSetDiskDetailDto.specifications, F_QTY = inputSetDiskDetailDto.number, S_UOM = "台", S_BS_NO = inputSetDiskDetailDto.od, S_BATCH_NO = inputSetDiskDetailDto.lot, S_ITEM_NAME = inputSetDiskDetailDto.itemname, S_ITEM_SPEC = inputSetDiskDetailDto.itemspec, D_PRD_DATE = DateTime.Now.ToString("yyyy-MM-dd"), S_ADDRESS_CODE = input.address, S_EXT_ATTR3 = input.islastbox, S_EXT_ATTR2 = inputSetDiskDetailDto.color, S_EXT_ATTR4 = inputSetDiskDetailDto.customer, S_EXT_ATTR1 = inputSetDiskDetailDto.type, }; cntrItemDetails.Add(containerGood); } } AdoSqlMethod.AddListTran(sqlSugarClient, cntrItemDetails); // 修改容器状态 container.C_ENABLE = 'N'; container.S_TYPE = input.type; container.T_MODIFY = DateTime.Now; container.N_DETAIL_COUNT = cntrItemDetails.Count; AdoSqlMethod.UpdateFirstTran(sqlSugarClient, container, p => new { p.C_ENABLE, p.T_MODIFY, p.N_DETAIL_COUNT, p.S_TYPE }); sqlSugarClient.CommitTran(); result.resultCode = 1; result.resultMsg = "码盘成功"; } catch (Exception e) { sqlSugarClient.RollbackTran(); result.resultCode = -1; result.resultMsg = "码盘失败"; LogHelper.Info(e.Message, "出入库流程记录"); } return result; } /// /// 小车任务完成 /// /// /// public static void CarTaskFinished(Task task) { var db = new SqlHelper().GetInstance(); // 修改容器货品明细数据 var cntrItemDetails = db.Queryable().Where(p => p.S_CNTR_CODE == task.S_CNTR_CODE).ToList(); // 入库 if (task.N_TYPE == 1 || task.N_TYPE == 3) { List cntrs = new List(); cntrs.Add(task.S_CNTR_CODE); // 仓库管理,货位管理 LocationHelper.BindingLoc(task.S_END_LOC, cntrs); if (task.N_TYPE == 1) { // 仓库管理 ContainerHelper.Enable(task.S_CNTR_CODE, task.S_END_LOC); } else if (task.N_TYPE == 3) { var container = AdoSqlMethod.QueryFirst(p => p.S_CODE == task.S_CNTR_CODE); container.C_ENABLE = 'Y'; container.N_LOCK_STATE = 0; AdoSqlMethod.UpdateFirst(container, p => new { p.C_ENABLE, p.T_MODIFY, p.N_LOCK_STATE }); } foreach (var cntrItemDetail in cntrItemDetails) { cntrItemDetail.N_ALR_ENTR = 2; cntrItemDetail.T_INBOUND_TIME = DateTime.Now; } db.Updateable(cntrItemDetails).UpdateColumns(p => new { p.N_ALR_ENTR, p.T_INBOUND_TIME }).ExecuteCommand(); } // 出库 else if (task.N_TYPE == 2 || task.N_TYPE == 4 || task.N_TYPE == 6) { // 货位解锁 LocationHelper.UnBindingLoc(task.S_START_LOC, new List { task.S_CNTR_CODE }); foreach (var cntrItemDetail in cntrItemDetails) { cntrItemDetail.N_ALR_ENTR = 1; } db.Updateable(cntrItemDetails).UpdateColumns(p => new { p.N_ALR_ENTR }).ExecuteCommand(); if (task.S_OP_NAME == "整托出库" && task.N_TYPE != 4) { // 结果确定,根据当前任务号找到对应的配盘明细数据 var tnDistributionCntrDetails = AdoSqlMethod.QueryList(p => p.S_CNTR_CODE == task.S_CNTR_CODE && p.IS_SORTING == "N"); var resultDeterminationDto = new ResultDeterminationDto(); resultDeterminationDto.cntrCode = task.S_CNTR_CODE; resultDeterminationDto.ids = tnDistributionCntrDetails.Select(p => p.S_ID).ToList(); OutWareHouseService.ResultDetermination(resultDeterminationDto); } } // 指引出库 else if (task.N_TYPE == 5) { // 货位解锁 LocationHelper.UnBindingLoc(task.S_START_LOC, new List { task.S_CNTR_CODE }); foreach (var cntrItemDetail in cntrItemDetails) { cntrItemDetail.N_ALR_ENTR = 1; } db.Updateable(cntrItemDetails).UpdateColumns(p => new { p.N_ALR_ENTR }).ExecuteCommand(); var container = AdoSqlMethod.QueryFirst(p => p.S_CODE == task.S_CNTR_CODE); container.C_ENABLE = 'Y'; container.N_DETAIL_COUNT = 0; container.S_TYPE = null; AdoSqlMethod.UpdateFirst(container, p => new { p.C_ENABLE, p.N_DETAIL_COUNT, p.S_TYPE }); OutWareHouseService.ResultDeterminationGuideOut(task); } // 指引出库 else if (task.N_TYPE == 7) { // 货位解锁 LocationHelper.UnBindingLoc(task.S_START_LOC, new List { task.S_CNTR_CODE }); db.Updateable(cntrItemDetails).UpdateColumns(p => new { p.N_ALR_ENTR }).ExecuteCommand(); var container = AdoSqlMethod.QueryFirst(p => p.S_CODE == task.S_CNTR_CODE); container.C_ENABLE = 'Y'; container.N_DETAIL_COUNT = 0; container.S_TYPE = null; AdoSqlMethod.UpdateFirst(container, p => new { p.C_ENABLE, p.N_DETAIL_COUNT, p.S_TYPE }); } } /// /// 货位解锁 /// /// public static void LocationUnlock(Task task) { var queryFirst = AdoSqlMethod.QueryFirst(p => p.S_CODE == task.S_START_LOC); queryFirst.N_LOCK_STATE = 0; queryFirst.S_LOCK_STATE = "无锁"; queryFirst.N_CURRENT_NUM = 0; AdoSqlMethod.UpdateFirst(queryFirst, p => new { p.S_LOCK_STATE, p.N_LOCK_STATE }); } }