using HH.Redis.ReisModel;
using HH.WMS.BLL.Interface;
using HH.WMS.Common;
using HH.WMS.DAL;
using HH.WMS.DAL.Basic;
using HH.WMS.DAL.InStock;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Common;
using HH.WMS.Entitys.Entitys;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WMS.BLL.InStock
{
public class TN_WM_ARRIVALBLL : DapperBaseBLL
{
#region 新增到货单
///
/// 新增到货单
///
/// 到货单实体
///
/// [HANHE(XDL)] CREATED BY 2018-11-15
public OperateResult AddArrival(TN_WM_ARRIVAL_MSTEntity Entity, RedisUserEntity redisUserEntity)
{
TN_WM_LOT_INFOEntity lotInfo = new TN_WM_LOT_INFOEntity();
string oldLotCode = Entity.CN_S_LOT_CODE;
if (string.IsNullOrEmpty(oldLotCode))
{
string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"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_CODE = 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;
}
//子表数据集合
List DTLEntity = Entity.DTLEntity;
OperateResult operateResult = UseTransaction(trans =>
{
//新增主表
CreateDAL>().Add(Entity, trans);
//新增子表
CreateDAL>().AddRange(DTLEntity, trans);
if (string.IsNullOrEmpty(oldLotCode))
{
CreateDAL>().Add(lotInfo, trans);
}
});
return operateResult;
}
#endregion
#region 修改到货单
///
/// 修改到货单
///
/// 到货单实体
///
/// [HANHE(XDL)] CREATED BY 2018-11-15
public OperateResult UpdateArrival(TN_WM_ARRIVAL_MSTEntity entity)
{
//子表数据集合
List DTLEntity = entity.DTLEntity;
OperateResult operateResult = UseTransaction(trans =>
{
//修改主表
CreateDAL>().Update(entity, new { CN_S_ARRIVAL_NO = entity.CN_S_ARRIVAL_NO }, trans);
//删除子表
CreateDAL>().Delete(new { CN_S_ARRIVAL_NO = entity.CN_S_ARRIVAL_NO }, trans);
//新增子表
CreateDAL>().AddRange(DTLEntity, trans);
});
return operateResult;
}
#endregion
#region 删除到货单
///
/// 删除到货单
///
/// 到货单单号
///
/// [HANHE(XDL)] CREATED BY 2018-11-15
public OperateResult DeleteArrival(string arrivalNo)
{
OperateResult operateResult = UseTransaction(trans =>
{
//删除主表
CreateDAL>().Delete(new { CN_S_ARRIVAL_NO = arrivalNo }, trans);
//删除子表
CreateDAL>().Delete(new { CN_S_ARRIVAL_NO = arrivalNo }, trans);
});
return operateResult;
}
#endregion
#region 提交到货单
///
/// 提交到货单
///
/// 审批实体
///
/// [HANHE(XDL)] CREATED BY 2018-11-15
public OperateResult SubmitArrival(List entity, RedisUserEntity userEntity)
{
//获取策略:到货是否免审
TN_WM_ARRIVAL_MSTEntity inMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_ARRIVAL_NO = entity[0].CN_S_FROM_NO });
if (inMst == null)
{
return OperateResult.Error("未获取到提交单据实体!");
}
string ArrivalAutoAudit = GetStrategy(inMst.CN_S_STOCK_CODE, "ArrivalAutoAudit");
OperateResult operateResult = new OperateResult();
//到货单免审-自动审核
if (ArrivalAutoAudit == Constants.Y)
{
operateResult = AuditArrival(entity, userEntity);
}
else
{
operateResult = UseTransaction(trans =>
{
//提交主表
CreateDAL().ExamineMst(entity, Constants.State_Submit, trans);
//提交子表
CreateDAL().ExamineDtl(entity, Constants.State_Submit, trans);
});
}
return operateResult;
}
#endregion
#region 审核到货单
List stockQtyList = new List();//影响仓库量表
List stockAreaQtyList = new List();//影响库区量表
///
/// 审核到货单
///
/// 审批实体
///
/// [HANHE(XDL)] CREATED BY 2018-11-15
public OperateResult AuditArrival(List entity, RedisUserEntity userEntity)
{
string arrivalNo = entity[0].CN_S_FROM_NO;
TN_WM_ARRIVAL_MSTEntity inMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_ARRIVAL_NO = entity[0].CN_S_FROM_NO });
List inDtl = BLLCreator.Create>().GetList(new { CN_S_ARRIVAL_NO = entity[0].CN_S_FROM_NO });
//入库单状态
string inCreaseState = Constants.State_New;
//检验单状态
string inspectState = Constants.State_New;
//到货是否需要检验
string ArrivalNeedInspect = GetStrategy(inMst.CN_S_STOCK_CODE, "ArrivalAutoInspect");
//到货是否自动生成入库单
string ArrivalAutoIncrease = GetStrategy(inMst.CN_S_STOCK_CODE, "ArrivalAutoIncrease");
//到货是否自动入库
string ArrivalAutoInStock = GetStrategy(inMst.CN_S_STOCK_CODE, "ArrivalAutoInStock");
//到货是否启用OMS对接
string isUseOms = GetStrategy(inMst.CN_S_STOCK_CODE, "IsUseOms");
TN_WM_INCREASE_INVENTORY_MSTEntity inMstEntity = new TN_WM_INCREASE_INVENTORY_MSTEntity();
TN_WM_INSPECT_MSTEntity inspectMstEntity = new TN_WM_INSPECT_MSTEntity();
if (ArrivalAutoInStock.Equals(Constants.Y))
{
string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_In + "\",\"orgId\":\"" + userEntity.CN_S_ORGCODE + "\",\"orgFlag\":\"" + userEntity.CN_S_ORGFLAG + "\"}";
string inOpNo = WebApiManager.HttpAutoBom_Post("Api/BillRule/GenBillNo", postData);
//生成入库单号
if (inOpNo == "")
{
return OperateResult.Error("生成入库单号失败!");
}
//生成入库单;审核
inMstEntity = DoCreateIncreateEntity(inOpNo, inMst, inDtl, entity);
inCreaseState = Constants.State_Audit;
inMstEntity.CN_S_STATE = inCreaseState;
foreach (var item in inMstEntity.DTLEntity)
{
item.CN_S_STATE = inCreaseState;
}
//影响仓库库区
OperateResult qtyResult = DoCreateQtyEntity(inMstEntity);
if (!qtyResult.Success) return qtyResult;
}
else
{
if (ArrivalNeedInspect.Equals(Constants.N))
{
//undo生成检验单;已提交 暂不响应生成已提交状态的检验单
//inspectState== Constants.State_BeenCheck;
//undo
//if (ArrivalAutoIncrease.Equals(Constants.Y))
//{
string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_In + "\",\"orgId\":\"" + userEntity.CN_S_ORGCODE + "\",\"orgFlag\":\"" + userEntity.CN_S_ORGFLAG + "\"}";
string inOpNo = WebApiManager.HttpAutoBom_Post("Api/BillRule/GenBillNo", postData);
//生成入库单号
if (inOpNo == "")
{
return OperateResult.Error("生成入库单号失败!");
}
//生成入库单;新建
inMstEntity = DoCreateIncreateEntity(inOpNo, inMst, inDtl, entity);
inMstEntity.CN_S_STATE = inCreaseState;
foreach (var item in inMstEntity.DTLEntity)
{
item.CN_S_STATE = inCreaseState;
}
//}
}
else
{
string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_Inspect + "\",\"orgId\":\"" + userEntity.CN_S_ORGCODE + "\",\"orgFlag\":\"" + userEntity.CN_S_ORGFLAG + "\"}";
string inspectOpNo = WebApiManager.HttpAutoBom_Post("Api/BillRule/GenBillNo", postData);
//生成检验单号
if (inspectOpNo == "")
{
return OperateResult.Error("生成检验单号失败!");
}
//生成检验单;新建
inspectMstEntity = DoCreateInspectEntity(inspectOpNo, inMst, inDtl, entity);
inspectMstEntity.CN_S_STATE = inspectState;
foreach (var item in inspectMstEntity.DTLEntity)
{
item.CN_S_STATE = inspectState;
}
}
}
var opNoList = "";//单号拼接
List opArrivalNoList = new List();
foreach (TN_WM_B_EXAMINEEntity item in entity)
{
opArrivalNoList.Add(item.CN_S_FROM_NO);
opNoList = opNoList + "'" + item.CN_S_FROM_NO + "',";
}
opNoList = opNoList.Substring(1, opNoList.Length - 3);//获取数据类似: 123,'123,'321
OperateResult operateResult = UseTransaction(trans =>
{
//是否启用OMS对接----WMS到货单审核调用OMS入库确认接口发送确认指令
if (isUseOms.Equals("Y"))
{
OperateResult Qir = new InfOMSRequest().ArrivalDoOmsConfirm(opArrivalNoList);
if (!Qir.Success)
{
throw new Exception(Qir.Msg);
}
}
if (!string.IsNullOrEmpty(inMstEntity.CN_S_OP_NO))
{
//新增入库单主表
CreateDAL>().Add(inMstEntity, trans);
//新增入库单子表
CreateDAL>().AddRange(inMstEntity.DTLEntity, trans);
}
if (!string.IsNullOrEmpty(inspectMstEntity.CN_S_INSPECT_NO))
{
//新增检验单主表
CreateDAL>().Add(inspectMstEntity, trans);
//新增检验单子表
CreateDAL>().AddRange(inspectMstEntity.DTLEntity, trans);
}
if (stockQtyList.Any())
{
//影响仓库量表
CreateDAL().AddStockQty(stockQtyList, trans);
}
if (stockAreaQtyList.Any())
{
//影响库区量表
CreateDAL().AddAreaQty(stockAreaQtyList, trans);
}
//审核主表
CreateDAL().ExamineMst(entity, Constants.State_Audit, trans);
//审核子表
CreateDAL().ExamineDtl(entity, Constants.State_Audit, trans);
//更新累积到货数
CreateDAL().UpdateAddupAllot(opNoList, trans);
});
return operateResult;
}
#region 生成仓库库区实体
///
/// 生成仓库库区实体
///
///
private OperateResult DoCreateQtyEntity(TN_WM_INCREASE_INVENTORY_MSTEntity inMstEntity)
{
var inDtlList = inMstEntity.DTLEntity;
foreach (var item in inDtlList)
{
string itemCode = item.CN_S_ITEM_CODE;
AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(itemCode);
if (itemenity == null)
{
return OperateResult.Error("未获取到物料 " + itemCode + " 的实体!");
}
string itemName = item.CN_S_ITEM_NAME;
string itemState = item.CN_S_ITEM_STATE;
string lotCode = inMstEntity.CN_S_LOT_NO;
string productionBatch = item.CN_S_PRODUCTION_BATCH;
string owner = inMstEntity.CN_S_OWNER;
string stockCode = inMstEntity.CN_S_STOCK_CODE;
decimal qty = item.CN_F_QUANTITY;
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 = 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
List areaList = CreateDAL().GetSHLocationArea(Constants.ReceivingArea);
if (!areaList.Any())
{
return OperateResult.Error("未获取到收货区实体,请配置库区<收货区>!");
}
#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(),
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
}
return OperateResult.Succeed("");
}
#endregion
#region 生成入库单实体
///
///生成入库单实体
///
/// 入库单号-新生成
/// 到货单主表
/// 到货单子表
///
public TN_WM_INCREASE_INVENTORY_MSTEntity DoCreateIncreateEntity(string inOpNo, TN_WM_ARRIVAL_MSTEntity inMst, List inDtl, List entity)
{
TN_WM_INCREASE_INVENTORY_MSTEntity inMstEntity = new TN_WM_INCREASE_INVENTORY_MSTEntity();
#region 生成入库单主子表
inMstEntity.CN_GUID = System.Guid.NewGuid().ToString().ToUpper();
inMstEntity.CN_S_OP_NO = inOpNo;
inMstEntity.CN_T_OPERATE = inMst.CN_T_DATE;
inMstEntity.CN_T_MODIFY = DateTime.Now;
inMstEntity.CN_T_CREATE = DateTime.Now;
inMstEntity.CN_S_VENDOR_NO = inMst.CN_S_VENDOR_NO;
inMstEntity.CN_S_VENDOR_NAME = inMst.CN_S_VENDOR_NAME;
inMstEntity.CN_S_STOCK_CODE = inMst.CN_S_STOCK_CODE;
inMstEntity.CN_S_STATE = Constants.State_New;
inMstEntity.CN_S_OWNER = Constants.DefaultOwner;
inMstEntity.CN_S_OPERATOR = inMst.CN_S_OPERATOR;
inMstEntity.CN_S_OP_TYPE = inMst.CN_S_OP_TYPE;
inMstEntity.CN_S_OP_FROM = "到货单";
inMstEntity.CN_S_FROM_NO = inMst.CN_S_ARRIVAL_NO;
inMstEntity.CN_S_MODIFY = entity[0].CN_S_CREATOR;
inMstEntity.CN_S_MODIFY_BY = entity[0].CN_S_CREATOR_BY;
inMstEntity.CN_S_LOT_NO = inMst.CN_S_LOT_CODE;
inMstEntity.CN_S_CREATOR = entity[0].CN_S_CREATOR;
inMstEntity.CN_S_CREATOR_BY = entity[0].CN_S_CREATOR_BY;
inMstEntity.CN_S_NOTE = inMst.CN_S_NOTE;
List dtlEntityList = new List();
foreach (var item in inDtl)
{
TN_WM_INCREASE_INVENTORY_DTLEntity dtlEntity = new TN_WM_INCREASE_INVENTORY_DTLEntity();
dtlEntity.CN_GUID = System.Guid.NewGuid().ToString().ToUpper();
dtlEntity.CN_T_PRODUCTION = item.CN_T_PRODUCTION;
dtlEntity.CN_T_MODIFY = DateTime.Now;
dtlEntity.CN_T_CREATE = DateTime.Now;
dtlEntity.CN_T_EXPIRATION = item.CN_T_EXPIRATION;
dtlEntity.CN_S_STATE = Constants.State_New;
dtlEntity.CN_S_SERIAL_NO = item.CN_S_SERIAL_NO;
dtlEntity.CN_S_PRODUCTION_BATCH = item.CN_S_PRODUCTION_BATCH;
dtlEntity.CN_S_OP_NO = inOpNo;
dtlEntity.CN_S_MSTGUID = inMstEntity.CN_GUID;
dtlEntity.CN_S_SERIAL_NO = item.CN_S_SERIAL_NO;
dtlEntity.CN_S_MODIFY = entity[0].CN_S_CREATOR;
dtlEntity.CN_S_MODIFY_BY = entity[0].CN_S_CREATOR_BY;
dtlEntity.CN_S_MODEL = item.CN_S_MODEL;
dtlEntity.CN_S_MEASURE_UNIT = item.CN_S_MEASURE_UNIT;
dtlEntity.CN_S_ITEM_STATE = item.CN_S_ITEM_STATE;
dtlEntity.CN_S_ITEM_NAME = item.CN_S_ITEM_NAME;
dtlEntity.CN_S_ITEM_CODE = item.CN_S_ITEM_CODE;
dtlEntity.CN_S_FIGURE_NO = item.CN_S_FIGURE_NO;
dtlEntity.CN_S_CREATOR = entity[0].CN_S_CREATOR;
dtlEntity.CN_S_CREATOR_BY = entity[0].CN_S_CREATOR_BY;
dtlEntity.CN_S_ARRIVAL_QTY = item.CN_F_QUANTITY == null ? "" : item.CN_F_QUANTITY.ToString();
dtlEntity.CN_N_ROW_NO = item.CN_N_ROW_NO;
dtlEntity.CN_F_WARRNTY_PARTS = item.CN_F_WARRNTY_PARTS;
dtlEntity.CN_F_UPSHELF_QTY = 0;
dtlEntity.CN_F_QUANTITY = item.CN_F_QUANTITY == null ? 0 : Convert.ToDecimal(item.CN_F_QUANTITY.ToString());
dtlEntity.CN_F_PRINTING_QTY = 0;
dtlEntity.CN_F_PLAN_PRICE = 0;
dtlEntity.CN_F_PLAN_MONEY = 0;
dtlEntity.CN_F_ALLOT_QTY = 0;
dtlEntity.CN_F_ADD_ONTRAY_QTY = 0;
dtlEntity.CN_S_NOTE = item.CN_S_NOTE;
dtlEntity.CN_F_ACTUAL_PRICE = item.CN_F_PURCHASE_PRICE;
dtlEntity.CN_F_ACTUAL_MONEY = (item.CN_F_PURCHASE_PRICE == null ? 0 : item.CN_F_PURCHASE_PRICE) * item.CN_F_QUANTITY == null ? 0 : Convert.ToDecimal(item.CN_F_QUANTITY.ToString());
dtlEntity.CN_C_IS_SCRAP = Constants.N;
dtlEntity.CN_C_IS_BALANCE = Constants.N;
dtlEntityList.Add(dtlEntity);
}
inMstEntity.DTLEntity = dtlEntityList;
return inMstEntity;
#endregion
}
#endregion
#region 生成检验单实体
///
///生成检验单实体
///
/// 检验单号-新生成
/// 到货单主表
/// 到货单子表
///
public TN_WM_INSPECT_MSTEntity DoCreateInspectEntity(string inspectOpNo, TN_WM_ARRIVAL_MSTEntity inMst, List inDtl, List entity)
{
TN_WM_INSPECT_MSTEntity inMstEntity = new TN_WM_INSPECT_MSTEntity();
#region 生成检验单主子表
inMstEntity.CN_S_INSPECT_NO = inspectOpNo;
inMstEntity.CN_S_INSPECT_TYPE = "全检";
inMstEntity.CN_S_OWNER = inMst.CN_S_OWNER;
inMstEntity.CN_T_DATE = null;
// inMstEntity.CN_S_OPERATOR = inMst.CN_S_OPERATOR;
inMstEntity.CN_S_STATE = Constants.State_New;
inMstEntity.CN_S_NOTE = inMst.CN_S_NOTE;
inMstEntity.CN_S_INSPECT_DEPT = "";
inMstEntity.CN_S_OP_TYPE = inMst.CN_S_OP_TYPE;
inMstEntity.CN_S_FROM_NO = inMst.CN_S_ARRIVAL_NO;
inMstEntity.CN_S_CREATOR = entity[0].CN_S_CREATOR;
inMstEntity.CN_S_CREATOR_BY = entity[0].CN_S_CREATOR_BY;
inMstEntity.CN_T_CREATE = DateTime.Now;
inMstEntity.CN_S_MODIFY = entity[0].CN_S_CREATOR;
inMstEntity.CN_S_MODIFY_BY = entity[0].CN_S_CREATOR_BY;
inMstEntity.CN_T_MODIFY = DateTime.Now;
List dtlEntityList = new List();
foreach (var item in inDtl)
{
AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(item.CN_S_ITEM_CODE);
TN_WM_INSPECT_DTLEntity dtlEntity = new TN_WM_INSPECT_DTLEntity();
dtlEntity.CN_S_INSPECT_NO = inspectOpNo;
dtlEntity.CN_N_ROW_NO = item.CN_N_ROW_NO;
dtlEntity.CN_S_SERIAL_NO = item.CN_S_SERIAL_NO;
dtlEntity.CN_S_ITEM_CODE = item.CN_S_ITEM_CODE;
dtlEntity.CN_S_ITEM_NAME = item.CN_S_ITEM_NAME;
dtlEntity.CN_C_IS_WARRANTY_PARTS = itemenity.CN_C_IS_WARRNTY_PARTS;
dtlEntity.CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT;
dtlEntity.CN_F_QUANTITY = item.CN_F_QUANTITY == null ? 0 : Convert.ToDecimal(item.CN_F_QUANTITY.ToString());
dtlEntity.CN_F_QUALIFIED = item.CN_F_QUANTITY == null ? 0 : Convert.ToDecimal(item.CN_F_QUANTITY.ToString());
dtlEntity.CN_F_UNQUALIFIED = 0;
dtlEntity.CN_S_STATE = Constants.State_New;
dtlEntity.CN_S_FROM_NO = item.CN_S_ARRIVAL_NO;
dtlEntity.CN_S_FROM_ROW_NO = item.CN_N_ROW_NO;
dtlEntity.CN_S_NOTE = item.CN_S_NOTE;
dtlEntity.CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO;
dtlEntity.CN_S_MODEL = itemenity.CN_S_MODEL;
dtlEntity.CN_S_CREATOR = entity[0].CN_S_CREATOR;
dtlEntity.CN_S_CREATOR_BY = entity[0].CN_S_CREATOR_BY;
dtlEntity.CN_T_CREATE = DateTime.Now;
dtlEntity.CN_S_MODIFY = entity[0].CN_S_CREATOR;
dtlEntity.CN_S_MODIFY_BY = entity[0].CN_S_CREATOR_BY;
dtlEntity.CN_T_MODIFY = DateTime.Now;
dtlEntityList.Add(dtlEntity);
}
inMstEntity.DTLEntity = dtlEntityList;
return inMstEntity;
#endregion
}
#endregion
#endregion
#region 反审到货单
///
/// 反审到货单
///
/// 审批实体
///
/// [HANHE(XDL)] CREATED BY 2018-11-15
public OperateResult ReAuditArrival(List entity)
{
TN_WM_ARRIVAL_MSTEntity inMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_ARRIVAL_NO = entity[0].CN_S_FROM_NO });
TN_WM_INCREASE_INVENTORY_MSTEntity inMstEntity = CreateDAL>().GetSingleEntity(new { CN_S_FROM_NO = entity[0].CN_S_FROM_NO });
if (inMstEntity != null)
{
if (inMstEntity.CN_S_STATE != Constants.State_New)
{
return OperateResult.Error("反审失败!该到货单已进入入库单流程!");
}
}
TN_WM_INSPECT_MSTEntity inspectMstEntity = CreateDAL>().GetSingleEntity(new { CN_S_FROM_NO = entity[0].CN_S_FROM_NO });
if (inspectMstEntity != null)
{
if (inspectMstEntity.CN_S_STATE != Constants.State_New)
{
return OperateResult.Error("反审失败!该到货单已进入检验单流程!");
}
}
string opNoList = "";
List opArrivalNoList = new List();
foreach (TN_WM_B_EXAMINEEntity item in entity)
{
opNoList = opNoList + "'" + item.CN_S_FROM_NO + "',";
opArrivalNoList.Add(item.CN_S_FROM_NO);
}
if (!string.IsNullOrEmpty(opNoList))
{
opNoList = opNoList.Substring(0, opNoList.Length - 1);
}
//到货是否需要检验
string ArrivalNeedInspect = GetStrategy(inMst.CN_S_STOCK_CODE, "ArrivalAutoInspect");
//到货是否自动生成入库单
string ArrivalAutoIncrease = GetStrategy(inMst.CN_S_STOCK_CODE, "ArrivalAutoIncrease");
//到货是否自动入库
string ArrivalAutoInStock = GetStrategy(inMst.CN_S_STOCK_CODE, "ArrivalAutoInStock");
//到货是否启用OMS对接
string isUseOms = GetStrategy(inMst.CN_S_STOCK_CODE, StrategyKey.IsUseOms);
OperateResult operateResult = UseTransaction(trans =>
{
//是否启用OMS对接----WMS到货单反审核调用OMS接口发送反审指令
if (isUseOms.Equals("Y"))
{
OperateResult Qir = new InfOMSRequest().ReArrivalDoOmsConfirm(opArrivalNoList);
if (!Qir.Success)
{
throw new Exception(Qir.Msg);
}
}
//无需检验的情况下
if (ArrivalNeedInspect == Constants.N)
{
//自动生成入库单 且入库单状态是新建
if (inMstEntity.CN_S_STATE == Constants.State_New) //ArrivalAutoIncrease == Constants.Y &&
{
//条件符合,删除入库单主子表
BLLCreator.Create>().Delete(new { CN_S_OP_NO = inMstEntity.CN_S_OP_NO });
BLLCreator.Create>().Delete(new { CN_S_OP_NO = inMstEntity.CN_S_OP_NO });
}
}
else
{
//自动生成检验单 且检验单状态是新建
if (inspectMstEntity.CN_S_STATE == Constants.State_New) //ArrivalAutoIncrease == Constants.Y &&
{
//条件符合,删除检验单主子表
BLLCreator.Create>().Delete(new { CN_S_INSPECT_NO = inspectMstEntity.CN_S_INSPECT_NO });
BLLCreator.Create>().Delete(new { CN_S_INSPECT_NO = inspectMstEntity.CN_S_INSPECT_NO });
}
}
if (ArrivalAutoInStock == Constants.Y)
{
//影响仓库量表
CreateDAL().DeleteStockQtyArr(opNoList, trans);
//影响库区量表
CreateDAL().DeleteAreaQtyArr(opNoList, trans);
}
//反审主表
CreateDAL().ExamineMst(entity, Constants.State_ReAudit, trans);
//反审子表
CreateDAL().ExamineDtl(entity, Constants.State_ReAudit, trans);
//撤销累积到货数
CreateDAL().DeleteAddupAllot(opNoList, trans);
});
return operateResult;
}
#endregion
#region 驳回到货单
///
/// 驳回到货单
///
/// 审批实体
/// 驳回记录实体
///
/// [HANHE(XDL)] CREATED BY 2018-11-14
public OperateResult RejectArrival(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(XDL)] CREATED BY 2018-11-22
public OperateResult GetFromArrivalList(SearchModel searchModel)
{
return CreateDAL().GetFromArrivalList(searchModel);
}
public List GetFromArrivalDtl(string arrivalNo)
{
return CreateDAL().GetFromArrivalDtl(arrivalNo);
}
#endregion
#region 查询到货单列表
///
/// 查询到货单列表
///
/// 实体
///
/// [HANHE(XDL)] CREATED BY 2018-11-24
public DataTable GetArrivalList(SearchModel searchModel, out long total, bool isExport)
{
DataTable dt = CreateDAL().GetArrivalList(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(XDL)] CREATED BY 2018-11-24
public TN_WM_ARRIVAL_MSTEntity GetArrivalMstAndDtl(string arrivalNo)
{
TN_WM_ARRIVAL_MSTEntity arrivalMstEntity = CreateDAL>().GetSingleEntity(new { CN_S_ARRIVAL_NO = arrivalNo });
List arrivalDtlEntity = CreateDAL>().GetList(new { CN_S_ARRIVAL_NO = arrivalNo });
foreach (var entity in arrivalDtlEntity)
{
AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(entity.CN_S_ITEM_CODE);
entity.CN_F_WARRNTY_PARTS = itemenity.CN_F_WARRNTY_PARTS;
}
arrivalMstEntity.DTLEntity = arrivalDtlEntity;
return arrivalMstEntity;
}
#endregion
#region 查询到货单主表
///
/// 查询到货单主表
///
///
/// [HANHE(lt)] CREATED BY 2018-11-24
public DataTable GetMstList(string sqlwhere)
{
return CreateDAL().GetMstList(sqlwhere);
}
#endregion
#region 查询到货单子表
///
/// 查询到货单子表
///
///
/// [HANHE(lt)] CREATED BY 2018-11-24
public DataTable GetDtlList(string sqlwhere)
{
return CreateDAL().GetDtlList(sqlwhere);
}
#endregion
#region 查询到货单
///
/// 查询到货单子表
///
///
/// [HANHE(lt)] CREATED BY 2018-11-24
public DataTable GetMstJoinDtl(string sqlwhere)
{
return CreateDAL().GetMstJoinDtl(sqlwhere);
}
#endregion
}
}