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 新增检验单
///
/// 新增检验单
///
/// 检验单实体
///
public OperateResult AddInspect(TN_WM_INSPECT_MSTEntity Entity, RedisUserEntity t)
{
//子表数据集合
List DTLEntity = Entity.DTLEntity;
OperateResult operateResult = UseTransaction(trans =>
{
//新增主表
CreateDAL>().Add(Entity, trans);
//新增子表
CreateDAL>().AddRange(DTLEntity, trans);
});
return operateResult;
}
#endregion
#region 修改检验单
///
/// 修改检验单
///
/// 检验单实体
///
public OperateResult UpdateInspect(TN_WM_INSPECT_MSTEntity entity)
{
//子表数据集合
List DTLEntity = entity.DTLEntity;
OperateResult operateResult = UseTransaction(trans =>
{
//修改主表
CreateDAL>().Update(entity, new { CN_S_INSPECT_NO = entity.CN_S_INSPECT_NO }, trans);
//删除子表
CreateDAL>().Delete(new { CN_S_INSPECT_NO = entity.CN_S_INSPECT_NO }, trans);
//新增子表
CreateDAL>().AddRange(DTLEntity, trans);
//修改主表状态为已检验
CreateDAL>().Update(new { CN_S_STATE = Constants.State_BeenCheck }, new { CN_S_INSPECT_NO = entity.CN_S_INSPECT_NO }, trans);
});
return operateResult;
}
#endregion
#region 查询检验单列表
///
/// 查询检验单列表
///
/// 实体
///
public OperateResult GetInspectList(SearchModel searchModel)
{
return CreateDAL().GetInspectList(searchModel);
}
#endregion
#region 根据单号获取主子表信息
///
/// 根据单号获取主子表信息
///
///
///
public TN_WM_INSPECT_MSTEntity GetInspectMstAndDtl(string inspectNo)
{
TN_WM_INSPECT_MSTEntity inMstEntity = CreateDAL>().GetSingleEntity(new { CN_S_INSPECT_NO = inspectNo });
List inDtlEntity = CreateDAL>().GetList(new { CN_S_INSPECT_NO = inspectNo });
inMstEntity.DTLEntity = inDtlEntity;
return inMstEntity;
}
#endregion
#region 检验单送检
///
/// 检验单送检
///
/// 检验单号
/// 送检员
/// 送检部门
///
public OperateResult InspectBeenTest(string inspectNo, string operatorName, string inspectDept)
{
return CreateDAL().InspectBeenTest(inspectNo, operatorName, inspectDept);
}
#endregion
#region 提交检验单
///
/// 提交检验单
///
///
///
public OperateResult SubmitInspect(List entity)
{
List ArrivalNoList = new List();
List InspectNoList = new List();
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>().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 mstEntityList = new List();
//到货是否启用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>().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 arrivalDtlList = BLLCreator.Create>().GetList(new { CN_S_ARRIVAL_NO = arrivalNo });
//获取检验单子表
List inspectDtlList = BLLCreator.Create>().GetList(new { CN_S_FROM_NO = arrivalNo });
//库存业务子表
List dtlentityList = new List();
foreach (var itemDtl in arrivalDtlList)
{
#region 增加库存业务子表实体
TN_AB_B_ITEM_PRICEEntity item = CreateDAL().GetItemPriceModel(itemDtl.CN_S_ITEM_CODE);
TN_WM_INCREASE_INVENTORY_DTLEntity dtlentity = new TN_WM_INCREASE_INVENTORY_DTLEntity();
List 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>().Add(mstEntityList[i], trans);
CreateDAL>().AddRange(mstEntityList[i].DTLEntity, trans);
}
foreach (var itemExamine in entity)
{
//更新检验单状态
CreateDAL>().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>().Update(new { CN_S_STATE = Constants.State_BeenCheck }, new { CN_S_ARRIVAL_NO = arrivalNo }, trans);
}
//更新到货单数量
CreateDAL().UpdateArrivalQty(inspectNoStr, trans);
});
return operateResult;
}
#endregion
}
}