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);
}
}
}