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().GetOutMstData(tableName); } public DataTable GetOutMstDataTH(string tableName) { return CreateDAL().GetOutMstDataTH(tableName); } public DataTable GetOutDtlData(string collectionName, string cCode) { return CreateDAL().GetOutDtlData(collectionName, cCode); } public void AddRdrecord(DataTable RdrecordMstEntityTable, string mstTableName, string dtlTableName, string opType) { //主表集合 List outMstEntityList = new List(); 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 outMstTempList = new List(); 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(resultStrMst); if (!orMst.Success) { Log.Info("保存主子表接口调用失败!", orMst.Msg); } if (orMst.Success) { //更新单据表WMS确认状态 SqlExecuteResult sResult = CreateDAL().UpdateRdrecordCheckState(TN_WM_OUT_MSTEntity.CN_S_FROM_NO, mstTableName); if (!sResult.Success) { Log.Info("更新单据表WMS确认状态失败!", sResult.Exception.ToString()); } } } } /// /// 拼接出库单主子表 /// /// /// /// /// public List getMstData(DataTable RdrecordMstEntityTable, string dtlTableName, string opType,string stockCodeOut="") { List outMstEntityList = new List(); string stockStr = WebApiManager.HttpWMSTool_Get("api/Common/NoTokenStockList"); OperateResult or = JsonConvert.DeserializeObject(stockStr); List stockList = JsonConvert.DeserializeObject>(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 outDtlEntityList = new List(); DataTable RdrecordDtlEntityTable = BLLCreator.Create().GetOutDtlData(dtlTableName, outMstEntity.CN_S_FROM_NO); for (int j = 0; j < RdrecordDtlEntityTable.Rows.Count; j++) { AutoBomItemEntity itemenity = BLLCreator.Create().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("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; } /// /// 调拨单处理 /// /// /// public void UpdateRdrecord(DataTable RdrecordMstEntityTable, string mstTableName, string dtlTableName) { OperateResult opResult = new OperateResult(); //主表集合 List outMstEntityList = new List(); 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("SS", stockOut); string InState = InIHelper.ReadConfig("SS", stockIn); if ((outState == "待检" && InState == "合格") || (outState == "合格" && InState == "待检")) { DataTable RdrecordDtlEntityTable = BLLCreator.Create().GetOutDtlData(dtlTableName, cCode); string itemState = Constants.ItemState_Qualified; if (outState == "待检" && InState == "合格") itemState = Constants.ItemState_Qualified;//合格 if (outState == "合格" && InState == "待检") itemState = Constants.ItemState_WaitCheck;//待检 List transVouchList = new List(); 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(result); if (opResult.Success) { //更新单据表WMS确认状态失败 SqlExecuteResult sResult = CreateDAL().UpdateRdrecordCheckState(cCode, mstTableName); if (!sResult.Success) { Log.Info("更新单据表WMS确认状态失败!", sResult.Exception.ToString()); } } } if ((outState == "待检" || outState == "合格") && string.IsNullOrEmpty(InState)) { //真正意义上的调拨单需要生成出库订单 List outMstEntitylst = getMstData(RdrecordMstEntityTable, "TransVouchs", "调拨出库", stockOut); if (outMstEntitylst.Any()) { Log.Info("出库单实体拼接失败!", "出库单实体拼接失败!"); } foreach (var TN_WM_OUT_MSTEntity in outMstEntitylst) { //主表集合 List outMstTempList = new List(); 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(resultStrMst); if (!orMst.Success) { Log.Info("保存主子表接口调用失败!", orMst.Msg); } if (orMst.Success) { //更新单据表WMS确认状态 SqlExecuteResult sResult = CreateDAL().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); } } }