using HH.Redis.ReisModel;
using HH.WMS.BLL.Basic;
using HH.WMS.BLL.SysMgr;
using HH.WMS.Common;
using HH.WMS.DAL;
using HH.WMS.DAL.Algorithm;
using HH.WMS.DAL.Basic;
using HH.WMS.DAL.Check;
using HH.WMS.DAL.Common;
using HH.WMS.DAL.InStock;
using HH.WMS.DAL.OutStock;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Algorithm;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Check;
using HH.WMS.Entitys.Common;
using HH.WMS.Entitys.Entitys;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WMS.BLL.Check
{
public class TN_WM_CHECK_MSTBLL : DapperBaseBLL
{
#region 获取分页列表
///
/// 获取分页列表
///
///
///
/// [HanHe(lt)] CREATED 2018/7/3
public DataTable GetDataTable(dynamic obj)
{
DataTable dt = CreateDAL().GetDataTable(obj);
Dictionary stockDic = new Dictionary();
dt.Columns.Add("CN_S_STOCK_NAME");
foreach (DataRow dtrow in dt.Rows)
{
if (!string.IsNullOrEmpty(dtrow["CN_S_STOCK_CODE"].ToString())) //获取仓库名称
{
if (!stockDic.ContainsKey(dtrow["CN_S_STOCK_CODE"].ToString()))
{
TN_AB_STOCKEntity stockentity = CreateDAL().GetStockentity("CN_S_STOCK_CODE", dtrow["CN_S_STOCK_CODE"].ToString());//获取仓库名称
if (stockentity != null)
{
dtrow["CN_S_STOCK_NAME"] = stockentity.CN_S_STOCK_NAME;
stockDic.Add(dtrow["CN_S_STOCK_CODE"].ToString(), stockentity.CN_S_STOCK_NAME);
}
}
else
{
dtrow["CN_S_STOCK_NAME"] = stockDic[dtrow["CN_S_STOCK_CODE"].ToString()];
}
}
}
return dt;
}
///
/// 获取分页列表
///
///
///
/// [HanHe(lt)] CREATED 2018/7/3
public DataTable GetDataTable(string sqlWhere, string OrdeBy, int pageSize, int pageIndex)
{
return CreateDAL().GetDataTable(sqlWhere, OrdeBy, pageSize, pageIndex);
}
#endregion
#region 修改
///
/// 更新一条数据
///
/// [HanHe(lt)] CREATED 2018/7/3
/// [HanHe(dbs)] CREATED 2019/3/18
public OperateResult Update(TN_WM_CHECK_MSTEntity entity)
{
return UseTransaction(trans =>
{
CreateDAL>().Update(new
{
CN_S_MODIFY = entity.CN_S_MODIFY,
CN_S_MODIFY_BY = entity.CN_S_MODIFY_BY,
CN_T_MODIFY = entity.CN_T_MODIFY
}, new { CN_S_OP_NO = entity.CN_S_OP_NO }, trans);
CreateDAL>().Delete(new { CN_S_OP_NO = entity.CN_S_OP_NO }, trans);
CreateDAL>().AddRange(entity.dtls, trans);
});
}
#endregion
#region 查询盘点业务主表
///
/// 查询盘点业务主表
///
/// 查询条件
///
/// [HanHe(lt)] CREATED 2018/7/3
public DataTable Getentity(string sqlwhere)
{
DataTable dt = CreateDAL().Getentity(sqlwhere);
Dictionary stockDic = new Dictionary();
dt.Columns.Add("CN_S_STOCK_NAME");
foreach (DataRow dtrow in dt.Rows)
{
if (!string.IsNullOrEmpty(dtrow["CN_S_STOCK_CODE"].ToString())) //获取仓库名称
{
if (!stockDic.ContainsKey(dtrow["CN_S_STOCK_CODE"].ToString()))
{
TN_AB_STOCKEntity stockentity = CreateDAL().GetStockentity("CN_S_STOCK_CODE", dtrow["CN_S_STOCK_CODE"].ToString());//获取仓库名称
if (stockentity != null)
{
dtrow["CN_S_STOCK_NAME"] = stockentity.CN_S_STOCK_NAME;
stockDic.Add(dtrow["CN_S_STOCK_CODE"].ToString(), stockentity.CN_S_STOCK_NAME);
}
}
else
{
dtrow["CN_S_STOCK_NAME"] = stockDic[dtrow["CN_S_STOCK_CODE"].ToString()];
}
}
}
return dt;
}
#endregion
#region 获取货位物料信息
///
/// 获取货位物料信息
///
/// 查询条件
///
/// [HanHe(lt)] CREATED 2018/7/12
/// [HanHe(dbs)] CREATED 2019/3/14
public OperateResult GetTrayLocation(SearchModel searchModel)
{
if (searchModel.SearchCondition.CN_S_TYPE == "货位盘点")
return CreateDAL>().GetPagingResult(searchModel.PageIndex, searchModel.PageSize, new
{
CN_S_STOCK_CODE = searchModel.SearchCondition.CN_S_STOCK_CODE.ToString(),
CN_S_STOCK_AREA = searchModel.SearchCondition.CN_S_STOCK_AREA.ToString(),
CN_S_LOCATION_CODE = searchModel.SearchCondition.CN_S_LOCATION_CODE.ToString()
});
else if (searchModel.SearchCondition.CN_S_TYPE == "物料盘点")
{
if (searchModel.SearchCondition.CN_S_STOCK_AREA != "")
{
//库区
return CreateDAL>().GetPagingResult(searchModel.PageIndex, searchModel.PageSize, new
{
CN_S_STOCK_CODE = searchModel.SearchCondition.CN_S_STOCK_CODE.ToString(),
CN_S_STOCK_AREA = searchModel.SearchCondition.CN_S_STOCK_AREA.ToString(),
CN_S_ITEM_CODE = searchModel.SearchCondition.CN_S_ITEM_CODE.ToString(),
CN_S_OWNER = searchModel.SearchCondition.CN_S_OWNER.ToString()
}, " ORDER BY CN_S_ITEM_CODE ");
}
else
{
//仓库
return CreateDAL().GetEnableCheckQty(searchModel.PageIndex, searchModel.PageSize,
searchModel.SearchCondition.CN_S_STOCK_CODE.ToString(),
searchModel.SearchCondition.CN_S_STOCK_AREA.ToString(),
searchModel.SearchCondition.CN_S_ITEM_CODE.ToString(),
searchModel.SearchCondition.CN_S_OWNER.ToString());
}
}
return OperateResult.Error("请选择盘点类型!");
}
//public DataTable GetTrayItem(dynamic obj)
//{
// return CreateDAL().GetTrayItem(obj);
//}
public List Getlist(string sqlwhere, string type)
{
return CreateDAL().Getlist(sqlwhere, type);
}
#endregion
#region 新增数据
///
/// 新增数据
///
/// 新增实体主表
/// 新增子表
///
/// [HanHe(lt)] CREATED 2018/7/12
/// [HanHe(dbs)] CREATED 2019/3/18
public OperateResult Add(TN_WM_CHECK_MSTEntity mst)
{
return UseTransaction(trans =>
{
CreateDAL>().Add(mst, trans);//主表
CreateDAL>().AddRange(mst.dtls, trans);//子表
});
}
#endregion
#region 盘点单提交
///
///盘点单提交
///
///
///
/// [HanHe(lt)] CREATED 2018/8/24
/// [HanHe(dbs)] CREATED 2019/3/18
public OperateResult Submit(string[] opNos, RedisUserEntity user)
{
List errorOrs = new List();
foreach (string opNo in opNos)
{
TN_WM_CHECK_MSTEntity model = CreateDAL>().GetSingleEntity(new { CN_S_OP_NO = opNo });
List checkList = CreateDAL().GetCheckList(opNo, model.CN_S_TYPE);
if (model.CN_S_TYPE.Equals("物料盘点"))
{
//快速、简易的判断一下仓库库存和货位库存是否一致
List checkDtl = CreateDAL>().GetList(new { CN_S_OP_NO = opNo });
if (checkList.Sum(x => x.CN_F_QUANTITY) != checkDtl.Sum(x => x.CN_F_QUANTITY))
return OperateResult.Error("仓库库存和货位库存不一致,请联系管理员!");
}
checkList.ForEach(x =>
{
x.CN_GUID = Guid.NewGuid().ToString();
x.CN_S_ISCHECK = "N";
x.CN_S_CREATOR = user.CN_S_LOGIN;
x.CN_S_CREATOR_BY = user.CN_S_NAME;
x.CN_T_CREATE = DateTime.Now;
x.CN_S_OP_NO = opNo;
x.CN_S_STOCK_CODE = model.CN_S_STOCK_CODE;
if (x.CN_S_PACKING_UNIT == null)
x.CN_S_PACKING_UNIT = "";
if (string.IsNullOrEmpty(x.CN_S_TRAY_GRID))
x.CN_S_TRAY_GRID = "1";
//不基于批次进行盘点,让数据库存储长度为0的字符串
x.CN_S_PRODUCTION_BATCH = "";
x.CN_S_LOT_NO = "";
});
OperateResult or = UseTransaction(trans =>
{
CreateDAL>().AddRange(checkList, trans);
CreateDAL>().Update(new { CN_S_STATE = "已提交" }, new { CN_S_OP_NO = opNo }, trans);
});
if (or.Status == ResultStatus.Error)
errorOrs.Add(or);
}
if (errorOrs.Count == 0)
return OperateResult.Succeed();
else if (errorOrs.Count == opNos.Length)
return OperateResult.Error(errorOrs[0].Msg);
else
return OperateResult.Warning(errorOrs[0].Msg);
}
#endregion
#region 根据盘点单号修改状态
///
/// 根据盘点单号修改状态
///
/// 盘点单号
/// 状态
///
/// [HanHe(lt)] CREATED 2018/8/24
public SqlExecuteResult UpdateStateByNo(string opNo, string state)
{
SqlExecuteResult result = CreateDAL().UpdateStateByNo(opNo, state, null);
return result;
}
#endregion
#region 删除主子表
///
///删除主子表
///
///
///
/// [HanHe(lt)] CREATED 2018/8/24
/// [HanHe(dbs)] CREATED 2019/3/18
public OperateResult Delete(string opNo)
{
return UseTransaction(trans =>
{
CreateDAL>().Delete(new { CN_S_OP_NO = opNo }, trans);
CreateDAL>().Delete(new { CN_S_OP_NO = opNo }, trans);
});
}
#endregion
#region 判断是否全部都完成
///
/// 查询盘点业务主表
///
/// 查询条件
///
/// [HanHe(lt)] CREATED 2018/12/3
public bool GetIsExist(string sqlwhere)
{
DataTable dt = CreateDAL().Getentity(sqlwhere);
return dt.Rows.Count > 0;
}
#endregion
#region 删除货位托盘关联
/////
///// 删除货位托盘关联
/////
/////
///// [HanHe(lt)] CREATED 2018/12/20
//public OperateResult DeleteTrayLocationAndUpdateLocationExt()
//{
// OperateResult operateResult = UseTransaction(trans =>
// {
// CreateDAL().UpdateLocationExt(trans);
// CreateDAL().DeleteTrayLocation(trans);
// });
// return operateResult;
//}
#endregion
#region 快速盘点
///
/// 托盘盘点数据
///
///
///
///
/// [HanHe(dbs)] CREATED 2019/4/12
public OperateResult FastCheck(List check, RedisUserEntity user)
{
OperateResult or = new OperateResult();
//记录新增的Mst主表Guid
List addMstGuid = new List();
//记录新增的Dtl子表Guid
List addDtlGuid = new List();
//记录删除的Mst主表Guid
List reduceMstGuid = new List();
//记录删除的Dtl子表Guid
List reduceDtlGuid = new List();
//记录解除容器与货位关系的货位
List clearRelLocation = new List();
//虚拟托盘号
string vwTrayCode = "";
//组织的容器货位关联记录对象
TN_WM_B_TRAY_LOCATIONEntity trayLocation = null;
//记录原始货位中剩下的物料记录
List sourseMst = new List();
#region 组织盈亏记录
var trayGroup = check.GroupBy(x => x.CN_S_TRAY_CODE).ToArray();
if (trayGroup.Count() > 1)
return OperateResult.Error("PDA上传的数据异常!");//一次只会存在一个容器
List sourse = new List();
if (!string.IsNullOrEmpty(trayGroup[0].Key))
sourse = CreateDAL>().GetList(new { CN_S_TRAY_CODE = trayGroup[0].Key });
else
{
#region 不存在盘点托盘时,生成虚拟托盘,及组织容易与货位关系
or = BLLCreator.Create().CreateVirtualTray(user);
if (or.Status != ResultStatus.Success)
return or;
vwTrayCode = or.Data.ToString();
check.ForEach(x => { x.CN_S_TRAY_CODE = vwTrayCode; x.CN_S_TRAY_GRID = "1"; });
trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_N_INDEX = 1,
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_S_LOCATION_CODE = check[0].CN_S_LOCATION_CODE,
CN_S_TRAY_CODE = vwTrayCode,
CN_S_STOCK_CODE = check[0].CN_S_STOCK_CODE,
CN_S_STOCK_AREA = check[0].CN_S_STOCK_AREA,
CN_T_CREATE = DateTime.Now
};
#endregion
}
sourseMst.AddRange(sourse);
#region 原始货位扣除盘点数据,得到盘亏量
sourse.ForEach(s =>
{
s.TrayItemDtlList = CreateDAL>().GetList(new { CN_PARENT_GUID = s.CN_GUID });
List temp = check.FindAll(y => y.CN_S_TRAY_CODE.Equals(s.CN_S_TRAY_CODE) && y.CN_S_TRAY_GRID.Equals(s.CN_S_TRAY_GRID));
foreach (TN_WM_CHECK_LISTEntity c in temp)
{
if (c.CN_F_CHECK_QTY == 0)
{
reduceMstGuid.Add(s.CN_GUID);
continue;
}
if (s.CN_S_ITEM_CODE.Equals(c.CN_S_ITEM_CODE))
{
if (s.CN_F_QUANTITY >= c.CN_F_CHECK_QTY)
{
s.CN_F_QUANTITY -= c.CN_F_CHECK_QTY;
c.CN_F_CHECK_QTY = 0;
}
else
{
c.CN_F_CHECK_QTY = c.CN_F_CHECK_QTY - s.CN_F_QUANTITY;
s.CN_F_QUANTITY = 0;
c.CN_GUID = s.CN_GUID;
}
foreach (TN_WM_B_TRAY_ITEM_DTLEntity ss in s.TrayItemDtlList)
{
foreach (CHECK_DETAILD cc in c.checkDetaild)
{
if (ss.CN_S_PACKING_UNIT == cc.CN_S_PACKING_UNIT && ss.CN_F_PACKING_QTY == cc.CN_F_PACKING_QTY)
{
if (cc.CN_F_QUANTITY == 0)
{
reduceDtlGuid.Add(ss.CN_GUID);
continue;
}
if (ss.CN_F_QUANTITY >= cc.CN_F_QUANTITY)
{
ss.CN_F_QUANTITY -= cc.CN_F_QUANTITY;
cc.CN_F_QUANTITY = 0;
}
else
{
cc.CN_F_QUANTITY = cc.CN_F_QUANTITY - ss.CN_F_QUANTITY;
ss.CN_F_QUANTITY = 0;
cc.CN_GUID = ss.CN_GUID;
}
}
}
}
}
}
});
if (sourseMst.Count!=0 && sourseMst.FindAll(x=>x.CN_F_QUANTITY>0).Count == reduceMstGuid.Count)
{
//当移除的MstGUID长度等于原始容器中物料的数据长度时,则说明全部盘亏
clearRelLocation.Add(check[0].CN_S_LOCATION_CODE);
}
#endregion
#endregion
#region 生成批次信息
or = GetCode(user, Constants.BatchNo);
if (or.Status != ResultStatus.Success)
return or;
TN_WM_LOT_INFOEntity lotEntity = new TN_WM_LOT_INFOEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_S_LOT_CODE = or.Data.ToString(),
CN_T_CREATE = DateTime.Now
};
#endregion
#region 组织上架记录
List upHis = new List();
check.FindAll(x => x.CN_F_CHECK_QTY > 0).ForEach(x =>
{
x.checkDetaild.ForEach(y =>
{
upHis.Add(new TN_WM_UP_HISTORYEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_F_PACKING_QTY = y.CN_F_PACKING_QTY,
CN_F_QUANTITY = y.CN_F_QUANTITY,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_LOCATION_CODE = x.CN_S_LOCATION_CODE,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_LOT_NO = string.IsNullOrEmpty(y.CN_S_LOT_NO) ? lotEntity.CN_S_LOT_CODE : y.CN_S_LOT_NO,
CN_S_OWNER = x.CN_S_OWNER,
CN_S_PACKING_UNIT = y.CN_S_PACKING_UNIT,
CN_S_PRODUCTION_BATCH = y.CN_S_PRODUCTION_BATCH,
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_TRAY_CODE = x.CN_S_TRAY_CODE,
CN_S_TRAY_GRID = x.CN_S_TRAY_GRID,
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_MODIFY = user.CN_S_LOGIN,
CN_S_MODIFY_BY = user.CN_S_NAME,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now
});
});
});
#endregion
#region 组织下架记录
List downHis = new List();
sourseMst.FindAll(x => x.CN_F_QUANTITY > 0).ForEach(x =>
{
x.TrayItemDtlList.ForEach(y =>
{
downHis.Add(new TN_WM_DOWN_HISTORYEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_F_PACKING_QTY = y.CN_F_PACKING_QTY,
CN_F_QUANTITY = y.CN_F_QUANTITY,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_LOCATION_CODE = check[0].CN_S_LOCATION_CODE,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_LOT_NO = y.CN_S_LOT_NO,
CN_S_OWNER = x.CN_S_OWNER,
CN_S_PACKING_UNIT = y.CN_S_PACKING_UNIT,
CN_S_PRODUCTION_BATCH = y.CN_S_PRODUCTION_BATCH,
CN_S_STOCK_AREA = check[0].CN_S_STOCK_AREA,
CN_S_STOCK_CODE = check[0].CN_S_STOCK_CODE,// x.CN_S_STOCK_CODE,
CN_S_TRAY_CODE = x.CN_S_TRAY_CODE,
CN_S_TRAY_GRID = x.CN_S_TRAY_GRID,
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_MODIFY = user.CN_S_LOGIN,
CN_S_MODIFY_BY = user.CN_S_NAME,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now
});
});
});
#endregion
#region 组织盘点单
or = GetCode(user, Constants.CheckCode);
if (or.Status != ResultStatus.Success)
return or;
string checkOpNo = or.Data.ToString();
TN_WM_CHECK_MSTEntity checkMst = new TN_WM_CHECK_MSTEntity()
{
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_S_MODE = "货位盘点",
CN_S_MODIFY = user.CN_S_LOGIN,
CN_S_MODIFY_BY = user.CN_S_NAME,
CN_S_OP_NO = checkOpNo,
CN_S_STATE = Constants.State_Completed,
CN_S_TYPE = "快速盘点",
CN_S_STOCK_CODE = check[0].CN_S_STOCK_CODE,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_T_OP_TIME = DateTime.Now
};
#endregion
#region 组织入库单
//or = GetCode(user, Constants.CheckCode);
//if (or.Status != ResultStatus.Success)
// return or;
//string inOpNp = or.Data.ToString();
//TN_WM_INCREASE_INVENTORY_MSTEntity inBuss = null;
//if (upHis.Any())
//{
// inBuss = new TN_WM_INCREASE_INVENTORY_MSTEntity();
// inBuss.CN_GUID = Guid.NewGuid().ToString();
// inBuss.CN_S_CREATOR = user.CN_S_LOGIN;
// inBuss.CN_S_CREATOR_BY = user.CN_S_NAME;
// inBuss.CN_S_FROM_NO = "";//盘点单
// inBuss.CN_S_LOT_NO = "";
// inBuss.CN_S_MODIFY = user.CN_S_LOGIN;
// inBuss.CN_S_MODIFY_BY = user.CN_S_NAME;
// inBuss.CN_S_OP_FROM = "";
// inBuss.CN_S_OP_NO = inOpNp;
// inBuss.CN_S_OP_TYPE = "盘盈入库";
// inBuss.CN_S_OWNER = Constants.DefaultOwner;
// inBuss.CN_S_STATE = Constants.State_Completed;
// inBuss.CN_S_STOCK_CODE = check[0].CN_S_STOCK_CODE;
// inBuss.CN_T_CREATE = DateTime.Now;
// inBuss.CN_T_MODIFY = DateTime.Now;
// upHis.GroupBy(x => new
// {
// CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
// CN_S_ITEM_NAME=x.CN_S_ITEM_NAME,
// CN_S_FIGURE_NO =x.CN_S_FIGURE_NO,
// CN_S_LOT_NO=x.CN_S_LOT_NO,
// CN_S_MEASURE_UNIT=x.CN_S_MEASURE_UNIT,
// CN_S_MODEL=x.CN_S_MODEL,
// CN_S_OWNER =x.CN_S_OWNER,
// CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
// CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
// }).Select(y => new
// {
// CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
// CN_S_ITEM_NAME=y.Key.CN_S_ITEM_NAME,
// CN_S_FIGURE_NO =y.Key.CN_S_FIGURE_NO,
// CN_S_LOT_NO=y.Key.CN_S_LOT_NO,
// CN_S_MEASURE_UNIT=y.Key.CN_S_MEASURE_UNIT,
// CN_S_MODEL=y.Key.CN_S_MODEL,
// CN_S_OWNER =y.Key.CN_S_OWNER,
// CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
// CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
// SUM = y.Sum(x => x.CN_F_QUANTITY)
// }).ToList().ForEach(x =>
// {
// inBuss.DTLEntity.Add(new TN_WM_INCREASE_INVENTORY_DTLEntity()
// {
// CN_F_QUANTITY = x.SUM,
// CN_GUID = Guid.NewGuid().ToString(),
// CN_S_CREATOR = user.CN_S_LOGIN,
// CN_S_CREATOR_BY = user.CN_S_NAME,
// CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
// CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
// CN_S_OP_NO = inOpNp,
// CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
// CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
// CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
// CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
// });
// });
//}
#endregion
#region 仓库库区量表影响
#region 仓库量表
List addStockQty = upHis.GroupBy(x => new
{
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_OWNER = x.CN_S_OWNER,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_LOT_NO = x.CN_S_LOT_NO,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
}).Select(y =>
{
return new TN_WM_B_STOCK_QTYEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
CN_S_LOT_NO = string.IsNullOrEmpty(y.Key.CN_S_LOT_NO) ? lotEntity.CN_S_LOT_CODE : y.Key.CN_S_LOT_NO,
CN_S_OWNER = y.Key.CN_S_OWNER,
CN_S_MODEL = y.Key.CN_S_MODEL,
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE,
};
}).ToList();
List reduceStockQty = downHis.GroupBy(x => new
{
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_OWNER = x.CN_S_OWNER,
CN_S_LOT_NO = x.CN_S_LOT_NO,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
}).Select(y =>
{
return new TN_WM_B_STOCK_QTYEntity()
{
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
CN_S_LOT_NO = y.Key.CN_S_LOT_NO,
CN_S_MODEL = y.Key.CN_S_MODEL,
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
CN_S_OWNER = y.Key.CN_S_OWNER,
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE
};
}).ToList();
#endregion
#region 先中和仓库出入库记录
int addL = addStockQty.Count;
for (int i = 0; i < addL; i++)
{
TN_WM_B_STOCK_QTYEntity x = addStockQty[i];
reduceStockQty.ForEach(y =>
{
if (x.CN_S_STOCK_CODE.Equals(y.CN_S_STOCK_CODE) && x.CN_S_ITEM_CODE.Equals(y.CN_S_ITEM_CODE) && x.CN_S_LOT_NO.Equals(y.CN_S_LOT_NO)
&& x.CN_S_OWNER.Equals(y.CN_S_OWNER) && x.CN_S_ITEM_STATE.Equals(y.CN_S_ITEM_STATE)
&& x.CN_S_PRODUCTION_BATCH.Equals(y.CN_S_PRODUCTION_BATCH))
{
if (x.CN_F_QUANTITY >= y.CN_F_QUANTITY)
{
x.CN_F_QUANTITY -= y.CN_F_QUANTITY;
y.CN_F_QUANTITY = 0;
}
}
});
}
addStockQty = addStockQty.FindAll(x => x.CN_F_QUANTITY > 0);
reduceStockQty = reduceStockQty.FindAll(x => x.CN_F_QUANTITY > 0);
#endregion
#region 库区量表
List addAreaQty = upHis.GroupBy(x => new
{
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_OWNER = x.CN_S_OWNER,
CN_S_LOT_NO = x.CN_S_LOT_NO,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
}).Select(y =>
{
return new TN_WM_B_AREA_QTYEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
CN_S_LOT_NO = string.IsNullOrEmpty(y.Key.CN_S_LOT_NO) ? lotEntity.CN_S_LOT_CODE : y.Key.CN_S_LOT_NO,
CN_S_OWNER = y.Key.CN_S_OWNER,
CN_S_MODEL = y.Key.CN_S_MODEL,
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
CN_S_STOCK_AREA = y.Key.CN_S_STOCK_AREA,
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE
};
}).ToList();
List reduceAreaQty = downHis.GroupBy(x => new
{
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_OWNER = x.CN_S_OWNER,
CN_S_LOT_NO = x.CN_S_LOT_NO,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
}).Select(y =>
{
return new TN_WM_B_AREA_QTYEntity()
{
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
CN_S_LOT_NO = y.Key.CN_S_LOT_NO,
CN_S_OWNER = y.Key.CN_S_OWNER,
CN_S_MODEL = y.Key.CN_S_MODEL,
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
CN_S_STOCK_AREA = y.Key.CN_S_STOCK_AREA,
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE
};
}).ToList();
#endregion
#region 先中和库区出入库记录
int addAreaL = addAreaQty.Count;
for (int i = 0; i < addL; i++)
{
TN_WM_B_AREA_QTYEntity x = addAreaQty[i];
reduceAreaQty.ForEach(y =>
{
if (x.CN_S_STOCK_CODE.Equals(y.CN_S_STOCK_CODE) && x.CN_S_STOCK_AREA.Equals(y.CN_S_STOCK_AREA)
&& x.CN_S_ITEM_CODE.Equals(y.CN_S_ITEM_CODE) && x.CN_S_LOT_NO.Equals(y.CN_S_LOT_NO) && x.CN_S_OWNER.Equals(y.CN_S_OWNER)
&& x.CN_S_ITEM_STATE.Equals(y.CN_S_ITEM_STATE) && x.CN_S_PRODUCTION_BATCH.Equals(y.CN_S_PRODUCTION_BATCH))
{
if (x.CN_F_QUANTITY >= y.CN_F_QUANTITY)
{
x.CN_F_QUANTITY -= y.CN_F_QUANTITY;
y.CN_F_QUANTITY = 0;
}
}
});
}
addAreaQty = addAreaQty.FindAll(x => x.CN_F_QUANTITY > 0);
reduceAreaQty = reduceAreaQty.FindAll(x => x.CN_F_QUANTITY > 0);
#endregion
#endregion
#region 库存业务影响
#region 增加库存业务
TN_WM_INCREASE_INVENTORY_MSTEntity inBuss = null;
if (addAreaQty.Any())
{
OperateResult ruleOrOrder = GetCode(user, Constants.Rule_In);
if (ruleOrOrder.Status == ResultStatus.Error)
return ruleOrOrder;
string guid = Guid.NewGuid().ToString();
inBuss = new TN_WM_INCREASE_INVENTORY_MSTEntity()
{
CN_GUID = guid,
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_S_MODIFY = user.CN_S_LOGIN,
CN_S_MODIFY_BY = user.CN_S_NAME,
CN_S_OP_FROM = "盘点单",
CN_S_OP_TYPE = "盘盈入库",
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
CN_S_OPERATOR = user.CN_S_LOGIN,
CN_S_FROM_NO = checkOpNo,
CN_S_LOT_NO = lotEntity.CN_S_LOT_CODE,
CN_S_OWNER = upHis[0].CN_S_OWNER,
CN_S_STOCK_CODE = upHis[0].CN_S_STOCK_CODE,
CN_S_STATE = Constants.State_Audit,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_T_OPERATE = DateTime.Now,
DTLEntity = addAreaQty.GroupBy(x => new
{
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_MODEL = x.CN_S_MODEL
}).Select(y =>
{
return new TN_WM_INCREASE_INVENTORY_DTLEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
CN_S_MSTGUID = guid,
CN_S_MODEL = y.Key.CN_S_MODEL,
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_S_MODIFY = user.CN_S_LOGIN,
CN_S_MODIFY_BY = user.CN_S_NAME,
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_C_IS_BALANCE = "N",
CN_C_IS_SCRAP = "N"
};
}).ToList()
};
//upHis.Select(x => { x.CN_S_OP_FROM = "盘盈入库"; x.CN_S_FROM_NO = ruleOrOrder.Data.ToString(); return x; });
}
#endregion
#region 减少库存业务
TN_WM_REDUCE_INVENTORY_MSTEntity outBuss = null;
if (reduceAreaQty.Any())
{
OperateResult ruleOrOrder = GetCode(user, Constants.Rule_Out);
if (ruleOrOrder.Status == ResultStatus.Error)
return ruleOrOrder;
string guid = Guid.NewGuid().ToString();
outBuss = new TN_WM_REDUCE_INVENTORY_MSTEntity()
{
CN_GUID = guid,
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_S_MODIFY = user.CN_S_LOGIN,
CN_S_MODIFY_BY = user.CN_S_NAME,
CN_S_OP_FROM = "盘点单",
CN_S_OP_TYPE = "盘亏出库",
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
CN_S_FROM_NO = checkOpNo,
CN_S_STOCK_CODE = downHis[0].CN_S_STOCK_CODE,
CN_S_STATE = Constants.State_Audit,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_T_OPERATE = DateTime.Now,
CN_C_PRINT = "N",
DTLEntity = reduceAreaQty.GroupBy(x => new
{
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_OWNER = x.CN_S_OWNER
}).Select(y =>
{
return new TN_WM_REDUCE_INVENTORY_DTLEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
CN_S_MSTGUID = guid,
CN_S_MODEL = y.Key.CN_S_MODEL,
CN_S_OWNER = y.Key.CN_S_OWNER,
CN_C_IS_BALANCE = "N",
CN_C_IS_SCRAP = "N",
//CN_S_CREATOR = user.CN_S_LOGIN,
//CN_S_CREATOR_BY = user.CN_S_NAME,
//CN_S_MODIFY = user.CN_S_LOGIN,
//CN_S_MODIFY_BY = user.CN_S_NAME,
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
//CN_T_CREATE = DateTime.Now,
//CN_T_MODIFY = DateTime.Now
};
}).ToList()
};
//downHis.Select(x => { x.CN_S_OP_FROM = "盘亏出库"; x.CN_S_FROM_NO = ruleOrOrder.Data.ToString(); return x; });
}
#endregion
#endregion
#region 盘点盘赢对象转物料容器关联对象
List newAddMst = new List();
check.FindAll(x => x.CN_F_CHECK_QTY > 0).ForEach(x =>
{
string guid = "";
if (string.IsNullOrEmpty(x.CN_GUID))
{
guid = Guid.NewGuid().ToString();
addMstGuid.Add(guid);
}
else
guid = x.CN_GUID;
TN_WM_B_TRAY_ITEM_MSTEntity mst = new TN_WM_B_TRAY_ITEM_MSTEntity()
{
CN_GUID = guid,
CN_F_QUANTITY = x.CN_F_CHECK_QTY,
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_OWNER = x.CN_S_OWNER,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_TRAY_GRID = x.CN_S_TRAY_GRID,
CN_S_TRAY_CODE = x.CN_S_TRAY_CODE,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO
};
x.checkDetaild.ForEach(y =>
{
mst.TrayItemDtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity()
{
CN_GUID = y.CN_GUID,
CN_PARENT_GUID = guid,
CN_S_PACKING_UNIT = y.CN_S_PACKING_UNIT,
CN_F_PACKING_QTY = y.CN_F_PACKING_QTY,
CN_S_PRODUCTION_BATCH = y.CN_S_PRODUCTION_BATCH,
CN_S_LOT_NO = string.IsNullOrEmpty(y.CN_S_LOT_NO) ? lotEntity.CN_S_LOT_CODE : y.CN_S_LOT_NO,
CN_F_QUANTITY = y.CN_F_QUANTITY,
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_T_CREATE = DateTime.Now
});
});
newAddMst.Add(mst);
});
#endregion
return UseTransaction(trans =>
{
if (trayLocation != null)
{
CreateDAL>().Add(trayLocation, trans);
CreateDAL>().Update(
new { CN_S_USE_STATE = Constants.Use_State_NoFull },
new { CN_S_LOCATION_CODE = trayLocation.CN_S_LOCATION_CODE }, trans);
}
foreach (string location in clearRelLocation)
{
CreateDAL>().Delete(new { CN_S_LOCATION_CODE = location }, trans);
CreateDAL>().Update(
new { CN_S_USE_STATE = Constants.Use_State_Empty },
new { CN_S_LOCATION_CODE = location }, trans);
}
CreateDAL>().Add(checkMst, trans);
//更新仓库量表
if (addStockQty.Any())
CreateDAL().AddStockQty(addStockQty, trans);
if (reduceStockQty.Any())
CreateDAL().ReduceStockQty(reduceStockQty, trans);
//更新库区量表
if (addAreaQty.Any())
CreateDAL().AddAreaQty(addAreaQty, trans);
if (reduceAreaQty.Any())
CreateDAL().ReduceAreaQty(reduceAreaQty, trans);
//增加库存业务
if (inBuss != null)
{
CreateDAL>().Add(inBuss, trans);
CreateDAL>().AddRange(inBuss.DTLEntity, trans);
}
//减少库存业务
if (outBuss != null)
{
CreateDAL>().Add(outBuss, trans);
CreateDAL>().AddRange(outBuss.DTLEntity, trans);
}
//上架记录
if (upHis.Any())
CreateDAL>().AddRange(upHis, trans);
//下架记录
if (downHis.Any())
CreateDAL>().AddRange(downHis, trans);
//更新容器量表
sourseMst.FindAll(x => x.CN_F_QUANTITY > 0).ForEach(x =>
{
if (reduceMstGuid.Exists(j => j.Equals(x.CN_GUID)))
CreateDAL>().Delete(new { CN_GUID = x.CN_GUID }, trans);
else
CreateDAL().ReduceMstQty(x, trans);
x.TrayItemDtlList.FindAll(k => k.CN_F_QUANTITY > 0).ForEach(y =>
{
if (reduceDtlGuid.Exists(j => j.Equals(y.CN_GUID)))
CreateDAL>().Delete(new { CN_GUID = y.CN_GUID }, trans);
else
CreateDAL().ReduceDtlQty(y, trans);
});
});
newAddMst.ForEach(x =>
{
if (addMstGuid.Exists(y => y.Equals(x.CN_GUID)))
CreateDAL>().Add(x, trans);
else
CreateDAL().AddMstQty(x, trans);
x.TrayItemDtlList.ForEach(k =>
{
if (string.IsNullOrEmpty(k.CN_GUID))
{
k.CN_GUID = Guid.NewGuid().ToString();
CreateDAL>().Add(k, trans);
}
else
CreateDAL().AddDtlQty(k, trans);
});
});
});
}
#endregion
#region 无单据盘点
///
/// 无单据盘点
///
///
///
///
/// [HanHe(dbs)] CREATED 2019/4/16
public OperateResult NoBillCheck(List list, RedisUserEntity user)
{
//格式转换
list.ForEach(x =>
{
x.CN_S_STOCK_CODE = x.CN_S_STOCK_CODE.Trim();
x.CN_S_STOCK_AREA = x.CN_S_STOCK_AREA.Trim();
x.CN_S_LOCATION_CODE = x.CN_S_LOCATION_CODE.Trim();
if (string.IsNullOrEmpty(x.CN_S_OWNER))
x.CN_S_OWNER = Constants.DefaultOwner;
if (string.IsNullOrEmpty(x.CN_S_ITEM_STATE))
x.CN_S_ITEM_STATE = Constants.DefaultItemState;
if (string.IsNullOrEmpty(x.CN_S_TRAY_GRID))
x.CN_S_TRAY_GRID = "1";
if (x.CN_S_PRODUCTION_BATCH == null)
x.CN_S_PRODUCTION_BATCH = "";
if (x.checkDetaild == null)
{
x.checkDetaild = new List(){ new CHECK_DETAILD(){
CN_S_PACKING_UNIT="", CN_F_QUANTITY = x.CN_F_CHECK_QTY,
CN_S_PRODUCTION_BATCH=""
}};
}
});
return FastCheck(list, user);
}
#endregion
#region 盘点盈亏确认,结束单据
///
/// 盘点盈亏确认,结束单据
///
/// 盘点单号
///
/// [HanHe(DBS)] CREATED 2019/3/22
public OperateResult CheckConfirm(string opNo, RedisUserEntity user)
{
//获取盘点结果
List checkResult = CreateDAL>().GetList(new { CN_S_OP_NO = opNo });
List sourceCheckResult = new List();
checkResult.ForEach(x =>
{
sourceCheckResult.Add(TransExpV2.Trans(x));
});
sourceCheckResult.Select(x =>
{
x.CN_F_QUANTITY = x.CN_F_CHECK_QTY - x.CN_F_QUANTITY;
return x;
}).ToList();
List trayItems = new List();
sourceCheckResult.GroupBy(x => x.CN_S_TRAY_CODE).ToList().ForEach(x =>
{
trayItems.AddRange(CreateDAL>().GetList(new { CN_S_TRAY_CODE = x.Key }));
});
trayItems.ForEach(x =>
{
x.TrayItemDtlList = CreateDAL>().GetList(new { CN_PARENT_GUID = x.CN_GUID });
});
List addMstGuid = new List();//记录哪些是完全盘盈的新物料;
List upHis = new List();
List downHis = new List();
sourceCheckResult.ForEach(x =>
{
TN_WM_B_TRAY_ITEM_MSTEntity trayItemMst = trayItems.Find(y => y.CN_S_TRAY_CODE == x.CN_S_TRAY_CODE &&
y.CN_S_TRAY_GRID == x.CN_S_TRAY_GRID && y.CN_S_ITEM_CODE == x.CN_S_ITEM_CODE);
if (trayItemMst == null)
{
//完全盘盈的物料,需要添加
trayItemMst = new TN_WM_B_TRAY_ITEM_MSTEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_F_QUANTITY = 0,
CN_S_TRAY_CODE = x.CN_S_TRAY_CODE,
CN_S_TRAY_GRID = x.CN_S_TRAY_GRID,
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_OWNER = x.CN_S_OWNER,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(),
TrayItemDtlList = new List()
};
addMstGuid.Add(trayItemMst.CN_GUID);
trayItems.Add(trayItemMst);
}
trayItemMst.CN_F_QUANTITY += x.CN_F_QUANTITY;//主表数量
if (x.CN_F_QUANTITY < 0)
{
//亏
foreach (var j in trayItemMst.TrayItemDtlList.FindAll(k => k.CN_S_PACKING_UNIT == (x.CN_S_PACKING_UNIT) && k.CN_F_PACKING_QTY == x.CN_F_PACKING_QTY).
OrderByDescending(k => k.CN_S_PRODUCTION_BATCH))
{
TN_WM_DOWN_HISTORYEntity down = new TN_WM_DOWN_HISTORYEntity();
if (x.CN_F_QUANTITY == 0)
break;
if (j.CN_F_QUANTITY > -x.CN_F_QUANTITY)
{
j.CN_F_QUANTITY += x.CN_F_QUANTITY;
down.CN_F_QUANTITY = -x.CN_F_QUANTITY;//记录下架数量
x.CN_F_QUANTITY = 0;
}
else
{
x.CN_F_QUANTITY += j.CN_F_QUANTITY;
down.CN_F_QUANTITY = j.CN_F_QUANTITY;//记录下架数量
j.CN_F_QUANTITY = 0;
}
down.CN_GUID = Guid.NewGuid().ToString();
down.CN_S_CREATOR = user.CN_S_LOGIN;
down.CN_S_CREATOR_BY = user.CN_S_NAME;
down.CN_S_MODIFY = user.CN_S_LOGIN;
down.CN_S_MODIFY_BY = user.CN_S_NAME;
down.CN_F_PACKING_QTY = j.CN_F_PACKING_QTY;
down.CN_S_LOT_NO = j.CN_S_LOT_NO;
down.CN_S_FIGURE_NO = trayItemMst.CN_S_FIGURE_NO;
down.CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE;
down.CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME;
down.CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE;
down.CN_S_LOCATION_CODE = x.CN_S_LOCATION_CODE;
down.CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT;
down.CN_S_MODEL = trayItemMst.CN_S_MODEL;
down.CN_S_OWNER = trayItemMst.CN_S_OWNER;
down.CN_S_PACKING_UNIT = j.CN_S_PACKING_UNIT;
down.CN_S_PRODUCTION_BATCH = j.CN_S_PRODUCTION_BATCH;
down.CN_S_STOCK_AREA = x.CN_S_STOCK_AREA;
down.CN_S_STOCK_CODE = x.CN_S_STOCK_CODE;
down.CN_S_TRAY_CODE = trayItemMst.CN_S_TRAY_CODE;
down.CN_S_TRAY_GRID = trayItemMst.CN_S_TRAY_GRID;
down.CN_T_CREATE = down.CN_T_MODIFY = DateTime.Now;
downHis.Add(down);
}
}
else if (x.CN_F_QUANTITY > 0)
{
//赢
trayItemMst.TrayItemDtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity()
{
CN_F_PACKING_QTY = x.CN_F_PACKING_QTY,
CN_F_QUANTITY = x.CN_F_QUANTITY,
CN_PARENT_GUID = trayItemMst.CN_GUID,
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_S_LOT_NO = x.CN_S_LOT_NO,
CN_S_MODIFY = user.CN_S_LOGIN,
CN_S_MODIFY_BY = user.CN_S_NAME,
CN_S_PACKING_UNIT = x.CN_S_PACKING_UNIT,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now
});
upHis.Add(new TN_WM_UP_HISTORYEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_F_PACKING_QTY = x.CN_F_PACKING_QTY,
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_F_QUANTITY = x.CN_F_QUANTITY,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_LOCATION_CODE = x.CN_S_LOCATION_CODE,
CN_S_LOT_NO = x.CN_S_LOT_NO,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_MODIFY = user.CN_S_NAME,
CN_S_MODIFY_BY = user.CN_S_NAME,
CN_S_OWNER = x.CN_S_OWNER,
CN_S_PACKING_UNIT = x.CN_S_PACKING_UNIT,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_TRAY_CODE = x.CN_S_TRAY_CODE,
CN_S_TRAY_GRID = x.CN_S_TRAY_GRID,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
});
}
else
{
//平
}
});
#region 先中和上架记录和下架记录
int upL = upHis.Count;
for (int i = 0; i < upL; i++)
{
TN_WM_UP_HISTORYEntity x = upHis[i];
downHis.ForEach(y =>
{
if (x.CN_S_STOCK_CODE.Equals(y.CN_S_STOCK_CODE) && x.CN_S_STOCK_AREA.Equals(y.CN_S_STOCK_AREA)
&& x.CN_S_LOCATION_CODE.Equals(y.CN_S_LOCATION_CODE)
&& x.CN_S_ITEM_CODE.Equals(y.CN_S_ITEM_CODE) && x.CN_S_LOT_NO.Equals(y.CN_S_LOT_NO) && x.CN_S_OWNER.Equals(y.CN_S_OWNER)
&& x.CN_S_ITEM_STATE.Equals(y.CN_S_ITEM_STATE) && x.CN_S_PRODUCTION_BATCH.Equals(y.CN_S_PRODUCTION_BATCH))
{
if (x.CN_F_QUANTITY >= y.CN_F_QUANTITY)
{
x.CN_F_QUANTITY -= y.CN_F_QUANTITY;
y.CN_F_QUANTITY = 0;
}
}
});
}
upHis = upHis.FindAll(x => x.CN_F_QUANTITY > 0);
downHis = downHis.FindAll(x => x.CN_F_QUANTITY > 0);
#endregion
#region 仓库库区量表影响
#region 仓库量表
List addStockQty = upHis.GroupBy(x => new
{
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_OWNER = x.CN_S_OWNER,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_LOT_NO = x.CN_S_LOT_NO,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
}).Select(y =>
{
return new TN_WM_B_STOCK_QTYEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
CN_S_LOT_NO = y.Key.CN_S_LOT_NO,
CN_S_OWNER = y.Key.CN_S_OWNER,
CN_S_MODEL = y.Key.CN_S_MODEL,
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE,
};
}).ToList();
List reduceStockQty = downHis.GroupBy(x => new
{
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_OWNER = x.CN_S_OWNER,
CN_S_LOT_NO = x.CN_S_LOT_NO,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
}).Select(y =>
{
return new TN_WM_B_STOCK_QTYEntity()
{
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
CN_S_LOT_NO = y.Key.CN_S_LOT_NO,
CN_S_MODEL = y.Key.CN_S_MODEL,
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
CN_S_OWNER = y.Key.CN_S_OWNER,
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE
};
}).ToList();
#endregion
#region 先中和仓库出入库记录
int addL = addStockQty.Count;
for (int i = 0; i < addL; i++)
{
TN_WM_B_STOCK_QTYEntity x = addStockQty[i];
reduceStockQty.ForEach(y =>
{
if (x.CN_S_STOCK_CODE.Equals(y.CN_S_STOCK_CODE) && x.CN_S_ITEM_CODE.Equals(y.CN_S_ITEM_CODE) && x.CN_S_LOT_NO.Equals(y.CN_S_LOT_NO)
&& x.CN_S_OWNER.Equals(y.CN_S_OWNER) && x.CN_S_ITEM_STATE.Equals(y.CN_S_ITEM_STATE)
&& x.CN_S_PRODUCTION_BATCH.Equals(y.CN_S_PRODUCTION_BATCH))
{
if (x.CN_F_QUANTITY >= y.CN_F_QUANTITY)
{
x.CN_F_QUANTITY -= y.CN_F_QUANTITY;
y.CN_F_QUANTITY = 0;
}
}
});
}
addStockQty = addStockQty.FindAll(x => x.CN_F_QUANTITY > 0);
reduceStockQty = reduceStockQty.FindAll(x => x.CN_F_QUANTITY > 0);
#endregion
#region 库区量表
List addAreaQty = upHis.GroupBy(x => new
{
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_OWNER = x.CN_S_OWNER,
CN_S_LOT_NO = x.CN_S_LOT_NO,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
}).Select(y =>
{
return new TN_WM_B_AREA_QTYEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
CN_S_LOT_NO = y.Key.CN_S_LOT_NO,
CN_S_OWNER = y.Key.CN_S_OWNER,
CN_S_MODEL = y.Key.CN_S_MODEL,
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
CN_S_STOCK_AREA = y.Key.CN_S_STOCK_AREA,
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE
};
}).ToList();
List reduceAreaQty = downHis.GroupBy(x => new
{
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_OWNER = x.CN_S_OWNER,
CN_S_LOT_NO = x.CN_S_LOT_NO,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
}).Select(y =>
{
return new TN_WM_B_AREA_QTYEntity()
{
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
CN_S_LOT_NO = y.Key.CN_S_LOT_NO,
CN_S_OWNER = y.Key.CN_S_OWNER,
CN_S_MODEL = y.Key.CN_S_MODEL,
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
CN_S_STOCK_AREA = y.Key.CN_S_STOCK_AREA,
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE
};
}).ToList();
#endregion
#region 先中和库区出入库记录
int addAreaL = addAreaQty.Count;
for (int i = 0; i < addL; i++)
{
TN_WM_B_AREA_QTYEntity x = addAreaQty[i];
reduceAreaQty.ForEach(y =>
{
if (x.CN_S_STOCK_CODE.Equals(y.CN_S_STOCK_CODE) && x.CN_S_STOCK_AREA.Equals(y.CN_S_STOCK_AREA)
&& x.CN_S_ITEM_CODE.Equals(y.CN_S_ITEM_CODE) && x.CN_S_LOT_NO.Equals(y.CN_S_LOT_NO) && x.CN_S_OWNER.Equals(y.CN_S_OWNER)
&& x.CN_S_ITEM_STATE.Equals(y.CN_S_ITEM_STATE) && x.CN_S_PRODUCTION_BATCH.Equals(y.CN_S_PRODUCTION_BATCH))
{
if (x.CN_F_QUANTITY >= y.CN_F_QUANTITY)
{
x.CN_F_QUANTITY -= y.CN_F_QUANTITY;
y.CN_F_QUANTITY = 0;
}
}
});
}
addAreaQty = addAreaQty.FindAll(x => x.CN_F_QUANTITY > 0);
reduceAreaQty = reduceAreaQty.FindAll(x => x.CN_F_QUANTITY > 0);
#endregion
#endregion
#region 库存业务影响
#region 增加库存业务
TN_WM_INCREASE_INVENTORY_MSTEntity inBuss = null;
if (addAreaQty.Any())
{
OperateResult ruleOrOrder = GetCode(user, Constants.Rule_In);
if (ruleOrOrder.Status == ResultStatus.Error)
return ruleOrOrder;
string guid = Guid.NewGuid().ToString();
inBuss = new TN_WM_INCREASE_INVENTORY_MSTEntity()
{
CN_GUID = guid,
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_S_MODIFY = user.CN_S_LOGIN,
CN_S_MODIFY_BY = user.CN_S_NAME,
CN_S_OP_FROM = "盘点单",
CN_S_OP_TYPE = "盘盈入库",
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
CN_S_OPERATOR = user.CN_S_LOGIN,
CN_S_FROM_NO = opNo,
CN_S_LOT_NO = "",
CN_S_OWNER = upHis[0].CN_S_OWNER,
CN_S_STOCK_CODE = upHis[0].CN_S_STOCK_CODE,
CN_S_STATE = Constants.State_Audit,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_T_OPERATE = DateTime.Now,
DTLEntity = addAreaQty.GroupBy(x => new
{
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_MODEL = x.CN_S_MODEL
}).Select(y =>
{
return new TN_WM_INCREASE_INVENTORY_DTLEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
CN_S_MSTGUID = guid,
CN_S_MODEL = y.Key.CN_S_MODEL,
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_S_MODIFY = user.CN_S_LOGIN,
CN_S_MODIFY_BY = user.CN_S_NAME,
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_C_IS_BALANCE = "N",
CN_C_IS_SCRAP = "N"
};
}).ToList()
};
upHis.Select(x => { x.CN_S_OP_FROM = "盘盈入库"; x.CN_S_FROM_NO = ruleOrOrder.Data.ToString(); return x; });
}
#endregion
#region 减少库存业务
TN_WM_REDUCE_INVENTORY_MSTEntity outBuss = null;
if (reduceAreaQty.Any())
{
OperateResult ruleOrOrder = GetCode(user, Constants.Rule_Out);
if (ruleOrOrder.Status == ResultStatus.Error)
return ruleOrOrder;
string guid = Guid.NewGuid().ToString();
outBuss = new TN_WM_REDUCE_INVENTORY_MSTEntity()
{
CN_GUID = guid,
CN_S_CREATOR = user.CN_S_LOGIN,
CN_S_CREATOR_BY = user.CN_S_NAME,
CN_S_MODIFY = user.CN_S_LOGIN,
CN_S_MODIFY_BY = user.CN_S_NAME,
CN_S_OP_FROM = "盘点单",
CN_S_OP_TYPE = "盘亏出库",
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
CN_S_FROM_NO = opNo,
CN_S_STOCK_CODE = downHis[0].CN_S_STOCK_CODE,
CN_S_STATE = Constants.State_Audit,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_T_OPERATE = DateTime.Now,
CN_C_PRINT = "N",
DTLEntity = reduceAreaQty.GroupBy(x => new
{
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
CN_S_MODEL = x.CN_S_MODEL,
CN_S_OWNER = x.CN_S_OWNER
}).Select(y =>
{
return new TN_WM_REDUCE_INVENTORY_DTLEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
CN_S_MSTGUID = guid,
CN_S_MODEL = y.Key.CN_S_MODEL,
CN_S_OWNER = y.Key.CN_S_OWNER,
CN_C_IS_BALANCE = "N",
CN_C_IS_SCRAP = "N",
//CN_S_CREATOR = user.CN_S_LOGIN,
//CN_S_CREATOR_BY = user.CN_S_NAME,
//CN_S_MODIFY = user.CN_S_LOGIN,
//CN_S_MODIFY_BY = user.CN_S_NAME,
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
//CN_T_CREATE = DateTime.Now,
//CN_T_MODIFY = DateTime.Now
};
}).ToList()
};
downHis.Select(x => { x.CN_S_OP_FROM = "盘亏出库"; x.CN_S_FROM_NO = ruleOrOrder.Data.ToString(); return x; });
}
#endregion
#endregion
return UseTransaction(trans =>
{
CreateDAL>().Update(new
{
CN_S_STATE = Constants.State_Completed,
CN_S_MODIFY = user.CN_S_LOGIN,
CN_S_MODIFY_BY = user.CN_S_NAME,
CN_T_MODIFY = DateTime.Now
}, new { CN_S_OP_NO = opNo }, trans);
//更新仓库量表
if (addStockQty.Any())
CreateDAL().AddStockQty(addStockQty, trans);
if (reduceStockQty.Any())
CreateDAL().ReduceStockQty(reduceStockQty, trans);
//更新库区量表
if (addAreaQty.Any())
CreateDAL().AddAreaQty(addAreaQty, trans);
if (reduceAreaQty.Any())
CreateDAL().ReduceAreaQty(reduceAreaQty, trans);
//增加库存业务
if (inBuss != null)
{
CreateDAL>().Add(inBuss, trans);
CreateDAL>().AddRange(inBuss.DTLEntity, trans);
}
//减少库存业务
if (outBuss != null)
{
CreateDAL>().Add(outBuss, trans);
CreateDAL>().AddRange(outBuss.DTLEntity, trans);
}
//上架记录
if (upHis.Any())
CreateDAL>().AddRange(upHis, trans);
//下架记录
if (downHis.Any())
CreateDAL>().AddRange(downHis, trans);
//更新容器量表
trayItems.ForEach(x =>
{
if (addMstGuid.Exists(y => y.Equals(x.CN_GUID)))
CreateDAL>().Add(x, trans);
else
CreateDAL>().Update(new { CN_F_QUANTITY = x.CN_F_QUANTITY }, new { CN_GUID = x.CN_GUID }, trans);
x.TrayItemDtlList.ForEach(y =>
{
if (string.IsNullOrEmpty(y.CN_GUID))
{
y.CN_GUID = Guid.NewGuid().ToString();
CreateDAL>().Add(y, trans);
}
else
{
if (y.CN_F_QUANTITY == 0)
CreateDAL>().Delete(new { CN_GUID = y.CN_GUID }, trans);
else
CreateDAL>().Update(new { CN_F_QUANTITY = y.CN_F_QUANTITY }, new { CN_GUID = y.CN_GUID }, trans);
}
});
});
});
}
#endregion
}
}