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
///
/// 根据托盘号获取主子表
///
///
///
public List GetByTrayCode(string trayCode)
{
var trayItemMsts = BLLCreator.Create>().GetList(new { CN_S_TRAY_CODE = trayCode });
foreach (var trayItemMst in trayItemMsts)
{
trayItemMst.TrayItemDtlList = BLLCreator.Create>().GetList(new { CN_PARENT_GUID = trayItemMst.CN_GUID });
}
return trayItemMsts;
}
///
/// 货位内托盘本物料汇总
///
/// 物料编码
/// 条件
///
/// [HANHE(XDL)] CREATED BY 2018-11-16
public TN_WM_B_TRAY_ITEM_MSTEntity GetInStockQty(string itemCode, string strWhere)
{
return CreateDAL().GetInStockQty(itemCode, strWhere);
}
public DataTable GetTrayDetail(string trayCode)
{
return CreateDAL().GetTrayDetail(trayCode);
}
public DataTable GetTrayDetailCheck(string trayCode)
{
return CreateDAL().GetTrayDetailCheck(trayCode);
}
public DataTable GetTrayDetailManual(string trayCode, string itemCode, string lotNo)
{
return CreateDAL().GetTrayDetailManual(trayCode, itemCode, lotNo);
}
public DataTable GetTrayItemDetail(string trayCode)
{
return CreateDAL().GetTrayItemDetail(trayCode);
}
public DataTable GetTrayDetailYS(string trayCode)
{
return CreateDAL().GetTrayDetailYS(trayCode);
}
public int GetGoodTypeInTray(string trayCode)
{
return CreateDAL().GetGoodTypeInTray(trayCode);
}
public DataTable GetTrayInfoYS(string trayCode)
{
return CreateDAL().GetTrayInfoYS(trayCode);
}
///
/// 获取货位托盘中物料的信息,按批次汇总
///
/// 托盘号
///
/// [Hanhe(DBS)] CREATED BY 2018/12/8
public DataTable GetTrayItem(string locationCode)
{
var dt = CreateDAL().GetTrayItem(locationCode);
dt.Columns.Add("CN_S_WEIGHT", typeof(string));
foreach (DataRow dr in dt.Rows)
{
var item = CreateDAL().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().GetTrayItemYS(locationCode);
dt.Columns.Add("CN_S_WEIGHT", typeof(string));
foreach (DataRow dr in dt.Rows)
{
var item = CreateDAL().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().GetModel(" WHERE CN_S_LOCATION_CODE = '" + locationCode + "'").FirstOrDefault();
DataTable dt = new DataTable();
if (locationModel.CN_S_LOCATION_STATE == Constants.Location_State_Normal)
{
dt = CreateDAL().GetTrayItemJx(locationCode);
}
else if (locationModel.CN_S_LOCATION_STATE == Constants.Location_State_InLock)
{
dt = CreateDAL().GetTrayItemJxInLock(locationCode);
}
else if (locationModel.CN_S_LOCATION_STATE == Constants.Location_State_OutLock)
{
dt = CreateDAL().GetTrayItemJxOutLock(locationCode);
}
return dt;
}
///
/// 获取货位托盘中物料的信息,按批次汇总
///
/// 托盘号
///
/// [Hanhe(DBS)] CREATED BY 2018/12/8
public DataTable GetTrayItemLJ(string locationCode)
{
var dt = CreateDAL().GetTrayItemLJ(locationCode);
dt.Columns.Add("CN_S_WEIGHT", typeof(string));
foreach (DataRow dr in dt.Rows)
{
var item = CreateDAL().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;
}
///
/// 根据托盘码里面物料获取库区
///
/// 托盘码
/// [HanHe(XDL)] CREATED 2019/04/11
public OperateResult GetTrayItemByArea(string trayCode)
{
TN_WM_B_TRAY_ITEM_MSTEntity mstEntity = CreateDAL>().GetSingleEntity(new { CN_S_TRAY_CODE = trayCode });
var CN_S_AREA_CODE = "";
var CN_S_AREA_NAME = "";
if (mstEntity != null)
{
AutoBomItemEntity itementity = CreateDAL().GetItemEntity(mstEntity.CN_S_ITEM_CODE);//获取物料判断物料类型
List list = new List();
List listr = new List();
if (string.IsNullOrEmpty(itementity.CN_S_STORE_TYPE))//判断物料存储类别是否为空
{
list = CreateDAL().GetPartitionItem(mstEntity.CN_S_ITEM_CODE, 2);
}
else
{
list = CreateDAL().GetPartitionItem(itementity.CN_S_STORE_TYPE, 1);
}
if (list.Count > 0)
{
listr = CreateDAL().GetAreaLocationByGuid(list[0].CN_S_AREA_GUID);//获取逻辑分区表数据
}
if (listr.Count > 0)
{
AutoBomStockAreaEntity entityarea = CreateDAL().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);
}
///
/// 通过托盘码和排除已在的料箱码之后改托盘码是否还有其他料箱码
///
/// 托盘码
/// 已存在的料箱码
///
public List GetTrayUniqueCode(string trayCode, string UniqueCodes)
{
return CreateDAL().GetTrayUniqueCode(trayCode, UniqueCodes);
}
///
/// 根据托盘码获取子表
///
///
///
public List GetTrayItemDtlByTrayCode(string trayCode)
{
return CreateDAL().GetDtlByTrayCode(trayCode);
}
public decimal GetWeightByLocationCode(string locationCode)
{
decimal weight = 0;
try
{
var trayLocations = DALCreator.Create().GetListByLocationCode(locationCode);
foreach (var trayLocation in trayLocations)
{
var trayItemDtls = DALCreator.Create().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
///
/// 删除托盘物料的主子表
///
///
///
///
///
public OperateResult Delete(string sqlWhere, IDbTransaction trans = null, LogPara logPara = null)
{
var result = CreateDAL().DeleteTrayItem(sqlWhere, trans);
if (logPara != null)
Log.Detail(logPara, "删除托盘物料关联(主表、子表)!条件:" + sqlWhere + result.Describe());
return result;
}
#endregion
#region 码盘(PDA接口)
///
/// 码盘
///
/// 数据Json
/// 登陆信息实体
///
/// [HANHE(XDL)] CREATED BY 2018-11-17
public OperateResult SavePalletItemRelation(ItemOnTrayEntity entity, RedisUserEntity userEntity)
{
OperateResult operateResult = new OperateResult();
string trayNo = entity.CN_S_TRAY_CODE;
try
{
List trayInfoList = new List();
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 TrayItemMstlst = new List();
List TrayItemUpdateMstlst = new List();
List TrayItemDtllst = new List();
decimal fweight = 0;//托盘实际重量
Log.Info("===>传参:====>", JsonConvert.SerializeObject(entity));
//托盘安放位置
AutoBomLocationEntity location = new AutoBomLocationEntity();
List TrayLocationlst = new List();
if (!string.IsNullOrEmpty(entity.CN_S_LOCATION_CODE))
{
location = BLLCreator.Create().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().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().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 dtlEntityList = new List();
var rowNo = 1;
foreach (var item in Group_List)
{
AutoBomItemEntity itemenity = CreateDAL().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>().GetSingleEntity(new { CN_S_LOT_NO = entity.row[0].CN_S_LOT_NO });
if (increaseEntity == null)
{
return OperateResult.Error("根据批次号未获取到入库单实体!");
}
List upHistoryList = new List();
List TrayItemMst = new List();
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>().AddRange(TrayLocationlst, trans);
}
if (TrayItemMstlst.Any())
{
//新增托盘物料关联主表
CreateDAL>().AddRange(TrayItemMstlst, trans);
}
if (!string.IsNullOrEmpty(inMstEntity.CN_S_OP_NO))
{
//新增入库单主表
CreateDAL>().Add(inMstEntity, trans);
//新增入库单子表
CreateDAL>().AddRange(inMstEntity.DTLEntity, trans);
}
//新增批次信息表
if (string.IsNullOrEmpty(lotInfo.CN_S_LOT_CODE))
{
CreateDAL>().Add(lotInfo, trans);
}
if (TrayItemUpdateMstlst.Any())
{
//更新托盘物料关联主表
var aa = CreateDAL().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().UpdateByCondition(TrayItemDtllst[i], trans);
Log.Info("===>影响行数", aa.AffectedRows.ToString());
if (aa.AffectedRows == 0)
{
CreateDAL>().Add(TrayItemDtllst[i], trans);
Log.Info("===>新增托盘物料关联子表", "");
}
}
}
//根据单号和物料编码更新累积码盘数
CreateDAL().updateOntrayQty(entity.row, trans);
Log.Info("===>根据单号和物料编码更新累积码盘数", "");
//更新托盘使用状态、贮存状态、实时重量
CreateDAL().updateTrayCodeWeight(entity.CN_S_TRAY_CODE, fweight, trans);
//更新托盘贮存状态
if (!string.IsNullOrEmpty(entity.CN_S_USE_STATE))
{
CreateDAL>().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>().AddRange(upHistoryList, trans);
}
});
}
catch (Exception ex)
{
return OperateResult.Error(ex.Message.ToString());
}
//成功后,赋值托盘编码
if (operateResult.Success)
{
operateResult.Data = trayNo;
}
return operateResult;
}
#endregion
#region 简易码盘(PDA接口)
///
/// 码盘
///
/// 数据Json
/// 登陆信息实体
///
/// [HANHE(XDL)] CREATED BY 2018-11-17
public OperateResult SaveSimPalletItemRelation(ItemOnTrayEntity entity, RedisUserEntity userEntity)
{
OperateResult operateResult = new OperateResult();
string trayNo = entity.CN_S_TRAY_CODE;
try
{
List trayInfoList = new List();
//删除托盘物料关联主子表
//拼接托盘物料关联主子表
List TrayItemMstlst = new List();
List TrayItemDtllst = new List();
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().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 lstOriginalMST = BLLCreator.Create>().GetList(new { CN_S_TRAY_CODE = trayNo });
operateResult = UseTransaction(trans =>
{
//删除主表
CreateDAL>().Delete(new { CN_S_TRAY_CODE = trayNo }, trans);
//删除子表
foreach (TN_WM_B_TRAY_ITEM_MSTEntity mEntity in lstOriginalMST)
{
CreateDAL>().Delete(new { CN_PARENT_GUID = mEntity.CN_GUID }, trans);
}
if (TrayItemMstlst.Any())
{
//新增托盘物料关联主表
CreateDAL>().AddRange(TrayItemMstlst, trans);
}
if (TrayItemDtllst.Any())
{
CreateDAL>().AddRange(TrayItemDtllst, trans);
}
});
}
catch (Exception ex)
{
return OperateResult.Error(ex.Message.ToString());
}
//成功后,赋值托盘编码
if (operateResult.Success)
{
operateResult.Data = trayNo;
}
return operateResult;
}
#endregion
#region 唯一码码盘(PDA接口)
///
/// 码盘
///
/// 数据Json
/// 登陆信息实体
///
/// [HANHE(XDL)] CREATED BY 2018-11-17
public OperateResult SaveUniPalletItemRelation(ItemOnTrayEntity entity, RedisUserEntity userEntity)
{
OperateResult operateResult = new OperateResult();
string trayNo = entity.CN_S_TRAY_CODE;
try
{
List trayInfoList = new List();
//删除托盘物料关联主子表
//拼接托盘物料关联主子表
List TrayItemMstlst = new List();
List TrayItemUpdateMstlst = new List();
List TrayItemDtllst = new List();
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().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().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>().AddRange(TrayItemMstlst, trans);
}
if (TrayItemUpdateMstlst.Any())
{
//更新托盘物料关联主表
var aa = CreateDAL().UpdateMstQty(TrayItemUpdateMstlst, trans);
Log.Info("===>更新托盘物料关联主表", "");
Log.Info("===>影响行数", aa.AffectedRows.ToString());
}
if (TrayItemDtllst.Any())
{
CreateDAL>().AddRange(TrayItemDtllst, trans);
}
});
}
catch (Exception ex)
{
return OperateResult.Error(ex.Message.ToString());
}
//成功后,赋值托盘编码
if (operateResult.Success)
{
operateResult.Data = trayNo;
}
return operateResult;
}
#endregion
#region 根据入库单码盘(PDA接口)
///
/// 码盘
///
/// 数据Json
/// 登陆信息实体
///
/// [HANHE(XDL)] CREATED BY 2018-11-17
public OperateResult SaveRkdPalletItemRelation(ItemOnTrayEntity entity, RedisUserEntity userEntity)
{
OperateResult operateResult = new OperateResult();
string trayNo = entity.CN_S_TRAY_CODE;
try
{
List trayInfoList = new List();
//删除托盘物料关联主子表
//拼接托盘物料关联主子表
List TrayItemMstlst = new List();
List TrayItemUpdateMstlst = new List();
List TrayItemDtllst = new List();
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().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().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>().AddRange(TrayItemMstlst, trans);
}
if (TrayItemUpdateMstlst.Any())
{
//更新托盘物料关联主表
var aa = CreateDAL().UpdateMstQty(TrayItemUpdateMstlst, trans);
Log.Info("===>更新托盘物料关联主表", "");
Log.Info("===>影响行数", aa.AffectedRows.ToString());
}
if (TrayItemDtllst.Any())
{
CreateDAL>().AddRange(TrayItemDtllst, trans);
}
//根据单号和物料编码更新累积码盘数
CreateDAL().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接口)
///
/// 码盘
///
/// 数据Json
/// 登陆信息实体
///
/// [HANHE(XDL)] CREATED BY 2018-11-17
public OperateResult SaveUniPalletItemRelationYS(ItemOnTrayEntity entity, RedisUserEntity userEntity)
{
OperateResult operateResult = new OperateResult();
string trayNo = entity.CN_S_TRAY_CODE;
try
{
List trayInfoList = new List();
//拼接托盘物料关联主子表
List TrayItemMstlst = new List();
List TrayItemUpdateMstlst = new List();
List TrayItemDtllst = new List();
List upHis = new List();
Log.Info("SaveSimPalletItemRelation===>传参:====>", JsonConvert.SerializeObject(entity));
//List GetModel = BLLCreator.Create(this.userInfo).GetModel("where CN_S_LOCATION_CODE='" + entity.CN_S_LOCATION_CODE + "'");
//AutoBomStockAreaEntity areaModel = new AutoBomStockAreaEntity();
// areaModel = CreateDAL().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().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().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>().AddRange(TrayItemMstlst, trans);
}
if (TrayItemUpdateMstlst.Any())
{
//更新托盘物料关联主表
var aa = CreateDAL().UpdateMstQty(TrayItemUpdateMstlst, trans);
Log.Info("===>更新托盘物料关联主表", "");
Log.Info("===>影响行数", aa.AffectedRows.ToString());
}
if (TrayItemDtllst.Any())
{
CreateDAL>().AddRange(TrayItemDtllst, trans);
}
//更新托盘贮存状态
if (!string.IsNullOrEmpty(entity.CN_S_USE_STATE))
{
CreateDAL>().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;
}
///
/// 码盘
///
/// 数据Json
/// 登陆信息实体
///
/// [HANHE(XDL)] CREATED BY 2018-11-17
public OperateResult SaveBackPalletItemRelationYS(ItemOnTrayEntity entity, RedisUserEntity userEntity)
{
OperateResult operateResult = new OperateResult();
string trayNo = entity.CN_S_TRAY_CODE;
try
{
List trayInfoList = new List();
//拼接托盘物料关联主子表
List TrayItemMstlst = new List();
List TrayItemUpdateMstlst = new List();
List TrayItemDtllst = new List();
List upHis = new List();
Log.Info("SaveSimPalletItemRelation===>传参:====>", JsonConvert.SerializeObject(entity));
List GetModel = BLLCreator.Create(this.userInfo).GetModel("where CN_S_LOCATION_CODE='" + entity.CN_S_LOCATION_CODE + "'");
AutoBomStockAreaEntity areaModel = new AutoBomStockAreaEntity();
areaModel = CreateDAL().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().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().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 trayLocationList = new List();
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>().AddRange(TrayItemMstlst, trans);
}
if (TrayItemUpdateMstlst.Any())
{
//更新托盘物料关联主表
var aa = CreateDAL().UpdateMstQty(TrayItemUpdateMstlst, trans);
Log.Info("===>更新托盘物料关联主表", "");
Log.Info("===>影响行数", aa.AffectedRows.ToString());
}
if (TrayItemDtllst.Any())
{
CreateDAL>().AddRange(TrayItemDtllst, trans);
}
//写入托盘货位关联表
if (trayLocationList.Any())
{
CreateDAL>().AddRange(trayLocationList, trans);
}
if (areaModel.CN_C_IS_CONTROL_QTY.Equals("Y"))
{
//更新货位贮存状态及货位状态
operateResult = CreateDAL>().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>().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>().AddRange(upHis, trans);
});
}
catch (Exception ex)
{
return OperateResult.Error(ex.Message.ToString());
}
return operateResult;
}
#endregion
#region 呼叫补料托盘
///
/// 呼叫补料托盘
///
/// 物料编码
/// 库区
/// 结束位置
/// 用户实体
///
/// [HANHE(XDL)] CREATED BY 2019-03-18
public OperateResult CallFeedingTray(string itemCode, string areaCode, string endLocation, RedisUserEntity useEntity)
{
Log.Info("===>开始呼叫补料托盘", itemCode + "$" + areaCode + "$" + endLocation + "$");
//目的位置货位实体
AutoBomLocationEntity endLocationEntity = BLLCreator.Create().GetLocationModel(endLocation);
if (endLocationEntity == null)
{
Log.Info("===>目的位置货位实体获取失败!", endLocation);
}
//计算托盘
List listItemClass = new List();
itemInClass itemEntity = new itemInClass()//需要补料的物料
{
itemCode = itemCode
};
listItemClass.Add(itemEntity);
OutFeedResultEntity feedResult = BLLCreator.Create().Feed(new FeedAlgorEntity()
{
stockArea = areaCode,
lstItem = listItemClass,
lockLocation = false
});
Log.Info("===>拼接调用补料算法参数", JsonConvert.SerializeObject(feedResult));
if (!feedResult.Success)
{
return OperateResult.Error("算法异常:" + feedResult.Msg);
}
List taskEntityList = new List();
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>().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>().AddRange(taskEntityList, trans);
}
Log.Info("===>DoTransaction3", "");
});
return operateResult;
}
#endregion
#region 新增托盘物料主子表
///
/// 新增托盘物料主子表
///
/// 托盘物料实体
///
public OperateResult CommitTrayItem(List 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>().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>().AddRange(trayItemEntity.TrayItemDtlList, trans);
}
}
});
return operateResult;
}
#endregion
public List GetTrayItemMst(string sql)
{
return CreateDAL().GetTrayItemMst(sql);
}
public List GetTrayItemDtl(string sql)
{
return CreateDAL().GetDtl(sql);
}
#region 验证料箱码是否属于当前托盘
public bool CheckUniqueIsCurTray(string tryaCode, string uniqueCode)
{
return CreateDAL().CheckUniqueIsCurTray(tryaCode, uniqueCode);
}
#endregion
#region 宇寿组盘托盘物料主子表
///
/// 宇寿组盘托盘物料主子表
///
///
///
///
public OperateResult SaveGroupPlateYS(ItemOnTrayEntity entity, RedisUserEntity userEntity)
{
Log.Info("===>宇寿组盘开始:", "");
OperateResult operateResult = new OperateResult();
List TrayItemMstlst_a = new List();
List TrayItemMstlst_u = new List();
List TrayItemMstlst_d = new List();
List TrayItemDtllst_u = new List();
List lstFromTray = new List();
//所有被组盘的料箱码集合
string UniqueCode = string.Empty;
//所有被组合的托盘码信息
List TrayMstlst_All = new List();
List lstRemoveFromTray = new List();
#region 检查托盘与货位是否满足绑定条件
//List trayLocationList = new List();
//List GetModel = BLLCreator.Create(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().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 lstInTask = CreateDAL().GetTaskByTray(entity.CN_S_TRAY_CODE);
//if (lstInTask.Count > 0)
//{
// return OperateResult.Error(string.Format("当前托盘已在搬运任务{0}中,不允许绑定未执行或执行中的任务!", lstInTask[0].CN_S_TASK_NO));
//}
////检查该托盘是否绑定了其他货位
//List lstEntity = CreateDAL().GetListByTrayCode(entity.CN_S_TRAY_CODE);
//if (lstEntity.Count > 0)
//{
// return OperateResult.Error(string.Format("当前托盘已绑定货位{0},不允许重复绑定!", lstEntity[0].CN_S_LOCATION_CODE));
//}
//lstEntity = CreateDAL().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>().GetSingleEntity(new { CN_S_UNIQUE_CODE = e.CN_S_UNIQUE_CODE });
//如果新增NEW一个GUID
var mstGuid = Guid.NewGuid().ToString().ToUpper();
//调用AUTOBOM接口获取物料信息
AutoBomItemEntity itemenity = CreateDAL().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().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>().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>().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 TrayInfoEntityList = new List();
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 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>().AddRange(TrayItemMstlst_a, trans);
TrayItemDtllst_u.ForEach(e =>
{
CreateDAL>().Update(new { CN_PARENT_GUID = e.WAIT_UPDATE_GUID }, new { CN_GUID = e.CN_GUID }, trans);
});
TrayItemMstlst_u.ForEach(e =>
{
CreateDAL>().Update(new { CN_F_QUANTITY = e.CN_F_QUANTITY }, new { CN_GUID = e.CN_GUID }, trans);
});
TrayItemMstlst_d.ForEach(e =>
{
CreateDAL>().Delete(new { CN_GUID = e.CN_GUID }, trans);
});
TrayInfoEntityList.ForEach(e =>
{
CreateDAL>().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>().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
}
}