using HH.Redis.ReisModel; using HH.WMS.BLL; using HH.WMS.BLL.Basic; using HH.WMS.BLL.Common; using HH.WMS.BLL.OutStock; using HH.WMS.Common; using HH.WMS.Entitys; using HH.WMS.Entitys.Basic; using HH.WMS.Entitys.Common; using HH.WMS.WebApi.Areas.Common.Controllers; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace HH.WMS.WebApi.Areas.OutStock.Controllers { public class SowingController : BaseController { #region (PDA)二次分播扫波次 /// /// (PDA)二次分播扫波次 /// /// /// [HttpGet] public OperateResult ScanWave(string waveNo) { return ValidateToken(t => { var waveEntity = BLLCreator.Create>().GetSingleEntity(new { CN_S_WAVE_NO = waveNo }); if (waveEntity == null) { var outMst = BLLCreator.CreateDapper().GetSingleEntity(new { CN_S_OP_NO = waveNo }); if (outMst == null) return OperateResult.Error("未能找到单据:" + waveNo + "的波次信息"); waveEntity = BLLCreator.Create>().GetSingleEntity(new { CN_S_WAVE_NO = outMst.CN_S_WAVE_CODE }); if (waveEntity == null) return OperateResult.Error("未能找到单据:" + waveNo + "的波次信息"); } waveNo = waveEntity.CN_S_WAVE_NO; if (waveEntity.CN_S_STATE.Equals(Constants.Sorting_Stay) || waveEntity.CN_S_STATE.Equals(Constants.Sorting_Being)) return OperateResult.Error("波次下存在未捡完的分拣单!"); if (waveEntity.CN_S_STATE.Equals(Constants.Sorting_Sorted) || waveEntity.CN_S_STATE.Equals(Constants.Wave_Sowing)) { var waveDtlList = BLLCreator.Create>().GetList(new { CN_S_WAVE_NO = waveNo }); //return OperateResult.Succeed(null, waveDtlList.Select(x => x.CN_S_ORDER_NO)); return OperateResult.Succeed(null, new { WaveNo = waveNo, Orders = waveDtlList.Select(x => x.CN_S_ORDER_NO) }); } else { return OperateResult.Error("当前波次已分播完成!"); } }); } #endregion #region 二次分播扫物料 /// /// 二次分播扫物料 /// /// /// /// [HttpGet] public OperateResult SowingItem(string uniqueCode, string waveNo) { return ValidateToken(t => { ScanCodeClass scanCode = BLLCreator.Create().AnalysisCode(uniqueCode); if (scanCode == null) return OperateResult.Error("未找到该条码!"); if (scanCode.Type != "2" && scanCode.Type != "4") { return OperateResult.Error("扫描条码不合法!"); } TN_WM_B_UNIQUE_BARCODEEntity barCodeEntity = new TN_WM_B_UNIQUE_BARCODEEntity(); if (scanCode.Type == "2") { barCodeEntity = scanCode.uniqueCode; } else { var currentItemEntity = scanCode.Item.itemEntity; barCodeEntity.CN_S_ITEM_CODE = currentItemEntity.CN_S_ITEM_CODE; barCodeEntity.CN_S_ITEM_NAME = currentItemEntity.CN_S_ITEM_NAME; barCodeEntity.CN_F_PACKING_QTY = currentItemEntity.CN_F_MIN_PACK_QTY == 0 ? 1 : currentItemEntity.CN_F_MIN_PACK_QTY; } if (scanCode.Type == "4" && barCodeEntity.CN_F_PACKING_QTY < 1) { var itemEntity = BLLCreator.Create().GetItem(barCodeEntity.CN_S_ITEM_CODE); if (itemEntity != null) barCodeEntity.CN_F_PACKING_QTY = itemEntity.CN_F_MIN_PACK_QTY == 0 ? 1 : itemEntity.CN_F_MIN_PACK_QTY; else barCodeEntity.CN_F_PACKING_QTY = 1; } var outMstList = BLLCreator.Create>().GetList(new { CN_S_WAVE_CODE = waveNo }); var outDtlList = BLLCreator.Create>().GetList(new { CN_S_OP_NO = outMstList.Select(x => x.CN_S_OP_NO).ToList() }); outDtlList = outDtlList.FindAll(x => { if (scanCode.Type == "4") { barCodeEntity.CN_S_ITEM_STATE = x.CN_S_ITEM_STATE; barCodeEntity.CN_S_OWNER = outMstList.Find(y => y.CN_S_OP_NO == x.CN_S_OP_NO).CN_S_OWNER; barCodeEntity.CN_S_BATCH_NO = x.CN_S_PRODUCTION_BATCH; } return x.CN_S_ITEM_CODE == barCodeEntity.CN_S_ITEM_CODE && x.CN_S_ITEM_STATE.Equals(barCodeEntity.CN_S_ITEM_STATE) && outMstList.Find(y => y.CN_S_OP_NO == x.CN_S_OP_NO).CN_S_OWNER.Equals(barCodeEntity.CN_S_OWNER) && (string.IsNullOrEmpty(x.CN_S_PRODUCTION_BATCH) || x.CN_S_PRODUCTION_BATCH.Equals(barCodeEntity.CN_S_BATCH_NO)); }); if (!outDtlList.Any()) return OperateResult.Error("未找到该物料匹配的出库单!"); outMstList.ForEach(x => x.OutDtlList = outDtlList.FindAll(y => y.CN_S_OP_NO == x.CN_S_OP_NO)); var orderSortingList = BLLCreator.Create>().GetList(new { CN_S_ORDER_NO = outMstList.Select(x => x.CN_S_OP_NO).ToList(), CN_C_ISPACK = Constants.N }).FindAll(x => { if (scanCode.Type == "4") { barCodeEntity.CN_S_ITEM_STATE = x.CN_S_ITEM_STATE; barCodeEntity.CN_S_OWNER = x.CN_S_OWNER; barCodeEntity.CN_S_BATCH_NO = x.CN_S_PRODUCTION_BATCH; } return x.CN_S_ITEM_CODE == barCodeEntity.CN_S_ITEM_CODE && x.CN_S_ITEM_STATE.Equals(barCodeEntity.CN_S_ITEM_STATE) && x.CN_S_OWNER.Equals(barCodeEntity.CN_S_OWNER) && (string.IsNullOrEmpty(x.CN_S_PRODUCTION_BATCH) || x.CN_S_PRODUCTION_BATCH.Equals(barCodeEntity.CN_S_BATCH_NO)); }); var barCodeQty = barCodeEntity.CN_F_PACKING_QTY; if (orderSortingList.Any()) { foreach (var orderSorting in orderSortingList) { var orderSortingQty = orderSorting.CN_F_QUANTITY; var currentOrderSorting = outMstList.Find(x => x.CN_S_OP_NO.Equals(orderSorting.CN_S_ORDER_NO)); if (currentOrderSorting != null) { if (currentOrderSorting.OutDtlList.Any()) { currentOrderSorting.OutDtlList[0].CN_F_SOWING_QUANTITY += orderSortingQty; } } } } bool largerOut = false; var batchesOutMst = new TN_WM_OUT_MSTEntity(); foreach (var outMst in outMstList) { var qty = outMst.OutDtlList.Sum(x => x.CN_F_QUANTITY) - outMst.OutDtlList.Sum(x => x.CN_F_SOWING_QUANTITY); if (barCodeQty <= qty) { batchesOutMst = outMst; largerOut = false; break; } else { largerOut = true; } } if (largerOut) return OperateResult.Error("包装数量大于出库物料数量!"); if (scanCode.Type == "4") { barCodeEntity.CN_F_QUANTITY = Convert.ToInt32(barCodeEntity.CN_F_PACKING_QTY); barCodeEntity.CN_S_OWNER = batchesOutMst.CN_S_OWNER; barCodeEntity.CN_S_ITEM_STATE = batchesOutMst.OutDtlList[0].CN_S_ITEM_STATE; barCodeEntity.CN_S_BATCH_NO = batchesOutMst.OutDtlList[0].CN_S_PRODUCTION_BATCH; barCodeEntity.CN_S_MEASURE_UNIT = batchesOutMst.OutDtlList[0].CN_S_MEASURE_UNIT; barCodeEntity.CN_S_MODEL = batchesOutMst.OutDtlList[0].CN_S_MODEL; barCodeEntity.CN_S_CODE = ""; } var orderSortingEntity = CreateOrderSorting(barCodeEntity, batchesOutMst.CN_S_OP_NO, t); var result = BLLCreator.Create>().Add(orderSortingEntity); if (!result.Success) return result; var resultData = new { OutNo = orderSortingEntity.CN_S_ORDER_NO, ItemName = orderSortingEntity.CN_S_ITEM_NAME, ItemCode = orderSortingEntity.CN_S_ITEM_CODE, ItemModel = barCodeEntity.CN_S_MODEL, ItemNum = barCodeEntity.CN_F_PACKING_QTY }; return OperateResult.Succeed(null, resultData); }); } #endregion #region 分播关联实体 /// /// 分播关联实体 /// /// /// /// /// private TN_WM_ORDER_SORTING_RELEntity CreateOrderSorting(TN_WM_B_UNIQUE_BARCODEEntity barCodeEntity, string outNo, RedisUserEntity t) { TN_WM_ORDER_SORTING_RELEntity orderSortingEntity = new TN_WM_ORDER_SORTING_RELEntity() { CN_GUID = Guid.NewGuid().ToString(), CN_S_ORDER_NO = outNo, CN_S_ITEM_CODE = barCodeEntity.CN_S_ITEM_CODE, CN_S_ITEM_NAME = barCodeEntity.CN_S_ITEM_NAME, CN_S_ITEM_STATE = barCodeEntity.CN_S_ITEM_STATE, CN_S_PRODUCTION_BATCH = barCodeEntity.CN_S_BATCH_NO, CN_F_QUANTITY = barCodeEntity.CN_F_QUANTITY, CN_F_RECHECK = barCodeEntity.CN_F_QUANTITY, CN_S_OWNER = barCodeEntity.CN_S_OWNER, CN_S_PACKING_CODE = "", CN_S_PACK_CODE = barCodeEntity.CN_S_CODE, CN_S_UNIQUE_CODE = barCodeEntity.CN_S_CODE, CN_S_IN_OP_FROM = "", CN_S_IN_FROM_NO = "", CN_N_IN_ROW_NO = 0, CN_S_MEASURE_UNIT = barCodeEntity.CN_S_MEASURE_UNIT, CN_S_SERIAL_NO = "", CN_S_GROUP = "", CN_S_TURNOVERBOX_CODE = "", CN_S_SORTING_CAR = "", CN_C_ISPACK = Constants.N, CN_S_ISSOWING = Constants.Y, CN_S_CREATOR = t.CN_S_LOGIN, CN_S_CREATOR_BY = t.CN_S_NAME, CN_T_CREATE = DateTime.Now, CN_S_MODIFY = t.CN_S_LOGIN, CN_S_MODIFY_BY = t.CN_S_NAME, CN_T_MODIFY = DateTime.Now }; return orderSortingEntity; } #endregion #region 确认分播 /// /// 确认分播 /// /// /// [HttpGet] public OperateResult ConfirmSowing(string waveNo) { return ValidateToken(t => { return BLLCreator.Create().ConfirmSowing(waveNo); }); } #endregion } }