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 新增到货单
|
/// <summary>
|
/// 新增到货单
|
/// </summary>
|
/// <param name="Entity">到货单实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-15</History>
|
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<TN_WM_ARRIVAL_DTLEntity> DTLEntity = Entity.DTLEntity;
|
|
OperateResult operateResult = UseTransaction(trans =>
|
{
|
//新增主表
|
CreateDAL<DapperDAL<TN_WM_ARRIVAL_MSTEntity>>().Add(Entity, trans);
|
//新增子表
|
CreateDAL<DapperDAL<TN_WM_ARRIVAL_DTLEntity>>().AddRange(DTLEntity, trans);
|
if (string.IsNullOrEmpty(oldLotCode))
|
{
|
CreateDAL<DapperDAL<TN_WM_LOT_INFOEntity>>().Add(lotInfo, trans);
|
}
|
});
|
|
return operateResult;
|
}
|
#endregion
|
|
#region 修改到货单
|
/// <summary>
|
/// 修改到货单
|
/// </summary>
|
/// <param name="Entity">到货单实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-15</History>
|
public OperateResult UpdateArrival(TN_WM_ARRIVAL_MSTEntity entity)
|
{
|
//子表数据集合
|
List<TN_WM_ARRIVAL_DTLEntity> DTLEntity = entity.DTLEntity;
|
|
OperateResult operateResult = UseTransaction(trans =>
|
{
|
//修改主表
|
CreateDAL<DapperDAL<TN_WM_ARRIVAL_MSTEntity>>().Update(entity, new { CN_S_ARRIVAL_NO = entity.CN_S_ARRIVAL_NO }, trans);
|
//删除子表
|
CreateDAL<DapperDAL<TN_WM_ARRIVAL_DTLEntity>>().Delete(new { CN_S_ARRIVAL_NO = entity.CN_S_ARRIVAL_NO }, trans);
|
//新增子表
|
CreateDAL<DapperDAL<TN_WM_ARRIVAL_DTLEntity>>().AddRange(DTLEntity, trans);
|
});
|
|
return operateResult;
|
}
|
#endregion
|
|
#region 删除到货单
|
/// <summary>
|
/// 删除到货单
|
/// </summary>
|
/// <param name="opNo">到货单单号</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-15</History>
|
public OperateResult DeleteArrival(string arrivalNo)
|
{
|
OperateResult operateResult = UseTransaction(trans =>
|
{
|
//删除主表
|
CreateDAL<DapperDAL<TN_WM_ARRIVAL_MSTEntity>>().Delete(new { CN_S_ARRIVAL_NO = arrivalNo }, trans);
|
//删除子表
|
CreateDAL<DapperDAL<TN_WM_ARRIVAL_DTLEntity>>().Delete(new { CN_S_ARRIVAL_NO = arrivalNo }, trans);
|
});
|
|
return operateResult;
|
}
|
#endregion
|
|
#region 提交到货单
|
/// <summary>
|
/// 提交到货单
|
/// </summary>
|
/// <param name="entity">审批实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-15</History>
|
public OperateResult SubmitArrival(List<TN_WM_B_EXAMINEEntity> entity, RedisUserEntity userEntity)
|
{
|
//获取策略:到货是否免审
|
TN_WM_ARRIVAL_MSTEntity inMst = BLLCreator.Create<DapperBLL<TN_WM_ARRIVAL_MSTEntity>>().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<TN_WM_ARRIVALDAL>().ExamineMst(entity, Constants.State_Submit, trans);
|
//提交子表
|
CreateDAL<TN_WM_ARRIVALDAL>().ExamineDtl(entity, Constants.State_Submit, trans);
|
});
|
}
|
return operateResult;
|
}
|
#endregion
|
|
#region 审核到货单
|
|
List<TN_WM_B_STOCK_QTYEntity> stockQtyList = new List<TN_WM_B_STOCK_QTYEntity>();//影响仓库量表
|
List<TN_WM_B_AREA_QTYEntity> stockAreaQtyList = new List<TN_WM_B_AREA_QTYEntity>();//影响库区量表
|
|
/// <summary>
|
/// 审核到货单
|
/// </summary>
|
/// <param name="entity">审批实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-15</History>
|
public OperateResult AuditArrival(List<TN_WM_B_EXAMINEEntity> entity, RedisUserEntity userEntity)
|
{
|
string arrivalNo = entity[0].CN_S_FROM_NO;
|
TN_WM_ARRIVAL_MSTEntity inMst = BLLCreator.Create<DapperBLL<TN_WM_ARRIVAL_MSTEntity>>().GetSingleEntity(new { CN_S_ARRIVAL_NO = entity[0].CN_S_FROM_NO });
|
List<TN_WM_ARRIVAL_DTLEntity> inDtl = BLLCreator.Create<DapperBLL<TN_WM_ARRIVAL_DTLEntity>>().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<string> opArrivalNoList = new List<string>();
|
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<DapperDAL<TN_WM_INCREASE_INVENTORY_MSTEntity>>().Add(inMstEntity, trans);
|
//新增入库单子表
|
CreateDAL<DapperDAL<TN_WM_INCREASE_INVENTORY_DTLEntity>>().AddRange(inMstEntity.DTLEntity, trans);
|
}
|
if (!string.IsNullOrEmpty(inspectMstEntity.CN_S_INSPECT_NO))
|
{
|
//新增检验单主表
|
CreateDAL<DapperDAL<TN_WM_INSPECT_MSTEntity>>().Add(inspectMstEntity, trans);
|
//新增检验单子表
|
CreateDAL<DapperDAL<TN_WM_INSPECT_DTLEntity>>().AddRange(inspectMstEntity.DTLEntity, trans);
|
}
|
if (stockQtyList.Any())
|
{
|
//影响仓库量表
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().AddStockQty(stockQtyList, trans);
|
}
|
if (stockAreaQtyList.Any())
|
{
|
//影响库区量表
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(stockAreaQtyList, trans);
|
}
|
|
//审核主表
|
CreateDAL<TN_WM_ARRIVALDAL>().ExamineMst(entity, Constants.State_Audit, trans);
|
//审核子表
|
CreateDAL<TN_WM_ARRIVALDAL>().ExamineDtl(entity, Constants.State_Audit, trans);
|
|
//更新累积到货数
|
CreateDAL<TN_WM_ARRIVALDAL>().UpdateAddupAllot(opNoList, trans);
|
|
});
|
return operateResult;
|
}
|
|
#region 生成仓库库区实体
|
/// <summary>
|
/// 生成仓库库区实体
|
/// </summary>
|
/// <param name="inMstEntity"></param>
|
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<TN_WMS_ITEMDAL>().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<AutoBomStockAreaEntity> areaList = CreateDAL<TN_AB_B_STOCK_AREADAL>().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 生成入库单实体
|
/// <summary>
|
///生成入库单实体
|
/// </summary>
|
/// <param name="inOpNo">入库单号-新生成</param>
|
/// <param name="inMst">到货单主表</param>
|
/// <param name="inDtl">到货单子表</param>
|
/// <returns></returns>
|
public TN_WM_INCREASE_INVENTORY_MSTEntity DoCreateIncreateEntity(string inOpNo, TN_WM_ARRIVAL_MSTEntity inMst, List<TN_WM_ARRIVAL_DTLEntity> inDtl, List<TN_WM_B_EXAMINEEntity> 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<TN_WM_INCREASE_INVENTORY_DTLEntity> dtlEntityList = new List<TN_WM_INCREASE_INVENTORY_DTLEntity>();
|
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 生成检验单实体
|
/// <summary>
|
///生成检验单实体
|
/// </summary>
|
/// <param name="inOpNo">检验单号-新生成</param>
|
/// <param name="inMst">到货单主表</param>
|
/// <param name="inDtl">到货单子表</param>
|
/// <returns></returns>
|
public TN_WM_INSPECT_MSTEntity DoCreateInspectEntity(string inspectOpNo, TN_WM_ARRIVAL_MSTEntity inMst, List<TN_WM_ARRIVAL_DTLEntity> inDtl, List<TN_WM_B_EXAMINEEntity> 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<TN_WM_INSPECT_DTLEntity> dtlEntityList = new List<TN_WM_INSPECT_DTLEntity>();
|
foreach (var item in inDtl)
|
{
|
AutoBomItemEntity itemenity = CreateDAL<TN_WMS_ITEMDAL>().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 反审到货单
|
/// <summary>
|
/// 反审到货单
|
/// </summary>
|
/// <param name="entity">审批实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-15</History>
|
public OperateResult ReAuditArrival(List<TN_WM_B_EXAMINEEntity> entity)
|
{
|
TN_WM_ARRIVAL_MSTEntity inMst = BLLCreator.Create<DapperBLL<TN_WM_ARRIVAL_MSTEntity>>().GetSingleEntity(new { CN_S_ARRIVAL_NO = entity[0].CN_S_FROM_NO });
|
|
TN_WM_INCREASE_INVENTORY_MSTEntity inMstEntity = CreateDAL<DapperDAL<TN_WM_INCREASE_INVENTORY_MSTEntity>>().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<DapperDAL<TN_WM_INSPECT_MSTEntity>>().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<string> opArrivalNoList = new List<string>();
|
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<DapperBLL<TN_WM_INCREASE_INVENTORY_MSTEntity>>().Delete(new { CN_S_OP_NO = inMstEntity.CN_S_OP_NO });
|
BLLCreator.Create<DapperBLL<TN_WM_INCREASE_INVENTORY_DTLEntity>>().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<DapperBLL<TN_WM_INSPECT_MSTEntity>>().Delete(new { CN_S_INSPECT_NO = inspectMstEntity.CN_S_INSPECT_NO });
|
BLLCreator.Create<DapperBLL<TN_WM_INSPECT_MSTEntity>>().Delete(new { CN_S_INSPECT_NO = inspectMstEntity.CN_S_INSPECT_NO });
|
}
|
}
|
|
if (ArrivalAutoInStock == Constants.Y)
|
{
|
//影响仓库量表
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().DeleteStockQtyArr(opNoList, trans);
|
//影响库区量表
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().DeleteAreaQtyArr(opNoList, trans);
|
}
|
|
//反审主表
|
CreateDAL<TN_WM_ARRIVALDAL>().ExamineMst(entity, Constants.State_ReAudit, trans);
|
//反审子表
|
CreateDAL<TN_WM_ARRIVALDAL>().ExamineDtl(entity, Constants.State_ReAudit, trans);
|
|
//撤销累积到货数
|
CreateDAL<TN_WM_ARRIVALDAL>().DeleteAddupAllot(opNoList, trans);
|
});
|
return operateResult;
|
}
|
#endregion
|
|
#region 驳回到货单
|
/// <summary>
|
/// 驳回到货单
|
/// </summary>
|
/// <param name="entity">审批实体</param>
|
/// <param name="entity">驳回记录实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-14</History>
|
public OperateResult RejectArrival(List<TN_WM_B_EXAMINEEntity> entity, TN_WM_B_REJECTEntity rejectEntity)
|
{
|
OperateResult operateResult = UseTransaction(trans =>
|
{
|
//驳回主表
|
CreateDAL<TN_WM_ARRIVALDAL>().ExamineMst(entity, Constants.State_Reject, trans);
|
//驳回子表
|
CreateDAL<TN_WM_ARRIVALDAL>().ExamineDtl(entity, Constants.State_Reject, trans);
|
//插入驳回记录
|
CreateDAL<DapperDAL<TN_WM_B_REJECTEntity>>().Add(rejectEntity, trans);
|
});
|
return operateResult;
|
}
|
#endregion
|
|
#region 入库单联机新增-选择来源
|
/// <summary>
|
/// 入库单页面,选择来源单据
|
/// </summary>
|
/// <param name="searchModel">实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-22</History>
|
public OperateResult GetFromArrivalList(SearchModel searchModel)
|
{
|
return CreateDAL<TN_WM_ARRIVALDAL>().GetFromArrivalList(searchModel);
|
}
|
|
public List<TN_WM_ARRIVAL_DTLEntity> GetFromArrivalDtl(string arrivalNo)
|
{
|
return CreateDAL<TN_WM_ARRIVALDAL>().GetFromArrivalDtl(arrivalNo);
|
}
|
#endregion
|
|
#region 查询到货单列表
|
/// <summary>
|
/// 查询到货单列表
|
/// </summary>
|
/// <param name="searchModel">实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-24</History>
|
public DataTable GetArrivalList(SearchModel searchModel, out long total, bool isExport)
|
{
|
DataTable dt = CreateDAL<TN_WM_ARRIVALDAL>().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;
|
}
|
|
/// <summary>
|
/// 根据单号获取主子表信息
|
/// </summary>
|
/// <param name="CN_S_OP_NO">模糊查询条件:到货单号</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-24</History>
|
public TN_WM_ARRIVAL_MSTEntity GetArrivalMstAndDtl(string arrivalNo)
|
{
|
TN_WM_ARRIVAL_MSTEntity arrivalMstEntity = CreateDAL<DapperDAL<TN_WM_ARRIVAL_MSTEntity>>().GetSingleEntity(new { CN_S_ARRIVAL_NO = arrivalNo });
|
List<TN_WM_ARRIVAL_DTLEntity> arrivalDtlEntity = CreateDAL<DapperDAL<TN_WM_ARRIVAL_DTLEntity>>().GetList(new { CN_S_ARRIVAL_NO = arrivalNo });
|
|
foreach (var entity in arrivalDtlEntity)
|
{
|
AutoBomItemEntity itemenity = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(entity.CN_S_ITEM_CODE);
|
entity.CN_F_WARRNTY_PARTS = itemenity.CN_F_WARRNTY_PARTS;
|
|
}
|
arrivalMstEntity.DTLEntity = arrivalDtlEntity;
|
return arrivalMstEntity;
|
}
|
#endregion
|
|
#region 查询到货单主表
|
/// <summary>
|
/// 查询到货单主表
|
/// </summary>
|
/// <returns></returns>
|
/// <History> [HANHE(lt)] CREATED BY 2018-11-24</History>
|
public DataTable GetMstList(string sqlwhere)
|
{
|
return CreateDAL<TN_WM_ARRIVALDAL>().GetMstList(sqlwhere);
|
}
|
#endregion
|
|
#region 查询到货单子表
|
/// <summary>
|
/// 查询到货单子表
|
/// </summary>
|
/// <returns></returns>
|
/// <History> [HANHE(lt)] CREATED BY 2018-11-24</History>
|
public DataTable GetDtlList(string sqlwhere)
|
{
|
return CreateDAL<TN_WM_ARRIVALDAL>().GetDtlList(sqlwhere);
|
}
|
#endregion
|
|
|
#region 查询到货单
|
/// <summary>
|
/// 查询到货单子表
|
/// </summary>
|
/// <returns></returns>
|
/// <History> [HANHE(lt)] CREATED BY 2018-11-24</History>
|
public DataTable GetMstJoinDtl(string sqlwhere)
|
{
|
return CreateDAL<TN_WM_ARRIVALDAL>().GetMstJoinDtl(sqlwhere);
|
}
|
#endregion
|
}
|
}
|