using HH.WMS.BLL;
|
using HH.WMS.Common;
|
using HH.WMS.DAL.CoreServer;
|
using HH.WMS.Entitys;
|
using HH.WMS.Entitys.Algorithm;
|
using HH.WMS.Entitys.Basic;
|
using HH.WMS.Entitys.Common;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace HH.WMS.BLL.CoreServer
|
{
|
public class OutDataBLL : DapperBaseBLL
|
{
|
public DataTable GetOutMstData(string tableName)
|
{
|
return CreateDAL<OutDataDAL>().GetOutMstData(tableName);
|
}
|
public DataTable GetOutMstDataTH(string tableName)
|
{
|
return CreateDAL<OutDataDAL>().GetOutMstDataTH(tableName);
|
}
|
public DataTable GetOutDtlData(string collectionName, string cCode)
|
{
|
return CreateDAL<OutDataDAL>().GetOutDtlData(collectionName, cCode);
|
}
|
|
public void AddRdrecord(DataTable RdrecordMstEntityTable, string mstTableName, string dtlTableName, string opType)
|
{
|
//主表集合
|
List<TN_WM_OUT_MSTEntity> outMstEntityList = new List<TN_WM_OUT_MSTEntity>();
|
|
outMstEntityList = getMstData(RdrecordMstEntityTable, dtlTableName, opType);
|
|
Log.Info("销售出库单主表!", "2");
|
if (outMstEntityList.Any())
|
{
|
Log.Info("销售出库单实体!", JsonConvert.SerializeObject(outMstEntityList));
|
}
|
|
foreach (var TN_WM_OUT_MSTEntity in outMstEntityList)
|
{
|
//主表集合
|
List<TN_WM_OUT_MSTEntity> outMstTempList = new List<TN_WM_OUT_MSTEntity>();
|
outMstTempList.Add(TN_WM_OUT_MSTEntity);
|
|
string resultStrMst = WebApiManager.HttpWMSTool_Post("Api/Out/AddU8OutData", JsonConvert.SerializeObject(outMstTempList));
|
if (resultStrMst == "")
|
{
|
Log.Info("保存主子表调通!", "Api/Out/AddU8OutData");
|
}
|
OperateResult orMst = JsonConvert.DeserializeObject<OperateResult>(resultStrMst);
|
if (!orMst.Success)
|
{
|
Log.Info("保存主子表接口调用失败!", orMst.Msg);
|
}
|
|
if (orMst.Success)
|
{
|
//更新单据表WMS确认状态
|
SqlExecuteResult sResult = CreateDAL<OutDataDAL>().UpdateRdrecordCheckState(TN_WM_OUT_MSTEntity.CN_S_FROM_NO, mstTableName);
|
if (!sResult.Success)
|
{
|
Log.Info("更新单据表WMS确认状态失败!", sResult.Exception.ToString());
|
}
|
}
|
}
|
|
}
|
|
/// <summary>
|
/// 拼接出库单主子表
|
/// </summary>
|
/// <param name="RdrecordMstEntityTable"></param>
|
/// <param name="dtlTableName"></param>
|
/// <param name="opType"></param>
|
/// <returns></returns>
|
public List<TN_WM_OUT_MSTEntity> getMstData(DataTable RdrecordMstEntityTable, string dtlTableName, string opType,string stockCodeOut="")
|
{
|
List<TN_WM_OUT_MSTEntity> outMstEntityList = new List<TN_WM_OUT_MSTEntity>();
|
string stockStr = WebApiManager.HttpWMSTool_Get("api/Common/NoTokenStockList");
|
OperateResult or = JsonConvert.DeserializeObject<OperateResult>(stockStr);
|
List<TN_AB_STOCKEntity> stockList = JsonConvert.DeserializeObject<List<TN_AB_STOCKEntity>>(or.Data.ToString());
|
|
for (int i = 0; i < RdrecordMstEntityTable.Rows.Count; i++)
|
{
|
#region 拼接出库单主表
|
string postDataOpNo = "{\"appCode\":\"AutoWMS\",\"ruleName\":\"" + Constants.Rule_OutOrder + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}";
|
string opNo = WebApiManager.HttpAutoBomTool_Post("Api/BillRule/GenBillNo", postDataOpNo);
|
|
if (opNo == "")
|
{
|
Log.Info("生成出库单号失败!", "AutoBom接口GenBillNo未调通!");
|
return outMstEntityList;
|
}
|
TN_WM_OUT_MSTEntity outMstEntity = new TN_WM_OUT_MSTEntity();
|
outMstEntity.CN_GUID = System.Guid.NewGuid().ToString().ToUpper();
|
outMstEntity.CN_S_OP_NO = opNo;
|
//outMstEntity.CN_T_OPERATE = Convert.ToDateTime(RdrecordMstEntityTable.Rows[i]["dDate"].ToString());
|
if (dtlTableName == "Rdrecords32")
|
{
|
outMstEntity.CN_S_CUSTOMER = RdrecordMstEntityTable.Rows[i]["cCusCode"].ToString();
|
outMstEntity.CN_S_CUSTOMER_NAME = RdrecordMstEntityTable.Rows[i]["cCusName"].ToString();
|
}
|
else
|
{
|
outMstEntity.CN_S_CUSTOMER = "";
|
outMstEntity.CN_S_CUSTOMER_NAME = "";
|
}
|
outMstEntity.CN_S_STOCK_CODE = stockList[0].CN_S_STOCK_CODE; // RdrecordMstEntityTable.Rows[i]["cWhCode"].ToString();
|
outMstEntity.CN_S_FROM_NO = RdrecordMstEntityTable.Rows[i]["MainId"].ToString();
|
outMstEntity.CN_S_AUDITOR = RdrecordMstEntityTable.Rows[i]["cChecker_Erp"].ToString();
|
outMstEntity.CN_T_AUDIT_TIME = string.IsNullOrEmpty(RdrecordMstEntityTable.Rows[i]["dCheckDate_Erp"].ToString()) ? DateTime.Now : Convert.ToDateTime(RdrecordMstEntityTable.Rows[i]["dCheckDate_Erp"].ToString());
|
outMstEntity.CN_T_CREATE = Convert.ToDateTime(RdrecordMstEntityTable.Rows[i]["dCreateDate"].ToString());
|
outMstEntity.CN_S_RECEIVER_NAME = "";
|
outMstEntity.CN_S_PHONE = "";
|
outMstEntity.CN_S_DETAIL_ADDRESS = RdrecordMstEntityTable.Rows[i]["cShipAddress"].ToString();
|
|
|
//未传递 默认值
|
outMstEntity.CN_T_OP_DATE = DateTime.Now;
|
outMstEntity.CN_S_STATE = Constants.State_Audit;
|
outMstEntity.CN_S_OWNER = Constants.DefaultU8Owner;
|
outMstEntity.CN_S_OP_TYPE = opType;
|
outMstEntity.CN_S_OP_FROM = "U8";
|
outMstEntity.CN_S_FROM_NO = RdrecordMstEntityTable.Rows[i]["cCode"].ToString();
|
outMstEntity.CN_S_AUDIT_REMARK = "";
|
outMstEntity.CN_S_OPERATOR = "汉和信息";
|
outMstEntity.CN_S_CREATOR = "hh";
|
outMstEntity.CN_S_CREATOR_BY = "汉和信息";
|
outMstEntity.CN_S_MODIFY = "hh";
|
outMstEntity.CN_S_MODIFY_BY = "汉和信息";
|
outMstEntity.CN_T_MODIFY = DateTime.Now;
|
outMstEntity.CN_S_NOTE = "U8对接导入";
|
#endregion
|
|
#region 拼接出库单子表
|
//子表集合
|
List<TN_WM_OUT_DTLEntity> outDtlEntityList = new List<TN_WM_OUT_DTLEntity>();
|
|
DataTable RdrecordDtlEntityTable = BLLCreator.Create<OutDataBLL>().GetOutDtlData(dtlTableName, outMstEntity.CN_S_FROM_NO);
|
for (int j = 0; j < RdrecordDtlEntityTable.Rows.Count; j++)
|
{
|
AutoBomItemEntity itemenity = BLLCreator.Create<MongoBLL>().GetItemEntity(RdrecordDtlEntityTable.Rows[j]["cInvCode"].ToString()); ;
|
if (itemenity == null)
|
{
|
Log.Info("拼接子表失败!", "物料编码 " + RdrecordDtlEntityTable.Rows[j]["cInvCode"].ToString() + " 不存在或者未定版!");
|
return outMstEntityList;
|
}
|
|
TN_WM_OUT_DTLEntity dtlEntity = new TN_WM_OUT_DTLEntity();
|
dtlEntity.CN_GUID = System.Guid.NewGuid().ToString().ToUpper();
|
dtlEntity.CN_T_PRODUCTION = Convert.ToDateTime(RdrecordDtlEntityTable.Rows[j]["dMadeDate"].ToString());
|
dtlEntity.CN_T_MODIFY = DateTime.Now;
|
dtlEntity.CN_T_CREATE = DateTime.Now;
|
dtlEntity.CN_S_STATE = Constants.State_Audit;
|
dtlEntity.CN_S_SERIAL_NO = "";
|
dtlEntity.CN_S_PRODUCTION_BATCH = RdrecordDtlEntityTable.Rows[j]["cBatch"].ToString();
|
dtlEntity.CN_S_OP_NO = outMstEntity.CN_S_OP_NO;
|
dtlEntity.CN_S_MSTGUID = outMstEntity.CN_GUID;
|
dtlEntity.CN_S_MODEL = itemenity.CN_S_MODEL;
|
dtlEntity.CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME;
|
dtlEntity.CN_S_ITEM_CODE = itemenity.CN_S_ITEM_CODE;
|
dtlEntity.CN_N_ROW_NO = Convert.ToInt32(RdrecordDtlEntityTable.Rows[j]["iRowNo"].ToString());
|
|
|
string unit = RdrecordDtlEntityTable.Rows[j]["cComUnitName"].ToString();
|
decimal qty = RdrecordDtlEntityTable.Rows[j]["iQuantity"].ToString() == null ? 0 : Convert.ToDecimal(RdrecordDtlEntityTable.Rows[j]["iQuantity"].ToString());
|
|
if (unit != itemenity.CN_S_MEASURE_UNIT)
|
{
|
if (string.IsNullOrEmpty(itemenity.CN_S_CONERSION))
|
{
|
Log.Info("拼接子表失败!", "请维护物料 " + itemenity.CN_S_ITEM_CODE + " 的换算比例!");
|
return outMstEntityList;
|
}
|
|
unit = itemenity.CN_S_MEASURE_UNIT;
|
decimal jishu = Convert.ToDecimal(itemenity.CN_S_CONERSION.Substring(0, itemenity.CN_S_CONERSION.IndexOf("-")));
|
if (jishu == 0) jishu = 1;
|
dtlEntity.CN_F_QUANTITY = Math.Floor(qty / jishu);
|
}
|
else
|
{
|
dtlEntity.CN_F_QUANTITY = qty;
|
}
|
|
|
string outState = InIHelper.ReadConfig<string>("SS",string.IsNullOrEmpty(stockCodeOut)?RdrecordMstEntityTable.Rows[i]["cWhCode"].ToString(): stockCodeOut);
|
|
dtlEntity.CN_S_MEASURE_UNIT = unit;
|
dtlEntity.CN_S_ITEM_STATE = string.IsNullOrEmpty(outState) ? Constants.ItemState_WaitCheck : outState;
|
|
dtlEntity.CN_S_CREATOR = "hh";
|
dtlEntity.CN_S_CREATOR_BY = "汉和信息";
|
dtlEntity.CN_S_MODIFY = "hh";
|
dtlEntity.CN_S_MODIFY_BY = "汉和信息";
|
dtlEntity.CN_T_MODIFY = DateTime.Now;
|
dtlEntity.CN_S_FIGURE_NO = "";
|
|
dtlEntity.CN_S_NOTE = "U8对接导入";
|
|
outDtlEntityList.Add(dtlEntity);
|
}
|
outMstEntity.OutDtlList = outDtlEntityList;
|
|
outMstEntityList.Add(outMstEntity);
|
|
#endregion
|
}
|
return outMstEntityList;
|
}
|
|
/// <summary>
|
/// 调拨单处理
|
/// </summary>
|
/// <param name="RdrecordMstEntityTable"></param>
|
/// <param name="collectionName"></param>
|
public void UpdateRdrecord(DataTable RdrecordMstEntityTable, string mstTableName, string dtlTableName)
|
{
|
|
OperateResult opResult = new OperateResult();
|
//主表集合
|
List<TN_WM_OUT_MSTEntity> outMstEntityList = new List<TN_WM_OUT_MSTEntity>();
|
|
for (int i = 0; i < RdrecordMstEntityTable.Rows.Count; i++)
|
{
|
string cCode = RdrecordMstEntityTable.Rows[i]["cCode"].ToString();
|
string stockOut = RdrecordMstEntityTable.Rows[i]["cWhCode_Out"].ToString();
|
string stockIn = RdrecordMstEntityTable.Rows[i]["cWhCode_In"].ToString();
|
|
string outState = InIHelper.ReadConfig<string>("SS", stockOut);
|
string InState = InIHelper.ReadConfig<string>("SS", stockIn);
|
|
if ((outState == "待检" && InState == "合格") || (outState == "合格" && InState == "待检"))
|
{
|
DataTable RdrecordDtlEntityTable = BLLCreator.Create<OutDataBLL>().GetOutDtlData(dtlTableName, cCode);
|
|
string itemState = Constants.ItemState_Qualified;
|
if (outState == "待检" && InState == "合格")
|
itemState = Constants.ItemState_Qualified;//合格
|
if (outState == "合格" && InState == "待检")
|
itemState = Constants.ItemState_WaitCheck;//待检
|
|
List<U8_TransVouchEntity> transVouchList = new List<U8_TransVouchEntity>();
|
|
for (int j = 0; j < RdrecordDtlEntityTable.Rows.Count; j++)
|
{
|
U8_TransVouchEntity transVouchEntity = new U8_TransVouchEntity();
|
|
string itemCode = RdrecordDtlEntityTable.Rows[j]["cInvCode"].ToString();
|
string productBatch = RdrecordDtlEntityTable.Rows[j]["cBatch"].ToString();
|
transVouchEntity.CN_S_ITEM_CODE = itemCode;
|
transVouchEntity.CN_S_PRODUCTION_BATCH = productBatch;
|
transVouchEntity.CN_S_BATCH_NO = productBatch;
|
transVouchEntity.CN_S_ITEM_STATE = itemState;
|
|
transVouchList.Add(transVouchEntity);
|
}
|
|
string result = WebApiManager.HttpWMSTool_Post("Api/In/UpdateTransVouchItemState", JsonConvert.SerializeObject(transVouchList));
|
opResult = JsonConvert.DeserializeObject<OperateResult>(result);
|
|
if (opResult.Success)
|
{
|
//更新单据表WMS确认状态失败
|
SqlExecuteResult sResult = CreateDAL<OutDataDAL>().UpdateRdrecordCheckState(cCode, mstTableName);
|
if (!sResult.Success)
|
{
|
Log.Info("更新单据表WMS确认状态失败!", sResult.Exception.ToString());
|
}
|
}
|
}
|
|
if ((outState == "待检" || outState == "合格") && string.IsNullOrEmpty(InState))
|
{
|
//真正意义上的调拨单需要生成出库订单
|
List<TN_WM_OUT_MSTEntity> outMstEntitylst = getMstData(RdrecordMstEntityTable, "TransVouchs", "调拨出库", stockOut);
|
|
if (outMstEntitylst.Any())
|
{
|
Log.Info("出库单实体拼接失败!", "出库单实体拼接失败!");
|
}
|
|
foreach (var TN_WM_OUT_MSTEntity in outMstEntitylst)
|
{
|
//主表集合
|
List<TN_WM_OUT_MSTEntity> outMstTempList = new List<TN_WM_OUT_MSTEntity>();
|
outMstTempList.Add(TN_WM_OUT_MSTEntity);
|
|
string resultStrMst = WebApiManager.HttpWMSTool_Post("Api/Out/AddU8OutData", JsonConvert.SerializeObject(outMstTempList));
|
if (resultStrMst == "")
|
{
|
Log.Info("保存主子表调通!", "Api/Out/AddU8OutData");
|
}
|
OperateResult orMst = JsonConvert.DeserializeObject<OperateResult>(resultStrMst);
|
if (!orMst.Success)
|
{
|
Log.Info("保存主子表接口调用失败!", orMst.Msg);
|
}
|
|
if (orMst.Success)
|
{
|
//更新单据表WMS确认状态
|
SqlExecuteResult sResult = CreateDAL<OutDataDAL>().UpdateRdrecordCheckState(cCode, mstTableName);
|
if (!sResult.Success)
|
{
|
Log.Info("更新单据表WMS确认状态失败!", sResult.Exception.ToString());
|
}
|
}
|
}
|
}
|
}
|
}
|
|
public void AddRdrecordTH(DataTable rdrecordMstEntityTableTH, string mstTableName, string dtlTableName, string opType)
|
{
|
//调用入库单新增接口,传递销售退货
|
new InDataBLL().AddRdrecord(rdrecordMstEntityTableTH, mstTableName, dtlTableName, opType);
|
}
|
|
public SqlExecuteResult UpdateRdrecordCheckFlag(string opNo, string tableName, TN_WM_OUT_MSTEntity outMst)
|
{
|
Log.Info("UpdateRdrecordCheckFlag", opNo);
|
return new OutDataDAL().UpdateRdrecordCheckFlag(opNo, tableName, outMst);
|
}
|
|
}
|
}
|