using HH.Redis.ReisModel; using HH.WMS.BLL.Interface; using HH.WMS.BLL.SysMgr; using HH.WMS.Common; using HH.WMS.DAL; using HH.WMS.DAL.Basic; using HH.WMS.DAL.InStock; using HH.WMS.DAL.OutStock; using HH.WMS.Entitys; using HH.WMS.Entitys.Basic; using HH.WMS.Entitys.Common; using HH.WMS.Entitys.Entitys; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json.Linq; using HH.WMS.Entitys.Algorithm; using HH.WMS.DAL.Algorithm; namespace HH.WMS.BLL.InStock { public class TN_WM_INCREASE_INVENTORYBLL : DapperBaseBLL { #region 新增入库单 /// /// 新增入库单 /// /// 入库单实体 /// /// [HANHE(XDL)] CREATED BY 2018-11-13 public OperateResult AddIncreaseInventory(TN_WM_INCREASE_INVENTORY_MSTEntity Entity, RedisUserEntity redisUserEntity) { TN_WM_LOT_INFOEntity lotInfo = new TN_WM_LOT_INFOEntity(); string oldLotCode = Entity.CN_S_LOT_NO; if (string.IsNullOrEmpty(oldLotCode)) { string postData = "{\"appCode\":\"AutoWMS\",\"ruleName\":\"" + Constants.BatchNo + "\",\"orgId\":\"" + redisUserEntity.CN_S_ORGCODE + "\",\"orgFlag\":\"" + redisUserEntity.CN_S_ORGFLAG + "\"}"; string CN_S_LOT_CODE = WebApiManager.HttpAutoBom_Post("Api/BillRule/GenBillNo", postData); Entity.CN_S_LOT_NO = CN_S_LOT_CODE; lotInfo.CN_GUID = System.Guid.NewGuid().ToString().ToUpper(); lotInfo.CN_S_LOT_CODE = CN_S_LOT_CODE; lotInfo.CN_S_VENDOR_NO = Entity.CN_S_VENDOR_NO; lotInfo.CN_S_CREATOR = Entity.CN_S_CREATOR; lotInfo.CN_S_CREATOR_BY = Entity.CN_S_CREATOR_BY; lotInfo.CN_T_CREATE = DateTime.Now; } else { lotInfo.CN_GUID = System.Guid.NewGuid().ToString().ToUpper(); lotInfo.CN_S_LOT_CODE = oldLotCode; lotInfo.CN_S_VENDOR_NO = Entity.CN_S_VENDOR_NO; lotInfo.CN_S_CREATOR = Entity.CN_S_CREATOR; lotInfo.CN_S_CREATOR_BY = Entity.CN_S_CREATOR_BY; lotInfo.CN_T_CREATE = DateTime.Now; } //子表数据集合 List DTLEntity = Entity.DTLEntity; OperateResult operateResult = UseTransaction(trans => { //新增主表 CreateDAL>().Add(Entity, trans); //新增子表 CreateDAL>().AddRange(DTLEntity, trans); if (lotInfo != null) { CreateDAL>().Add(lotInfo, trans); } }); return operateResult; } #endregion #region 修改入库单 /// /// 修改入库单 /// /// 入库单实体 /// /// [HANHE(XDL)] CREATED BY 2018-11-14 public OperateResult UpdateIncreaseInventory(TN_WM_INCREASE_INVENTORY_MSTEntity entity) { //子表数据集合 List DTLEntity = entity.DTLEntity; OperateResult operateResult = UseTransaction(trans => { //修改主表 CreateDAL>().Update(entity, new { CN_S_OP_NO = entity.CN_S_OP_NO }, trans); //删除子表 CreateDAL>().Delete(new { CN_S_OP_NO = entity.CN_S_OP_NO }, trans); //新增子表 CreateDAL>().AddRange(DTLEntity, trans); }); return operateResult; } #endregion #region 删除入库单 /// /// 删除入库单 /// /// 入库单单号 /// /// [HANHE(XDL)] CREATED BY 2018-11-14 public OperateResult DeleteIncreaseInventory(string opNo) { var IncreaseMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_OP_NO = opNo }); TN_WM_INSPECT_MSTEntity inspectMst = new TN_WM_INSPECT_MSTEntity(); if (!string.IsNullOrEmpty(IncreaseMst.CN_S_OP_NO)) { //非手工的入库单所需要处理的 if (!string.IsNullOrEmpty(IncreaseMst.CN_S_FROM_NO)) { inspectMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_FROM_NO = IncreaseMst.CN_S_FROM_NO }); } } //到货是否需要检验 string ArrivalNeedInspect = GetStrategy(IncreaseMst.CN_S_STOCK_CODE, "ArrivalAutoInspect"); OperateResult operateResult = UseTransaction(trans => { //非手工的入库单所需要处理的 if (!string.IsNullOrEmpty(IncreaseMst.CN_S_FROM_NO)) { if (ArrivalNeedInspect.Equals("Y")) { //更新检验单状态 CreateDAL>().Update(new { CN_S_STATE = Constants.State_BeenCheck }, new { CN_S_INSPECT_NO = inspectMst.CN_S_INSPECT_NO }, trans); //WMS调用OMS删除入库单发送删除指令 OperateResult orresult = new InfOMSRequest().InspectUpdateCheckResultDesc(opNo); if (!orresult.Success) { throw new Exception(orresult.Msg); } } else { //更新到货单状态 CreateDAL>().Update(new { CN_S_STATE = Constants.State_Submit }, new { CN_S_ARRIVAL_NO = IncreaseMst.CN_S_FROM_NO }, trans); // WMS到货单反审核调用OMS接口发送反审指令 List opList = new List(); opList.Add(opNo); OperateResult orresult = new InfOMSRequest().ReArrivalDoOmsConfirm(opList); if (!orresult.Success) { throw new Exception(orresult.Msg); } } } //删除主表 CreateDAL>().Delete(new { CN_S_OP_NO = opNo }, trans); //删除子表 CreateDAL>().Delete(new { CN_S_OP_NO = opNo }, trans); }); return operateResult; } #endregion #region 提交入库单 /// /// 提交入库单 /// /// 审批实体 /// /// [HANHE(XDL)] CREATED BY 2018-11-14 public OperateResult Submit(List entity) { //获取策略:入库是否免审 TN_WM_INCREASE_INVENTORY_MSTEntity inMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_OP_NO = entity[0].CN_S_FROM_NO }); if (inMst == null) { return OperateResult.Error("未获取到提交单据实体!"); } string IncreaseAutoAudit = GetStrategy(inMst.CN_S_STOCK_CODE, "IncreaseAutoAudit"); OperateResult operateResult = new OperateResult(); //入库单免审-自动审核 if (IncreaseAutoAudit == Constants.Y) { operateResult = Audit(entity); } else { operateResult = UseTransaction(trans => { //提交主表 CreateDAL().ExamineMst(entity, Constants.State_Submit, trans); //提交子表 CreateDAL().ExamineDtl(entity, Constants.State_Submit, trans); }); } return operateResult; } #endregion #region 审核入库单 /// /// 审核入库单 /// /// 审批实体 /// /// [HANHE(XDL)] CREATED BY 2018-11-14 public OperateResult Audit(List entity) { string inOpNo = entity[0].CN_S_FROM_NO; bool isNeedAddStockQty = true;//策略控制:入库是否需要影响仓库和库区(到货区)量 List stockQtyList = new List();//影响仓库量表 List stockAreaQtyList = new List();//影响库区量表 List AccStockInNumlist = new List(); //K3对接,外购入库 string isUseK3 = ""; string stockCode = ""; string isUseOms = ""; List K3purchaseReceiptList = new List(); List trayLocationList = new List(); List trayItemMstList = new List(); List trayItemDtlList = new List(); foreach (TN_WM_B_EXAMINEEntity examineEntity in entity) { DataTable dt = CreateDAL().GetIncreaseData(examineEntity.CN_S_FROM_NO); for (int i = 0; i < dt.Rows.Count; i++) { string itemCode = dt.Rows[i]["CN_S_ITEM_CODE"].ToString(); AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(itemCode); if (itemenity == null) { return OperateResult.Error("未获取到物料 " + itemCode + " 的实体!"); } string itemName = dt.Rows[i]["CN_S_ITEM_NAME"].ToString(); string itemState = dt.Rows[i]["CN_S_ITEM_STATE"].ToString(); string lotCode = dt.Rows[i]["CN_S_LOT_NO"].ToString(); string productionBatch = dt.Rows[i]["CN_S_PRODUCTION_BATCH"].ToString(); string owner = dt.Rows[i]["CN_S_OWNER"].ToString(); stockCode = dt.Rows[i]["CN_S_STOCK_CODE"].ToString(); string qty = dt.Rows[i]["CN_F_QUANTITY"].ToString(); DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区 long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds; // 相差毫秒数 #region 拼接仓库量表实体 stockQtyList.Add(new TN_WM_B_STOCK_QTYEntity() { CN_GUID = System.Guid.NewGuid().ToString().ToUpper(), CN_S_OWNER = owner, CN_S_ITEM_CODE = itemCode, CN_S_ITEM_NAME = itemName, CN_S_ITEM_STATE = itemState, CN_S_LOT_NO = lotCode, CN_S_PRODUCTION_BATCH = productionBatch, CN_S_STOCK_CODE = stockCode, CN_F_QUANTITY = Convert.ToDecimal(qty), CN_F_PLANNED_QTY = 0, CN_F_ALLOC_QTY = 0, CN_F_PRELOCK_QTY = 0, CN_S_TIMESTAMP = timeStamp.ToString(), CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO, CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT, CN_S_MODEL = itemenity.CN_S_MODEL }); #endregion #region 拼接库区量表实体 List areaList = CreateDAL().GetSHLocationArea(Constants.ReceivingArea); if (!areaList.Any()) { return OperateResult.Error("未获取到收货区实体,请配置库区<收货区>!"); } stockAreaQtyList.Add(new TN_WM_B_AREA_QTYEntity() { CN_GUID = System.Guid.NewGuid().ToString().ToUpper(), CN_S_OWNER = owner, CN_S_ITEM_CODE = itemCode, CN_S_ITEM_NAME = itemName, CN_S_ITEM_STATE = itemState, CN_S_LOT_NO = lotCode, CN_S_PRODUCTION_BATCH = productionBatch, CN_S_STOCK_CODE = stockCode, CN_S_STOCK_AREA = areaList[0].CN_S_AREA_CODE, CN_F_QUANTITY = Convert.ToDecimal(qty), CN_F_PLANNED_QTY = 0, CN_F_ALLOC_QTY = 0, CN_S_TIMESTAMP = timeStamp.ToString(), CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO, CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT, CN_S_MODEL = itemenity.CN_S_MODEL }); #endregion } #region 拼接缺货信息 List outMst = CreateDAL().GetShortageData(examineEntity.CN_S_FROM_NO); if (outMst.Any()) { List batchesList = new List(); foreach (var _out in outMst) { _out.OutDtlList = BLLCreator.Create>().GetList(new { CN_S_OP_NO = _out.CN_S_OP_NO, CN_C_AUTO_INOUT = false }); batchesList.AddRange(_out.OutDtlList.Select(p => { return new BatchesEntity() { ItemCode = p.CN_S_ITEM_CODE, ItemState = p.CN_S_ITEM_STATE, ItemArrivalLot = p.CN_S_LOT_CODE, ItemProductionLot = p.CN_S_PRODUCTION_BATCH, Owner = _out.CN_S_OWNER, Qty = p.CN_F_QUANTITY, OpNo = _out.CN_S_OP_NO, OutMst = _out, IsFilter = p.CN_C_AUTO_INOUT }; }).ToList()); } //算法策略 List lstStrate = BLLCreator.Create().GetStrateListByAreaOrStock("", "", Constants.Out) .OrderByDescending(a => a.CN_N_PRIORITY).Select(o => o.CN_S_CODE).ToList(); var bResult = stockQtyList.BatchesStockAllocQty(batchesList, lstStrate); } foreach (var item in stockAreaQtyList) { var allocQty = stockQtyList.Where(x => x.CN_S_ITEM_CODE == item.CN_S_ITEM_CODE).ToList(); if (allocQty.Count > 0) { item.CN_F_ALLOC_QTY = allocQty[0].CN_F_ALLOC_QTY; } } #endregion #region 拼接托盘物料、托盘货位表 if (dt.Rows.Count == 0) continue; if (string.IsNullOrEmpty(dt.Rows[0]["CN_S_FROM_NO"].ToString())) continue; DataTable dtDtl = CreateDAL().GetArrivalDtlData(dt.Rows[0]["CN_S_FROM_NO"].ToString()); for (int a = 0; a < dtDtl.Rows.Count; a++) { string putPos = dtDtl.Rows[a]["CN_S_PUT_POSITION"].ToString(); if (string.IsNullOrEmpty(putPos)) continue; string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.VirtualTray + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}"; string trayNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); AutoBomItemEntity itemEntity = CreateDAL().GetItemEntity(dtDtl.Rows[a]["CN_S_ITEM_CODE"].ToString()); if (itemEntity == null) { return OperateResult.Error("物料" + dtDtl.Rows[a]["CN_S_ITEM_CODE"].ToString() + "实体不存在!"); } var stocklocation = CreateDAL().GetLocationModel(putPos); if (stocklocation == null) { return OperateResult.Error("摆放位置" + putPos + "货位实体不存在!"); } #region 拼接托盘物料 string mstGuid = System.Guid.NewGuid().ToString().ToUpper(); trayItemDtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity() { CN_PARENT_GUID = mstGuid, CN_GUID = System.Guid.NewGuid().ToString().ToUpper(), CN_S_LOT_NO = dtDtl.Rows[a]["CN_S_LOT_CODE"].ToString(), CN_S_PRODUCTION_BATCH = dtDtl.Rows[a]["CN_S_PRODUCTION_BATCH"].ToString(), CN_S_SERIAL_NO = dtDtl.Rows[a]["CN_S_SERIAL_NO"].ToString(), CN_S_PACKING_UNIT = "个", CN_F_QUANTITY = decimal.Parse(dtDtl.Rows[a]["CN_F_QUANTITY"].ToString()), CN_S_VENDOR_NO = dtDtl.Rows[a]["CN_S_VENDOR_NO"].ToString(), CN_S_VENDOR_NAME = dtDtl.Rows[a]["CN_S_VENDOR_NAME"].ToString(), CN_F_PURCHASE_PRICE = decimal.Parse(!string.IsNullOrEmpty(dtDtl.Rows[a]["CN_F_PURCHASE_PRICE"].ToString()) ? dtDtl.Rows[a]["CN_F_PURCHASE_PRICE"].ToString() : "0"), CN_F_RETAIL_PRICE = decimal.Parse(!string.IsNullOrEmpty(dtDtl.Rows[a]["CN_F_RETAIL_PRICE"].ToString()) ? dtDtl.Rows[a]["CN_F_RETAIL_PRICE"].ToString() : "0"), CN_T_PRODUCTION = DateTime.Parse(!string.IsNullOrEmpty(dtDtl.Rows[a]["CN_T_PRODUCTION"].ToString()) ? dtDtl.Rows[a]["CN_T_PRODUCTION"].ToString() : "1900-01-01"), CN_T_EXPIRATION = DateTime.Parse(!string.IsNullOrEmpty(dtDtl.Rows[a]["CN_T_EXPIRATION"].ToString()) ? dtDtl.Rows[a]["CN_T_EXPIRATION"].ToString() : "1900-01-01"), CN_S_CREATOR = examineEntity.CN_S_CREATOR, CN_S_CREATOR_BY = examineEntity.CN_S_CREATOR_BY, CN_T_CREATE = DateTime.Now, CN_S_MODIFY = examineEntity.CN_S_CREATOR, CN_S_MODIFY_BY = examineEntity.CN_S_CREATOR_BY, CN_T_MODIFY = DateTime.Now, CN_S_NOTE = "到货单审核-绑定摆放位置-虚拟托盘" }); trayItemMstList.Add(new TN_WM_B_TRAY_ITEM_MSTEntity() { CN_GUID = mstGuid, CN_S_TRAY_CODE = trayNo, CN_S_TRAY_GRID = "1", CN_S_LOT_NO = dtDtl.Rows[a]["CN_S_LOT_CODE"].ToString(), CN_S_OWNER = dtDtl.Rows[a]["CN_S_OWNER"].ToString(), CN_S_ITEM_CODE = dtDtl.Rows[a]["CN_S_ITEM_CODE"].ToString(), CN_S_ITEM_NAME = dtDtl.Rows[a]["CN_S_ITEM_NAME"].ToString(), CN_S_ITEM_STATE = dtDtl.Rows[a]["CN_S_ITEM_STATE"].ToString(), CN_S_PACKING_UNIT = "个", CN_F_QUANTITY = decimal.Parse(dtDtl.Rows[a]["CN_F_QUANTITY"].ToString()), //获取物料的图号、规格型号、计量单位 CN_S_FIGURE_NO = itemEntity == null ? "" : itemEntity.CN_S_FIGURE_NO, CN_S_MODEL = itemEntity == null ? "" : itemEntity.CN_S_MODEL, CN_S_MEASURE_UNIT = itemEntity == null ? "" : itemEntity.CN_S_MEASURE_UNIT }); #endregion #region 托盘货位关联 trayLocationList.Add(new TN_WM_B_TRAY_LOCATIONEntity() { CN_GUID = System.Guid.NewGuid().ToString().ToUpper(), CN_S_TRAY_CODE = trayNo, CN_S_STOCK_CODE = stocklocation.CN_S_STOCK_CODE, CN_S_STOCK_AREA = stocklocation.CN_S_AREA_CODE, CN_S_LOCATION_CODE = dtDtl.Rows[a]["CN_S_PUT_POSITION"].ToString(), CN_T_CREATE = DateTime.Now }); #endregion } #endregion #region 拼接K3对接数据 //获取策略:是否需要与K3对接 isUseK3 = GetStrategy(stockCode, StrategyKey.IsUseK3); //吉鑫祥项目需要反馈K3系统 if (isUseK3.Equals("Y")) { //拼接实体 List returnEntity = new InfK3Request().GetPurchaseReceiptData(examineEntity.CN_S_FROM_NO); if (returnEntity.Any()) { K3purchaseReceiptList.AddRange(returnEntity); } } #endregion #region 拼接OMS对接数据 isUseOms = GetStrategy(stockCode, StrategyKey.IsUseOms); if (isUseOms.Equals("Y")) { OmsAccStockInNumEntity AccStockInNum = new OmsAccStockInNumEntity(); DataTable dtall = CreateDAL().GetOmsInOrderModel(examineEntity.CN_S_FROM_NO); if (dtall.Rows[0]["CN_S_OP_TYPE"].ToString() == "初始化入库") continue; if (dtall.Rows.Count == 0 || dtall.Rows[0]["CN_S_FROM_NO"].ToString() == "")// 手工到货生成入库单 时审核 { DataTable dtin = CreateDAL().GetOmsInModel(examineEntity.CN_S_FROM_NO); if (dt.Rows[0]["CN_S_OP_TYPE"].ToString() == "初始化入库") continue; List InOrderList = new List(); for (int i = 0; i < dtin.Rows.Count; i++) { string postData = "{\"appCode\":\"" + Constants.appOmsCode + "\",\"ruleName\":\"" + Constants.PURCHASE_TICKET_NO + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}"; string opNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); InOrder inorder = new InOrder(); inorder.CN_S_OP_FROM_NO = dtin.Rows[i]["CN_S_FROM_NO"].ToString(); //入库单号 inorder.CN_S_ITEM_CODE = dtin.Rows[i]["CN_S_ITEM_CODE"].ToString(); //物料编码 inorder.CN_S_ITEM_NAME = dtin.Rows[i]["CN_S_ITEM_NAME"].ToString(); //物料名称 inorder.CN_S_STOCKIN_QTY = int.Parse(decimal.Parse(dtin.Rows[i]["CN_F_QUANTITY"].ToString()).ToString("0")); //入库数量 inorder.CN_S_OP_TYPE = dtin.Rows[i]["CN_S_OP_TYPE"].ToString(); //类型 inorder.CN_S_STOCK_CODE = dtin.Rows[i]["CN_S_STOCK_CODE"].ToString(); //入库仓库 inorder.CN_S_VENDOR_NO = dtin.Rows[i]["CN_S_VENDOR_NO"].ToString(); //供应商 inorder.CN_S_VENDOR_SHORTNAME = dtin.Rows[i]["CN_S_VENDOR_NAME"].ToString(); //供应商名称 inorder.CN_S_ORDER_NO = ""; //采购订单号 inorder.CN_N_ROW_NO = 0; //采购订单行号 inorder.CN_F_PRICE = decimal.Parse(string.IsNullOrEmpty(dtin.Rows[i]["CN_F_PRICE"].ToString()) ? "0" : dtin.Rows[i]["CN_F_PRICE"].ToString()); //单价 inorder.CN_F_MONEY_SUM = decimal.Parse(string.IsNullOrEmpty(dtin.Rows[i]["CN_F_MONEY_SUM"].ToString()) ? "0" : dtin.Rows[i]["CN_F_MONEY_SUM"].ToString()); //金额 inorder.CN_S_OP_NO = opNo; //发票初始化编码 inorder.CN_S_FIGURE_NO = dtin.Rows[i]["CN_S_FIGURE_NO"].ToString(); //物料图号 inorder.CN_S_MODEL = dtin.Rows[i]["CN_S_MODEL"].ToString(); //规格型号 inorder.CN_S_DELIVERY_NO = dtin.Rows[i]["CN_S_DELIVERY_NOTE"].ToString(); inorder.CN_S_MEASURE_UNIT = dtin.Rows[i]["CN_S_MEASURE_UNIT"].ToString(); inorder.CN_S_NOTE = dtin.Rows[i]["CN_S_NOTE"].ToString(); InOrderList.Add(inorder); } AccStockInNum.CN_S_OP_NO = dtin.Rows[0]["CN_S_FROM_NO"].ToString(); AccStockInNum.InOrderList = InOrderList; AccStockInNumlist.Add(AccStockInNum); } else { List InOrderList = new List(); for (int i = 0; i < dtall.Rows.Count; i++) { string postData = "{\"appCode\":\"" + Constants.appOmsCode + "\",\"ruleName\":\"" + Constants.PURCHASE_TICKET_NO + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}"; string opNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); InOrder inorder = new InOrder(); inorder.CN_S_OP_FROM_NO = dtall.Rows[i]["CN_S_FROM_NO"].ToString(); //入库单号 inorder.CN_S_ITEM_CODE = dtall.Rows[i]["CN_S_ITEM_CODE"].ToString(); //物料编码 inorder.CN_S_ITEM_NAME = dtall.Rows[i]["CN_S_ITEM_NAME"].ToString(); //物料名称 inorder.CN_S_STOCKIN_QTY = int.Parse(decimal.Parse(dtall.Rows[i]["CN_F_QUANTITY"].ToString()).ToString("0")); //入库数量 inorder.CN_S_OP_TYPE = dtall.Rows[i]["CN_S_OP_TYPE"].ToString(); //类型 inorder.CN_S_STOCK_CODE = dtall.Rows[i]["CN_S_STOCK_CODE"].ToString(); //入库仓库 inorder.CN_S_VENDOR_NO = dtall.Rows[i]["CN_S_VENDOR_NO"].ToString(); //供应商 inorder.CN_S_VENDOR_SHORTNAME = dtall.Rows[i]["CN_S_VENDOR_NAME"].ToString(); //供应商名称 inorder.CN_S_ORDER_NO = dtall.Rows[i]["CN_S_OP_NO"].ToString(); //采购订单号 inorder.CN_N_ROW_NO = int.Parse(dtall.Rows[i]["CN_N_ROW_NO"].ToString()); //采购订单行号 inorder.CN_F_PRICE = decimal.Parse(string.IsNullOrEmpty(dtall.Rows[i]["CN_F_PRICE"].ToString()) ? "0" : dtall.Rows[i]["CN_F_PRICE"].ToString()); //单价 inorder.CN_F_MONEY_SUM = decimal.Parse(string.IsNullOrEmpty(dtall.Rows[i]["CN_F_MONEY_SUM"].ToString()) ? "0" : dtall.Rows[i]["CN_F_MONEY_SUM"].ToString()); //金额 inorder.CN_S_OP_NO = opNo; //发票初始化编码 inorder.CN_S_FIGURE_NO = dtall.Rows[i]["CN_S_FIGURE_NO"].ToString(); //物料图号 inorder.CN_S_MODEL = dtall.Rows[i]["CN_S_MODEL"].ToString(); //规格型号 inorder.CN_S_DELIVERY_NO = dtall.Rows[i]["CN_S_DELIVERY_NOTE"].ToString(); InOrderList.Add(inorder); } AccStockInNum.CN_S_OP_NO = dtall.Rows[0]["CN_S_FROM_NO"].ToString(); AccStockInNum.InOrderList = InOrderList; AccStockInNumlist.Add(AccStockInNum); } } #endregion } OperateResult operateResult = UseTransaction(trans => { #region 调用K3接口 //吉鑫祥项目需要反馈K3系统 if (K3purchaseReceiptList.Any()) { OperateResult re = new InfK3Request().sendK3_Purchase_Receipt(K3purchaseReceiptList); if (!re.Success) { throw new Exception(re.Msg); } } #endregion #region 调用OMS接口 if (isUseOms.Equals("Y") && AccStockInNumlist.Count > 0) { string postOmsData = JsonConvert.SerializeObject(AccStockInNumlist); string resultEntity = WebApiManager.HttpOms_Post("api/PurchaseService/UpdateAccStockInNum", postOmsData); OmsAccStockInNumResponse qir = JsonConvert.DeserializeObject(resultEntity); TN_WMS_REQ_LOGEntity ril = new TN_WMS_REQ_LOGEntity() { CN_GUID = System.Guid.NewGuid().ToString().ToUpper(), CN_S_INTERFACE = "Inspect-DoSubmit", CN_S_INTERFACE_NAME = "WMS调用OMS更新累积入库数接口发送指令", CN_S_REQUEST = postOmsData, CN_S_RESPONSE = resultEntity, CN_T_CREATE = DateTime.Now }; CreateDAL>().Add(ril); if (qir != null) { if (!qir.success) { throw new Exception("更新累积入库数失败!" + qir.errorMes); } } else { throw new Exception("OMS更新累积入库数未调通!" + qir.errorMes); } } #endregion #region 审核入库单主子表 //审核主表 CreateDAL().ExamineMst(entity, Constants.State_Audit, trans); //审核子表 CreateDAL().ExamineDtl(entity, Constants.State_Audit, trans); #endregion #region 影响量表 if (isNeedAddStockQty) { //影响仓库量表 CreateDAL().AddStockQty(stockQtyList, trans); //影响库区量表 CreateDAL().AddAreaQty(stockAreaQtyList, trans); } #endregion #region 新增托盘货位、托盘物料关联 //新增托盘货位关联 CreateDAL>().AddRange(trayLocationList, trans); //新增托盘物料主表 if (trayItemMstList.Any()) { CreateDAL>().AddRange(trayItemMstList, trans); } //新增托盘物料子表 if (trayItemDtlList.Any()) { CreateDAL>().AddRange(trayItemDtlList, trans); } #endregion }); return operateResult; } #endregion #region 反审入库单 /// /// 反审入库单 /// /// 审批实体 /// /// [HANHE(XDL)] CREATED BY 2018-11-14 public OperateResult ReAudit(List entity) { bool isNeedAddStockQty = true;//策略控制:入库是否需要影响仓库和库区(到货区)量 string opNoList = ""; foreach (TN_WM_B_EXAMINEEntity item in entity) { opNoList = opNoList + "'" + item.CN_S_FROM_NO + "',"; } if (!string.IsNullOrEmpty(opNoList)) { opNoList = opNoList.Substring(0, opNoList.Length - 1); } #region 判断物料是否已上架 List areaList = CreateDAL().GetSHLocationArea(Constants.ReceivingArea); if (!areaList.Any()) { return OperateResult.Error("未获取到收货区实体,请配置库区<收货区>!"); } var calCancel = true; var itemCode = ""; List areaQtyList = CreateDAL().GetCancelData(opNoList); foreach (var item in areaQtyList) { if (item.CN_S_STOCK_AREA != areaList[0].CN_S_AREA_CODE)//说明物料不在收货区了,物料存在上架,不准取消单据 { itemCode = item.CN_S_ITEM_CODE; calCancel = false; break; } } if (!calCancel) { return OperateResult.Error("单据中物料 " + itemCode + " 已不在收货区,操作失败!"); } #endregion List lstTrayCode = CreateDAL().GetTrayCodeByIncrease(opNoList); string opTrayCodeList = ""; if (lstTrayCode.Any()) { foreach (TN_WM_B_TRAY_LOCATIONEntity item in lstTrayCode) { opTrayCodeList = opTrayCodeList + "'" + item.CN_S_TRAY_CODE + "',"; } } if (!string.IsNullOrEmpty(opTrayCodeList)) { opTrayCodeList = opTrayCodeList.Substring(0, opTrayCodeList.Length - 1); } TN_WM_INCREASE_INVENTORY_MSTEntity inMstEntity = CreateDAL>().GetSingleEntity(new { CN_S_OP_NO = entity[0].CN_S_FROM_NO }); //获取策略:是否需要与外部对接 string isUseK3 = SysCache.GetStrategyValue(inMstEntity.CN_S_STOCK_CODE, StrategyKey.IsUseK3); string isUseOms = SysCache.GetStrategyValue(inMstEntity.CN_S_STOCK_CODE, StrategyKey.IsUseOms); //吉鑫祥项目需要反馈K3系统 if (isUseK3.Equals("Y")) { } //拼接OMS数据 WmsReAuditToOmsEntity ReAuditToOmsEntity = new WmsReAuditToOmsEntity(); if (isUseOms.Equals("Y")) { foreach (var item in entity) { DataTable dt = CreateDAL().GetOmsInOrderModel(item.CN_S_FROM_NO); if (dt.Rows.Count == 0 || dt.Rows[0]["CN_S_FROM_NO"].ToString() == "") { DataTable dtin = CreateDAL().GetOmsInModel(item.CN_S_FROM_NO); List inorderList = new List(); for (int i = 0; i < dtin.Rows.Count; i++) { InOrderList inorderEntity = new InOrderList() { stockInNo = dtin.Rows[i]["CN_S_FROM_NO"].ToString(), //入库订单号 purchaseOrderCode = "", //采购单 itemCode = dtin.Rows[i]["CN_S_ITEM_CODE"].ToString(), //物料编码 rowNum = 0, //采购单行号 Nums = decimal.Parse(string.IsNullOrEmpty(dtin.Rows[i]["CN_F_QUANTITY"].ToString()) ? "0" : dtin.Rows[i]["CN_F_QUANTITY"].ToString()) //到货数量 }; inorderList.Add(inorderEntity); } ReAuditToOmsEntity.InOrderList = inorderList; } else { List inorderList = new List(); for (int i = 0; i < dt.Rows.Count; i++) { InOrderList inorderEntity = new InOrderList() { stockInNo = dt.Rows[i]["CN_S_FROM_NO"].ToString(), //入库订单号 purchaseOrderCode = dt.Rows[i]["CN_S_OP_NO"].ToString(), //采购单 itemCode = dt.Rows[i]["CN_S_ITEM_CODE"].ToString(), //物料编码 rowNum = int.Parse(string.IsNullOrEmpty(dt.Rows[i]["CN_N_FROM_ROW_NO"].ToString()) ? "0" : dt.Rows[i]["CN_N_FROM_ROW_NO"].ToString()),//采购单行号 Nums = decimal.Parse(string.IsNullOrEmpty(dt.Rows[i]["CN_F_QUANTITY"].ToString()) ? "0" : dt.Rows[i]["CN_F_QUANTITY"].ToString()) //到货数量 }; inorderList.Add(inorderEntity); } ReAuditToOmsEntity.InOrderList = inorderList; } } } OperateResult operateResult = UseTransaction(trans => { if (isUseOms.Equals("Y")) { string postData = JsonConvert.SerializeObject(ReAuditToOmsEntity.InOrderList); string resultEntity = WebApiManager.HttpOms_Post("api/PurchaseService/UpdateAccStockInNumDesc", postData); if (string.IsNullOrEmpty(resultEntity)) { throw new Exception("UpdateAccStockInNumDesc更新累积入库数接口未调通!"); } QiMenInConfirmResponse qir = JsonConvert.DeserializeObject(resultEntity); TN_WMS_REQ_LOGEntity ril = new TN_WMS_REQ_LOGEntity() { CN_GUID = System.Guid.NewGuid().ToString().ToUpper(), CN_S_INTERFACE = "ReConfirmOms", CN_S_INTERFACE_NAME = "WMS入库确认调用OMS接口发送反审核指令", CN_S_REQUEST = postData, CN_S_RESPONSE = resultEntity, CN_T_CREATE = DateTime.Now }; CreateDAL>().Add(ril); if (qir.flag == "failure") { throw new Exception("更新累积入库数失败!" + qir.message); } } if (isNeedAddStockQty) { //影响仓库量表 CreateDAL().DeleteStockQty(opNoList, trans); //影响库区量表 CreateDAL().DeleteAreaQty(opNoList, trans); } //反审主表 CreateDAL().ExamineMst(entity, Constants.State_ReAudit, trans); //反审子表 CreateDAL().ExamineDtl(entity, Constants.State_ReAudit, trans); // 撤销托盘货位关联数据 CreateDAL().DeleteByTrayCode(opTrayCodeList, trans); // 撤销托盘产品关联主子表数据 CreateDAL().DeleteByFromNo(opTrayCodeList, trans); }); return operateResult; } #endregion #region 取消入库单 /// /// 取消入库单 /// /// 审批实体 /// /// [HANHE(XDL)] CREATED BY 2019-03-11 public OperateResult CancelIncrease(List entity) { string opNoList = ""; foreach (TN_WM_B_EXAMINEEntity item in entity) { opNoList = opNoList + "'" + item.CN_S_FROM_NO + "',"; } if (!string.IsNullOrEmpty(opNoList)) { opNoList = opNoList.Substring(0, opNoList.Length - 1); } #region 判断物料是否已上架 List areaList = CreateDAL().GetSHLocationArea(Constants.ReceivingArea); if (!areaList.Any()) { return OperateResult.Error("未获取到收货区实体,请配置库区<收货区>!"); } var calCancel = true; var itemCode = ""; List areaQtyList = CreateDAL().GetCancelData(opNoList); foreach (var item in areaQtyList) { if (item.CN_S_STOCK_AREA != areaList[0].CN_S_AREA_CODE)//说明物料不在收货区了,物料存在上架,不准取消单据 { itemCode = item.CN_S_ITEM_CODE; calCancel = false; break; } } if (!calCancel) { return OperateResult.Error("单据中物料 " + itemCode + " 已不在收货区,操作失败!"); } #endregion OperateResult operateResult = UseTransaction(trans => { //影响仓库量表 CreateDAL().DeleteStockQty(opNoList, trans); //影响库区量表 CreateDAL().DeleteAreaQty(opNoList, trans); //反审主表 CreateDAL().ExamineMst(entity, Constants.State_Cancel, trans); //反审子表 CreateDAL().ExamineDtl(entity, Constants.State_Cancel, trans); }); return operateResult; } #endregion #region 驳回入库单 /// /// 驳回入库单 /// /// 审批实体 /// 驳回记录实体 /// /// [HANHE(XDL)] CREATED BY 2018-11-14 public OperateResult Reject(List entity, TN_WM_B_REJECTEntity rejectEntity) { OperateResult operateResult = UseTransaction(trans => { //驳回主表 CreateDAL().ExamineMst(entity, Constants.State_Reject, trans); //驳回子表 CreateDAL().ExamineDtl(entity, Constants.State_Reject, trans); //插入驳回记录 CreateDAL>().Add(rejectEntity, trans); }); return operateResult; } #endregion #region 获取入库 /// /// 获取入库 /// /// 条件 /// /// [HANHE(lt)] CREATED BY 2018-11-15 public DataTable GetDataTableInventory(string sqlwhere) { return CreateDAL().GetDataTableInventory(sqlwhere); } #endregion #region 获取入库列表 /// /// 获取入库列表 /// /// 条件 /// /// [HANHE(lt)] CREATED BY 2018-11-22 public DataTable GetList(string sqlwhere) { return CreateDAL().GetList(sqlwhere); } #endregion #region 获取入库订单列表 /// /// 获取入库订单列表 /// /// 条件 /// /// [HANHE(lt)] CREATED BY 2018-11-22 public DataTable GetInMstList(string sqlwhere) { return CreateDAL().GetInMstList(sqlwhere); } /// /// 获取入库订单列表 /// /// 条件 /// /// [HANHE(lt)] CREATED BY 2018-11-22 public DataTable GetInDtlList(string sqlwhere) { return CreateDAL().GetInDtlList(sqlwhere); } public DataTable GetIncreaseList(SearchModel searchModel, out long total, bool isExport) { DataTable dt = CreateDAL().GetIncreaseList(searchModel, out total, isExport); dt.Columns["CN_S_STOCK_CODE"].ReadOnly = false; //foreach (DataRow dr in dt.Rows) //{ // dr["CN_S_STOCK_CODE"] = GetStock().Find(x => x.CN_S_STOCK_CODE.Equals(dr["CN_S_STOCK_CODE"].ToString().Trim())).CN_S_STOCK_NAME; //} return dt; } /// /// 获取采购单 /// /// 条件 /// /// [HANHE(lt)] CREATED BY 2018-11-15 public DataTable GetMstJoinDtl(string sqlwhere) { return CreateDAL().GetMstJoinDtl(sqlwhere); } #endregion #region 根据生产批次获取入库单子表数据 /// /// 根据生产批次获取入库单子表数据 /// /// 生产批次 /// public List GetDtlByBatch(string batchNo) { return CreateDAL>().GetList(new { CN_S_PRODUCTION_BATCH = batchNo }); } #endregion #region 获取未完全打印的入库单记录 /// /// 获取未完全打印的入库单记录 /// /// 仓库号 /// /// [HANHE(DBS)] CREATED BY 2019-02-28 public OperateResult GetWaitPrintOrder(string stockCode) { return CreateDAL().GetWaitPrintOrder(stockCode); } #endregion #region 获取所有待上架(暂存区)的物料(到货入+移库入) /// /// 获取所有待上架(暂存区)的物料(到货入+移库入) /// /// 物料编号 /// /// [HANHE(DBS)] CREATED BY 2019-03-7 public List GetWaitUpShelvesItems(string itemCode) { List areaList = CreateDAL().GetZCLocationArea(Constants.TempStorageArea); if (!areaList.Any()) { // return OperateResult.Error("未获取到暂存区实体,请配置库区<暂存区>!"); return new List(); } return CreateDAL().GetWaitUpShelvesItems(itemCode, areaList); } #endregion #region PDA、外部调用全部接口 #region U8服务调用-调拨单更新物料状态 /// /// U8服务调用-调拨单更新物料状态 /// /// 批次对应物料集合 /// public OperateResult UpdateTransVouchItemState(List transVouchList) { OperateResult operateResult = UseTransaction(trans => { //更新托盘物料关联主子表 CreateDAL().UpdateTrayItemState(transVouchList, trans); //更新仓库、库区量表 CreateDAL().UpdateStockQtyItemState(transVouchList, trans); CreateDAL().UpdateAreaQtyItemState(transVouchList, trans); //更新XML导入表 CreateDAL().UpdateXmlItemState(transVouchList, trans); }); return operateResult; } #endregion #region U8服务调用-新增入库单主子表、仓库库区量表 /// /// U8服务调用-新增入库单主子表、仓库库区量表 /// /// 入库单主子表集合 /// public OperateResult AddU8InData(List mstList) { List stockQtyList = new List();//影响仓库量表 List stockAreaQtyList = new List();//影响库区量表 List areaList = CreateDAL().GetSHLocationArea(Constants.ReceivingArea); if (!areaList.Any()) { return OperateResult.Error("未获取到收货区实体,请配置库区<收货区>!"); } for (int i = 0; i < mstList.Count; i++) { for (int j = 0; j < mstList[i].DTLEntity.Count; j++) { string itemCode = mstList[i].DTLEntity[j].CN_S_ITEM_CODE; string itemName = mstList[i].DTLEntity[j].CN_S_ITEM_NAME; string itemState = mstList[i].DTLEntity[j].CN_S_ITEM_STATE; string lotCode = mstList[i].CN_S_LOT_NO; string productionBatch = mstList[i].DTLEntity[j].CN_S_PRODUCTION_BATCH; string owner = mstList[i].CN_S_OWNER; string stockCode = mstList[i].CN_S_STOCK_CODE; string qty = mstList[i].DTLEntity[j].CN_F_QUANTITY.ToString(); DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区 long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds; // 相差毫秒数 #region 拼接仓库量表实体 stockQtyList.Add(new TN_WM_B_STOCK_QTYEntity() { CN_GUID = System.Guid.NewGuid().ToString().ToUpper(), CN_S_OWNER = owner, CN_S_ITEM_CODE = itemCode, CN_S_ITEM_NAME = itemName, CN_S_ITEM_STATE = itemState, CN_S_LOT_NO = lotCode, CN_S_PRODUCTION_BATCH = productionBatch, CN_S_STOCK_CODE = stockCode, CN_F_QUANTITY = Convert.ToDecimal(qty), CN_F_PLANNED_QTY = 0, CN_F_ALLOC_QTY = 0, CN_F_PRELOCK_QTY = 0, CN_S_TIMESTAMP = timeStamp.ToString() }); #endregion #region 拼接库区量表实体 stockAreaQtyList.Add(new TN_WM_B_AREA_QTYEntity() { CN_GUID = System.Guid.NewGuid().ToString().ToUpper(), CN_S_OWNER = owner, CN_S_ITEM_CODE = itemCode, CN_S_ITEM_NAME = itemName, CN_S_ITEM_STATE = itemState, CN_S_LOT_NO = lotCode, CN_S_PRODUCTION_BATCH = productionBatch, CN_S_STOCK_CODE = stockCode, CN_S_STOCK_AREA = areaList[0].CN_S_AREA_CODE, CN_F_QUANTITY = Convert.ToDecimal(qty), CN_F_PLANNED_QTY = 0, CN_F_ALLOC_QTY = 0, CN_S_TIMESTAMP = timeStamp.ToString() }); #endregion } } OperateResult operateResult = new OperateResult(); operateResult = UseTransaction(trans => { for (int i = 0; i < mstList.Count; i++) { CreateDAL>().Add(mstList[i]); CreateDAL>().AddRange(mstList[i].DTLEntity); } //影响仓库量表 CreateDAL().AddStockQty(stockQtyList, trans); //影响库区量表 CreateDAL().AddAreaQty(stockAreaQtyList, trans); }); return operateResult; } #endregion #region 获取可上架入库单列表(PDA) /// /// 获取可上架入库单列表 /// /// 模糊查询条件:入库单号 /// /// [HANHE(XDL)] CREATED BY 2018-11-13 public List GetIncreaseInventoryList(string CN_S_OP_NO) { return CreateDAL().GetIncreaseInventoryList(CN_S_OP_NO); } #endregion #region 获取可码盘入库单列表(PDA) /// /// 获取可码盘入库单列表 /// /// 模糊查询条件:入库单号 /// /// [HANHE(XDL)] CREATED BY 2018-12-5 public List GetInListWithCodedisc(string CN_S_OP_NO) { return CreateDAL().GetInListWithCodedisc(CN_S_OP_NO); } #endregion #region 根据单号获取主子表信息(PDA) /// /// 根据单号获取主子表信息 /// /// 模糊查询条件:入库单号 /// /// [HANHE(XDL)] CREATED BY 2018-11-19 public TN_WM_INCREASE_INVENTORY_MSTEntity GetIncreaseInventoryMstAndDtl(string CN_S_OP_NO) { TN_WM_INCREASE_INVENTORY_MSTEntity inMstEntity = CreateDAL>().GetSingleEntity(new { CN_S_OP_NO = CN_S_OP_NO }); List inDtlEntity = CreateDAL>().GetList(new { CN_S_OP_NO = CN_S_OP_NO }); foreach (var entity in inDtlEntity) { AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(entity.CN_S_ITEM_CODE); if (itemenity != null) { entity.CN_F_WARRNTY_PARTS = itemenity.CN_F_WARRNTY_PARTS; entity.AuxiliaryUnitList = itemenity.AuxiliaryUnitList; } } inMstEntity.DTLEntity = inDtlEntity; return inMstEntity; } /// /// 根据入库单号获取可码盘明细 /// /// 入库单号 /// public TN_WM_INCREASE_INVENTORY_MSTEntity GetInMstAndDtl_OnTray(string CN_S_OP_NO) { TN_WM_INCREASE_INVENTORY_MSTEntity inMstEntity = CreateDAL>().GetSingleEntity(new { CN_S_OP_NO = CN_S_OP_NO }); List inDtlEntity = CreateDAL().GetDtlList_OnTray(CN_S_OP_NO); foreach (var entity in inDtlEntity) { AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(entity.CN_S_ITEM_CODE); entity.CN_F_WARRNTY_PARTS = itemenity.CN_F_WARRNTY_PARTS; entity.AuxiliaryUnitList = itemenity.AuxiliaryUnitList; } inMstEntity.DTLEntity = inDtlEntity; return inMstEntity; } /// /// 根据入库单号获取可上架明细 /// /// 入库单号 /// public TN_WM_INCREASE_INVENTORY_MSTEntity GetInMstAndDtl_OnShelf(string CN_S_OP_NO) { TN_WM_INCREASE_INVENTORY_MSTEntity inMstEntity = CreateDAL>().GetSingleEntity(new { CN_S_OP_NO = CN_S_OP_NO }); List inDtlEntity = CreateDAL().GetInMstAndDtl_OnShelf(CN_S_OP_NO); foreach (var entity in inDtlEntity) { AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(entity.CN_S_ITEM_CODE); entity.CN_F_WARRNTY_PARTS = itemenity.CN_F_WARRNTY_PARTS; entity.AuxiliaryUnitList = itemenity.AuxiliaryUnitList; } inMstEntity.DTLEntity = inDtlEntity; return inMstEntity; } #endregion #region 根据入库单号获取入库单明细(PDA) /// /// 根据入库单号获取入库单明细 /// /// 入库单号 /// /// [HANHE(XDL)] CREATED BY 2018-11-13 public List GetIncreaseInventoryDetail(string CN_S_OP_NO) { List newList = new List(); newList = CreateDAL().GetIncreaseInventoryDetail(CN_S_OP_NO); foreach (var item in newList) { var itemCode = item.CN_S_ITEM_CODE; AutoBomItemEntity itementity = CreateDAL().GetItemEntity(itemCode);//获取物料判断物料类型 item.CN_S_SIZEPRODUCT = itementity.CN_S_SIZEPRODUCT; List ItemCapacityList = new List(); List itemCapacity = CreateDAL>().GetList(new { CN_S_ITEM_CODE = itemCode }); foreach (var itemC in itemCapacity) { ItemCapacityList.Add(new ItemCapacityEntity { CN_S_ITEM_CODE = itemC.CN_S_ITEM_CODE, CN_S_SPEC = itemC.CN_S_SPEC, CN_S_STORE_UNIT = itemC.CN_S_STORE_UNIT, CN_F_QUANTITY = itemC.CN_F_QUANTITY }); } item.ItemCapacityList = ItemCapacityList; } return newList; } #endregion #region PDA贴码-搬运接口(PDA) /// /// PDA接口-获取待贴码信息 /// /// 打码实体 /// /// [HANHE(XDL)] CREATED BY 2019-03-15 public DataTable GetFixedData(MONGO_PRINT_BARCODE printBarCode) { return CreateDAL().GetFixedData(printBarCode); } /// /// 贴码确认 /// /// 打码实体 /// /// [HANHE(XDL)] CREATED BY 2019-03-15 public OperateResult FixedConfirm(MONGO_PRINT_BARCODE printBarCode) { return CreateDAL().FixedConfirm(printBarCode); } /// /// PDA接口-获取搬运信息 /// /// 打码实体 /// /// [HANHE(XDL)] CREATED BY 2019-03-15 public OperateResult GetTransData(MONGO_PRINT_BARCODE printBarCode) { List areaList = CreateDAL().GetSHLocationArea(Constants.ReceivingArea); if (!areaList.Any()) { return OperateResult.Error("未获取到收货区实体,请配置库区<收货区>!"); } //查询到获去搬运的物料量 List areaQtyList = BLLCreator.Create>().GetList(new { CN_S_ITEM_CODE = printBarCode.CN_S_ITEM_CODE, CN_S_ITEM_STATE = printBarCode.CN_S_ITEM_STATE, CN_S_LOT_NO = printBarCode.CN_S_LOT_NO, CN_S_PRODUCTION_BATCH = printBarCode.CN_S_PRODUCTION_BATCH, CN_S_STOCK_AREA = areaList[0].CN_S_AREA_CODE, }); if (areaQtyList.Count == 0) { return OperateResult.Error("无收货区物料可供搬运!"); } //获取缺货数量,看看是否需要补缺 List dtlList = CreateDAL().GetBuqueOutList(printBarCode); //获取搬运的数据 DataTable dt = CreateDAL().GetTransData(printBarCode); for (int i = 0; i < dt.Rows.Count; i++) { List areaQty = areaQtyList.Where(x => x.CN_S_ITEM_CODE == dt.Rows[i]["CN_S_ITEM_CODE"].ToString()).ToList(); if (areaQty.Count == 0) continue; dt.Rows[i]["CN_F_QUANTITY"] = areaQty[0].CN_F_QUANTITY;//正常需要搬运的数量 if (dtlList.Count > 0) { dt.Rows[i]["CN_F_QUANTITY"] = Convert.ToDecimal(dtlList[0].CN_F_QUANTITY);//缺货数量 dt.Rows[i]["CN_S_PUT_POSITION"] = Constants.State_Shortage;//缺货 } } return OperateResult.Succeed("", dt); } /// /// PDA接口-搬运确认 /// /// /// /// [HANHE(XDL)] CREATED BY 2019-03-15 public OperateResult TransConfirm(JObject json) { string arrivalCode = json.Value("ArrivalCode"); string itemCode = json.Value("ItemCode"); string transLocationCode = json.Value("TransLocationCode");//搬运位置,仅补缺的情况下存值 string quantity = json.Value("Quantity");//数量 //暂存区生成实体 List objZanCunEntityList = new List(); #region 摆放位置校验 DataTable dtPos = CreateDAL().GetPutPosition(arrivalCode, itemCode); if (dtPos.Rows.Count > 0) { string putPos = dtPos.Rows[0]["CN_S_PUT_POSITION"].ToString(); return OperateResult.Error("未找到物料所在的摆放位置!"); } string putPosition = dtPos.Rows[0]["CN_S_PUT_POSITION"].ToString(); AutoBomLocationEntity putPositionEntity = CreateDAL().GetLocationModel(putPosition); if (putPositionEntity == null) { return OperateResult.Error("摆放位置无效!"); } #endregion //库区量表 List lstModel = new List(); //说明搬至暂存区 if (string.IsNullOrEmpty(transLocationCode)) { //搬往暂存位 List areaList = CreateDAL().GetZCLocationArea(Constants.TempStorageArea); if (!areaList.Any()) { return OperateResult.Error("未获取到暂存区实体,请配置库区<暂存区>!"); } List locationList = CreateDAL>().GetList(new { CN_S_AREA_CODE = areaList[0].CN_S_AREA_CODE }); string zancunLocationCode = "CK001_ZANCUN"; if (locationList.Any()) { zancunLocationCode = locationList[0].CN_S_LOCATION_CODE; } //管控维度到货位,需要生成托盘货位关联表 if (areaList[0].CN_S_CONTROL_LEVE == "货位") { //transLocationCode暂存区位置 string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.VirtualTray + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}"; string trayNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); if (string.IsNullOrEmpty(trayNo)) { return OperateResult.Error("虚拟托盘号生成失败!"); } objZanCunEntityList.Add(new TN_WM_B_TRAY_LOCATIONEntity() { CN_GUID = System.Guid.NewGuid().ToString().ToUpper(), CN_S_TRAY_CODE = trayNo, CN_S_STOCK_CODE = areaList[0].CN_S_STOCK_CODE, CN_S_STOCK_AREA = areaList[0].CN_S_AREA_CODE, CN_S_LOCATION_CODE = zancunLocationCode, CN_T_CREATE = DateTime.Now }); } //升暂存货位的库区量表 TN_WM_B_AREA_QTYEntity AreaQtyEntity = new TN_WM_B_AREA_QTYEntity(); AreaQtyEntity.CN_GUID = System.Guid.NewGuid().ToString(); AreaQtyEntity.CN_S_OWNER = dtPos.Rows[0]["CN_S_OWNER"].ToString(); AreaQtyEntity.CN_S_ITEM_CODE = dtPos.Rows[0]["CN_S_ITEM_CODE"].ToString(); AreaQtyEntity.CN_S_ITEM_NAME = dtPos.Rows[0]["CN_S_ITEM_NAME"].ToString(); AreaQtyEntity.CN_S_ITEM_STATE = dtPos.Rows[0]["CN_S_ITEM_STATE"].ToString(); AreaQtyEntity.CN_S_PRODUCTION_BATCH = dtPos.Rows[0]["CN_S_PRODUCTION_BATCH"].ToString(); AreaQtyEntity.CN_S_LOT_NO = dtPos.Rows[0]["CN_S_LOT_CODE"].ToString(); AreaQtyEntity.CN_S_STOCK_AREA = areaList[0].CN_S_AREA_CODE;// LocationEntity.CN_S_AREA_CODE; AreaQtyEntity.CN_S_STOCK_CODE = areaList[0].CN_S_STOCK_CODE; AreaQtyEntity.CN_F_QUANTITY = Convert.ToDecimal(quantity); AreaQtyEntity.CN_F_ALLOC_QTY = 0; AreaQtyEntity.CN_F_PLANNED_QTY = 0; AreaQtyEntity.CN_S_NOTE = ""; AreaQtyEntity.SqlWhere = " Where CN_S_STOCK_CODE='" + putPositionEntity.CN_S_STOCK_CODE + @"' and CN_S_ITEM_CODE='" + dtPos.Rows[0]["CN_S_ITEM_CODE"] + @"' and CN_S_STOCK_AREA='" + areaList[0].CN_S_AREA_CODE + @"' and CN_S_ITEM_STATE='" + dtPos.Rows[0]["CN_S_ITEM_STATE"] + @"' and CN_S_PRODUCTION_BATCH='" + dtPos.Rows[0]["CN_S_PRODUCTION_BATCH"] + @"' and CN_S_LOT_NO='" + dtPos.Rows[0]["CN_S_LOT_CODE"] + "' and CN_S_OWNER='" + dtPos.Rows[0]["CN_S_OWNER"] + "' "; lstModel.Add(AreaQtyEntity); } else { //搬往发货区 List areaList = CreateDAL>().GetList(new { CN_S_AREA_CLASS = Constants.ShippingArea }); if (!areaList.Any()) { return OperateResult.Error("未获取到发货区实体,请配置库区<发货区>!"); } //升发货区的库区量表 TN_WM_B_AREA_QTYEntity AreaQtyEntity = new TN_WM_B_AREA_QTYEntity(); AreaQtyEntity.CN_GUID = System.Guid.NewGuid().ToString(); AreaQtyEntity.CN_S_OWNER = dtPos.Rows[0]["CN_S_OWNER"].ToString(); AreaQtyEntity.CN_S_ITEM_CODE = dtPos.Rows[0]["CN_S_ITEM_CODE"].ToString(); AreaQtyEntity.CN_S_ITEM_NAME = dtPos.Rows[0]["CN_S_ITEM_NAME"].ToString(); AreaQtyEntity.CN_S_ITEM_STATE = dtPos.Rows[0]["CN_S_ITEM_STATE"].ToString(); AreaQtyEntity.CN_S_PRODUCTION_BATCH = dtPos.Rows[0]["CN_S_PRODUCTION_BATCH"].ToString(); AreaQtyEntity.CN_S_LOT_NO = dtPos.Rows[0]["CN_S_LOT_CODE"].ToString(); AreaQtyEntity.CN_S_STOCK_AREA = areaList[0].CN_S_AREA_CODE;// LocationEntity.CN_S_AREA_CODE; AreaQtyEntity.CN_S_STOCK_CODE = areaList[0].CN_S_STOCK_CODE; AreaQtyEntity.CN_F_QUANTITY = Convert.ToDecimal(quantity); AreaQtyEntity.CN_F_ALLOC_QTY = 0; AreaQtyEntity.CN_F_PLANNED_QTY = 0; AreaQtyEntity.CN_S_NOTE = ""; AreaQtyEntity.SqlWhere = " Where CN_S_STOCK_CODE='" + areaList[0].CN_S_STOCK_CODE + @"' and CN_S_ITEM_CODE='" + dtPos.Rows[0]["CN_S_ITEM_CODE"] + @"' and CN_S_STOCK_AREA='" + areaList[0].CN_S_AREA_CODE + @"' and CN_S_ITEM_STATE='" + dtPos.Rows[0]["CN_S_ITEM_STATE"] + @"' and CN_S_PRODUCTION_BATCH='" + dtPos.Rows[0]["CN_S_PRODUCTION_BATCH"] + @"' and CN_S_LOT_NO='" + dtPos.Rows[0]["CN_S_LOT_CODE"] + "' and CN_S_OWNER='" + dtPos.Rows[0]["CN_S_OWNER"] + "' "; lstModel.Add(AreaQtyEntity); } //管控维度到库区,需要降到货区的库区量,升暂存区的库区量,删摆放位置关联 OperateResult operateResult = UseTransaction(trans => { //删到货区托盘货位关联 CreateDAL>().Delete(new { CN_S_LOCATION_CODE = putPosition }, trans); //新增暂存区托盘货位关联 if (objZanCunEntityList.Any()) { CreateDAL>().AddRange(objZanCunEntityList, trans); } if (lstModel.Any()) { CreateDAL().AddAreaQty(lstModel, trans); } //降到货区所在的库区量表 CreateDAL().DeleteAreaQtyByAreaCode(arrivalCode, itemCode, putPositionEntity.CN_S_AREA_CODE, quantity, trans); }); return operateResult; } #endregion #region PDA接口-获取物料所在库区 /// /// PDA接口-获取物料所在库区 /// /// 产品唯一码 /// /// [HANHE(XDL)] CREATED BY 2019-03-19 public OperateResult GetItemStockArea(MONGO_PRINT_BARCODE printBarCode) { OperateResult oresult = new OperateResult(); string CN_S_ITEM_CODE = printBarCode.CN_S_ITEM_CODE; AutoBomItemEntity itementity = CreateDAL().GetItemEntity(CN_S_ITEM_CODE);//获取物料判断物料类型 List list = new List(); List listr = new List(); if (string.IsNullOrEmpty(itementity.CN_S_STORE_TYPE))//判断物料存储类别是否为空 { list = CreateDAL().GetPartitionItem(CN_S_ITEM_CODE, 2); } else { list = CreateDAL().GetPartitionItem(itementity.CN_S_STORE_TYPE, 1); } if (list.Count > 0) { listr = CreateDAL().GetAreaLocationByGuid(list[0].CN_S_AREA_GUID);//获取逻辑分区表数据 } if (listr.Count > 0) { AutoBomStockAreaEntity entityarea = CreateDAL().GetStockAreaEntity(listr[0].CN_S_STOCK_AREA); oresult.Success = true; oresult.Data = entityarea; } return oresult; } #endregion #endregion public DataTable GetIncreaseDetail(string CN_S_OP_NO) { return CreateDAL().GetIncreaseDetail(CN_S_OP_NO); } } }