using HH.Redis.ReisModel;
|
using HH.WMS.BLL.Algorithm;
|
using HH.WMS.BLL.Basic;
|
using HH.WMS.BLL.Interface;
|
using HH.WMS.Common;
|
using HH.WMS.Common.Algorithm;
|
using HH.WMS.Common.External;
|
using HH.WMS.DAL;
|
using HH.WMS.DAL.Algorithm;
|
using HH.WMS.DAL.Basic;
|
using HH.WMS.DAL.InStock;
|
using HH.WMS.DAL.SysMgr;
|
using HH.WMS.Entitys;
|
using HH.WMS.Entitys.Algorithm;
|
using HH.WMS.Entitys.Basic;
|
using HH.WMS.Entitys.Entitys;
|
using Newtonsoft.Json;
|
using Newtonsoft.Json.Linq;
|
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_B_TRAY_ITEM_RELBLL : DapperBaseBLL
|
{
|
#region GET
|
|
/// <summary>
|
/// 根据托盘号获取主子表
|
/// </summary>
|
/// <param name="trayCode"></param>
|
/// <returns></returns>
|
public List<TN_WM_B_TRAY_ITEM_MSTEntity> GetByTrayCode(string trayCode)
|
{
|
var trayItemMsts = BLLCreator.Create<DapperBLL<TN_WM_B_TRAY_ITEM_MSTEntity>>().GetList(new { CN_S_TRAY_CODE = trayCode });
|
foreach (var trayItemMst in trayItemMsts)
|
{
|
trayItemMst.TrayItemDtlList = BLLCreator.Create<DapperBLL<TN_WM_B_TRAY_ITEM_DTLEntity>>().GetList(new { CN_PARENT_GUID = trayItemMst.CN_GUID });
|
}
|
return trayItemMsts;
|
}
|
|
/// <summary>
|
/// 货位内托盘本物料汇总
|
/// </summary>
|
/// <param name="itemCode">物料编码</param>
|
/// <param name="strWhere">条件</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-16</History>
|
public TN_WM_B_TRAY_ITEM_MSTEntity GetInStockQty(string itemCode, string strWhere)
|
{
|
return CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetInStockQty(itemCode, strWhere);
|
}
|
|
public DataTable GetTrayDetail(string trayCode)
|
{
|
return CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayDetail(trayCode);
|
}
|
public DataTable GetTrayDetailCheck(string trayCode)
|
{
|
return CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayDetailCheck(trayCode);
|
}
|
public DataTable GetTrayDetailManual(string trayCode, string itemCode, string lotNo)
|
{
|
return CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayDetailManual(trayCode, itemCode, lotNo);
|
}
|
public DataTable GetTrayItemDetail(string trayCode)
|
{
|
return CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayItemDetail(trayCode);
|
}
|
public DataTable GetTrayDetailYS(string trayCode)
|
{
|
return CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayDetailYS(trayCode);
|
}
|
public int GetGoodTypeInTray(string trayCode)
|
{
|
return CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetGoodTypeInTray(trayCode);
|
}
|
public DataTable GetTrayInfoYS(string trayCode)
|
{
|
return CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayInfoYS(trayCode);
|
}
|
|
/// <summary>
|
/// 获取货位托盘中物料的信息,按批次汇总
|
/// </summary>
|
/// <param name="trayCode">托盘号</param>
|
/// <returns></returns>
|
/// <History>[Hanhe(DBS)] CREATED BY 2018/12/8</History>
|
public DataTable GetTrayItem(string locationCode)
|
{
|
|
var dt = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayItem(locationCode);
|
dt.Columns.Add("CN_S_WEIGHT", typeof(string));
|
foreach (DataRow dr in dt.Rows)
|
{
|
var item = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(dr["CN_S_ITEM_CODE"].ToString());
|
if (item != null)
|
{
|
dr["CN_S_WEIGHT"] = item.CN_F_NW.ToString();
|
}
|
else
|
{
|
dr["CN_S_WEIGHT"] = "0";
|
}
|
|
}
|
return dt;
|
}
|
public DataTable GetTrayItemYS(string locationCode)
|
{
|
|
var dt = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayItemYS(locationCode);
|
dt.Columns.Add("CN_S_WEIGHT", typeof(string));
|
foreach (DataRow dr in dt.Rows)
|
{
|
var item = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(dr["CN_S_ITEM_CODE"].ToString());
|
if (item != null)
|
{
|
dr["CN_S_WEIGHT"] = item.CN_F_NW.ToString();
|
}
|
else
|
{
|
dr["CN_S_WEIGHT"] = "0";
|
}
|
|
}
|
return dt;
|
}
|
public DataTable GetTrayItemJx(string locationCode)
|
{
|
|
TN_WM_LOCATION_EXTEntity locationModel = CreateDAL<TN_WM_LOCATION_EXTDAL>().GetModel(" WHERE CN_S_LOCATION_CODE = '" + locationCode + "'").FirstOrDefault();
|
DataTable dt = new DataTable();
|
if (locationModel.CN_S_LOCATION_STATE == Constants.Location_State_Normal)
|
{
|
dt = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayItemJx(locationCode);
|
}
|
else if (locationModel.CN_S_LOCATION_STATE == Constants.Location_State_InLock)
|
{
|
dt = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayItemJxInLock(locationCode);
|
}
|
else if (locationModel.CN_S_LOCATION_STATE == Constants.Location_State_OutLock)
|
{
|
dt = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayItemJxOutLock(locationCode);
|
}
|
return dt;
|
}
|
|
/// <summary>
|
/// 获取货位托盘中物料的信息,按批次汇总
|
/// </summary>
|
/// <param name="trayCode">托盘号</param>
|
/// <returns></returns>
|
/// <History>[Hanhe(DBS)] CREATED BY 2018/12/8</History>
|
public DataTable GetTrayItemLJ(string locationCode)
|
{
|
|
var dt = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayItemLJ(locationCode);
|
dt.Columns.Add("CN_S_WEIGHT", typeof(string));
|
foreach (DataRow dr in dt.Rows)
|
{
|
var item = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(dr["CN_S_ITEM_CODE"].ToString());
|
if (item != null)
|
{
|
dr["CN_S_WEIGHT"] = item.CN_F_NW.ToString();
|
}
|
else
|
{
|
dr["CN_S_WEIGHT"] = "0";
|
}
|
|
}
|
return dt;
|
}
|
|
/// <summary>
|
/// 根据托盘码里面物料获取库区
|
/// </summary>
|
/// <param name="trayCode">托盘码</param>
|
/// <history>[HanHe(XDL)] CREATED 2019/04/11</history>
|
public OperateResult GetTrayItemByArea(string trayCode)
|
{
|
TN_WM_B_TRAY_ITEM_MSTEntity mstEntity = CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().GetSingleEntity(new { CN_S_TRAY_CODE = trayCode });
|
|
var CN_S_AREA_CODE = "";
|
var CN_S_AREA_NAME = "";
|
if (mstEntity != null)
|
{
|
AutoBomItemEntity itementity = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(mstEntity.CN_S_ITEM_CODE);//获取物料判断物料类型
|
List<AutoBomPartition_Item_REntity> list = new List<AutoBomPartition_Item_REntity>();
|
List<AutoBomAreaLocation_REntity> listr = new List<AutoBomAreaLocation_REntity>();
|
if (string.IsNullOrEmpty(itementity.CN_S_STORE_TYPE))//判断物料存储类别是否为空
|
{
|
list = CreateDAL<TN_WMS_AREADAL>().GetPartitionItem(mstEntity.CN_S_ITEM_CODE, 2);
|
}
|
else
|
{
|
list = CreateDAL<TN_WMS_AREADAL>().GetPartitionItem(itementity.CN_S_STORE_TYPE, 1);
|
}
|
if (list.Count > 0)
|
{
|
listr = CreateDAL<TN_WMS_AREADAL>().GetAreaLocationByGuid(list[0].CN_S_AREA_GUID);//获取逻辑分区表数据
|
}
|
|
if (listr.Count > 0)
|
{
|
AutoBomStockAreaEntity entityarea = CreateDAL<TN_AB_B_STOCK_AREADAL>().GetStockAreaEntity(listr[0].CN_S_STOCK_AREA);
|
CN_S_AREA_NAME = entityarea.CN_S_AREA_NAME == null ? "" : entityarea.CN_S_AREA_NAME;
|
CN_S_AREA_CODE = entityarea.CN_S_AREA_CODE == null ? "" : entityarea.CN_S_AREA_CODE;
|
}
|
}
|
var Area = new
|
{
|
CN_S_AREA_CODE = CN_S_AREA_CODE,
|
CN_S_AREA_NAME = CN_S_AREA_NAME
|
|
};
|
return OperateResult.Succeed("", Area);
|
}
|
|
/// <summary>
|
/// 通过托盘码和排除已在的料箱码之后改托盘码是否还有其他料箱码
|
/// </summary>
|
/// <param name="trayCode">托盘码</param>
|
/// <param name="UniqueCodes">已存在的料箱码</param>
|
/// <returns></returns>
|
public List<TN_WM_B_TRAY_ITEM_DTLEntity> GetTrayUniqueCode(string trayCode, string UniqueCodes)
|
{
|
return CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayUniqueCode(trayCode, UniqueCodes);
|
}
|
|
/// <summary>
|
/// 根据托盘码获取子表
|
/// </summary>
|
/// <param name="trayCode"></param>
|
/// <returns></returns>
|
public List<TN_WM_B_TRAY_ITEM_DTLEntity> GetTrayItemDtlByTrayCode(string trayCode)
|
{
|
return CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetDtlByTrayCode(trayCode);
|
}
|
|
public decimal GetWeightByLocationCode(string locationCode)
|
{
|
decimal weight = 0;
|
try
|
{
|
var trayLocations = DALCreator.Create<TN_WM_B_TRAY_LOCATIONDAL>().GetListByLocationCode(locationCode);
|
foreach (var trayLocation in trayLocations)
|
{
|
var trayItemDtls = DALCreator.Create<TN_WM_B_TRAY_ITEM_RELDAL>().GetDtlByTrayCode(trayLocation.CN_S_TRAY_CODE);
|
foreach (var trayItemDtl in trayItemDtls)
|
{
|
weight += Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO);
|
}
|
}
|
}
|
catch (Exception)
|
{
|
}
|
return weight;
|
}
|
|
#endregion
|
|
#region DELETE
|
|
/// <summary>
|
/// 删除托盘物料的主子表
|
/// </summary>
|
/// <param name="sqlWhere"></param>
|
/// <param name="logPara"></param>
|
/// <param name="trans"></param>
|
/// <returns></returns>
|
public OperateResult Delete(string sqlWhere, IDbTransaction trans = null, LogPara logPara = null)
|
{
|
var result = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().DeleteTrayItem(sqlWhere, trans);
|
if (logPara != null)
|
Log.Detail(logPara, "删除托盘物料关联(主表、子表)!条件:" + sqlWhere + result.Describe());
|
return result;
|
}
|
|
#endregion
|
|
#region 码盘(PDA接口)
|
/// <summary>
|
/// 码盘
|
/// </summary>
|
/// <param name="jsonData">数据Json</param>
|
/// <param name="userEntity">登陆信息实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-17</History>
|
public OperateResult SavePalletItemRelation(ItemOnTrayEntity entity, RedisUserEntity userEntity)
|
{
|
OperateResult operateResult = new OperateResult();
|
string trayNo = entity.CN_S_TRAY_CODE;
|
try
|
{
|
List<TN_WM_B_TRAY_INFOEntity> trayInfoList = new List<TN_WM_B_TRAY_INFOEntity>();
|
if (string.IsNullOrEmpty(entity.CN_S_TRAY_CODE))//托盘号为空需要生成虚拟托盘
|
{
|
#region 生成虚拟托盘实体
|
TN_WM_B_TRAY_INFOEntity trayInfo = new TN_WM_B_TRAY_INFOEntity();
|
|
string postData = "{\"appCode\":\"AutoWMS\",\"ruleName\":\"" + Constants.VirtualTray + "\",\"orgId\":\"" + userEntity.CN_S_ORG_GUID + "\",\"orgFlag\":\"" + userEntity.CN_S_ORGFLAG + "\"}";
|
trayNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
|
if (string.IsNullOrEmpty(trayNo))
|
{
|
return OperateResult.Error("生成虚拟托盘编码失败!");
|
}
|
trayInfo.CN_S_TRAY_CODE = trayNo;
|
trayInfo.CN_S_TRAY_TYPE = Constants.VirtualTray;
|
trayInfo.CN_S_TRAY_CODE_EXT = "";
|
trayInfo.CN_S_SPEC = "";
|
trayInfo.CN_S_SORTING_CODE = "";
|
trayInfo.CN_S_STATE = "使用中";
|
trayInfo.CN_S_USE_STATE = "满";
|
trayInfo.CN_N_COLUMN_NUM = 1;
|
trayInfo.CN_F_GROSSWEIGHT = 0;
|
trayInfo.CN_F_LOADBEARING = 0;
|
trayInfo.CN_F_WEIGHT = 0;
|
trayInfo.CN_N_LATTICE_NUM = 1;
|
trayInfo.CN_N_ROW_NUM = 1;
|
trayInfo.CN_S_COLLECT_CODE = "";
|
trayInfo.CN_S_COLLECT_LOCATION = "";
|
trayInfo.CN_S_CREATOR = userEntity.CN_S_LOGIN;
|
trayInfo.CN_S_CREATOR_BY = userEntity.CN_S_NAME;
|
trayInfo.CN_T_CREATE = DateTime.Now;
|
trayInfo.CN_S_MODIFY = userEntity.CN_S_LOGIN;
|
trayInfo.CN_S_MODIFY_BY = userEntity.CN_S_NAME;
|
trayInfo.CN_T_MODIFY = DateTime.Now;
|
trayInfo.CN_S_DESC = "码盘生成虚拟托盘";
|
|
trayInfoList.Add(trayInfo);
|
#endregion
|
|
//主子结构赋值
|
entity.CN_S_TRAY_CODE = trayNo;
|
foreach (var item in entity.row)
|
{
|
item.CN_S_TRAY_CODE = trayNo;
|
}
|
}
|
|
//拼接托盘物料关联主子表
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemMstlst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemUpdateMstlst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_DTLEntity> TrayItemDtllst = new List<TN_WM_B_TRAY_ITEM_DTLEntity>();
|
|
decimal fweight = 0;//托盘实际重量
|
|
Log.Info("===>传参:====>", JsonConvert.SerializeObject(entity));
|
|
//托盘安放位置
|
AutoBomLocationEntity location = new AutoBomLocationEntity();
|
List<TN_WM_B_TRAY_LOCATIONEntity> TrayLocationlst = new List<TN_WM_B_TRAY_LOCATIONEntity>();
|
|
if (!string.IsNullOrEmpty(entity.CN_S_LOCATION_CODE))
|
{
|
location = BLLCreator.Create<TN_AB_STOCK_LOCATIONBLL>().GetLocationModel(entity.CN_S_LOCATION_CODE);
|
if (location == null)
|
{
|
return OperateResult.Error("货位 " + entity.CN_S_LOCATION_CODE + " 没获取到实体信息!");
|
}
|
|
TrayLocationlst.Add(new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_N_INDEX = 1,
|
CN_S_LOCATION_CODE = entity.CN_S_LOCATION_CODE,
|
CN_S_STOCK_AREA = location.CN_S_AREA_CODE.Trim(),
|
CN_S_STOCK_CODE = location.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE,
|
CN_S_CREATOR = userEntity.CN_S_LOGIN,
|
CN_S_CREATOR_BY = userEntity.CN_S_NAME,
|
CN_T_CREATE = DateTime.Now
|
});
|
}
|
|
var Group_List = entity.row.GroupBy(x => new
|
{
|
x.CN_S_TRAY_CODE,
|
x.CN_S_TRAY_GRID,
|
x.CN_S_ITEM_CODE,
|
x.CN_S_ITEM_STATE,
|
x.CN_S_LOT_NO,
|
x.CN_S_OWNER
|
}).Select(g => new TrayItemRow
|
{
|
CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(),
|
CN_S_TRAY_GRID = string.IsNullOrEmpty(g.FirstOrDefault().CN_S_TRAY_GRID.Trim()) ? "1" : g.FirstOrDefault().CN_S_TRAY_GRID.Trim(),
|
CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(),
|
CN_S_ITEM_STATE = g.FirstOrDefault().CN_S_ITEM_STATE.Trim(),
|
CN_S_LOT_NO = g.FirstOrDefault().CN_S_LOT_NO.Trim(),
|
CN_S_OWNER = g.FirstOrDefault().CN_S_OWNER.Trim(),
|
CN_F_QUANTITY = g.Sum(p => p.CN_F_QUANTITY)
|
}).ToList();
|
|
Log.Info("===>Group_List:====>", JsonConvert.SerializeObject(Group_List));
|
|
for (int i = 0; i < Group_List.Count; i++)
|
{
|
AutoBomItemEntity itemenity = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(Group_List[i].CN_S_ITEM_CODE.ToString());
|
// fweight = fweight + (Convert.ToInt32(Group_List[i].CN_F_QUANTITY)) * itemenity.CN_F_TW;
|
//拼接托盘物料关联主表实体
|
#region 拼接托盘物料关联主表实体
|
var mstGuid = Guid.NewGuid().ToString().ToUpper();
|
var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity
|
{
|
CN_GUID = mstGuid,
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = Group_List[i].CN_S_TRAY_GRID.ToString(),
|
CN_S_OWNER = string.IsNullOrEmpty(Group_List[i].CN_S_OWNER.ToString()) ? Constants.DefaultOwner : Group_List[i].CN_S_OWNER.ToString(),
|
CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.ToString(),
|
CN_S_LOT_NO = Group_List[i].CN_S_LOT_NO.ToString(),
|
CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME,
|
CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO,
|
CN_S_MODEL = itemenity.CN_S_MODEL,
|
CN_S_ITEM_STATE = string.IsNullOrEmpty(Group_List[i].CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : Group_List[i].CN_S_ITEM_STATE.ToString(),
|
CN_F_QUANTITY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()),
|
CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT,
|
CN_F_ALLOC_QTY = 0,
|
CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(),
|
CN_F_INQTY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()),
|
};
|
#endregion
|
Log.Info("===>trayItemMstEntity:====>", JsonConvert.SerializeObject(trayItemMstEntity));
|
#region 拼接托盘物料关联子表实体
|
//判断是否在数据库中已存在,存在的话,主表递增数量,不存在的话,主表追加行
|
var result = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().CheckExists(trayItemMstEntity);
|
var parentGuid = "";
|
if (result.Any())
|
{
|
trayItemMstEntity.CN_GUID = result[0].CN_GUID;
|
TrayItemUpdateMstlst.Add(trayItemMstEntity);
|
parentGuid = result[0].CN_GUID;
|
}
|
else
|
{
|
TrayItemMstlst.Add(trayItemMstEntity);
|
parentGuid = trayItemMstEntity.CN_GUID;
|
}
|
|
Log.Info("===>TrayItemUpdateMstlst:====>", JsonConvert.SerializeObject(TrayItemUpdateMstlst));
|
|
var dtl_List = entity.row.Where(o => o.CN_S_OWNER.Trim() == Group_List[i].CN_S_OWNER.Trim() && o.CN_S_LOT_NO.Trim() == Group_List[i].CN_S_LOT_NO.Trim()
|
&& o.CN_S_ITEM_CODE.Trim() == Group_List[i].CN_S_ITEM_CODE.Trim()).ToList();
|
|
Log.Info("===>dtl_List:====>", JsonConvert.SerializeObject(dtl_List));
|
|
for (int j = 0; j < dtl_List.Count; j++)
|
{
|
var dtlentity = new TN_WM_B_TRAY_ITEM_DTLEntity();
|
|
dtlentity.CN_GUID = Guid.NewGuid().ToString().ToUpper();
|
dtlentity.CN_PARENT_GUID = parentGuid;
|
dtlentity.CN_S_UNIQUE_CODE = "";// entity.row[i].CN_S_UNIQUE_CODE.ToString();
|
dtlentity.CN_S_LOT_NO = dtl_List[j].CN_S_LOT_NO.ToString();
|
dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString();
|
dtlentity.CN_S_PACKING_UNIT = string.IsNullOrEmpty(dtl_List[j].CN_S_PACKING_UNIT) ? "" : dtl_List[j].CN_S_PACKING_UNIT;
|
dtlentity.CN_F_PACKING_QTY = Convert.ToDecimal(dtl_List[j].CN_F_PACKING_QTY);
|
dtlentity.CN_F_QUANTITY = Convert.ToDecimal(dtl_List[j].CN_F_QUANTITY);
|
dtlentity.CN_S_VENDOR_NO = dtl_List[j].CN_S_VENDOR_NO.ToString();
|
dtlentity.CN_S_VENDOR_NAME = dtl_List[j].CN_S_VENDOR_NAME.ToString();
|
dtlentity.CN_F_PURCHASE_PRICE = dtl_List[j].CN_F_PURCHASE_PRICE;
|
dtlentity.CN_F_RETAIL_PRICE = dtl_List[j].CN_F_RETAIL_PRICE;
|
dtlentity.CN_T_PRODUCTION = dtl_List[j].CN_T_PRODUCTION;
|
dtlentity.CN_T_EXPIRATION = dtl_List[j].CN_T_EXPIRATION;
|
dtlentity.CN_S_PRODUCTION_BATCH = dtl_List[j].CN_S_PRODUCTION_BATCH.ToString();
|
dtlentity.CN_S_NOTE = "";
|
dtlentity.CN_S_EXT1 = "";
|
dtlentity.CN_S_EXT2 = "";
|
dtlentity.CN_S_EXT3 = "";
|
dtlentity.CN_S_EXT4 = "";
|
dtlentity.CN_S_EXT5 = "";
|
dtlentity.CN_S_CREATOR = userEntity.CN_S_LOGIN;
|
dtlentity.CN_S_CREATOR_BY = userEntity.CN_S_NAME;
|
dtlentity.CN_T_CREATE = DateTime.Now;
|
dtlentity.CN_S_MODIFY = userEntity.CN_S_LOGIN;
|
dtlentity.CN_S_MODIFY_BY = userEntity.CN_S_NAME;
|
dtlentity.CN_T_MODIFY = DateTime.Now;
|
|
TrayItemDtllst.Add(dtlentity);
|
Log.Info("===>TrayItemDtllst:" + j + "==>", JsonConvert.SerializeObject(TrayItemDtllst));
|
}
|
#endregion
|
}
|
|
|
//策略配置:是否直接生成入库单
|
TN_WM_LOT_INFOEntity lotInfo = new TN_WM_LOT_INFOEntity();
|
TN_WM_INCREASE_INVENTORY_MSTEntity inMstEntity = new TN_WM_INCREASE_INVENTORY_MSTEntity();
|
string codeDiscWithIncrease = GetStrategy(location.CN_S_STOCK_CODE, StrategyKey.CodeDiscWithIncrease);
|
if (codeDiscWithIncrease.Equals("Y"))
|
{
|
#region 拼接批次信息
|
string postDataLot = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.BatchNo + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}";
|
string lotCode = WebApiManager.HttpAutoBom_Post("Api/BillRule/GenBillNo", postDataLot);
|
if (string.IsNullOrEmpty(lotCode))
|
{
|
return OperateResult.Error("生成批次号失败!");
|
}
|
|
lotInfo.CN_GUID = System.Guid.NewGuid().ToString().ToUpper();
|
lotInfo.CN_S_LOT_CODE = lotCode;
|
lotInfo.CN_S_VENDOR_NO = "";
|
lotInfo.CN_S_CREATOR = userEntity.CN_S_LOGIN;
|
lotInfo.CN_S_CREATOR_BY = userEntity.CN_S_NAME;
|
lotInfo.CN_T_CREATE = DateTime.Now;
|
#endregion
|
|
#region 生成入库单主表
|
string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_In + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}";
|
string inOpNo = WebApiManager.HttpAutoBom_Post("Api/BillRule/GenBillNo", postData);
|
//生成入库单号
|
if (string.IsNullOrEmpty(inOpNo))
|
{
|
return OperateResult.Error("生成入库单号失败!");
|
}
|
inMstEntity.CN_GUID = System.Guid.NewGuid().ToString().ToUpper();
|
inMstEntity.CN_S_OP_NO = inOpNo;
|
inMstEntity.CN_T_OPERATE = DateTime.Now;
|
inMstEntity.CN_T_MODIFY = DateTime.Now;
|
inMstEntity.CN_T_CREATE = DateTime.Now;
|
inMstEntity.CN_S_VENDOR_NO = "";
|
inMstEntity.CN_S_VENDOR_NAME = "";
|
inMstEntity.CN_S_STOCK_CODE = location.CN_S_STOCK_CODE;
|
inMstEntity.CN_S_STATE = Constants.State_New;
|
inMstEntity.CN_S_OWNER = Constants.DefaultOwner;
|
inMstEntity.CN_S_OPERATOR = userEntity.CN_S_NAME;
|
inMstEntity.CN_S_OP_TYPE = Constants.DefaultOpType;
|
inMstEntity.CN_S_OP_FROM = "";
|
inMstEntity.CN_S_FROM_NO = "";
|
inMstEntity.CN_S_MODIFY = userEntity.CN_S_LOGIN;
|
inMstEntity.CN_S_MODIFY_BY = userEntity.CN_S_NAME;
|
inMstEntity.CN_S_LOT_NO = lotCode;
|
inMstEntity.CN_S_CREATOR = userEntity.CN_S_LOGIN;
|
inMstEntity.CN_S_CREATOR_BY = userEntity.CN_S_NAME;
|
inMstEntity.CN_S_NOTE = "码盘自动生成";
|
#endregion
|
|
#region 生成入库单子表
|
List<TN_WM_INCREASE_INVENTORY_DTLEntity> dtlEntityList = new List<TN_WM_INCREASE_INVENTORY_DTLEntity>();
|
var rowNo = 1;
|
foreach (var item in Group_List)
|
{
|
AutoBomItemEntity itemenity = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(item.CN_S_ITEM_CODE);
|
|
TN_WM_INCREASE_INVENTORY_DTLEntity dtlEntity = new TN_WM_INCREASE_INVENTORY_DTLEntity();
|
dtlEntity.CN_GUID = System.Guid.NewGuid().ToString().ToUpper();
|
dtlEntity.CN_T_PRODUCTION = item.CN_T_PRODUCTION;
|
dtlEntity.CN_T_MODIFY = DateTime.Now;
|
dtlEntity.CN_T_CREATE = DateTime.Now;
|
dtlEntity.CN_T_EXPIRATION = item.CN_T_EXPIRATION;
|
dtlEntity.CN_S_STATE = Constants.State_New;
|
dtlEntity.CN_S_SERIAL_NO = item.CN_S_SERIAL_NO;
|
dtlEntity.CN_S_PRODUCTION_BATCH = item.CN_S_PRODUCTION_BATCH;
|
dtlEntity.CN_S_OP_NO = inOpNo;
|
dtlEntity.CN_S_MSTGUID = inMstEntity.CN_GUID;
|
dtlEntity.CN_S_SERIAL_NO = "";
|
dtlEntity.CN_S_MODIFY = userEntity.CN_S_LOGIN;
|
dtlEntity.CN_S_MODIFY_BY = userEntity.CN_S_NAME;
|
dtlEntity.CN_S_MODEL = item.CN_S_MODEL;
|
dtlEntity.CN_S_MEASURE_UNIT = item.CN_S_MEASURE_UNIT;
|
dtlEntity.CN_S_ITEM_STATE = string.IsNullOrEmpty(item.CN_S_ITEM_STATE) ? Constants.ItemState_Qualified : item.CN_S_ITEM_STATE;
|
dtlEntity.CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME;
|
dtlEntity.CN_S_ITEM_CODE = item.CN_S_ITEM_CODE;
|
dtlEntity.CN_S_FIGURE_NO = item.CN_S_FIGURE_NO;
|
dtlEntity.CN_S_CREATOR = userEntity.CN_S_LOGIN;
|
dtlEntity.CN_S_CREATOR_BY = userEntity.CN_S_NAME;
|
dtlEntity.CN_S_ARRIVAL_QTY = item.CN_F_QUANTITY == null ? "" : item.CN_F_QUANTITY.ToString();
|
dtlEntity.CN_N_ROW_NO = rowNo;
|
dtlEntity.CN_F_WARRNTY_PARTS = itemenity.CN_F_WARRNTY_PARTS;
|
dtlEntity.CN_F_UPSHELF_QTY = 0;
|
dtlEntity.CN_F_QUANTITY = item.CN_F_QUANTITY == null ? 0 : Convert.ToDecimal(item.CN_F_QUANTITY.ToString());
|
dtlEntity.CN_F_PRINTING_QTY = 0;
|
dtlEntity.CN_F_PLAN_PRICE = 0;
|
dtlEntity.CN_F_PLAN_MONEY = 0;
|
dtlEntity.CN_F_ALLOT_QTY = 0;
|
dtlEntity.CN_F_ADD_ONTRAY_QTY = 0;
|
dtlEntity.CN_S_NOTE = "码盘自动生成";
|
dtlEntity.CN_F_ACTUAL_PRICE = item.CN_F_PURCHASE_PRICE;
|
dtlEntity.CN_F_ACTUAL_MONEY = (item.CN_F_PURCHASE_PRICE == null ? 0 : item.CN_F_PURCHASE_PRICE) * item.CN_F_QUANTITY == null ? 0 : Convert.ToDecimal(item.CN_F_QUANTITY.ToString());
|
dtlEntity.CN_C_IS_SCRAP = Constants.N;
|
dtlEntity.CN_C_IS_BALANCE = Constants.N;
|
|
dtlEntityList.Add(dtlEntity);
|
rowNo++;
|
}
|
|
inMstEntity.DTLEntity = dtlEntityList;
|
#endregion
|
}
|
|
#region 拼接入库上架记录实体
|
var increaseEntity = CreateDAL<DapperDAL<TN_WM_INCREASE_INVENTORY_MSTEntity>>().GetSingleEntity(new { CN_S_LOT_NO = entity.row[0].CN_S_LOT_NO });
|
if (increaseEntity == null)
|
{
|
return OperateResult.Error("根据批次号未获取到入库单实体!");
|
}
|
|
List<TN_WM_UP_HISTORYEntity> upHistoryList = new List<TN_WM_UP_HISTORYEntity>();
|
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemMst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
if (TrayItemMstlst.Any())
|
{
|
var entity1 = (from left in TrayItemMstlst
|
join right in TrayItemDtllst on left.CN_GUID equals right.CN_PARENT_GUID
|
select new TN_WM_UP_HISTORYEntity
|
{
|
CN_GUID = System.Guid.NewGuid().ToString(),
|
CN_S_LOCATION_CODE = "",
|
CN_S_TRAY_CODE = left.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = left.CN_S_TRAY_GRID,
|
CN_S_OWNER = left.CN_S_OWNER,
|
CN_S_ITEM_CODE = left.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = left.CN_S_ITEM_NAME,
|
CN_S_FIGURE_NO = left.CN_S_FIGURE_NO,
|
CN_S_MODEL = left.CN_S_MODEL,
|
CN_S_ITEM_STATE = left.CN_S_ITEM_STATE,
|
CN_F_QUANTITY = right.CN_F_QUANTITY,
|
CN_S_MEASURE_UNIT = left.CN_S_MEASURE_UNIT,
|
CN_S_LOT_NO = right.CN_S_LOT_NO,
|
CN_S_PACKING_UNIT = right.CN_S_PACKING_UNIT,
|
CN_F_PACKING_QTY =decimal.Parse(right.CN_F_PACKING_QTY.ToString()),
|
CN_S_PRODUCTION_BATCH = right.CN_S_PRODUCTION_BATCH,
|
CN_S_CREATOR = userEntity.CN_S_LOGIN,
|
CN_S_CREATOR_BY = userEntity.CN_S_NAME,
|
CN_T_CREATE = DateTime.Now,
|
CN_S_MODIFY = userEntity.CN_S_LOGIN,
|
CN_S_MODIFY_BY = userEntity.CN_S_NAME,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_OP_FROM = "入库单",
|
CN_S_FROM_NO = increaseEntity.CN_S_OP_NO,
|
CN_S_STOCK_CODE = "",
|
CN_S_STOCK_AREA = ""
|
}).ToList();
|
upHistoryList.AddRange(entity1);
|
}
|
|
if (TrayItemUpdateMstlst.Any())
|
{
|
var entity2 = (from left in TrayItemUpdateMstlst
|
join right in TrayItemDtllst on left.CN_GUID equals right.CN_PARENT_GUID
|
select new TN_WM_UP_HISTORYEntity
|
{
|
CN_GUID = System.Guid.NewGuid().ToString(),
|
CN_S_LOCATION_CODE = "",
|
CN_S_TRAY_CODE = left.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = left.CN_S_TRAY_GRID,
|
CN_S_OWNER = left.CN_S_OWNER,
|
CN_S_ITEM_CODE = left.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = left.CN_S_ITEM_NAME,
|
CN_S_FIGURE_NO = left.CN_S_FIGURE_NO,
|
CN_S_MODEL = left.CN_S_MODEL,
|
CN_S_ITEM_STATE = left.CN_S_ITEM_STATE,
|
CN_F_QUANTITY = right.CN_F_QUANTITY,
|
CN_S_MEASURE_UNIT = left.CN_S_MEASURE_UNIT,
|
CN_S_LOT_NO = right.CN_S_LOT_NO,
|
CN_S_PACKING_UNIT = right.CN_S_PACKING_UNIT,
|
CN_F_PACKING_QTY = right.CN_F_PACKING_QTY,
|
CN_S_PRODUCTION_BATCH = right.CN_S_PRODUCTION_BATCH,
|
CN_S_CREATOR = userEntity.CN_S_LOGIN,
|
CN_S_CREATOR_BY = userEntity.CN_S_NAME,
|
CN_T_CREATE = DateTime.Now,
|
CN_S_MODIFY = userEntity.CN_S_LOGIN,
|
CN_S_MODIFY_BY = userEntity.CN_S_NAME,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_OP_FROM = "入库单",
|
CN_S_FROM_NO = increaseEntity.CN_S_OP_NO,
|
CN_S_STOCK_CODE = "",
|
CN_S_STOCK_AREA = ""
|
}).ToList();
|
upHistoryList.AddRange(entity2);
|
}
|
Log.Info("===>upHistoryList", JsonConvert.SerializeObject(upHistoryList));
|
#endregion
|
|
operateResult = UseTransaction(trans =>
|
{
|
if (TrayLocationlst.Any())
|
{
|
//新增托盘货位关联表
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().AddRange(TrayLocationlst, trans);
|
}
|
|
if (TrayItemMstlst.Any())
|
{
|
//新增托盘物料关联主表
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().AddRange(TrayItemMstlst, trans);
|
}
|
|
if (!string.IsNullOrEmpty(inMstEntity.CN_S_OP_NO))
|
{
|
//新增入库单主表
|
CreateDAL<DapperDAL<TN_WM_INCREASE_INVENTORY_MSTEntity>>().Add(inMstEntity, trans);
|
//新增入库单子表
|
CreateDAL<DapperDAL<TN_WM_INCREASE_INVENTORY_DTLEntity>>().AddRange(inMstEntity.DTLEntity, trans);
|
}
|
|
//新增批次信息表
|
if (string.IsNullOrEmpty(lotInfo.CN_S_LOT_CODE))
|
{
|
CreateDAL<DapperDAL<TN_WM_LOT_INFOEntity>>().Add(lotInfo, trans);
|
}
|
|
if (TrayItemUpdateMstlst.Any())
|
{
|
//更新托盘物料关联主表
|
var aa = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().UpdateMstQty(TrayItemUpdateMstlst, trans);
|
Log.Info("===>更新托盘物料关联主表", "");
|
Log.Info("===>影响行数", aa.AffectedRows.ToString());
|
}
|
|
if (TrayItemDtllst.Any())
|
{
|
for (int i = 0; i < TrayItemDtllst.Count; i++)
|
{
|
Log.Info("===>根据条件更新子表实体", JsonConvert.SerializeObject(TrayItemDtllst[i]));
|
var aa = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().UpdateByCondition(TrayItemDtllst[i], trans);
|
Log.Info("===>影响行数", aa.AffectedRows.ToString());
|
if (aa.AffectedRows == 0)
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().Add(TrayItemDtllst[i], trans);
|
Log.Info("===>新增托盘物料关联子表", "");
|
}
|
}
|
}
|
|
//根据单号和物料编码更新累积码盘数
|
CreateDAL<TN_WM_INCREASE_INVENTORYDAL>().updateOntrayQty(entity.row, trans);
|
Log.Info("===>根据单号和物料编码更新累积码盘数", "");
|
|
|
//更新托盘使用状态、贮存状态、实时重量
|
CreateDAL<TN_WM_B_TRAY_INFODAL>().updateTrayCodeWeight(entity.CN_S_TRAY_CODE, fweight, trans);
|
|
//更新托盘贮存状态
|
if (!string.IsNullOrEmpty(entity.CN_S_USE_STATE))
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_INFOEntity>>().Update(new
|
{
|
CN_S_USE_STATE = entity.CN_S_USE_STATE
|
}, new
|
{
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE
|
}, trans);
|
}
|
//新增入库记录
|
if (upHistoryList.Any())
|
{
|
//新增入库记录
|
CreateDAL<DapperDAL<TN_WM_UP_HISTORYEntity>>().AddRange(upHistoryList, trans);
|
}
|
});
|
}
|
catch (Exception ex)
|
{
|
return OperateResult.Error(ex.Message.ToString());
|
}
|
//成功后,赋值托盘编码
|
if (operateResult.Success)
|
{
|
operateResult.Data = trayNo;
|
}
|
return operateResult;
|
}
|
#endregion
|
|
#region 简易码盘(PDA接口)
|
/// <summary>
|
/// 码盘
|
/// </summary>
|
/// <param name="jsonData">数据Json</param>
|
/// <param name="userEntity">登陆信息实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-17</History>
|
public OperateResult SaveSimPalletItemRelation(ItemOnTrayEntity entity, RedisUserEntity userEntity)
|
{
|
OperateResult operateResult = new OperateResult();
|
string trayNo = entity.CN_S_TRAY_CODE;
|
try
|
{
|
List<TN_WM_B_TRAY_INFOEntity> trayInfoList = new List<TN_WM_B_TRAY_INFOEntity>();
|
//删除托盘物料关联主子表
|
//拼接托盘物料关联主子表
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemMstlst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_DTLEntity> TrayItemDtllst = new List<TN_WM_B_TRAY_ITEM_DTLEntity>();
|
|
Log.Info("SaveSimPalletItemRelation===>传参:====>", JsonConvert.SerializeObject(entity));
|
|
var Group_List = entity.row.GroupBy(x => new
|
{
|
x.CN_S_TRAY_CODE,
|
x.CN_S_TRAY_GRID,
|
x.CN_S_ITEM_CODE,
|
x.CN_S_ITEM_STATE,
|
x.CN_S_LOT_NO,
|
x.CN_S_OWNER
|
}).Select(g => new TrayItemRow
|
{
|
CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(),
|
CN_S_TRAY_GRID = string.IsNullOrEmpty(g.FirstOrDefault().CN_S_TRAY_GRID.Trim()) ? "1" : g.FirstOrDefault().CN_S_TRAY_GRID.Trim(),
|
CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(),
|
CN_S_ITEM_STATE = g.FirstOrDefault().CN_S_ITEM_STATE.Trim(),
|
CN_S_LOT_NO = g.FirstOrDefault().CN_S_LOT_NO.Trim(),
|
CN_S_OWNER = g.FirstOrDefault().CN_S_OWNER.Trim(),
|
CN_F_QUANTITY = g.Sum(p => p.CN_F_QUANTITY)
|
}).ToList();
|
|
Log.Info("SaveSimPalletItemRelation===>Group_List:====>", JsonConvert.SerializeObject(Group_List));
|
|
for (int i = 0; i < Group_List.Count; i++)
|
{
|
AutoBomItemEntity itemenity = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(Group_List[i].CN_S_ITEM_CODE.ToString());
|
//拼接托盘物料关联主表实体
|
#region 拼接托盘物料关联主表实体
|
var mstGuid = Guid.NewGuid().ToString().ToUpper();
|
var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity
|
{
|
CN_GUID = mstGuid,
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = Group_List[i].CN_S_TRAY_GRID.ToString(),
|
CN_S_OWNER = string.IsNullOrEmpty(Group_List[i].CN_S_OWNER.ToString()) ? Constants.DefaultOwner : Group_List[i].CN_S_OWNER.ToString(),
|
CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.ToString(),
|
CN_S_LOT_NO = Group_List[i].CN_S_LOT_NO.ToString(),
|
CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME,
|
CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO,
|
CN_S_MODEL = itemenity.CN_S_MODEL,
|
CN_S_ITEM_STATE = string.IsNullOrEmpty(Group_List[i].CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : Group_List[i].CN_S_ITEM_STATE.ToString(),
|
CN_F_QUANTITY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()),
|
CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT,
|
CN_F_ALLOC_QTY = 0,
|
CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(),
|
CN_F_INQTY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()),
|
};
|
#endregion
|
Log.Info("SaveSimPalletItemRelation===>trayItemMstEntity:====>", JsonConvert.SerializeObject(trayItemMstEntity));
|
#region 拼接托盘物料关联子表实体
|
|
TrayItemMstlst.Add(trayItemMstEntity);
|
var parentGuid = trayItemMstEntity.CN_GUID;
|
|
var dtl_List = entity.row.Where(o => o.CN_S_OWNER.Trim() == Group_List[i].CN_S_OWNER.Trim() && o.CN_S_LOT_NO.Trim() == Group_List[i].CN_S_LOT_NO.Trim()
|
&& o.CN_S_ITEM_CODE.Trim() == Group_List[i].CN_S_ITEM_CODE.Trim()).ToList();
|
|
Log.Info("===>dtl_List:====>", JsonConvert.SerializeObject(dtl_List));
|
|
for (int j = 0; j < dtl_List.Count; j++)
|
{
|
var dtlentity = new TN_WM_B_TRAY_ITEM_DTLEntity();
|
dtlentity.CN_GUID = Guid.NewGuid().ToString().ToUpper();
|
dtlentity.CN_PARENT_GUID = parentGuid;
|
dtlentity.CN_S_UNIQUE_CODE = "";// entity.row[i].CN_S_UNIQUE_CODE.ToString();
|
dtlentity.CN_S_LOT_NO = dtl_List[j].CN_S_LOT_NO.ToString();
|
dtlentity.CN_F_QUANTITY = Convert.ToDecimal(dtl_List[j].CN_F_QUANTITY);
|
dtlentity.CN_S_PRODUCTION_BATCH = dtl_List[j].CN_S_PRODUCTION_BATCH.ToString();
|
dtlentity.CN_S_NOTE = "";
|
dtlentity.CN_S_EXT1 = "";
|
dtlentity.CN_S_EXT2 = "";
|
dtlentity.CN_S_EXT3 = "";
|
dtlentity.CN_S_EXT4 = "";
|
dtlentity.CN_S_EXT5 = "";
|
dtlentity.CN_S_CREATOR = userEntity.CN_S_LOGIN;
|
dtlentity.CN_S_CREATOR_BY = userEntity.CN_S_NAME;
|
dtlentity.CN_T_CREATE = DateTime.Now;
|
dtlentity.CN_S_MODIFY = userEntity.CN_S_LOGIN;
|
dtlentity.CN_S_MODIFY_BY = userEntity.CN_S_NAME;
|
dtlentity.CN_T_MODIFY = DateTime.Now;
|
TrayItemDtllst.Add(dtlentity);
|
Log.Info("===>TrayItemDtllst:" + j + "==>", JsonConvert.SerializeObject(TrayItemDtllst));
|
}
|
#endregion
|
}
|
//获取原托盘中的数据
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> lstOriginalMST = BLLCreator.Create<DapperBLL<TN_WM_B_TRAY_ITEM_MSTEntity>>().GetList(new { CN_S_TRAY_CODE = trayNo });
|
|
|
|
operateResult = UseTransaction(trans =>
|
{
|
//删除主表
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().Delete(new { CN_S_TRAY_CODE = trayNo }, trans);
|
//删除子表
|
foreach (TN_WM_B_TRAY_ITEM_MSTEntity mEntity in lstOriginalMST)
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().Delete(new { CN_PARENT_GUID = mEntity.CN_GUID }, trans);
|
}
|
if (TrayItemMstlst.Any())
|
{
|
//新增托盘物料关联主表
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().AddRange(TrayItemMstlst, trans);
|
}
|
if (TrayItemDtllst.Any())
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().AddRange(TrayItemDtllst, trans);
|
}
|
|
});
|
|
|
|
}
|
catch (Exception ex)
|
{
|
return OperateResult.Error(ex.Message.ToString());
|
}
|
//成功后,赋值托盘编码
|
if (operateResult.Success)
|
{
|
operateResult.Data = trayNo;
|
}
|
return operateResult;
|
}
|
#endregion
|
|
#region 唯一码码盘(PDA接口)
|
/// <summary>
|
/// 码盘
|
/// </summary>
|
/// <param name="jsonData">数据Json</param>
|
/// <param name="userEntity">登陆信息实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-17</History>
|
public OperateResult SaveUniPalletItemRelation(ItemOnTrayEntity entity, RedisUserEntity userEntity)
|
{
|
OperateResult operateResult = new OperateResult();
|
string trayNo = entity.CN_S_TRAY_CODE;
|
try
|
{
|
List<TN_WM_B_TRAY_INFOEntity> trayInfoList = new List<TN_WM_B_TRAY_INFOEntity>();
|
//删除托盘物料关联主子表
|
//拼接托盘物料关联主子表
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemMstlst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemUpdateMstlst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_DTLEntity> TrayItemDtllst = new List<TN_WM_B_TRAY_ITEM_DTLEntity>();
|
|
Log.Info("SaveSimPalletItemRelation===>传参:====>", JsonConvert.SerializeObject(entity));
|
|
var Group_List = entity.row.GroupBy(x => new
|
{
|
x.CN_S_TRAY_CODE,
|
x.CN_S_TRAY_GRID,
|
x.CN_S_ITEM_CODE,
|
x.CN_S_ITEM_STATE,
|
x.CN_S_OWNER
|
}).Select(g => new TrayItemRow
|
{
|
CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(),
|
CN_S_TRAY_GRID = string.IsNullOrEmpty(g.FirstOrDefault().CN_S_TRAY_GRID.Trim()) ? "1" : g.FirstOrDefault().CN_S_TRAY_GRID.Trim(),
|
CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(),
|
CN_S_ITEM_STATE = g.FirstOrDefault().CN_S_ITEM_STATE.Trim(),
|
CN_S_OWNER = g.FirstOrDefault().CN_S_OWNER.Trim(),
|
CN_F_QUANTITY = g.Sum(p => p.CN_F_QUANTITY)
|
}).ToList();
|
|
Log.Info("SaveSimPalletItemRelation===>Group_List:====>", JsonConvert.SerializeObject(Group_List));
|
|
for (int i = 0; i < Group_List.Count; i++)
|
{
|
AutoBomItemEntity itemenity = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(Group_List[i].CN_S_ITEM_CODE.ToString());
|
//拼接托盘物料关联主表实体
|
#region 拼接托盘物料关联主表实体
|
var mstGuid = Guid.NewGuid().ToString().ToUpper();
|
var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity
|
{
|
CN_GUID = mstGuid,
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = Group_List[i].CN_S_TRAY_GRID.ToString(),
|
CN_S_OWNER = string.IsNullOrEmpty(Group_List[i].CN_S_OWNER.ToString()) ? Constants.DefaultOwner : Group_List[i].CN_S_OWNER.ToString(),
|
CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.ToString(),
|
CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME,
|
CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO,
|
CN_S_MODEL = itemenity.CN_S_MODEL,
|
CN_S_ITEM_STATE = string.IsNullOrEmpty(Group_List[i].CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : Group_List[i].CN_S_ITEM_STATE.ToString(),
|
CN_F_QUANTITY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()),
|
CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT,
|
CN_F_ALLOC_QTY = 0,
|
CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(),
|
CN_F_INQTY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()),
|
};
|
#endregion
|
|
//判断是否在数据库中已存在,存在的话,主表递增数量,不存在的话,主表追加行
|
var result = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().CheckExists(trayItemMstEntity);
|
var parentGuid = "";
|
if (result.Any())
|
{
|
trayItemMstEntity.CN_GUID = result[0].CN_GUID;
|
TrayItemUpdateMstlst.Add(trayItemMstEntity);
|
parentGuid = result[0].CN_GUID;
|
}
|
else
|
{
|
TrayItemMstlst.Add(trayItemMstEntity);
|
parentGuid = trayItemMstEntity.CN_GUID;
|
}
|
|
Log.Info("SaveSimPalletItemRelation===>trayItemMstEntity:====>", JsonConvert.SerializeObject(trayItemMstEntity));
|
#region 拼接托盘物料关联子表实体
|
|
var dtl_List = entity.row.Where(o => o.CN_S_OWNER.Trim() == Group_List[i].CN_S_OWNER.Trim() && o.CN_S_ITEM_STATE.Trim() == Group_List[i].CN_S_ITEM_STATE.Trim()
|
&& o.CN_S_ITEM_CODE.Trim() == Group_List[i].CN_S_ITEM_CODE.Trim()).ToList();
|
|
Log.Info("===>dtl_List:====>", JsonConvert.SerializeObject(dtl_List));
|
|
for (int j = 0; j < dtl_List.Count; j++)
|
{
|
var dtlentity = new TN_WM_B_TRAY_ITEM_DTLEntity();
|
dtlentity.CN_GUID = Guid.NewGuid().ToString().ToUpper();
|
dtlentity.CN_PARENT_GUID = parentGuid;
|
dtlentity.CN_S_UNIQUE_CODE = entity.row[i].CN_S_UNIQUE_CODE.ToString();
|
dtlentity.CN_S_LOT_NO = dtl_List[j].CN_S_LOT_NO.ToString();
|
dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString();
|
dtlentity.CN_F_QUANTITY = Convert.ToDecimal(dtl_List[j].CN_F_QUANTITY);
|
dtlentity.CN_S_VENDOR_NO = dtl_List[j].CN_S_VENDOR_NO.ToString();
|
dtlentity.CN_S_VENDOR_NAME = dtl_List[j].CN_S_VENDOR_NAME.ToString();
|
dtlentity.CN_T_PRODUCTION = dtl_List[j].CN_T_PRODUCTION;
|
dtlentity.CN_T_EXPIRATION = dtl_List[j].CN_T_EXPIRATION;
|
dtlentity.CN_S_PRODUCTION_BATCH = dtl_List[j].CN_S_PRODUCTION_BATCH.ToString();
|
dtlentity.CN_S_NOTE = "";
|
dtlentity.CN_S_EXT1 = "";
|
dtlentity.CN_S_EXT2 = "";
|
dtlentity.CN_S_EXT3 = "";
|
dtlentity.CN_S_EXT4 = "";
|
dtlentity.CN_S_EXT5 = "";
|
dtlentity.CN_S_CREATOR = userEntity.CN_S_LOGIN;
|
dtlentity.CN_S_CREATOR_BY = userEntity.CN_S_NAME;
|
dtlentity.CN_T_CREATE = DateTime.Now;
|
dtlentity.CN_S_MODIFY = userEntity.CN_S_LOGIN;
|
dtlentity.CN_S_MODIFY_BY = userEntity.CN_S_NAME;
|
dtlentity.CN_T_MODIFY = DateTime.Now;
|
TrayItemDtllst.Add(dtlentity);
|
Log.Info("===>TrayItemDtllst:" + j + "==>", JsonConvert.SerializeObject(TrayItemDtllst));
|
}
|
#endregion
|
}
|
|
|
operateResult = UseTransaction(trans =>
|
{
|
if (TrayItemMstlst.Any())
|
{
|
//新增托盘物料关联主表
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().AddRange(TrayItemMstlst, trans);
|
}
|
if (TrayItemUpdateMstlst.Any())
|
{
|
//更新托盘物料关联主表
|
var aa = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().UpdateMstQty(TrayItemUpdateMstlst, trans);
|
Log.Info("===>更新托盘物料关联主表", "");
|
Log.Info("===>影响行数", aa.AffectedRows.ToString());
|
}
|
if (TrayItemDtllst.Any())
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().AddRange(TrayItemDtllst, trans);
|
}
|
|
|
});
|
}
|
catch (Exception ex)
|
{
|
return OperateResult.Error(ex.Message.ToString());
|
}
|
//成功后,赋值托盘编码
|
if (operateResult.Success)
|
{
|
operateResult.Data = trayNo;
|
}
|
return operateResult;
|
}
|
#endregion
|
|
#region 根据入库单码盘(PDA接口)
|
/// <summary>
|
/// 码盘
|
/// </summary>
|
/// <param name="jsonData">数据Json</param>
|
/// <param name="userEntity">登陆信息实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-17</History>
|
public OperateResult SaveRkdPalletItemRelation(ItemOnTrayEntity entity, RedisUserEntity userEntity)
|
{
|
OperateResult operateResult = new OperateResult();
|
string trayNo = entity.CN_S_TRAY_CODE;
|
try
|
{
|
List<TN_WM_B_TRAY_INFOEntity> trayInfoList = new List<TN_WM_B_TRAY_INFOEntity>();
|
//删除托盘物料关联主子表
|
//拼接托盘物料关联主子表
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemMstlst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemUpdateMstlst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_DTLEntity> TrayItemDtllst = new List<TN_WM_B_TRAY_ITEM_DTLEntity>();
|
|
Log.Info("SaveRkdPalletItemRelation===>传参:====>", JsonConvert.SerializeObject(entity));
|
|
var Group_List = entity.row.GroupBy(x => new
|
{
|
x.CN_S_TRAY_CODE,
|
x.CN_S_TRAY_GRID,
|
x.CN_S_ITEM_CODE,
|
x.CN_S_ITEM_STATE,
|
x.CN_S_OWNER
|
}).Select(g => new TrayItemRow
|
{
|
CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(),
|
CN_S_TRAY_GRID = string.IsNullOrEmpty(g.FirstOrDefault().CN_S_TRAY_GRID.Trim()) ? "1" : g.FirstOrDefault().CN_S_TRAY_GRID.Trim(),
|
CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(),
|
CN_S_ITEM_STATE = g.FirstOrDefault().CN_S_ITEM_STATE.Trim(),
|
CN_S_OWNER = g.FirstOrDefault().CN_S_OWNER.Trim(),
|
CN_F_QUANTITY = g.Sum(p => p.CN_F_QUANTITY)
|
}).ToList();
|
|
Log.Info("SaveRkdPalletItemRelation===>Group_List:====>", JsonConvert.SerializeObject(Group_List));
|
|
for (int i = 0; i < Group_List.Count; i++)
|
{
|
AutoBomItemEntity itemenity = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(Group_List[i].CN_S_ITEM_CODE.ToString());
|
//拼接托盘物料关联主表实体
|
#region 拼接托盘物料关联主表实体
|
var mstGuid = Guid.NewGuid().ToString().ToUpper();
|
var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity
|
{
|
CN_GUID = mstGuid,
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = Group_List[i].CN_S_TRAY_GRID.ToString(),
|
CN_S_OWNER = string.IsNullOrEmpty(Group_List[i].CN_S_OWNER.ToString()) ? Constants.DefaultOwner : Group_List[i].CN_S_OWNER.ToString(),
|
CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.ToString(),
|
CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME,
|
CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO,
|
CN_S_MODEL = itemenity.CN_S_MODEL,
|
CN_S_ITEM_STATE = string.IsNullOrEmpty(Group_List[i].CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : Group_List[i].CN_S_ITEM_STATE.ToString(),
|
CN_F_QUANTITY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()),
|
CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT,
|
CN_F_ALLOC_QTY = 0,
|
CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(),
|
CN_F_INQTY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()),
|
};
|
#endregion
|
|
//判断是否在数据库中已存在,存在的话,主表递增数量,不存在的话,主表追加行
|
var result = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().CheckExists(trayItemMstEntity);
|
var parentGuid = "";
|
if (result.Any())
|
{
|
trayItemMstEntity.CN_GUID = result[0].CN_GUID;
|
TrayItemUpdateMstlst.Add(trayItemMstEntity);
|
parentGuid = result[0].CN_GUID;
|
}
|
else
|
{
|
TrayItemMstlst.Add(trayItemMstEntity);
|
parentGuid = trayItemMstEntity.CN_GUID;
|
}
|
|
Log.Info("SaveRkdPalletItemRelation===>trayItemMstEntity:====>", JsonConvert.SerializeObject(trayItemMstEntity));
|
#region 拼接托盘物料关联子表实体
|
|
var dtl_List = entity.row.Where(o => o.CN_S_OWNER.Trim() == Group_List[i].CN_S_OWNER.Trim() && o.CN_S_ITEM_STATE.Trim() == Group_List[i].CN_S_ITEM_STATE.Trim()
|
&& o.CN_S_ITEM_CODE.Trim() == Group_List[i].CN_S_ITEM_CODE.Trim()).ToList();
|
|
Log.Info("===>dtl_List:====>", JsonConvert.SerializeObject(dtl_List));
|
|
for (int j = 0; j < dtl_List.Count; j++)
|
{
|
var dtlentity = new TN_WM_B_TRAY_ITEM_DTLEntity();
|
dtlentity.CN_GUID = Guid.NewGuid().ToString().ToUpper();
|
dtlentity.CN_PARENT_GUID = parentGuid;
|
dtlentity.CN_S_UNIQUE_CODE = "";
|
dtlentity.CN_S_LOT_NO = dtl_List[j].CN_S_LOT_NO.ToString();
|
dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString();
|
dtlentity.CN_F_QUANTITY = Convert.ToDecimal(dtl_List[j].CN_F_QUANTITY);
|
dtlentity.CN_S_VENDOR_NO = dtl_List[j].CN_S_VENDOR_NO.ToString();
|
dtlentity.CN_S_VENDOR_NAME = dtl_List[j].CN_S_VENDOR_NAME.ToString();
|
dtlentity.CN_T_PRODUCTION = dtl_List[j].CN_T_PRODUCTION;
|
dtlentity.CN_T_EXPIRATION = dtl_List[j].CN_T_EXPIRATION;
|
dtlentity.CN_S_PRODUCTION_BATCH = dtl_List[j].CN_S_PRODUCTION_BATCH.ToString();
|
dtlentity.CN_S_NOTE = "";
|
dtlentity.CN_S_EXT1 = "";
|
dtlentity.CN_S_EXT2 = "";
|
dtlentity.CN_S_EXT3 = "";
|
dtlentity.CN_S_EXT4 = "";
|
dtlentity.CN_S_EXT5 = "";
|
dtlentity.CN_S_CREATOR = userEntity.CN_S_LOGIN;
|
dtlentity.CN_S_CREATOR_BY = userEntity.CN_S_NAME;
|
dtlentity.CN_T_CREATE = DateTime.Now;
|
dtlentity.CN_S_MODIFY = userEntity.CN_S_LOGIN;
|
dtlentity.CN_S_MODIFY_BY = userEntity.CN_S_NAME;
|
dtlentity.CN_T_MODIFY = DateTime.Now;
|
TrayItemDtllst.Add(dtlentity);
|
Log.Info("===>TrayItemDtllst:" + j + "==>", JsonConvert.SerializeObject(TrayItemDtllst));
|
}
|
#endregion
|
}
|
|
|
operateResult = UseTransaction(trans =>
|
{
|
if (TrayItemMstlst.Any())
|
{
|
//新增托盘物料关联主表
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().AddRange(TrayItemMstlst, trans);
|
}
|
if (TrayItemUpdateMstlst.Any())
|
{
|
//更新托盘物料关联主表
|
var aa = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().UpdateMstQty(TrayItemUpdateMstlst, trans);
|
Log.Info("===>更新托盘物料关联主表", "");
|
Log.Info("===>影响行数", aa.AffectedRows.ToString());
|
}
|
if (TrayItemDtllst.Any())
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().AddRange(TrayItemDtllst, trans);
|
}
|
//根据单号和物料编码更新累积码盘数
|
CreateDAL<TN_WM_INCREASE_INVENTORYDAL>().updateOntrayQty(entity.row, trans);
|
Log.Info("===>根据单号和物料编码更新累积码盘数", "");
|
});
|
}
|
catch (Exception ex)
|
{
|
return OperateResult.Error(ex.Message.ToString());
|
}
|
//成功后,赋值托盘编码
|
if (operateResult.Success)
|
{
|
operateResult.Data = trayNo;
|
}
|
return operateResult;
|
}
|
#endregion
|
|
#region 唯一码码盘宇寿(PDA接口)
|
/// <summary>
|
/// 码盘
|
/// </summary>
|
/// <param name="jsonData">数据Json</param>
|
/// <param name="userEntity">登陆信息实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-17</History>
|
public OperateResult SaveUniPalletItemRelationYS(ItemOnTrayEntity entity, RedisUserEntity userEntity)
|
{
|
OperateResult operateResult = new OperateResult();
|
string trayNo = entity.CN_S_TRAY_CODE;
|
try
|
{
|
List<TN_WM_B_TRAY_INFOEntity> trayInfoList = new List<TN_WM_B_TRAY_INFOEntity>();
|
//拼接托盘物料关联主子表
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemMstlst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemUpdateMstlst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_DTLEntity> TrayItemDtllst = new List<TN_WM_B_TRAY_ITEM_DTLEntity>();
|
List<TN_WM_UP_HISTORYEntity> upHis = new List<TN_WM_UP_HISTORYEntity>();
|
Log.Info("SaveSimPalletItemRelation===>传参:====>", JsonConvert.SerializeObject(entity));
|
//List<TN_WM_LOCATION_EXTEntity> GetModel = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>(this.userInfo).GetModel("where CN_S_LOCATION_CODE='" + entity.CN_S_LOCATION_CODE + "'");
|
//AutoBomStockAreaEntity areaModel = new AutoBomStockAreaEntity();
|
// areaModel = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(entity.CN_S_LOCATION_CODE);
|
var Group_List = entity.row.GroupBy(x => new
|
{
|
x.CN_S_TRAY_CODE,
|
x.CN_S_TRAY_GRID,
|
x.CN_S_ITEM_CODE,
|
x.CN_S_ITEM_STATE,
|
x.CN_S_OWNER
|
}).Select(g => new TrayItemRow
|
{
|
CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(),
|
CN_S_TRAY_GRID = string.IsNullOrEmpty(g.FirstOrDefault().CN_S_TRAY_GRID.Trim()) ? "1" : g.FirstOrDefault().CN_S_TRAY_GRID.Trim(),
|
CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(),
|
CN_S_ITEM_STATE = g.FirstOrDefault().CN_S_ITEM_STATE.Trim(),
|
CN_S_OWNER = g.FirstOrDefault().CN_S_OWNER.Trim(),
|
CN_F_QUANTITY = g.Sum(p => p.CN_F_QUANTITY)
|
}).ToList();
|
|
Log.Info("SaveUniPalletItemRelationYS===>Group_List:====>", JsonConvert.SerializeObject(Group_List));
|
|
for (int i = 0; i < Group_List.Count; i++)
|
{
|
AutoBomItemEntity itemenity = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(Group_List[i].CN_S_ITEM_CODE.ToString());
|
//拼接托盘物料关联主表实体
|
#region 拼接托盘物料关联主表实体
|
var mstGuid = Guid.NewGuid().ToString().ToUpper();
|
var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity
|
{
|
CN_GUID = mstGuid,
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = Group_List[i].CN_S_TRAY_GRID.ToString(),
|
CN_S_OWNER = string.IsNullOrEmpty(Group_List[i].CN_S_OWNER.ToString()) ? Constants.DefaultOwner : Group_List[i].CN_S_OWNER.ToString(),
|
CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.ToString(),
|
CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME,
|
CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO,
|
CN_S_MODEL = itemenity.CN_S_MODEL,
|
CN_S_ITEM_STATE = string.IsNullOrEmpty(Group_List[i].CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : Group_List[i].CN_S_ITEM_STATE.ToString(),
|
CN_F_QUANTITY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()),
|
CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT,
|
CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(),
|
CN_F_INQTY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString())
|
};
|
#endregion
|
|
//判断是否在数据库中已存在,存在的话,主表递增数量,不存在的话,主表追加行
|
var result = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().CheckExists(trayItemMstEntity);
|
var parentGuid = "";
|
if (result.Any())
|
{
|
trayItemMstEntity.CN_GUID = result[0].CN_GUID;
|
TrayItemUpdateMstlst.Add(trayItemMstEntity);
|
parentGuid = result[0].CN_GUID;
|
}
|
else
|
{
|
TrayItemMstlst.Add(trayItemMstEntity);
|
parentGuid = trayItemMstEntity.CN_GUID;
|
}
|
|
Log.Info("SaveSimPalletItemRelation===>trayItemMstEntity:====>", JsonConvert.SerializeObject(trayItemMstEntity));
|
#region 拼接托盘物料关联子表实体
|
|
var dtl_List = entity.row.Where(o => o.CN_S_OWNER.Trim() == Group_List[i].CN_S_OWNER.Trim() && o.CN_S_ITEM_STATE.Trim() == Group_List[i].CN_S_ITEM_STATE.Trim()
|
&& o.CN_S_ITEM_CODE.Trim() == Group_List[i].CN_S_ITEM_CODE.Trim()).ToList();
|
|
Log.Info("===>dtl_List:====>", JsonConvert.SerializeObject(dtl_List));
|
|
for (int j = 0; j < dtl_List.Count; j++)
|
{
|
var dtlentity = new TN_WM_B_TRAY_ITEM_DTLEntity();
|
dtlentity.CN_GUID = Guid.NewGuid().ToString().ToUpper();
|
dtlentity.CN_PARENT_GUID = parentGuid;
|
dtlentity.CN_S_UNIQUE_CODE = dtl_List[j].CN_S_UNIQUE_CODE.ToString();
|
//宇寿项目存放指令批次号
|
if (dtl_List[j].CN_S_LOT_NO == null)
|
{
|
dtlentity.CN_S_LOT_NO = "";
|
}
|
else
|
{
|
dtlentity.CN_S_LOT_NO = dtl_List[j].CN_S_LOT_NO.ToString();
|
}
|
|
dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString();//保存重量
|
dtlentity.CN_S_PACKING_UNIT = dtl_List[j].CN_S_PACKING_UNIT.ToString();//保存每公斤支数
|
dtlentity.CN_F_PACKING_QTY = dtl_List[j].CN_F_PACKING_QTY;//保存计算后的数量
|
dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString();
|
dtlentity.CN_F_QUANTITY = Convert.ToDecimal(dtl_List[j].CN_F_QUANTITY);
|
dtlentity.CN_S_VENDOR_NO = dtl_List[j].CN_S_VENDOR_NO.ToString();
|
dtlentity.CN_S_VENDOR_NAME = dtl_List[j].CN_S_VENDOR_NAME.ToString();
|
dtlentity.CN_T_PRODUCTION = dtl_List[j].CN_T_PRODUCTION;
|
dtlentity.CN_T_EXPIRATION = dtl_List[j].CN_T_EXPIRATION;
|
dtlentity.CN_S_PRODUCTION_BATCH = dtl_List[j].CN_S_PRODUCTION_BATCH.ToString();
|
dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString();
|
dtlentity.CN_S_NOTE = "";
|
//宇寿项目存放工单号
|
if (dtl_List[j].CN_S_EXT1 != null)
|
{
|
dtlentity.CN_S_EXT1 = dtl_List[j].CN_S_EXT1.ToString();
|
}
|
else
|
{
|
dtlentity.CN_S_EXT1 = "";
|
}
|
|
dtlentity.CN_S_EXT2 = "";
|
dtlentity.CN_S_EXT3 = "";
|
dtlentity.CN_S_EXT4 = "";
|
dtlentity.CN_S_EXT5 = "";
|
dtlentity.CN_S_CREATOR = userEntity.CN_S_LOGIN;
|
dtlentity.CN_S_CREATOR_BY = userEntity.CN_S_NAME;
|
dtlentity.CN_T_CREATE = DateTime.Now;
|
dtlentity.CN_S_MODIFY = userEntity.CN_S_LOGIN;
|
dtlentity.CN_S_MODIFY_BY = userEntity.CN_S_NAME;
|
dtlentity.CN_T_MODIFY = DateTime.Now;
|
TrayItemDtllst.Add(dtlentity);
|
Log.Info("===>TrayItemDtllst:" + j + "==>", JsonConvert.SerializeObject(TrayItemDtllst));
|
|
}
|
#endregion
|
}
|
|
operateResult = UseTransaction(trans =>
|
{
|
if (TrayItemMstlst.Any())
|
{
|
//新增托盘物料关联主表
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().AddRange(TrayItemMstlst, trans);
|
}
|
if (TrayItemUpdateMstlst.Any())
|
{
|
//更新托盘物料关联主表
|
var aa = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().UpdateMstQty(TrayItemUpdateMstlst, trans);
|
Log.Info("===>更新托盘物料关联主表", "");
|
Log.Info("===>影响行数", aa.AffectedRows.ToString());
|
}
|
if (TrayItemDtllst.Any())
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().AddRange(TrayItemDtllst, trans);
|
}
|
|
//更新托盘贮存状态
|
if (!string.IsNullOrEmpty(entity.CN_S_USE_STATE))
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_INFOEntity>>().Update(new
|
{
|
CN_S_USE_STATE = entity.CN_S_USE_STATE
|
}, new
|
{
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE
|
}, trans);
|
}
|
|
|
});
|
}
|
catch (Exception ex)
|
{
|
return OperateResult.Error(ex.Message.ToString());
|
}
|
return operateResult;
|
}
|
/// <summary>
|
/// 码盘
|
/// </summary>
|
/// <param name="jsonData">数据Json</param>
|
/// <param name="userEntity">登陆信息实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2018-11-17</History>
|
public OperateResult SaveBackPalletItemRelationYS(ItemOnTrayEntity entity, RedisUserEntity userEntity)
|
{
|
OperateResult operateResult = new OperateResult();
|
string trayNo = entity.CN_S_TRAY_CODE;
|
try
|
{
|
List<TN_WM_B_TRAY_INFOEntity> trayInfoList = new List<TN_WM_B_TRAY_INFOEntity>();
|
//拼接托盘物料关联主子表
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemMstlst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemUpdateMstlst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_DTLEntity> TrayItemDtllst = new List<TN_WM_B_TRAY_ITEM_DTLEntity>();
|
List<TN_WM_UP_HISTORYEntity> upHis = new List<TN_WM_UP_HISTORYEntity>();
|
Log.Info("SaveSimPalletItemRelation===>传参:====>", JsonConvert.SerializeObject(entity));
|
List<TN_WM_LOCATION_EXTEntity> GetModel = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>(this.userInfo).GetModel("where CN_S_LOCATION_CODE='" + entity.CN_S_LOCATION_CODE + "'");
|
AutoBomStockAreaEntity areaModel = new AutoBomStockAreaEntity();
|
areaModel = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(entity.CN_S_LOCATION_CODE);
|
var Group_List = entity.row.GroupBy(x => new
|
{
|
x.CN_S_TRAY_CODE,
|
x.CN_S_TRAY_GRID,
|
x.CN_S_ITEM_CODE,
|
x.CN_S_ITEM_STATE,
|
x.CN_S_OWNER
|
}).Select(g => new TrayItemRow
|
{
|
CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(),
|
CN_S_TRAY_GRID = string.IsNullOrEmpty(g.FirstOrDefault().CN_S_TRAY_GRID.Trim()) ? "1" : g.FirstOrDefault().CN_S_TRAY_GRID.Trim(),
|
CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(),
|
CN_S_ITEM_STATE = g.FirstOrDefault().CN_S_ITEM_STATE.Trim(),
|
CN_S_OWNER = g.FirstOrDefault().CN_S_OWNER.Trim(),
|
CN_F_QUANTITY = g.Sum(p => p.CN_F_QUANTITY)
|
}).ToList();
|
|
Log.Info("SaveUniPalletItemRelationYS===>Group_List:====>", JsonConvert.SerializeObject(Group_List));
|
|
for (int i = 0; i < Group_List.Count; i++)
|
{
|
AutoBomItemEntity itemenity = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(Group_List[i].CN_S_ITEM_CODE.ToString());
|
//拼接托盘物料关联主表实体
|
#region 拼接托盘物料关联主表实体
|
var mstGuid = Guid.NewGuid().ToString().ToUpper();
|
var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity
|
{
|
CN_GUID = mstGuid,
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = Group_List[i].CN_S_TRAY_GRID.ToString(),
|
CN_S_OWNER = string.IsNullOrEmpty(Group_List[i].CN_S_OWNER.ToString()) ? Constants.DefaultOwner : Group_List[i].CN_S_OWNER.ToString(),
|
CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.ToString(),
|
CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME,
|
CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO,
|
CN_S_MODEL = itemenity.CN_S_MODEL,
|
CN_S_ITEM_STATE = string.IsNullOrEmpty(Group_List[i].CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : Group_List[i].CN_S_ITEM_STATE.ToString(),
|
CN_F_QUANTITY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()),
|
CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT,
|
CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(),
|
CN_F_INQTY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString())
|
};
|
#endregion
|
|
//判断是否在数据库中已存在,存在的话,主表递增数量,不存在的话,主表追加行
|
var result = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().CheckExists(trayItemMstEntity);
|
var parentGuid = "";
|
if (result.Any())
|
{
|
trayItemMstEntity.CN_GUID = result[0].CN_GUID;
|
TrayItemUpdateMstlst.Add(trayItemMstEntity);
|
parentGuid = result[0].CN_GUID;
|
}
|
else
|
{
|
TrayItemMstlst.Add(trayItemMstEntity);
|
parentGuid = trayItemMstEntity.CN_GUID;
|
}
|
|
Log.Info("SaveSimPalletItemRelation===>trayItemMstEntity:====>", JsonConvert.SerializeObject(trayItemMstEntity));
|
#region 拼接托盘物料关联子表实体
|
|
var dtl_List = entity.row.Where(o => o.CN_S_OWNER.Trim() == Group_List[i].CN_S_OWNER.Trim() && o.CN_S_ITEM_STATE.Trim() == Group_List[i].CN_S_ITEM_STATE.Trim()
|
&& o.CN_S_ITEM_CODE.Trim() == Group_List[i].CN_S_ITEM_CODE.Trim()).ToList();
|
|
Log.Info("===>dtl_List:====>", JsonConvert.SerializeObject(dtl_List));
|
|
for (int j = 0; j < dtl_List.Count; j++)
|
{
|
var dtlentity = new TN_WM_B_TRAY_ITEM_DTLEntity();
|
dtlentity.CN_GUID = Guid.NewGuid().ToString().ToUpper();
|
dtlentity.CN_PARENT_GUID = parentGuid;
|
dtlentity.CN_S_UNIQUE_CODE = dtl_List[j].CN_S_UNIQUE_CODE.ToString();
|
dtlentity.CN_S_LOT_NO = dtl_List[j].CN_S_LOT_NO.ToString();
|
dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString();
|
dtlentity.CN_F_QUANTITY = Convert.ToDecimal(dtl_List[j].CN_F_QUANTITY);
|
dtlentity.CN_S_VENDOR_NO = dtl_List[j].CN_S_VENDOR_NO.ToString();
|
dtlentity.CN_S_VENDOR_NAME = dtl_List[j].CN_S_VENDOR_NAME.ToString();
|
dtlentity.CN_T_PRODUCTION = dtl_List[j].CN_T_PRODUCTION;
|
dtlentity.CN_T_EXPIRATION = dtl_List[j].CN_T_EXPIRATION;
|
dtlentity.CN_S_PRODUCTION_BATCH = dtl_List[j].CN_S_PRODUCTION_BATCH.ToString();
|
dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString();
|
dtlentity.CN_S_NOTE = "";
|
dtlentity.CN_S_EXT1 = dtl_List[j].CN_S_EXT1.ToString(); ;
|
dtlentity.CN_S_EXT2 = "";
|
dtlentity.CN_S_EXT3 = "";
|
dtlentity.CN_S_EXT4 = "";
|
dtlentity.CN_S_EXT5 = "";
|
dtlentity.CN_S_CREATOR = userEntity.CN_S_LOGIN;
|
dtlentity.CN_S_CREATOR_BY = userEntity.CN_S_NAME;
|
dtlentity.CN_T_CREATE = DateTime.Now;
|
dtlentity.CN_S_MODIFY = userEntity.CN_S_LOGIN;
|
dtlentity.CN_S_MODIFY_BY = userEntity.CN_S_NAME;
|
dtlentity.CN_T_MODIFY = DateTime.Now;
|
TrayItemDtllst.Add(dtlentity);
|
Log.Info("===>TrayItemDtllst:" + j + "==>", JsonConvert.SerializeObject(TrayItemDtllst));
|
#region 拼接上架记录表
|
upHis.Add(new TN_WM_UP_HISTORYEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_PACKING_QTY = 0,
|
CN_S_CREATOR = userEntity.CN_S_LOGIN,
|
CN_S_CREATOR_BY = userEntity.CN_S_NAME,
|
CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.Trim(),
|
CN_F_QUANTITY = Convert.ToDecimal(dtlentity.CN_S_SERIAL_NO),
|
CN_S_OWNER = "",
|
CN_S_ITEM_STATE = "",
|
CN_S_LOT_NO = "",
|
CN_S_PRODUCTION_BATCH = dtlentity.CN_S_PRODUCTION_BATCH,
|
CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME,
|
CN_S_LOCATION_CODE = entity.CN_S_LOCATION_CODE,
|
CN_S_MEASURE_UNIT = "kg",
|
CN_S_MODIFY = userEntity.CN_S_NAME,
|
CN_S_MODIFY_BY = userEntity.CN_S_NAME,
|
CN_S_PACKING_UNIT = "",
|
CN_S_STOCK_AREA = GetModel[0].CN_S_AREA_CODE,
|
CN_S_STOCK_CODE = GetModel[0].CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = "1",
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_OP_FROM = "PDA码盘后绑定入缓存区"
|
});
|
#endregion
|
}
|
#endregion
|
}
|
//拼接托盘货位实体
|
List<TN_WM_B_TRAY_LOCATIONEntity> trayLocationList = new List<TN_WM_B_TRAY_LOCATIONEntity>();
|
|
TN_WM_B_TRAY_LOCATIONEntity trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = System.Guid.NewGuid().ToString().ToUpper(),
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE,
|
CN_S_STOCK_CODE = GetModel[0].CN_S_STOCK_CODE,
|
CN_S_STOCK_AREA = GetModel[0].CN_S_AREA_CODE,
|
CN_S_LOCATION_CODE = entity.CN_S_LOCATION_CODE,
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = userEntity.CN_S_LOGIN,
|
CN_S_CREATOR_BY = userEntity.CN_S_NAME,
|
CN_T_CREATE = DateTime.Now
|
};
|
trayLocationList.Add(trayLocation);
|
operateResult = UseTransaction(trans =>
|
{
|
if (TrayItemMstlst.Any())
|
{
|
//新增托盘物料关联主表
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().AddRange(TrayItemMstlst, trans);
|
}
|
if (TrayItemUpdateMstlst.Any())
|
{
|
//更新托盘物料关联主表
|
var aa = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().UpdateMstQty(TrayItemUpdateMstlst, trans);
|
Log.Info("===>更新托盘物料关联主表", "");
|
Log.Info("===>影响行数", aa.AffectedRows.ToString());
|
}
|
if (TrayItemDtllst.Any())
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().AddRange(TrayItemDtllst, trans);
|
}
|
//写入托盘货位关联表
|
if (trayLocationList.Any())
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().AddRange(trayLocationList, trans);
|
}
|
|
if (areaModel.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
//更新货位贮存状态及货位状态
|
operateResult = CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(
|
new { CN_S_USE_STATE = Constants.Use_State_Full, CN_S_MODIFY = userEntity.CN_S_LOGIN, CN_S_MODIFY_BY = userEntity.CN_S_NAME, CN_T_MODIFY = DateTime.Now },
|
new { CN_S_LOCATION_CODE = entity.CN_S_LOCATION_CODE, CN_S_LOCATION_STATE = Constants.Location_State_Normal }, trans);
|
|
if (operateResult.AffectedRows == 0)
|
{
|
throw new Exception("更新货位存储状态并发冲突,该货位状态可能已经发生变化");
|
|
}
|
}
|
//更新托盘贮存状态
|
if (!string.IsNullOrEmpty(entity.CN_S_USE_STATE))
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_INFOEntity>>().Update(new
|
{
|
CN_S_USE_STATE = entity.CN_S_USE_STATE
|
}, new
|
{
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE
|
}, trans);
|
}
|
//上架记录
|
if (upHis.Any())
|
CreateDAL<DapperDAL<TN_WM_UP_HISTORYEntity>>().AddRange(upHis, trans);
|
|
|
});
|
}
|
catch (Exception ex)
|
{
|
return OperateResult.Error(ex.Message.ToString());
|
}
|
return operateResult;
|
}
|
#endregion
|
|
#region 呼叫补料托盘
|
/// <summary>
|
/// 呼叫补料托盘
|
/// </summary>
|
/// <param name="itemCode">物料编码</param>
|
/// <param name="areaCode">库区</param>
|
/// <param name="endLocation">结束位置</param>
|
/// <param name="t">用户实体</param>
|
/// <returns></returns>
|
/// <History>[HANHE(XDL)] CREATED BY 2019-03-18</History>
|
public OperateResult CallFeedingTray(string itemCode, string areaCode, string endLocation, RedisUserEntity useEntity)
|
{
|
Log.Info("===>开始呼叫补料托盘", itemCode + "$" + areaCode + "$" + endLocation + "$");
|
|
//目的位置货位实体
|
AutoBomLocationEntity endLocationEntity = BLLCreator.Create<TN_AB_STOCK_LOCATIONBLL>().GetLocationModel(endLocation);
|
if (endLocationEntity == null)
|
{
|
Log.Info("===>目的位置货位实体获取失败!", endLocation);
|
}
|
|
//计算托盘
|
List<itemInClass> listItemClass = new List<itemInClass>();
|
|
itemInClass itemEntity = new itemInClass()//需要补料的物料
|
{
|
itemCode = itemCode
|
};
|
listItemClass.Add(itemEntity);
|
|
OutFeedResultEntity feedResult = BLLCreator.Create<Feed_AlgorBLL>().Feed(new FeedAlgorEntity()
|
{
|
stockArea = areaCode,
|
lstItem = listItemClass,
|
lockLocation = false
|
});
|
Log.Info("===>拼接调用补料算法参数", JsonConvert.SerializeObject(feedResult));
|
if (!feedResult.Success)
|
{
|
return OperateResult.Error("算法异常:" + feedResult.Msg);
|
}
|
|
List<TN_WM_TASKEntity> taskEntityList = new List<TN_WM_TASKEntity>();
|
foreach (FeedItemEntity m in feedResult.lstFeedItem)
|
{
|
//生成出库任务
|
TN_WM_TASKEntity taskEntity = new TN_WM_TASKEntity();
|
string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.TaskNo_Out + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}";
|
string taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
|
if (string.IsNullOrEmpty(taskNo))
|
{
|
return OperateResult.Error("出库任务号生成失败!");
|
}
|
taskEntity.CN_S_TASK_NO = taskNo;
|
taskEntity.CN_S_TASK_TYPE = "呼叫出";
|
taskEntity.CN_S_FROM_OP = "出库";
|
|
taskEntity.CN_S_START_BIT = m.locationCode;
|
taskEntity.CN_S_END_AREA = endLocationEntity.CN_S_AREA_CODE;
|
taskEntity.CN_S_END_BIT = endLocationEntity.CN_S_LOCATION_CODE;
|
taskEntity.CN_S_STATE = Constants.TaskState_NoExecuted;
|
taskEntity.CN_S_TRAY_CODE = m.trayCode;
|
taskEntity.CN_S_CREATOR = useEntity.CN_S_LOGIN;
|
taskEntity.CN_S_CREATOR_BY = useEntity.CN_S_NAME;
|
taskEntity.CN_T_CREATE = DateTime.Now;
|
taskEntity.CN_S_MODIFY = useEntity.CN_S_LOGIN;
|
taskEntity.CN_S_MODIFY_BY = useEntity.CN_S_NAME;
|
taskEntity.CN_T_MODIFY = DateTime.Now;
|
|
taskEntityList.Add(taskEntity);
|
}
|
|
Log.Info("===>拼接出库任务实体", JsonConvert.SerializeObject(taskEntityList));
|
|
OperateResult operateResult = UseTransaction(trans =>
|
{
|
//下推任务给AMS
|
foreach (var taskEntity in taskEntityList)
|
{
|
OperateResult re = new OtherSysApi().SendAmsTask(taskEntity);
|
if (!re.Success)
|
{
|
throw new Exception(re.Msg);
|
}
|
|
Log.Info("===>DoTransaction1", "");
|
//锁定起始货位
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(
|
new { CN_S_LOCATION_STATE = Constants.Location_State_OutLock },
|
new { CN_S_LOCATION_CODE = taskEntity.CN_S_START_BIT }, trans);
|
Log.Info("===>DoTransaction2", "");
|
}
|
//新增出库任务
|
if (taskEntityList.Any())
|
{
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().AddRange(taskEntityList, trans);
|
}
|
Log.Info("===>DoTransaction3", "");
|
});
|
|
return operateResult;
|
|
}
|
|
#endregion
|
|
#region 新增托盘物料主子表
|
/// <summary>
|
/// 新增托盘物料主子表
|
/// </summary>
|
/// <param name="trayItemEntity">托盘物料实体</param>
|
/// <returns></returns>
|
public OperateResult CommitTrayItem(List<TN_WM_B_TRAY_ITEM_MSTEntity> trayItemEntityList, RedisUserEntity userEntity)
|
{
|
OperateResult operateResult = UseTransaction(trans =>
|
{
|
foreach (var trayItemEntity in trayItemEntityList)
|
{
|
if (!string.IsNullOrEmpty(trayItemEntity.CN_GUID))
|
{
|
trayItemEntity.CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString();
|
|
//新增托盘物料关联主表
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().Add(trayItemEntity, trans);
|
foreach (var item in trayItemEntity.TrayItemDtlList)
|
{
|
item.CN_GUID = System.Guid.NewGuid().ToString();
|
item.CN_S_CREATOR = userEntity.CN_S_LOGIN;
|
item.CN_S_CREATOR_BY = userEntity.CN_S_NAME;
|
item.CN_T_CREATE = DateTime.Now;
|
item.CN_S_MODIFY = userEntity.CN_S_LOGIN;
|
item.CN_S_MODIFY_BY = userEntity.CN_S_NAME;
|
item.CN_T_MODIFY = DateTime.Now;
|
}
|
//新增托盘物料关联子表
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().AddRange(trayItemEntity.TrayItemDtlList, trans);
|
}
|
}
|
|
});
|
return operateResult;
|
}
|
#endregion
|
|
public List<TN_WM_B_TRAY_ITEM_MSTEntity> GetTrayItemMst(string sql)
|
{
|
return CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayItemMst(sql);
|
}
|
|
public List<TN_WM_B_TRAY_ITEM_DTLEntity> GetTrayItemDtl(string sql)
|
{
|
return CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetDtl(sql);
|
}
|
|
#region 验证料箱码是否属于当前托盘
|
public bool CheckUniqueIsCurTray(string tryaCode, string uniqueCode)
|
{
|
return CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().CheckUniqueIsCurTray(tryaCode, uniqueCode);
|
}
|
#endregion
|
|
#region 宇寿组盘托盘物料主子表
|
/// <summary>
|
/// 宇寿组盘托盘物料主子表
|
/// </summary>
|
/// <param name="entity"></param>
|
/// <param name="userEntity"></param>
|
/// <returns></returns>
|
public OperateResult SaveGroupPlateYS(ItemOnTrayEntity entity, RedisUserEntity userEntity)
|
{
|
Log.Info("===>宇寿组盘开始:", "");
|
OperateResult operateResult = new OperateResult();
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemMstlst_a = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemMstlst_u = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayItemMstlst_d = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<TN_WM_B_TRAY_ITEM_DTLEntity> TrayItemDtllst_u = new List<TN_WM_B_TRAY_ITEM_DTLEntity>();
|
List<string> lstFromTray = new List<string>();
|
//所有被组盘的料箱码集合
|
string UniqueCode = string.Empty;
|
//所有被组合的托盘码信息
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> TrayMstlst_All = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
List<string> lstRemoveFromTray = new List<string>();
|
#region 检查托盘与货位是否满足绑定条件
|
//List<TN_WM_B_TRAY_LOCATIONEntity> trayLocationList = new List<TN_WM_B_TRAY_LOCATIONEntity>();
|
//List<TN_WM_LOCATION_EXTEntity> GetModel = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>(this.userInfo).GetModel("where CN_S_LOCATION_CODE='" + entity.CN_S_LOCATION_CODE + "'");
|
//if (GetModel.Count == 0)
|
//{
|
// return OperateResult.Error("在表TN_WM_LOCATION_EXT中未查询到该货位!");
|
//}
|
//AutoBomStockAreaEntity areaModel = new AutoBomStockAreaEntity();
|
//areaModel = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(entity.CN_S_LOCATION_CODE);
|
//if (areaModel == null)
|
//{
|
// //非法的目的货位
|
// return OperateResult.Error(string.Format("在mongo(TN_AB_B_STOCK_AREA或TN_AB_STOCK_LOCATION表)中未查询到该货位信息!", entity.CN_S_LOCATION_CODE));
|
//}
|
//if (areaModel.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
//{
|
// //货位存储状态:非空
|
// if (GetModel[0].CN_S_USE_STATE != Constants.Use_State_Empty)
|
// {
|
// return OperateResult.Error(string.Format("当前货位存储状态为{0},不允许继续放置托盘!", GetModel[0].CN_S_USE_STATE));
|
// }
|
//}
|
////货位状态:正常
|
//if (GetModel[0].CN_S_LOCATION_STATE != Constants.Location_State_Normal)
|
//{
|
// return OperateResult.Error(string.Format("当前货位状态为{0},不允许继续放置托盘!", GetModel[0].CN_S_LOCATION_STATE));
|
//}
|
////检查该托盘是否在(未执行或执行中的)任务中
|
//List<TN_WM_TASKEntity> lstInTask = CreateDAL<TN_WM_TASKDAL>().GetTaskByTray(entity.CN_S_TRAY_CODE);
|
//if (lstInTask.Count > 0)
|
//{
|
// return OperateResult.Error(string.Format("当前托盘已在搬运任务{0}中,不允许绑定未执行或执行中的任务!", lstInTask[0].CN_S_TASK_NO));
|
//}
|
////检查该托盘是否绑定了其他货位
|
//List<TN_WM_B_TRAY_LOCATIONEntity> lstEntity = CreateDAL<TN_WM_B_TRAY_LOCATIONDAL>().GetListByTrayCode(entity.CN_S_TRAY_CODE);
|
//if (lstEntity.Count > 0)
|
//{
|
// return OperateResult.Error(string.Format("当前托盘已绑定货位{0},不允许重复绑定!", lstEntity[0].CN_S_LOCATION_CODE));
|
//}
|
//lstEntity = CreateDAL<TN_WM_B_TRAY_LOCATIONDAL>().GetListByLocationCode(entity.CN_S_LOCATION_CODE);
|
//if (lstEntity.Count > 0)
|
//{
|
// return OperateResult.Error(string.Format("当前货位已绑定托盘{0},不允许重复绑定!", lstEntity[0].CN_S_TRAY_CODE));
|
//}
|
#endregion
|
|
|
// string NewGuid = MST_NEW.CN_GUID;
|
bool checkMstExist = false;
|
entity.row.ForEach(e =>
|
{
|
checkMstExist = false;
|
//开始集合被组盘的料箱码
|
UniqueCode += "'" + e.CN_S_UNIQUE_CODE.Trim() + "'" + ",";
|
var dtl = CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().GetSingleEntity(new { CN_S_UNIQUE_CODE = e.CN_S_UNIQUE_CODE });
|
|
//如果新增NEW一个GUID
|
var mstGuid = Guid.NewGuid().ToString().ToUpper();
|
//调用AUTOBOM接口获取物料信息
|
AutoBomItemEntity itemenity = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(e.CN_S_ITEM_CODE.ToString().Trim());
|
//判断目的托盘码+物料编码主编是否已经存在
|
var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity
|
{
|
CN_GUID = mstGuid,
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = "1",
|
CN_S_OWNER = "",
|
CN_S_ITEM_CODE = e.CN_S_ITEM_CODE.Trim(),
|
CN_S_ITEM_NAME = e.CN_S_ITEM_NAME.Trim(),
|
CN_S_MODEL = itemenity.CN_S_MODEL,
|
//CN_S_ITEM_STATE = string.IsNullOrEmpty(e.CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : e.CN_S_ITEM_STATE.ToString(),
|
CN_S_ITEM_STATE = "合格",
|
CN_F_QUANTITY = Convert.ToDecimal(e.CN_F_QUANTITY.ToString()),
|
CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT,
|
CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(),
|
CN_F_INQTY = Convert.ToDecimal(e.CN_F_QUANTITY.ToString())
|
};
|
//判断是否在数据库中已存在,存在的话,主表增加数据,不存在则增加一条数据
|
if (TrayItemMstlst_u.Where(o => o.CN_S_TRAY_CODE == e.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == e.CN_S_ITEM_CODE).Count() > 0)
|
{
|
// 内存中已存在主表数据(托盘号+物料编码)
|
checkMstExist = true;
|
}
|
else
|
{
|
var result = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().CheckExists(trayItemMstEntity);
|
if (result.Any())
|
{
|
// 数据库存在主表数据(托盘号+物料编码)
|
checkMstExist = true;
|
}
|
else
|
{
|
// 数据库中不存在主表数据(托盘号+物料编码)
|
checkMstExist = false;
|
}
|
}
|
if (checkMstExist)
|
{
|
if (TrayItemMstlst_u.Where(o => o.CN_S_TRAY_CODE == entity.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == e.CN_S_ITEM_CODE).Count() > 0)
|
{
|
var MST_NEW = TrayItemMstlst_u.Where(o => o.CN_S_TRAY_CODE == entity.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == e.CN_S_ITEM_CODE).FirstOrDefault();
|
MST_NEW.CN_F_QUANTITY += e.CN_F_QUANTITY;
|
dtl.WAIT_UPDATE_GUID = MST_NEW.CN_GUID;
|
}
|
else
|
{
|
var MST_NEW = CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().GetSingleEntity(new { CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE, CN_S_ITEM_CODE = e.CN_S_ITEM_CODE });
|
MST_NEW.CN_F_QUANTITY += e.CN_F_QUANTITY;
|
TrayItemMstlst_u.Add(MST_NEW);
|
dtl.WAIT_UPDATE_GUID = MST_NEW.CN_GUID;
|
}
|
}
|
else
|
{
|
if (TrayItemMstlst_a.Where(o => o.CN_S_TRAY_CODE == entity.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == e.CN_S_ITEM_CODE).Count() > 0)
|
{
|
var MST_NEW = TrayItemMstlst_a.Where(o => o.CN_S_TRAY_CODE == entity.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == e.CN_S_ITEM_CODE).FirstOrDefault();
|
MST_NEW.CN_F_QUANTITY += e.CN_F_QUANTITY;
|
dtl.WAIT_UPDATE_GUID = MST_NEW.CN_GUID;
|
}
|
else
|
{
|
dtl.WAIT_UPDATE_GUID = mstGuid;
|
TrayItemMstlst_a.Add(trayItemMstEntity);
|
}
|
|
}
|
TrayItemDtllst_u.Add(dtl);
|
//处理移出该料箱码的托盘数据
|
var mst = CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().GetSingleEntity(new { CN_GUID = dtl.CN_PARENT_GUID });
|
|
if (TrayItemMstlst_u.Where(o => o.CN_S_TRAY_CODE == mst.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == mst.CN_S_ITEM_CODE).Count() > 0)
|
{
|
var MST_NEW = TrayItemMstlst_u.Where(o => o.CN_S_TRAY_CODE == mst.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == mst.CN_S_ITEM_CODE).FirstOrDefault();
|
if (MST_NEW.CN_F_QUANTITY > e.CN_F_QUANTITY)
|
{
|
MST_NEW.CN_F_QUANTITY = MST_NEW.CN_F_QUANTITY - e.CN_F_QUANTITY;
|
}
|
else
|
{
|
TrayItemMstlst_u.Remove(MST_NEW);
|
TrayItemMstlst_d.Add(MST_NEW);
|
|
}
|
}
|
else
|
{
|
if (mst.CN_F_QUANTITY > e.CN_F_QUANTITY)
|
{
|
mst.CN_F_QUANTITY = mst.CN_F_QUANTITY - e.CN_F_QUANTITY;
|
TrayItemMstlst_u.Add(mst);
|
}
|
else
|
{
|
TrayItemMstlst_d.Add(mst);
|
}
|
TrayMstlst_All.Add(mst);
|
}
|
|
|
});
|
|
Log.Info("===>宇寿组盘主表更新记录:", JsonConvert.SerializeObject(TrayItemMstlst_a));
|
Log.Info("===>宇寿组盘主表更新记录:", JsonConvert.SerializeObject(TrayItemMstlst_u));
|
Log.Info("===>宇寿组盘主表删除记录:", JsonConvert.SerializeObject(TrayItemMstlst_d));
|
Log.Info("===>宇寿组盘明细更新记录:", JsonConvert.SerializeObject(TrayItemDtllst_u));
|
//Log.Info("===>库区量表更新信息记录:", JsonConvert.SerializeObject(addAreaQty));
|
//循环被组盘的托盘码应该置为空还是不满
|
List<ItemOnTrayEntity> TrayInfoEntityList = new List<ItemOnTrayEntity>();
|
if (TrayMstlst_All.Count > 0)
|
{
|
foreach (TN_WM_B_TRAY_ITEM_MSTEntity model in TrayMstlst_All)
|
{
|
ItemOnTrayEntity TrayInfoEntity = new ItemOnTrayEntity();
|
TrayInfoEntity.CN_S_TRAY_CODE = model.CN_S_TRAY_CODE;
|
List<TN_WM_B_TRAY_ITEM_DTLEntity> UniqueList = this.GetTrayUniqueCode(model.CN_S_TRAY_CODE, UniqueCode);
|
if (UniqueList.Count > 0)
|
{
|
TrayInfoEntity.CN_S_USE_STATE = "不满";
|
}
|
else
|
{
|
TrayInfoEntity.CN_S_USE_STATE = "空";
|
}
|
TrayInfoEntityList.Add(TrayInfoEntity);
|
}
|
}
|
operateResult = UseTransaction(trans =>
|
{
|
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().AddRange(TrayItemMstlst_a, trans);
|
|
TrayItemDtllst_u.ForEach(e =>
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().Update(new { CN_PARENT_GUID = e.WAIT_UPDATE_GUID }, new { CN_GUID = e.CN_GUID }, trans);
|
});
|
|
TrayItemMstlst_u.ForEach(e =>
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().Update(new { CN_F_QUANTITY = e.CN_F_QUANTITY }, new { CN_GUID = e.CN_GUID }, trans);
|
});
|
|
TrayItemMstlst_d.ForEach(e =>
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().Delete(new { CN_GUID = e.CN_GUID }, trans);
|
});
|
TrayInfoEntityList.ForEach(e =>
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_INFOEntity>>().Update(new { CN_S_USE_STATE = e.CN_S_USE_STATE }, new { CN_S_TRAY_CODE = e.CN_S_TRAY_CODE }, trans);
|
});
|
if (!string.IsNullOrEmpty(entity.CN_S_USE_STATE))
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_INFOEntity>>().Update(new
|
{
|
CN_S_USE_STATE = entity.CN_S_USE_STATE
|
}, new
|
{
|
CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE
|
}, trans);
|
}
|
});
|
if (!operateResult.Success)
|
{
|
return operateResult;
|
}
|
else
|
{
|
TN_WM_B_TRAY_LOCATIONBLL bll = new TN_WM_B_TRAY_LOCATIONBLL();
|
operateResult = bll.AddTrayLocationRelationYS(entity.CN_S_TRAY_CODE, entity.CN_S_LOCATION_CODE, "", userEntity, "ys001");
|
if (!operateResult.Success)
|
{
|
operateResult = OperateResult.Error("组盘成功,货位绑定失败!原因为:" + operateResult.Msg);
|
}
|
return operateResult;
|
}
|
}
|
#endregion
|
|
|
}
|
}
|