using HH.Redis.ReisModel;
|
using HH.WMS.BLL.SysMgr;
|
using HH.WMS.Common;
|
using HH.WMS.DAL;
|
using HH.WMS.DAL.Basic;
|
using HH.WMS.DAL.OutStock;
|
using HH.WMS.Entitys;
|
using HH.WMS.Entitys.Basic;
|
using HH.WMS.Entitys.Common;
|
using HH.WMS.Entitys.Entitys;
|
using HH.WMS.Entitys.Entitys.Mes;
|
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.OutStock
|
{
|
public class TN_WM_OUT_MSTBLL : DapperBaseBLL
|
{
|
#region 出库订单新增
|
/// <summary>
|
/// 出库订单新增
|
/// </summary>
|
/// <param name="outMst"></param>
|
/// <returns></returns>
|
public OperateResult AddOut(TN_WM_OUT_MSTEntity outMst)
|
{
|
return UseTransaction(trans =>
|
{
|
//新增主表
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Add(outMst, trans);
|
//新增子表
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().AddRange(outMst.OutDtlList, trans);
|
});
|
}
|
#endregion
|
|
#region 出库订单修改
|
/// <summary>
|
/// 出库订单修改
|
/// </summary>
|
/// <param name="outMst"></param>
|
/// <returns></returns>
|
public OperateResult UpdateOut(TN_WM_OUT_MSTEntity outMst)
|
{
|
return UseTransaction(trans =>
|
{
|
//修改主表
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Update(outMst, new { CN_S_OP_NO = outMst.CN_S_OP_NO }, trans);
|
//删除子表
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().Delete(new { CN_S_OP_NO = outMst.CN_S_OP_NO }, trans);
|
//新增子表
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().AddRange(outMst.OutDtlList, trans);
|
});
|
}
|
#endregion
|
|
#region 删除出库订单
|
/// <summary>
|
/// 删除出库订单
|
/// </summary>
|
/// <param name="opNo"></param>
|
/// <returns></returns>
|
public OperateResult DeleteOut(string opNo)
|
{
|
return UseTransaction(trans =>
|
{
|
//删除出库订单主表
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Delete(new { CN_S_OP_NO = opNo }, trans);
|
//删除出库订单子表
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().Delete(new { CN_S_OP_NO = opNo }, trans);
|
});
|
}
|
#endregion
|
|
#region 获取出库主子表
|
/// <summary>
|
/// 获取出库主子表
|
/// </summary>
|
/// <param name="CN_S_OP_NO"></param>
|
/// <returns></returns>
|
public TN_WM_OUT_MSTEntity GetOutMstAndDtl(string CN_S_OP_NO)
|
{
|
TN_WM_OUT_MSTEntity outMst = CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().GetSingleEntity(new { CN_S_OP_NO = CN_S_OP_NO });
|
List<TN_WM_OUT_DTLEntity> outDtlList = CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().GetList(new { CN_S_OP_NO = CN_S_OP_NO });
|
outMst.OutDtlList = outDtlList;
|
return outMst;
|
}
|
#endregion
|
|
#region 修改主子表状态
|
/// <summary>
|
/// 修改主子表状态
|
/// </summary>
|
/// <param name="opNo"></param>
|
/// <param name="state"></param>
|
/// <returns></returns>
|
public OperateResult UpdateOutState(string opNo, string state)
|
{
|
return UseTransaction(trans =>
|
{
|
//修改主表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Update(new { CN_S_STATE = state }, new { CN_S_OP_NO = opNo }, trans);
|
//修改子表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().Update(new { CN_S_STATE = state }, new { CN_S_OP_NO = opNo }, trans);
|
});
|
}
|
#endregion
|
|
#region 获取出库订单所有客户
|
/// <summary>
|
/// 获取出库订单所有客户
|
/// </summary>
|
/// <returns></returns>
|
public List<TN_WM_OUT_MSTEntity> GetDistinctCustom()
|
{
|
return CreateDAL<TN_WM_OUT_MSTDAL>().GetDistinctCustom();
|
}
|
#endregion
|
|
#region 提交
|
/// <summary>
|
/// 提交
|
/// </summary>
|
/// <returns></returns>
|
public OperateResult SubmitOut(string opNo, List<TN_WM_B_STOCK_QTYEntity> stockList, RedisUserEntity user)
|
{
|
return UseTransaction(trans =>
|
{
|
//修改主表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Update(new { CN_S_STATE = Constants.State_Submit }, new { CN_S_OP_NO = opNo }, trans);
|
//修改子表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().Update(new { CN_S_STATE = Constants.State_Submit }, new { CN_S_OP_NO = opNo }, trans);
|
//库存编辑量上升
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().UpdateStockEditingQty(stockList, trans);
|
//添加日志
|
CreateDAL<DapperDAL<TN_WM_B_BILL_EXECEntity>>().Add(OutBillExec(opNo, Constants.Operate_Sumit, user), trans);
|
});
|
}
|
#endregion
|
|
#region 取消
|
/// <summary>
|
/// 取消
|
/// </summary>
|
/// <param name="outMst"></param>
|
/// <param name="stockList"></param>
|
/// <param name="user"></param>
|
/// <returns></returns>
|
public OperateResult CancelOut(TN_WM_OUT_MSTEntity outMst, List<TN_WM_B_STOCK_QTYEntity> stockList, RedisUserEntity user)
|
{
|
return UseTransaction(trans =>
|
{
|
if (outMst.CN_S_STATE == Constants.State_Submit)
|
{
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().UpdateStockEditingQty(stockList, trans);
|
}
|
if (outMst.CN_S_STATE == Constants.State_Audit)
|
{
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().UpdateStockAllocQty(stockList, trans);
|
}
|
//修改主表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Update(new { CN_S_STATE = Constants.State_Cancel }, new { CN_S_OP_NO = outMst.CN_S_OP_NO }, trans);
|
//修改子表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().Update(new { CN_S_STATE = Constants.State_Cancel }, new { CN_S_OP_NO = outMst.CN_S_OP_NO }, trans);
|
//添加日志
|
CreateDAL<DapperDAL<TN_WM_B_BILL_EXECEntity>>().Add(OutBillExec(outMst.CN_S_OP_NO, Constants.State_Cancel, user), trans);
|
});
|
}
|
#endregion
|
|
#region 驳回
|
/// <summary>
|
/// 驳回
|
/// </summary>
|
/// <param name="rejectEntity"></param>
|
/// <returns></returns>
|
public OperateResult OutReject(TN_WM_B_REJECTEntity rejectEntity, List<TN_WM_B_STOCK_QTYEntity> stockList, RedisUserEntity user)
|
{
|
return UseTransaction(trans =>
|
{
|
//修改主表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Update(new { CN_S_STATE = Constants.State_Reject }, new { CN_S_OP_NO = rejectEntity.CN_S_FROM_NO }, trans);
|
//修改子表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().Update(new { CN_S_STATE = Constants.State_Reject }, new { CN_S_OP_NO = rejectEntity.CN_S_FROM_NO }, trans);
|
//添加驳回记录
|
CreateDAL<DapperDAL<TN_WM_B_REJECTEntity>>().Add(rejectEntity, trans);
|
//仓库编辑量下降
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().UpdateStockEditingQty(stockList, trans);
|
//添加日志
|
CreateDAL<DapperDAL<TN_WM_B_BILL_EXECEntity>>().Add(OutBillExec(rejectEntity.CN_S_FROM_NO, Constants.Operate_Reject, user), trans);
|
});
|
}
|
#endregion
|
|
#region 审核
|
/// <summary>
|
/// 审核
|
/// </summary>
|
/// <param name="opNo"></param>
|
/// <param name="stockList"></param>
|
/// <returns></returns>
|
public OperateResult AuditOut(string opNo, List<TN_WM_B_STOCK_QTYEntity> stockList, List<TN_WM_B_AREA_QTYEntity> areaList, RedisUserEntity user, TN_WM_OUT_MSTEntity outMst, List<TN_WM_B_TRAY_ITEM_MSTEntity> trayItemMstList = null, List<TN_WM_B_TRAY_LOCATIONEntity> trayLocationList = null, List<TN_WM_REDUCE_INVENTORY_MSTEntity> reduceMst = null)
|
{
|
var operateResult = UseTransaction(trans =>
|
{
|
//状态置为'已审核'
|
string state = Constants.State_Audit;
|
string timeStamp = DateTime.Now.ToString("yyyyMMddHHmmssffff");
|
|
if (outMst.CN_S_OP_TYPE.Equals(Constants.OutOpType_WxXs) || outMst.CN_S_OP_TYPE.Equals(Constants.OutOpType_WxXh))
|
{
|
//库区量表下降
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().UpdateAreaQty(areaList, trans);
|
state = Constants.State_Completed;
|
//消耗出库直接降库存
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().UpdateStockQty(stockList, trans, timeStamp);
|
|
|
//下降托盘物料数据量
|
CreateDAL<TN_WM_SORTING_LISTDAL>().DropTrayItemQty(trayItemMstList, null, trans);
|
//出库单数据
|
if (reduceMst != null)
|
{
|
//出库单子表数据
|
List<TN_WM_REDUCE_INVENTORY_DTLEntity> reduceInventoryDtlList = new List<TN_WM_REDUCE_INVENTORY_DTLEntity>();
|
reduceMst.ForEach(p =>
|
{
|
reduceInventoryDtlList.AddRange(p.DTLEntity);
|
});
|
CreateDAL<DapperDAL<TN_WM_REDUCE_INVENTORY_MSTEntity>>().AddRange(reduceMst, trans);
|
CreateDAL<DapperDAL<TN_WM_REDUCE_INVENTORY_DTLEntity>>().AddRange(reduceInventoryDtlList, trans);
|
}
|
}
|
else
|
{
|
//库存分配量上升
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().UpdateStockAllocQty(stockList, trans, timeStamp);
|
}
|
//全部为消耗出库直接结束单据 ,状态置为'已完成'
|
if (outMst.OutDtlList.Sum(x => x.CN_F_QUANTITY) ==
|
outMst.OutDtlList.Where(x => x.CN_C_AUTO_INOUT).Sum(y => y.CN_F_QUANTITY))
|
{
|
state = Constants.State_Completed;
|
}
|
//存在大件时拆单
|
if (outMst.BigOutMst != null)
|
{
|
//生成新的大件单据
|
CreateDapperDAL<TN_WM_OUT_MSTEntity>().Add(outMst.BigOutMst, trans);
|
CreateDapperDAL<TN_WM_OUT_DTLEntity>().AddRange(outMst.BigOutMst.OutDtlList, trans);
|
//添加日志
|
CreateDAL<DapperDAL<TN_WM_B_BILL_EXECEntity>>().Add(OutBillExec(outMst.BigOutMst.CN_S_OP_NO, Constants.State_Audit, user), trans);
|
//生成新的非大件的单据
|
if (outMst.OtherOutMst != null)
|
{
|
CreateDapperDAL<TN_WM_OUT_MSTEntity>().Add(outMst.OtherOutMst, trans);
|
CreateDapperDAL<TN_WM_OUT_DTLEntity>().AddRange(outMst.OtherOutMst.OutDtlList, trans);
|
//添加日志
|
CreateDAL<DapperDAL<TN_WM_B_BILL_EXECEntity>>().Add(OutBillExec(outMst.OtherOutMst.CN_S_OP_NO, Constants.State_Audit, user), trans);
|
}
|
//取消当前的单据
|
CreateDapperDAL<TN_WM_OUT_MSTEntity>().Update(new
|
{
|
CN_B_CANCEL = true
|
}, new
|
{
|
CN_S_OP_NO = outMst.CN_S_OP_NO
|
}, trans);
|
//添加日志
|
CreateDAL<DapperDAL<TN_WM_B_BILL_EXECEntity>>().Add(OutBillExec(opNo, Constants.State_Cancel, user), trans);
|
}
|
else
|
{
|
//修改主表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Update(
|
new
|
{
|
CN_S_STATE = state,
|
CN_S_AUDITOR = user.CN_S_NAME,
|
CN_T_AUDIT_TIME = DateTime.Now,
|
CN_S_MODIFY = user.CN_S_NAME,
|
CN_S_MODIFY_BY = user.CN_S_LOGIN,
|
CN_T_MODIFY = DateTime.Now
|
},
|
new { CN_S_OP_NO = opNo }, trans);
|
//修改子表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().Update(new { CN_S_STATE = state }, new { CN_S_OP_NO = opNo }, trans);
|
}
|
//库存编辑量下降
|
stockList.ForEach(s => { s.CN_S_TIMESTAMP = timeStamp; });
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().UpdateStockEditingQty(stockList, trans);
|
//添加日志
|
CreateDAL<DapperDAL<TN_WM_B_BILL_EXECEntity>>().Add(OutBillExec(opNo, Constants.Operate_Audit, user), trans);
|
});
|
if ((outMst.CN_S_OP_TYPE.Equals(Constants.OutOpType_WxXs) || outMst.CN_S_OP_TYPE.Equals(Constants.OutOpType_WxXh)) && operateResult.Success && trayLocationList != null)
|
{
|
var currentTrayItemMst = CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().GetList(new
|
{
|
CN_S_TRAY_CODE = trayLocationList.Select(x => x.CN_S_TRAY_CODE).ToList()
|
});
|
List<TN_WM_B_TRAY_LOCATIONEntity> clearLocations = new List<TN_WM_B_TRAY_LOCATIONEntity>();
|
foreach (var trayLocation in trayLocationList)
|
{
|
if (!currentTrayItemMst.FindAll(x => x.CN_S_TRAY_CODE.Equals(trayLocation.CN_S_TRAY_CODE)).Any())
|
clearLocations.Add(trayLocation);
|
}
|
if (clearLocations.Any())
|
{
|
operateResult = UseTransaction(trans =>
|
{
|
foreach (var clearLocation in clearLocations)
|
{
|
CreateDAL<TN_WM_SORTING_LISTDAL>().ClearLocationByTrayCode(clearLocation, trans);
|
}
|
});
|
}
|
}
|
return operateResult;
|
}
|
#endregion
|
|
#region 反审
|
/// <summary>
|
/// 反审
|
/// </summary>
|
/// <param name="opNo"></param>
|
/// <param name="stockList"></param>
|
/// <returns></returns>
|
public OperateResult ReAuditOut(string opNo, List<TN_WM_B_STOCK_QTYEntity> stockList, RedisUserEntity user)
|
{
|
return UseTransaction(trans =>
|
{
|
//修改主表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Update(new { CN_S_STATE = Constants.State_ReAudit }, new { CN_S_OP_NO = opNo }, trans);
|
//修改子表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().Update(new { CN_S_STATE = Constants.State_ReAudit }, new { CN_S_OP_NO = opNo }, trans);
|
//库存分配量下降
|
string timeStamp = DateTime.Now.ToString("yyyyMMddHHmmssffff");
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().UpdateStockAllocQty(stockList, trans, timeStamp);
|
//库存编辑量上升
|
stockList.ForEach(s => { s.CN_S_TIMESTAMP = timeStamp; });
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().UpdateStockEditingQty(stockList, trans);
|
//添加日志
|
CreateDAL<DapperDAL<TN_WM_B_BILL_EXECEntity>>().Add(OutBillExec(opNo, Constants.Operate_ReAudit, user), trans);
|
});
|
|
}
|
#endregion
|
|
#region 合单
|
/// <summary>
|
/// 合单
|
/// </summary>
|
/// <param name="newOutMstEntity"></param>
|
/// <param name="oldOutMstList"></param>
|
/// <returns></returns>
|
public OperateResult MergeOrder(TN_WM_OUT_MSTEntity newOutMstEntity, List<TN_WM_OUT_MSTEntity> oldOutMstList, RedisUserEntity user)
|
{
|
return UseTransaction(trans =>
|
{
|
//合单的单据状态设 取消,父单据号
|
CreateDAL<TN_WM_OUT_MSTDAL>().UpdateMstMerage(oldOutMstList, trans);
|
//新增合单的主表
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Add(newOutMstEntity, trans);
|
//新增合单的子表
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().AddRange(newOutMstEntity.OutDtlList, trans);
|
//添加日志
|
string progRess = Constants.Operate_MergeOrder + ":" + newOutMstEntity.CN_S_OP_NO + ";来源:" + string.Join(",", oldOutMstList.Select(x => x.CN_S_OP_NO));
|
CreateDAL<DapperDAL<TN_WM_B_BILL_EXECEntity>>().Add(OutBillExec(newOutMstEntity.CN_S_OP_NO, Constants.Operate_MergeOrder, user, progRess), trans);
|
});
|
}
|
#endregion
|
|
#region 获取订单日志实体
|
/// <summary>
|
/// 获取订单日志实体
|
/// </summary>
|
/// <param name="opNo"></param>
|
/// <param name="opType"></param>
|
/// <param name="user"></param>
|
/// <returns></returns>
|
public TN_WM_B_BILL_EXECEntity OutBillExec(string opNo, string operate, RedisUserEntity user, string progRess = "")
|
{
|
return new TN_WM_B_BILL_EXECEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_C_IS_KEY = Constants.Y,
|
CN_S_EXECUTOR = user.CN_S_LOGIN,
|
CN_S_EXECUTOR_BY = user.CN_S_NAME,
|
CN_S_NOTE = "",
|
CN_S_OP_NO = opNo,
|
CN_S_OP_TYPE = Constants.Out,
|
CN_S_PROGRESS = string.IsNullOrEmpty(progRess) ? operate + ":" + opNo : progRess,
|
CN_T_EXECUTE = DateTime.Now
|
};
|
}
|
#endregion
|
|
#region 获取出库单主子表信息
|
/// <summary>
|
/// 获取出库单主子表信息
|
/// </summary>
|
/// <param name="outNo"></param>
|
/// <returns></returns>
|
public TN_WM_OUT_MSTEntity GetOut(string outNo)
|
{
|
if (string.IsNullOrEmpty(outNo))
|
throw new Exception("出库单不可为空");
|
var outMst = CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().GetSingleEntity(new
|
{
|
CN_S_OP_NO = outNo
|
});
|
if (outMst == null)
|
throw new Exception("未找到出库单:" + outNo);
|
var outDtl = CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().GetList(new
|
{
|
CN_S_OP_NO = outNo
|
});
|
if (!outDtl.Any())
|
throw new Exception("未找到出库单:" + outNo + "的物料");
|
outMst.OutDtlList = outDtl;
|
return outMst;
|
}
|
#endregion
|
|
#region 获取出库单主子表信息
|
/// <summary>
|
/// 获取出库单主子表信息
|
/// </summary>
|
/// <param name="outList"></param>
|
/// <returns></returns>
|
public List<TN_WM_OUT_MSTEntity> GetOutList(List<string> outList)
|
{
|
var outMstList = CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().GetList(new
|
{
|
CN_S_OP_NO = outList
|
});
|
var outDtlList = CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().GetList(new
|
{
|
CN_S_OP_NO = outList
|
});
|
foreach (var outMst in outMstList)
|
{
|
var currentOutDtl = outDtlList.FindAll(x => x.CN_S_OP_NO == outMst.CN_S_OP_NO);
|
if (!currentOutDtl.Any())
|
throw new Exception("未找到出库单:" + outMst.CN_S_OP_NO + "的物料");
|
outMst.OutDtlList = currentOutDtl;
|
}
|
return outMstList;
|
}
|
#endregion
|
|
#region 获取出库单主子表信息
|
/// <summary>
|
/// 获取出库单主子表信息
|
/// </summary>
|
/// <param name="outList"></param>
|
/// <returns></returns>
|
public List<TN_WM_OUT_MSTEntity> GetOutListByWave(string waveNo)
|
{
|
var outMstList = CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().GetList(new
|
{
|
CN_S_WAVE_CODE = waveNo
|
});
|
var outDtlList = CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().GetList(new
|
{
|
CN_S_OP_NO = outMstList.Select(s => s.CN_S_OP_NO).ToList()
|
});
|
foreach (var outMst in outMstList)
|
{
|
var currentOutDtl = outDtlList.FindAll(x => x.CN_S_OP_NO == outMst.CN_S_OP_NO);
|
if (!currentOutDtl.Any())
|
throw new Exception("未找到出库单:" + outMst.CN_S_OP_NO + "的物料");
|
outMst.OutDtlList = currentOutDtl;
|
}
|
return outMstList;
|
}
|
#endregion
|
|
#region K3出库对接
|
public OperateResult K3_Out(object Param, IDbTransaction trans)
|
{
|
|
//获取策略:是否需要与K3对接
|
string isUseK3 = "";// GetStrategy(stockCode, StrategyKey.IsUseK3);
|
|
//吉鑫祥项目需要反馈K3系统
|
if (Constants.SysConfig.APP_NAME == "JXX" && isUseK3.Equals("Y"))
|
{
|
}
|
|
|
return OperateResult.Error("未知");
|
}
|
|
|
|
#endregion
|
|
#region 根据包装箱编码查询数据
|
/// <summary>
|
/// 根据包装箱编码查询数据
|
/// </summary>
|
/// <returns></returns>
|
/// <history>[HanHe(LT)] CREATED 2019/1/8</history>
|
public DataTable GetOutPack(string sqlwhere)
|
{
|
return CreateDAL<TN_WM_OUT_MSTDAL>().GetOutPack(sqlwhere);
|
}
|
|
|
/// <summary>
|
/// 根据包装箱编码查询数据
|
/// </summary>
|
/// <returns></returns>
|
/// <history>[HanHe(LT)] CREATED 2019/1/8</history>
|
public DataTable GetBoxdtl(string sqlwhere)
|
{
|
DataTable dt = CreateDAL<TN_WM_OUT_MSTDAL>().GetBoxdtl(sqlwhere);
|
dt.Columns.Add("CN_S_MODEL");
|
//dt.Columns.Add("CN_S_MEASURE_UNIT");
|
Dictionary<string, string> itemDic = new Dictionary<string, string>();
|
foreach (DataRow row in dt.Rows)
|
{
|
if (!string.IsNullOrEmpty(row["CN_S_ITEM_CODE"].ToString()))
|
{
|
if (!itemDic.ContainsKey(row["CN_S_ITEM_CODE"].ToString()))
|
{
|
AutoBomItemEntity ItemEntity = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(row["CN_S_ITEM_CODE"].ToString());
|
row["CN_S_MODEL"] = ItemEntity == null ? "" : ItemEntity.CN_S_MODEL;
|
row["CN_S_MEASURE_UNIT"] = ItemEntity == null ? "" : ItemEntity.CN_S_MEASURE_UNIT;
|
itemDic.Add(row["CN_S_ITEM_CODE"].ToString(), ItemEntity == null ? "" : ItemEntity.CN_S_MODEL + "|" + ItemEntity.CN_S_MEASURE_UNIT);
|
|
}
|
else
|
{
|
var s = itemDic[row["CN_S_ITEM_CODE"].ToString()].Split('|');
|
row["CN_S_MODEL"] = s[0];
|
row["CN_S_MEASURE_UNIT"] = s[1];
|
}
|
}
|
}
|
return dt;
|
}
|
#endregion
|
|
#region U8服务调用-新增出库单主子表
|
/// <summary>
|
/// U8服务调用-新增出库单主子表
|
/// </summary>
|
/// <param name="mstList">出库单主子表集合</param>
|
/// <returns></returns>
|
public OperateResult AddU8OutData(List<TN_WM_OUT_MSTEntity> mstList)
|
{
|
#region 组织数据锁定库存,增加分配量
|
//待批分数据
|
List<BatchesEntity> batchesList = new List<BatchesEntity>();
|
foreach (var mst in mstList)
|
{
|
foreach (var dtl in mst.OutDtlList)
|
{
|
batchesList.Add(new BatchesEntity()
|
{
|
ItemCode = dtl.CN_S_ITEM_CODE,
|
ItemState = dtl.CN_S_ITEM_STATE,
|
ItemArrivalLot = dtl.CN_S_LOT_CODE,
|
ItemProductionLot = dtl.CN_S_PRODUCTION_BATCH,
|
Owner = mst.CN_S_OWNER,
|
Qty = dtl.CN_F_QUANTITY,
|
StockCode = mst.CN_S_STOCK_CODE,
|
AreaCode = mst.CN_S_AREA,
|
OpNo = mst.CN_S_OP_NO,
|
OutMst = mst,
|
IsFilter = dtl.CN_C_AUTO_INOUT
|
});
|
}
|
}
|
//当前子表物料库存
|
var stockList = BLLCreator.Create<DapperBLL<TN_WM_B_STOCK_QTYEntity>>().GetList(new
|
{
|
CN_S_ITEM_CODE = batchesList.Select(p => p.ItemCode).ToList()
|
});
|
//算法策略
|
List<string> lstStrate = BLLCreator.Create<TN_WM_B_STRATEGYBLL>().GetStrateListByAreaOrStock("", "", Constants.Out)
|
.OrderByDescending(a => a.CN_N_PRIORITY).Select(o => o.CN_S_CODE).ToList();
|
|
//Log.Info("AddU8OutData mstList", JsonConvert.SerializeObject(mstList));
|
//Log.Info("AddU8OutData batchesList", JsonConvert.SerializeObject(batchesList));
|
//正批分分配量
|
var batchResult = stockList.BatchesStockQty(batchesList, BatchesType.ForwardBatch, StockBatchesField.AllocationQty, lstStrate);
|
if (!batchResult.Success) return batchResult;
|
|
#endregion
|
|
OperateResult operateResult = UseTransaction(trans =>
|
{
|
for (int i = 0; i < mstList.Count; i++)
|
{
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Add(mstList[i], trans);
|
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().AddRange(mstList[i].OutDtlList, trans);
|
}
|
//增加量表分配量
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().UpdateStockAllocQty(stockList, trans);
|
});
|
return operateResult;
|
}
|
#endregion
|
|
#region MES调用-接收出库订单
|
public MesDYResponse CreateOutOrder(StockOutCreateRequest request)
|
{
|
DeliveryOrder deliveryOrder = request.DeliveryOrder;
|
if (string.IsNullOrEmpty(deliveryOrder.StockCode))
|
{
|
var stockList = CreateDAL<TN_AB_B_STOCK_AREADAL>().GetStockList();
|
if (stockList.Any())
|
{
|
deliveryOrder.StockCode = stockList[0].CN_S_STOCK_CODE;
|
}
|
}
|
|
TN_WM_OUT_MSTEntity outMst = new TN_WM_OUT_MSTEntity();
|
List<TN_WM_OUT_DTLEntity> outDtlList = new List<TN_WM_OUT_DTLEntity>();
|
|
outMst.CN_GUID = Guid.NewGuid().ToString().ToUpper(); //guid
|
outMst.CN_S_OP_NO = deliveryOrder.DeliveryOrderCode; //发货通知单号
|
outMst.CN_S_MODIFY = deliveryOrder.Creator; //修改人
|
outMst.CN_S_MODIFY_BY = deliveryOrder.CreatorBy; //修改人
|
outMst.CN_S_OWNER = deliveryOrder.OwnerCode; //货主
|
outMst.CN_T_MODIFY = DateTime.Now; //修改时间
|
outMst.CN_S_STOCK_CODE = deliveryOrder.StockCode; //仓库编码
|
outMst.CN_S_OP_TYPE = deliveryOrder.OrderType; //业务类型
|
outMst.CN_S_CREATOR = deliveryOrder.Creator; //创建人
|
outMst.CN_T_OP_DATE = Convert.ToDateTime(deliveryOrder.CreateTime); //业务日期
|
outMst.CN_S_CREATOR_BY = deliveryOrder.CreatorBy; //创建人
|
outMst.CN_T_CREATE = DateTime.Now; //创建时间
|
outMst.CN_S_STATE = Constants.State_Audit; //,:CN_S_STATE
|
outMst.CN_S_DELIVERY_MODE = ""; //提货方式
|
outMst.CN_S_VENDOR_NO = deliveryOrder.SupplierCode; //供应商编码
|
outMst.CN_S_VENDOR_NAME = deliveryOrder.SupplierName;//供应商名称
|
outMst.CN_S_OP_FROM = "MES"; //MES来源
|
outMst.CN_S_FROM_NO = deliveryOrder.FromOrderNo; //来源单号
|
outMst.CN_S_NOTE = deliveryOrder.Note; //摘要
|
outMst.CN_S_WAVE_CODE = ""; //波次
|
outMst.CN_S_FORWARDING_WAY = deliveryOrder.TransportMode; //发运方式
|
outMst.CN_S_VENDOR_NO = deliveryOrder.SupplierCode;
|
outMst.CN_S_CUSTOMER_NAME = deliveryOrder.SupplierName;
|
|
|
outMst.CN_S_OPERATOR = deliveryOrder.Operator; //制单人
|
outMst.CN_S_AUDITOR = "汉和信息"; //审核人
|
outMst.CN_T_AUDIT_TIME = DateTime.Now; //审核日期
|
outMst.CN_S_AUDIT_REMARK = ""; //审核备注
|
outMst.CN_S_CONTRACT_NUM = ""; //合同号
|
|
if (request.OrderLines.Count > 0)
|
{
|
foreach (var orderLine in request.OrderLines)
|
{
|
TN_WM_OUT_DTLEntity outDtl = new TN_WM_OUT_DTLEntity();
|
outDtl.CN_GUID = Guid.NewGuid().ToString().ToUpper(); //guid
|
outDtl.CN_S_OP_NO = deliveryOrder.DeliveryOrderCode; //发货通知单号
|
outDtl.CN_S_CREATOR = deliveryOrder.Creator; //创建人
|
outDtl.CN_N_ROW_NO = Convert.ToInt32(orderLine.OrderLineNo); //行号
|
outDtl.CN_S_SERIAL_NO = ""; //产品序列号
|
outDtl.CN_S_CREATOR_BY = deliveryOrder.CreatorBy; //创建人
|
outDtl.CN_S_ITEM_CODE = orderLine.ItemCode; //物料编码
|
outDtl.CN_T_CREATE = DateTime.Now; //创建时间
|
outDtl.CN_S_ITEM_NAME = orderLine.ItemName; //物料名称
|
outDtl.CN_S_MODIFY = deliveryOrder.Creator; //修改人
|
outDtl.CN_S_MODIFY_BY = deliveryOrder.CreatorBy; //修改人
|
outDtl.CN_T_MODIFY = DateTime.Now; //修改时间
|
outDtl.CN_S_ITEM_STATE = orderLine.itemState; //物料状态
|
outDtl.CN_S_PRODUCTION_BATCH = orderLine.BatchCode; //批次
|
outDtl.CN_F_QUANTITY = orderLine.PlanQty; //数量
|
outDtl.CN_F_ADDUP_DELIVERY_QTY = 0; //
|
outDtl.CN_S_STATE = Constants.State_Audit; //状态
|
outDtl.CN_S_NOTE = ""; //备注
|
outDtl.CN_F_ADDUP_OUTSTOCK_QTY = 0;
|
outDtl.CN_F_ADDUP_RETSTOCK_QTY = 0;
|
outDtl.CN_F_SALE_PRICE = 0; //销售价格
|
outDtl.CN_F_SALE_MONEY = 0; //销售金额
|
|
AutoBomItemEntity itemenity = BLLCreator.Create<CoreServer.MongoBLL>().GetItemEntity(orderLine.ItemCode);
|
if (itemenity != null)
|
{
|
outDtl.CN_S_MODEL = itemenity.CN_S_MODEL; //规格型号
|
outDtl.CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO; //图号
|
outDtl.CN_C_IS_WARRANTY_PARTS = itemenity.CN_C_IS_WARRNTY_PARTS; //是否质保件
|
outDtl.CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT; //单位
|
}
|
outDtlList.Add(outDtl);
|
}
|
}
|
OperateResult operateResult = UseTransaction(trans =>
|
{
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Add(outMst, trans);
|
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().AddRange(outDtlList, trans);
|
|
});
|
|
MesDYResponse response = new MesDYResponse();
|
//出库单创建日期
|
response.CreateTime = request.DeliveryOrder.CreateTime;
|
//出库单号
|
response.DeliveryOrderId = request.DeliveryOrder.DeliveryOrderCode;
|
//响应结果:True False
|
response.Flag = operateResult.Success.ToString();
|
//消息
|
if (!operateResult.Success)
|
response.Message = operateResult.Msg;
|
return response;
|
}
|
#endregion
|
|
#region 获取非内销的审核单据
|
/// <summary>
|
/// 获取非内销的审核单据
|
/// </summary>
|
/// <returns></returns>
|
public List<TN_WM_OUT_MSTEntity> GetNeNxAuditedList()
|
{
|
return CreateDAL<TN_WM_OUT_MSTDAL>().GetNeNxAuditedList();
|
}
|
#endregion
|
}
|
}
|