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.Algorithm;
|
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_INSPECTBLL : DapperBaseBLL
|
{
|
#region 新增检验单
|
/// <summary>
|
/// 新增检验单
|
/// </summary>
|
/// <param name="Entity">检验单实体</param>
|
/// <returns></returns>
|
public OperateResult AddInspect(TN_WM_INSPECT_MSTEntity Entity, RedisUserEntity t)
|
{
|
|
//子表数据集合
|
List<TN_WM_INSPECT_DTLEntity> DTLEntity = Entity.DTLEntity;
|
|
OperateResult operateResult = UseTransaction(trans =>
|
{
|
//新增主表
|
CreateDAL<DapperDAL<TN_WM_INSPECT_MSTEntity>>().Add(Entity, trans);
|
//新增子表
|
CreateDAL<DapperDAL<TN_WM_INSPECT_DTLEntity>>().AddRange(DTLEntity, trans);
|
|
});
|
|
return operateResult;
|
}
|
#endregion
|
|
#region 修改检验单
|
/// <summary>
|
/// 修改检验单
|
/// </summary>
|
/// <param name="Entity">检验单实体</param>
|
/// <returns></returns>
|
public OperateResult UpdateInspect(TN_WM_INSPECT_MSTEntity entity)
|
{
|
//子表数据集合
|
List<TN_WM_INSPECT_DTLEntity> DTLEntity = entity.DTLEntity;
|
|
OperateResult operateResult = UseTransaction(trans =>
|
{
|
//修改主表
|
CreateDAL<DapperDAL<TN_WM_INSPECT_MSTEntity>>().Update(entity, new { CN_S_INSPECT_NO = entity.CN_S_INSPECT_NO }, trans);
|
//删除子表
|
CreateDAL<DapperDAL<TN_WM_INSPECT_DTLEntity>>().Delete(new { CN_S_INSPECT_NO = entity.CN_S_INSPECT_NO }, trans);
|
//新增子表
|
CreateDAL<DapperDAL<TN_WM_INSPECT_DTLEntity>>().AddRange(DTLEntity, trans);
|
//修改主表状态为已检验
|
CreateDAL<DapperDAL<TN_WM_INSPECT_MSTEntity>>().Update(new { CN_S_STATE = Constants.State_BeenCheck }, new { CN_S_INSPECT_NO = entity.CN_S_INSPECT_NO }, trans);
|
|
});
|
|
return operateResult;
|
}
|
#endregion
|
|
#region 查询检验单列表
|
/// <summary>
|
/// 查询检验单列表
|
/// </summary>
|
/// <param name="searchModel">实体</param>
|
/// <returns></returns>
|
public OperateResult GetInspectList(SearchModel searchModel)
|
{
|
return CreateDAL<TN_WM_INSPECTDAL>().GetInspectList(searchModel);
|
}
|
#endregion
|
|
#region 根据单号获取主子表信息
|
/// <summary>
|
/// 根据单号获取主子表信息
|
/// </summary>
|
/// <param name="inspectNo"></param>
|
/// <returns></returns>
|
public TN_WM_INSPECT_MSTEntity GetInspectMstAndDtl(string inspectNo)
|
{
|
TN_WM_INSPECT_MSTEntity inMstEntity = CreateDAL<DapperDAL<TN_WM_INSPECT_MSTEntity>>().GetSingleEntity(new { CN_S_INSPECT_NO = inspectNo });
|
List<TN_WM_INSPECT_DTLEntity> inDtlEntity = CreateDAL<DapperDAL<TN_WM_INSPECT_DTLEntity>>().GetList(new { CN_S_INSPECT_NO = inspectNo });
|
|
inMstEntity.DTLEntity = inDtlEntity;
|
return inMstEntity;
|
}
|
#endregion
|
|
#region 检验单送检
|
/// <summary>
|
/// 检验单送检
|
/// </summary>
|
/// <param name="inspectNo">检验单号</param>
|
/// <param name="operatorName">送检员</param>
|
/// <param name="inspectDept">送检部门</param>
|
/// <returns></returns>
|
public OperateResult InspectBeenTest(string inspectNo, string operatorName, string inspectDept)
|
{
|
return CreateDAL<TN_WM_INSPECTDAL>().InspectBeenTest(inspectNo, operatorName, inspectDept);
|
}
|
#endregion
|
|
#region 提交检验单
|
/// <summary>
|
/// 提交检验单
|
/// </summary>
|
/// <param name="entity"></param>
|
/// <returns></returns>
|
public OperateResult SubmitInspect(List<TN_WM_B_EXAMINEEntity> entity)
|
{
|
List<string> ArrivalNoList = new List<string>();
|
List<string> InspectNoList = new List<string>();
|
string inspectNoStr = "";
|
foreach (var itemExamine in entity)
|
{
|
InspectNoList.Add(itemExamine.CN_S_FROM_NO);
|
|
inspectNoStr = inspectNoStr + "'" + itemExamine.CN_S_FROM_NO + "',";
|
|
//获取检验单实体
|
TN_WM_INSPECT_MSTEntity inMst = BLLCreator.Create<DapperBLL<TN_WM_INSPECT_MSTEntity>>().GetSingleEntity(new { CN_S_INSPECT_NO = itemExamine.CN_S_FROM_NO });
|
if (inMst == null)
|
{
|
return OperateResult.Error("未获取到检验单实体!");
|
}
|
ArrivalNoList.Add(inMst.CN_S_FROM_NO);
|
|
}
|
if (!string.IsNullOrEmpty(inspectNoStr))
|
{
|
inspectNoStr = inspectNoStr.Substring(1, inspectNoStr.Length - 3);//获取数据类似: 123,'123,'321
|
}
|
|
//增加库存业务主表
|
List<TN_WM_INCREASE_INVENTORY_MSTEntity> mstEntityList = new List<TN_WM_INCREASE_INVENTORY_MSTEntity>();
|
|
//到货是否启用OMS对接
|
string isUseOms = "";
|
foreach (var arrivalNo in ArrivalNoList)
|
{
|
TN_WM_INCREASE_INVENTORY_MSTEntity mstentity = new TN_WM_INCREASE_INVENTORY_MSTEntity();
|
// 生成入库单号--调用AutoBom接口,传递 单据规则名称 所属机构
|
string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_In + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
|
string opNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
|
if (string.IsNullOrEmpty(opNo))
|
{
|
return OperateResult.Error("生成入库单据编码失败!");
|
}
|
TN_WM_ARRIVAL_MSTEntity arrivalMst = BLLCreator.Create<DapperBLL<TN_WM_ARRIVAL_MSTEntity>>().GetSingleEntity(new { CN_S_ARRIVAL_NO = arrivalNo });
|
if (string.IsNullOrEmpty(arrivalMst.CN_S_ARRIVAL_NO)) continue;
|
|
//到货是否启用OMS对接
|
isUseOms = GetStrategy(arrivalMst.CN_S_STOCK_CODE, StrategyKey.IsUseOms);
|
|
string mstguid = System.Guid.NewGuid().ToString().ToUpper();
|
|
#region 增加库存业务主表实体
|
mstentity.CN_GUID = mstguid;
|
mstentity.CN_S_CREATOR = entity[0].CN_S_CREATOR;
|
mstentity.CN_S_CREATOR_BY = entity[0].CN_S_CREATOR_BY;
|
mstentity.CN_T_CREATE = DateTime.Now;
|
mstentity.CN_S_MODIFY = entity[0].CN_S_CREATOR;
|
mstentity.CN_S_MODIFY_BY = entity[0].CN_S_CREATOR_BY;
|
mstentity.CN_T_MODIFY = DateTime.Now;
|
mstentity.CN_S_OWNER = arrivalMst.CN_S_OWNER;
|
mstentity.CN_S_FROM_NO = arrivalMst.CN_S_ARRIVAL_NO; //到货单号
|
mstentity.CN_S_NOTE = arrivalMst.CN_S_NOTE;
|
mstentity.CN_S_OP_FROM = "到货单";
|
mstentity.CN_S_OP_NO = opNo;
|
mstentity.CN_S_OP_TYPE = arrivalMst.CN_S_OP_TYPE;
|
mstentity.CN_S_STATE = Constants.State_New;
|
mstentity.CN_S_LOT_NO = arrivalMst.CN_S_LOT_CODE;
|
mstentity.CN_S_STOCK_CODE = arrivalMst.CN_S_STOCK_CODE;
|
mstentity.CN_T_OPERATE = DateTime.Now;
|
|
mstentity.CN_S_VENDOR_NO = arrivalMst.CN_S_VENDOR_NO;
|
mstentity.CN_S_VENDOR_NAME = arrivalMst.CN_S_VENDOR_NAME;
|
mstentity.CN_S_OPERATOR = entity[0].CN_S_CREATOR;//制单人
|
|
#endregion
|
|
//获取到货单子表
|
List<TN_WM_ARRIVAL_DTLEntity> arrivalDtlList = BLLCreator.Create<DapperBLL<TN_WM_ARRIVAL_DTLEntity>>().GetList(new { CN_S_ARRIVAL_NO = arrivalNo });
|
//获取检验单子表
|
List<TN_WM_INSPECT_DTLEntity> inspectDtlList = BLLCreator.Create<DapperBLL<TN_WM_INSPECT_DTLEntity>>().GetList(new { CN_S_FROM_NO = arrivalNo });
|
|
//库存业务子表
|
List<TN_WM_INCREASE_INVENTORY_DTLEntity> dtlentityList = new List<TN_WM_INCREASE_INVENTORY_DTLEntity>();
|
|
foreach (var itemDtl in arrivalDtlList)
|
{
|
#region 增加库存业务子表实体
|
TN_AB_B_ITEM_PRICEEntity item = CreateDAL<TN_WMS_ITEMDAL>().GetItemPriceModel(itemDtl.CN_S_ITEM_CODE);
|
|
TN_WM_INCREASE_INVENTORY_DTLEntity dtlentity = new TN_WM_INCREASE_INVENTORY_DTLEntity();
|
List<TN_WM_INSPECT_DTLEntity> dtlModel = inspectDtlList.Where(t => t.CN_N_ROW_NO == itemDtl.CN_N_ROW_NO).ToList();
|
if (dtlModel.Count == 0)
|
{
|
return OperateResult.Error("未找到检验单子表数据!");
|
}
|
dtlentity.CN_F_QUANTITY = decimal.Parse(dtlModel[0].CN_F_QUALIFIED.ToString());
|
dtlentity.CN_S_ARRIVAL_QTY = itemDtl.CN_F_QUANTITY.ToString();
|
dtlentity.CN_S_ITEM_CODE = itemDtl.CN_S_ITEM_CODE;
|
dtlentity.CN_S_ITEM_NAME = itemDtl.CN_S_ITEM_NAME;
|
dtlentity.CN_S_ITEM_STATE = itemDtl.CN_S_ITEM_STATE;
|
dtlentity.CN_S_OP_NO = opNo;
|
dtlentity.CN_N_ROW_NO = itemDtl.CN_N_ROW_NO;
|
dtlentity.CN_S_SERIAL_NO = itemDtl.CN_S_SERIAL_NO;
|
dtlentity.CN_S_NOTE = itemDtl.CN_S_NOTE;
|
|
dtlentity.CN_F_PLAN_PRICE = Convert.ToDecimal(item == null ? "0" : item.CN_F_PRICE);
|
dtlentity.CN_F_PLAN_MONEY = Convert.ToDecimal(item == null ? "0" : item.CN_F_PRICE) * decimal.Parse(dtlModel[0].CN_F_QUALIFIED.ToString());
|
dtlentity.CN_F_ACTUAL_PRICE = decimal.Parse(string.IsNullOrEmpty(itemDtl.CN_F_PURCHASE_PRICE.ToString()) ? "0" : itemDtl.CN_F_PURCHASE_PRICE.ToString()); ;
|
dtlentity.CN_F_ACTUAL_MONEY = dtlentity.CN_F_ACTUAL_PRICE * decimal.Parse(dtlModel[0].CN_F_QUALIFIED.ToString());
|
dtlentity.CN_S_FIGURE_NO = itemDtl.CN_S_FIGURE_NO;
|
dtlentity.CN_S_MODEL = itemDtl.CN_S_MODEL;
|
dtlentity.CN_S_MEASURE_UNIT = itemDtl.CN_S_MEASURE_UNIT;
|
|
dtlentity.CN_C_IS_BALANCE = "N";
|
dtlentity.CN_C_IS_SCRAP = "N";
|
dtlentity.CN_F_UPSHELF_QTY = 0;
|
dtlentity.CN_F_ALLOT_QTY = 0;
|
dtlentity.CN_F_PRINTING_QTY = 0;
|
dtlentity.CN_F_ADD_ONTRAY_QTY = 0;
|
|
dtlentity.CN_GUID = System.Guid.NewGuid().ToString().ToUpper();
|
dtlentity.CN_S_MSTGUID = mstguid;
|
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);
|
#endregion
|
|
}
|
mstentity.DTLEntity = dtlentityList;
|
mstEntityList.Add(mstentity);
|
}
|
|
OperateResult operateResult = UseTransaction(trans =>
|
{
|
//是否启用OMS对接----WMS检验单提交调用OMS接口更新采购订单待检验数量
|
if (isUseOms.Equals("Y"))
|
{
|
OperateResult Qir = new InfOMSRequest().InspectUpdateCheckResult(InspectNoList);
|
if (!Qir.Success)
|
{
|
throw new Exception(Qir.Msg);
|
}
|
}
|
|
//新增入库单主子表
|
for (int i = 0; i < mstEntityList.Count; i++)
|
{
|
CreateDAL<DapperDAL<TN_WM_INCREASE_INVENTORY_MSTEntity>>().Add(mstEntityList[i], trans);
|
|
CreateDAL<DapperDAL<TN_WM_INCREASE_INVENTORY_DTLEntity>>().AddRange(mstEntityList[i].DTLEntity, trans);
|
}
|
foreach (var itemExamine in entity)
|
{
|
//更新检验单状态
|
CreateDAL<DapperDAL<TN_WM_INSPECT_MSTEntity>>().Update(new { CN_S_STATE = Constants.State_Submit }, new { CN_S_INSPECT_NO = itemExamine.CN_S_FROM_NO }, trans);
|
}
|
foreach (var arrivalNo in ArrivalNoList)
|
{
|
//更新到货单状态
|
CreateDAL<DapperDAL<TN_WM_ARRIVAL_MSTEntity>>().Update(new { CN_S_STATE = Constants.State_BeenCheck }, new { CN_S_ARRIVAL_NO = arrivalNo }, trans);
|
}
|
|
//更新到货单数量
|
CreateDAL<TN_WM_INSPECTDAL>().UpdateArrivalQty(inspectNoStr, trans);
|
});
|
|
return operateResult;
|
|
}
|
#endregion
|
}
|
}
|