using HH.Redis.ReisModel;
using HH.TOOLS.LOG;
using HH.WMS.Common;
using HH.WMS.DAL;
using HH.WMS.DAL.Basic;
using HH.WMS.DAL.Check;
using HH.WMS.DAL.InStock;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Check;
using HH.WMS.Entitys.Entitys;
using HH.WMS.Entitys.Enums;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WMS.BLL.Check
{
///
/// 盘点单管理 无锡宇寿
///
public class TN_WM_CHECK_WXYSBLL : DapperBaseBLL
{
#region GET
public OperateResult GetCheckDtl(string opNo)
{
var checkDtls = BLLCreator.Create>().GetList(new { CN_S_OP_NO = opNo });
foreach (var checkDtl in checkDtls)
{
// var item = CreateDAL().GetItemEntity(checkDtl.CN_S_ITEM_CODE);
// checkDtl.CN_F_QUANTITY = (item.CN_F_NW == 0 ? 0 : Math.Round(checkDtl.CN_F_WEIGHT / item.CN_F_NW, 2));// Math.Round(checkDtl.CN_F_WEIGHT / item.CN_F_NW, 2);
checkDtl.CN_S_AREA_NAME = GetAreaName(checkDtl.CN_S_STOCK_AREA);
}
return OperateResult.Succeed("", checkDtls);
}
public DataTable GetCheckList(dynamic obj)
{
DataTable dt = CreateDAL().GetCheckList(obj);
dt.Columns.Add("CN_S_STOCK_NAME");
dt.Columns.Add("CN_S_AREA_NAME");
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i]["CN_S_STOCK_NAME"] = GetStockName(dt.Rows[i]["CN_S_STOCK_CODE"].ToString().Trim());
dt.Rows[i]["CN_S_AREA_NAME"] = GetAreaName(dt.Rows[i]["CN_S_STOCK_AREA"].ToString().Trim());
}
}
return dt;
}
public OperateResult GetCheckListByOpNo(string opNo)
{
var checkLists = CreateDAL>().GetList(new { CN_S_OP_NO = opNo });
var temp = checkLists.Select(e => new
{
CN_S_LOCATION_CODE = e.CN_S_LOCATION_CODE,
CN_S_STOCK_CODE = e.CN_S_STOCK_CODE,
CN_S_STOCK_AREA = e.CN_S_STOCK_AREA,
CN_S_TRAY_CODE = e.CN_S_TRAY_CODE,
CN_S_STOCK_NAME = GetStockName(e.CN_S_STOCK_CODE),
CN_S_AREA_NAME = GetAreaName(e.CN_S_STOCK_AREA)
}).Distinct().ToList();
return OperateResult.Succeed("", temp);
}
public OperateResult GetMstAndDtl(string opNo)
{
var checkMst = CreateDAL>().GetSingleEntity(new { CN_S_OP_NO = opNo });
if (checkMst == null)
{
return OperateResult.Error("未找到当前" + opNo + "盘点业务");
}
checkMst.CN_S_STOCK_NAME = GetStockName(checkMst.CN_S_STOCK_CODE);
var checkDtls = CreateDAL>().GetList(new { CN_S_OP_NO = opNo });
foreach (var checkDtl in checkDtls)
{
var item = CreateDAL().GetItemEntity(checkDtl.CN_S_ITEM_CODE);
checkDtl.CN_F_QUANTITY = (item.CN_F_NW == 0 ? 0 : Math.Round(checkDtl.CN_F_WEIGHT / item.CN_F_NW, 2));
checkDtl.CN_S_AREA_NAME = GetAreaName(checkDtl.CN_S_STOCK_AREA);
}
checkMst.dtls = checkDtls;
return OperateResult.Succeed("", checkMst);
}
#endregion
#region ADD
///
/// 新增盘点单
///
///
///
///
public OperateResult Add(List checkListDtos, RedisUserEntity loginer, LogPara logPara)
{
var checkLists = new List();
foreach (var checkListDto in checkListDtos)
{
var checkList = CreateDAL>().GetList(new
{
CN_S_STOCK_CODE = checkListDto.CN_S_STOCK_CODE,
CN_S_STOCK_AREA = checkListDto.CN_S_STOCK_AREA,
CN_S_LOCATION_CODE = checkListDto.CN_S_LOCATION_CODE,
CN_S_TRAY_CODE = checkListDto.CN_S_TRAY_CODE
});
checkLists.AddRange(checkList);
}
var checkListsStr = JsonConvert.SerializeObject(checkLists);
var checkMst = new TN_WM_CHECK_MSTEntity();
var checkDtls = new List();
string postData = "{\"appCode\":\"AutoWMS\",\"ruleName\":\"" + Constants.CheckCode + "\",\"orgId\":\"" + loginer.CN_S_ORGCODE + "\",\"orgFlag\":\"" + loginer.CN_S_ORGFLAG + "\"}";
var opNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
if (string.IsNullOrEmpty(opNo))
{
return OperateResult.Error("未获取到autobom中盘点单号!");
}
checkMst.CN_S_OP_NO = opNo;
checkMst.CN_S_STOCK_CODE = checkLists.FirstOrDefault().CN_S_STOCK_CODE;
checkMst.CN_T_OP_TIME = DateTime.Now;
checkMst.CN_S_STATE = BillStateEnum.Create.GetDescription();
checkMst.CN_S_CREATOR = loginer.CN_S_LOGIN;
checkMst.CN_S_CREATOR_BY = loginer.CN_S_NAME;
checkMst.CN_T_CREATE = DateTime.Now;
checkMst.CN_S_OPERATOER = checkLists.FirstOrDefault().CN_S_CREATOR;
checkMst.CN_S_OPERATOER_NAME = checkLists.FirstOrDefault().CN_S_CREATOR_BY;
var result = CreateCheckDtls(opNo, checkLists, checkDtls);
if (!result.Success) return result;
result = UseTransaction(trans =>
{
var backResult = CreateDAL>().Add(checkMst, trans);
logPara.Push("新增盘点单主表结果:" + (backResult.Success ? "成功" : "失败"));
if (!backResult.Success)
{
trans.Rollback();
return;
}
backResult = CreateDAL>().AddRange(checkDtls, trans);
logPara.Push("新增盘点单子表结果:" + (backResult.Success ? "成功" : "失败"));
if (!backResult.Success)
{
trans.Rollback();
return;
}
//更新checklist的业务号
foreach (var checkList in checkLists)
{
CreateDAL>().Update(new { CN_S_OP_NO = opNo }, new
{
CN_S_STOCK_CODE = checkList.CN_S_STOCK_CODE,
CN_S_STOCK_AREA = checkList.CN_S_STOCK_AREA,
CN_S_LOCATION_CODE = checkList.CN_S_LOCATION_CODE,
CN_S_TRAY_CODE = checkList.CN_S_TRAY_CODE
});
}
});
return result;
}
///
///
///
///
///
///
///
public OperateResult CreateCheckDtls(string opNo, List checkLists, List checkDtls)
{
var rowNo = 0;
checkLists = checkLists.OrderBy(o => o.CN_S_CHECK_RESULT).ThenBy(o => o.CN_S_TRAY_CODE).ToList();
foreach (var checkList in checkLists)
{
rowNo = rowNo + 1;
var checkDtl = new TN_WM_CHECK_DTLEntity();
var afterState = "盘点后";
#region 删除、新增、修改后、正确
var checkStateEnum = EnumExtensions.GetEnumByName(checkList.CN_S_CHECK_RESULT);
if (checkStateEnum.Equals(CheckStateEnum.ERROR))
return OperateResult.Error("盘点状态" + checkList.CN_S_CHECK_RESULT + "存在异常!");
afterState = checkStateEnum.GetDescription();
checkDtl = new TN_WM_CHECK_DTLEntity
{
CN_S_OP_NO = opNo,
CN_N_ROW_NO = rowNo,
CN_S_STOCK_AREA = checkList.CN_S_STOCK_AREA,
CN_S_LOCATION_CODE = checkList.CN_S_LOCATION_CODE,
CN_S_TRAY_CODE = checkList.CN_S_TRAY_CODE,
CN_S_ITEM_CODE = checkList.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = checkList.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = checkList.CN_S_ITEM_STATE,
CN_S_OWNER = checkList.CN_S_OWNER,
CN_S_LOT_NO = checkList.CN_S_LOT_NO,
CN_S_MODEL = checkList.CN_S_MODEL,
CN_S_FIGURE_NO = checkList.CN_S_FIGURE_NO,
CN_S_MEASURE_UNIT = checkList.CN_S_MEASURE_UNIT,
CN_F_QUANTITY = checkList.CN_F_QUANTITY,
CN_S_PACK_CODE = checkList.CN_S_PACK_CODE,
CN_S_TYPE = afterState,
CN_F_WEIGHT = checkList.CN_F_WEIGHT,
CN_F_PACKING_QTY = checkList.CN_F_PACKING_QTY,
CN_S_CHECK_RESULT = checkList.CN_S_CHECK_RESULT
};
checkDtls.Add(checkDtl);
#endregion
#region 修改前
if (checkList.CN_S_CHECK_RESULT.Equals(CheckStateEnum.E.ToString()))
{
var trayItemDtl = BLLCreator.Create>().GetSingleEntity(new
{
// CN_PARENT_GUID = trayItemMst.CN_GUID,
CN_S_UNIQUE_CODE = checkList.CN_S_PACK_CODE
});
if (trayItemDtl == null)
{
return OperateResult.Error("未找到当前托盘" + checkList.CN_S_TRAY_CODE + "下料箱:" + checkList.CN_S_PACK_CODE + "的物料信息!");
}
var trayItemMst = BLLCreator.Create>().GetSingleEntity(new
{
CN_GUID = trayItemDtl.CN_PARENT_GUID,
CN_S_TRAY_CODE = checkList.CN_S_TRAY_CODE
});
if (trayItemMst == null)
{
return OperateResult.Error("未找到托盘:" + checkList.CN_S_TRAY_CODE + "的物料托盘数据!");
}
checkDtl = new TN_WM_CHECK_DTLEntity
{
CN_S_OP_NO = opNo,
CN_N_ROW_NO = rowNo,
CN_S_STOCK_AREA = checkList.CN_S_STOCK_AREA,
CN_S_LOCATION_CODE = checkList.CN_S_LOCATION_CODE,
CN_S_TRAY_CODE = checkList.CN_S_TRAY_CODE,
CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
CN_S_OWNER = checkList.CN_S_OWNER,
CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO,
CN_S_MODEL = trayItemMst.CN_S_MODEL,
CN_S_FIGURE_NO = trayItemDtl.CN_S_EXT1,
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT,
CN_F_QUANTITY = trayItemDtl.CN_F_QUANTITY,
CN_S_PACK_CODE = checkList.CN_S_PACK_CODE,
CN_S_TYPE = CheckStateEnum.EB.GetDescription(),
CN_S_CHECK_RESULT = CheckStateEnum.EB.ToString(),
CN_F_WEIGHT = Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO),
CN_F_PACKING_QTY = Convert.ToDecimal(trayItemDtl.CN_F_PACKING_QTY)
};
checkDtls.Add(checkDtl);
}
#endregion
}
return OperateResult.Succeed();
}
#endregion
#region UPDATE
public OperateResult Update(CheckAddDto checkAddDto, RedisUserEntity loginer)
{
var checkListDtos = checkAddDto.checkList;
var checkLists = new List();
foreach (var checkListDto in checkListDtos)
{
var checkList = CreateDAL>().GetList(new
{
CN_S_STOCK_CODE = checkListDto.CN_S_STOCK_CODE,
CN_S_STOCK_AREA = checkListDto.CN_S_STOCK_AREA,
CN_S_LOCATION_CODE = checkListDto.CN_S_LOCATION_CODE,
CN_S_TRAY_CODE = checkListDto.CN_S_TRAY_CODE
});
checkLists.AddRange(checkList);
}
var checkListsStr = JsonConvert.SerializeObject(checkLists);
var checkMst = new TN_WM_CHECK_MSTEntity();
var checkDtls = new List();
checkMst.CN_S_OP_NO = checkAddDto.opNo;
checkMst.CN_S_STOCK_CODE = checkLists.FirstOrDefault().CN_S_STOCK_CODE;
checkMst.CN_T_OP_TIME = DateTime.Now;
checkMst.CN_S_STATE = BillStateEnum.Create.GetDescription();
checkMst.CN_S_CREATOR = loginer.CN_S_LOGIN;
checkMst.CN_S_CREATOR_BY = loginer.CN_S_NAME;
checkMst.CN_T_CREATE = DateTime.Now;
checkMst.CN_S_OPERATOER = checkLists.FirstOrDefault().CN_S_CREATOR;
checkMst.CN_S_OPERATOER_NAME = checkLists.FirstOrDefault().CN_S_CREATOR_BY;
var result = CreateCheckDtls(checkAddDto.opNo, checkLists, checkDtls);
if (!result.Success) return result;
result = UseTransaction(trans =>
{
CreateDAL>().Delete(new { CN_S_OP_NO = checkAddDto.opNo });
CreateDAL>().Delete(new { CN_S_OP_NO = checkAddDto.opNo });
CreateDAL().UpdateCheckListOpNo(checkAddDto.opNo, "", trans);
var backResult = CreateDAL>().Add(checkMst, trans);
if (!backResult.Success)
{
trans.Rollback();
return;
}
backResult = CreateDAL>().AddRange(checkDtls, trans);
if (!backResult.Success)
{
trans.Rollback();
return;
}
//更新checklist的业务号
foreach (var checkList in checkLists)
{
CreateDAL>().Update(new { CN_S_OP_NO = checkAddDto.opNo }, new
{
CN_S_STOCK_CODE = checkList.CN_S_STOCK_CODE,
CN_S_STOCK_AREA = checkList.CN_S_STOCK_AREA,
CN_S_LOCATION_CODE = checkList.CN_S_LOCATION_CODE,
CN_S_TRAY_CODE = checkList.CN_S_TRAY_CODE
}, trans);
}
});
return result;
}
public OperateResult Submit(CheckAuditDto checkAuditDto)
{
var checkMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_OP_NO = checkAuditDto.opNo });
if (checkMst == null)
{
return OperateResult.Error("未找到当前盘点单" + checkAuditDto.opNo);
}
var result = CreateDAL>().Update(new
{
CN_S_STATE = BillStateEnum.Submit.GetDescription(),
CN_S_NOTE = checkAuditDto.note,
CN_S_CURR_ORG_CODE = checkAuditDto.checkAuditOrgDto.currentOrgCode,
CN_S_CURR_ORG_NAME = checkAuditDto.checkAuditOrgDto.currentOrgName,
CN_S_NEXT_ORG_CODE = checkAuditDto.checkAuditOrgDto.nextOrgCode,
CN_S_NEXT_ORG_NAME = checkAuditDto.checkAuditOrgDto.nextOrgName,
}, new { CN_S_OP_NO = checkAuditDto.opNo });
return result;
}
///
/// 审核
///
///
///
public OperateResult Audit(CheckAuditPara checkAuditPara, LogPara logPara)
{
logPara.Push("接收参数:" + JsonConvert.SerializeObject(checkAuditPara.checkAuditDto));
checkAuditPara.state = BillStateEnum.Auditing.GetDescription();
checkAuditPara.isEnd = false;
if (string.IsNullOrEmpty(checkAuditPara.checkAuditDto.checkAuditOrgDto.nextOrgCode))
checkAuditPara.state = BillStateEnum.Audit.GetDescription();
checkAuditPara.checkMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_OP_NO = checkAuditPara.checkAuditDto.opNo });
if (checkAuditPara.checkMst == null)
{
return OperateResult.Error("未找到当前盘点单" + checkAuditPara.checkAuditDto.opNo);
}
//最终审核结束,释放货位
if (string.IsNullOrEmpty(checkAuditPara.checkAuditDto.checkAuditOrgDto.nextOrgCode))
{
var reuslt = AuditHandleParam(checkAuditPara, logPara);
if (!reuslt.Success) return reuslt;
logPara.Push("接收参数checkAuditPara:" + JsonConvert.SerializeObject(checkAuditPara));
AuditReduceQty(checkAuditPara, logPara);
}
#region 逻辑处理
//1、针对已经在货位上的料箱,需要在绑定之前,把先前的绑定给解绑,避免造成同一个料箱在不同货位上的情况
//2、新增时需要判断是否主表已存在,如果存在则累加数量,不存在的话,新增主表
List mstDeleteList = new List();
List dtlDeleteList = new List();
List mstAddList = new List();
List dtlAddList = new List();
List mstModAddQtyList = new List();
List mstModReduceQtyList = new List();
List trayLocationDeleteList = new List();
if (checkAuditPara.isEnd)
{
foreach (var checkDtl in checkAuditPara.checkMst.dtls)
{
if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.A.ToString())) //增加
{
#region 是否位于其他货位
TN_WM_B_TRAY_ITEM_DTLEntity dtlDelete = CreateDAL>().GetSingleEntity(new { CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE });
if (dtlDelete != null)
{
TN_WM_B_TRAY_ITEM_MSTEntity mstDelete = CreateDAL>().GetSingleEntity(new { CN_GUID = dtlDelete.CN_PARENT_GUID });
if (mstDelete != null)
{
TN_WM_B_TRAY_LOCATIONEntity traylocationDelete = CreateDAL>().GetSingleEntity(new { CN_S_TRAY_CODE = mstDelete.CN_S_TRAY_CODE });
if (traylocationDelete != null)
{
dtlDeleteList.Add(dtlDelete);
List dtlExistList = CreateDAL>().GetList(new { CN_PARENT_GUID = mstDelete.CN_GUID });
var exi = dtlExistList.Where(x => x.CN_GUID != dtlDelete.CN_GUID);
if (!exi.Any())//说明子表中只有一条,所以需要删除主表
{
//主表能删的情况下,托盘货位关联才能解绑
trayLocationDeleteList.Add(traylocationDelete);
mstDeleteList.Add(mstDelete);
}
}
}
}
#endregion
#region 主表新增或修改
var trayItemMstExist = new TN_WM_B_TRAY_ITEM_MSTEntity
{
CN_GUID = Guid.NewGuid().ToString(),
CN_S_TRAY_CODE = checkDtl.CN_S_TRAY_CODE,
CN_S_TRAY_GRID = "1",
CN_S_OWNER = checkDtl.CN_S_OWNER,
CN_S_ITEM_CODE = checkDtl.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = checkDtl.CN_S_ITEM_NAME,
CN_S_FIGURE_NO = "",//checkDtl.CN_S_FIGURE_NO,
CN_S_MODEL = checkDtl.CN_S_MODEL,
CN_S_ITEM_STATE = "合格",//CN_S_ITEM_STATE = checkDtl.CN_S_ITEM_STATE,
CN_F_QUANTITY = 1,
CN_S_MEASURE_UNIT = checkDtl.CN_S_MEASURE_UNIT
};
List dtlList = new List();
dtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity
{
CN_GUID = Guid.NewGuid().ToString(),
CN_PARENT_GUID = trayItemMstExist.CN_GUID,
CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE,
CN_S_LOT_NO = checkDtl.CN_S_LOT_NO,
CN_F_QUANTITY = checkDtl.CN_F_QUANTITY,
CN_F_PACKING_QTY = checkDtl.CN_F_PACKING_QTY,
CN_T_PRODUCTION = DateTime.Now,
CN_T_EXPIRATION = DateTime.Now,
CN_S_NOTE = "盘点新增",
CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_S_SERIAL_NO = checkDtl.CN_F_WEIGHT.ToString(),
CN_S_EXT1 = checkDtl.CN_S_FIGURE_NO,
CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY
});
trayItemMstExist.TrayItemDtlList = dtlList;
var resultExist = CreateDAL().CheckExists(trayItemMstExist);
if (resultExist.Count > 1)
{
logPara.Push("此处有异常,根据条件获取到多条主表信息,Json条件:" + JsonConvert.SerializeObject(trayItemMstExist));
}
//当后台查到有主表存在数据的时候,主表修改数量,字表新增
if (resultExist.Any())
{
trayItemMstExist.CN_GUID = resultExist[0].CN_GUID;
foreach (var item in trayItemMstExist.TrayItemDtlList)
{
item.CN_PARENT_GUID = trayItemMstExist.CN_GUID;
}
mstModAddQtyList.Add(trayItemMstExist);
}
else
{
mstAddList.Add(trayItemMstExist);
//添加上架记录
checkAuditPara.upHis.Add(new TN_WM_UP_HISTORYEntity
{
CN_GUID = Guid.NewGuid().ToString(),
CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE,
CN_S_ITEM_STATE = trayItemMstExist.CN_S_ITEM_STATE,
CN_S_TRAY_CODE = trayItemMstExist.CN_S_TRAY_CODE,
CN_S_TRAY_GRID = trayItemMstExist.CN_S_TRAY_GRID == null ? "" : trayItemMstExist.CN_S_TRAY_GRID,
CN_S_ITEM_CODE = trayItemMstExist.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = trayItemMstExist.CN_S_ITEM_NAME,
CN_S_PRODUCTION_BATCH = trayItemMstExist.CN_S_LOT_NO,
CN_F_QUANTITY = checkDtl.CN_F_WEIGHT,
CN_F_PACKING_QTY = checkDtl.CN_F_PACKING_QTY,
CN_S_MODEL = trayItemMstExist.CN_S_MODEL,
CN_S_STOCK_AREA = checkDtl.CN_S_STOCK_AREA,
CN_S_STOCK_CODE = checkAuditPara.checkMst.CN_S_STOCK_CODE,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_S_OWNER = "",
CN_S_MEASURE_UNIT = trayItemMstExist.CN_S_MEASURE_UNIT,
CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR,
CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY,
CN_S_MODIFY = "",
CN_S_MODIFY_BY = "",
CN_S_OP_FROM = "盘点审核-新增",
CN_S_EXT1 = checkDtl.CN_S_PACK_CODE,//trayItemMst.CN_S_UNIQUE_CODE,
CN_S_EXT2 = "其他入库",
CN_S_LOT_NO = checkDtl.CN_S_LOT_NO,
CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO
});
}
dtlAddList.AddRange(dtlList);
#endregion
}
}
foreach (var checkDtl in checkAuditPara.checkMst.dtls)
{
if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.D.ToString()))//删除
{
#region 判断主表是否需要删除
var trayItemMst = checkDtl.trayItemMst;
List dtlExistList = CreateDAL>().GetList(new { CN_PARENT_GUID = trayItemMst.CN_GUID });
if (dtlExistList.Count == 1)
{
mstDeleteList.Add(trayItemMst);
dtlDeleteList.Add(dtlExistList[0]);
}
if (dtlExistList.Count > 1)
{
var findDtl = dtlExistList.Where(x => x.CN_S_UNIQUE_CODE == checkDtl.CN_S_PACK_CODE).ToList();
dtlDeleteList.AddRange(findDtl);
var findMst = CreateDAL>().GetSingleEntity(new { CN_GUID = findDtl[0].CN_PARENT_GUID });
mstModReduceQtyList.Add(findMst);
}
//添加下架记录
checkAuditPara.downHis.Add(new TN_WM_DOWN_HISTORYEntity
{
CN_GUID = Guid.NewGuid().ToString(),
CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE,
CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
CN_S_TRAY_CODE = trayItemMst.CN_S_TRAY_CODE,
CN_S_TRAY_GRID = trayItemMst.CN_S_TRAY_GRID == null ? "" : trayItemMst.CN_S_TRAY_GRID,
CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_LOT_NO,
CN_F_QUANTITY = checkDtl.CN_F_WEIGHT,
CN_F_PACKING_QTY = checkDtl.CN_F_PACKING_QTY,
CN_S_MODEL = trayItemMst.CN_S_MODEL,
CN_S_STOCK_AREA = checkDtl.CN_S_STOCK_AREA,
CN_S_STOCK_CODE = checkAuditPara.checkMst.CN_S_STOCK_CODE,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_S_OWNER = "",
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT,
CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR,
CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY,
CN_S_MODIFY = "",
CN_S_MODIFY_BY = "",
CN_S_OP_FROM = "盘点审核-删除",
CN_S_EXT1 = checkDtl.CN_S_PACK_CODE,//trayItemMst.CN_S_UNIQUE_CODE,
CN_S_EXT2 = "其他出库",
CN_S_LOT_NO = checkDtl.CN_S_LOT_NO,
CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO
});
#endregion
}
}
foreach (var checkDtl in checkAuditPara.checkMst.dtls)
{
if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.E.ToString()))//修改后
{
#region 原数据删除,新增修改后的数据
TN_WM_B_TRAY_ITEM_DTLEntity dtlMod = CreateDAL>().GetSingleEntity(new { CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE });
TN_WM_B_TRAY_ITEM_MSTEntity mstMod = CreateDAL>().GetSingleEntity(new { CN_GUID = dtlMod.CN_PARENT_GUID });
var trayItemMstExist = new TN_WM_B_TRAY_ITEM_MSTEntity
{
CN_GUID = System.Guid.NewGuid().ToString().ToUpper(),
CN_S_TRAY_CODE = checkDtl.CN_S_TRAY_CODE,
CN_S_TRAY_GRID = "1",
CN_S_OWNER = checkDtl.CN_S_OWNER,
CN_S_ITEM_CODE = checkDtl.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = checkDtl.CN_S_ITEM_NAME,
CN_S_FIGURE_NO = "",//checkDtl.CN_S_FIGURE_NO,
CN_S_MODEL = checkDtl.CN_S_MODEL,
CN_S_ITEM_STATE = "合格",//CN_S_ITEM_STATE = checkDtl.CN_S_ITEM_STATE,
CN_F_QUANTITY = 1,
CN_S_MEASURE_UNIT = checkDtl.CN_S_MEASURE_UNIT
};
List dtlList = new List();
dtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity
{
CN_GUID = Guid.NewGuid().ToString(),
CN_PARENT_GUID = trayItemMstExist.CN_GUID,
CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE,
CN_S_LOT_NO = checkDtl.CN_S_LOT_NO,
CN_F_QUANTITY = checkDtl.CN_F_QUANTITY,
CN_F_PACKING_QTY = checkDtl.CN_F_PACKING_QTY,
CN_T_PRODUCTION = DateTime.Now,
CN_T_EXPIRATION = DateTime.Now,
CN_S_NOTE = "盘点新增",
CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_S_SERIAL_NO = checkDtl.CN_F_WEIGHT.ToString(),
CN_S_EXT1 = checkDtl.CN_S_FIGURE_NO,
CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY
});
//主表判断是直接删除,还是减主表的数量
if (mstMod.CN_F_QUANTITY > 1)
{
mstModReduceQtyList.Add(mstMod);
}
else
{
mstDeleteList.Add(mstMod);
}
var resultExist = CreateDAL().CheckExistMsts(trayItemMstExist, checkDtl.CN_S_PACK_CODE);
if (resultExist.Count > 1)
{
logPara.Push("此处有异常,根据条件获取到多条主表信息,Json条件:" + JsonConvert.SerializeObject(trayItemMstExist));
return OperateResult.Error("此处有异常,根据条件获取到多条主表信息!");
}
if (resultExist.Count == 1)
{
var haveExist = mstDeleteList.Where(x => x.CN_GUID == resultExist[0].CN_GUID);
if (haveExist == null)
{
trayItemMstExist.CN_GUID = resultExist[0].CN_GUID;
foreach (var item in dtlList)
{
item.CN_PARENT_GUID = trayItemMstExist.CN_GUID;
}
mstModAddQtyList.Add(trayItemMstExist);
}
else
{
mstAddList.Add(trayItemMstExist);
}
}
if (resultExist.Count == 0)
{
mstAddList.Add(trayItemMstExist);
}
//子表:直接先删后增
dtlAddList.AddRange(dtlList);
dtlDeleteList.Add(dtlMod);
#endregion
}
}
}
if (checkAuditPara.isEnd)
{
#region 旧代码已注释
//foreach (var checkDtl in checkAuditPara.checkMst.dtls)
//{
// if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.A.ToString())) //增加
// {
// #region 是否位于其他货位
// TN_WM_B_TRAY_ITEM_DTLEntity dtlDelete = CreateDAL>().GetSingleEntity(new { CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE });
// if (dtlDelete != null)
// {
// TN_WM_B_TRAY_ITEM_MSTEntity mstDelete = CreateDAL>().GetSingleEntity(new { CN_GUID = dtlDelete.CN_PARENT_GUID });
// if (mstDelete != null)
// {
// TN_WM_B_TRAY_LOCATIONEntity traylocationDelete = CreateDAL>().GetSingleEntity(new { CN_S_TRAY_CODE = mstDelete.CN_S_TRAY_CODE });
// if (traylocationDelete != null)
// {
// trayLocationDeleteList.Add(traylocationDelete);
// dtlDeleteList.Add(dtlDelete);
// List dtlExistList = CreateDAL>().GetList(new { CN_PARENT_GUID = mstDelete.CN_GUID });
// var exi = dtlExistList.Where(x => x.CN_GUID != dtlDelete.CN_GUID);
// if (!exi.Any())
// {
// mstDeleteList.Add(mstDelete);
// }
// }
// }
// }
// #endregion
// #region 主表新增或修改
// var trayItemMstExist = new TN_WM_B_TRAY_ITEM_MSTEntity
// {
// CN_GUID = Guid.NewGuid().ToString(),
// CN_S_TRAY_CODE = checkDtl.CN_S_TRAY_CODE,
// CN_S_TRAY_GRID = "1",
// CN_S_OWNER = checkDtl.CN_S_OWNER,
// CN_S_ITEM_CODE = checkDtl.CN_S_ITEM_CODE,
// CN_S_ITEM_NAME = checkDtl.CN_S_ITEM_NAME,
// CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO,
// CN_S_MODEL = checkDtl.CN_S_MODEL,
// CN_S_ITEM_STATE = "合格",//CN_S_ITEM_STATE = checkDtl.CN_S_ITEM_STATE,
// CN_F_QUANTITY = 1,
// CN_S_MEASURE_UNIT = checkDtl.CN_S_MEASURE_UNIT
// };
// List dtlList = new List();
// dtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity
// {
// CN_GUID = Guid.NewGuid().ToString(),
// CN_PARENT_GUID = trayItemMstExist.CN_GUID,
// CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE,
// CN_S_LOT_NO = checkDtl.CN_S_LOT_NO,
// CN_F_QUANTITY = checkDtl.CN_F_QUANTITY,
// CN_T_PRODUCTION = DateTime.Now,
// CN_T_EXPIRATION = DateTime.Now,
// CN_S_NOTE = "盘点新增",
// CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR,
// CN_T_CREATE = DateTime.Now,
// CN_T_MODIFY = DateTime.Now,
// CN_S_SERIAL_NO = checkDtl.CN_F_WEIGHT.ToString(),
// CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY
// });
// trayItemMstExist.TrayItemDtlList = dtlList;
// var resultExist = CreateDAL().CheckExists(trayItemMstExist);
// if (resultExist.Count > 1)
// {
// logPara.Push("此处有异常,根据条件获取到多条主表信息,Json条件:" + JsonConvert.SerializeObject(trayItemMstExist));
// }
// if (resultExist.Any())
// {
// trayItemMstExist.CN_GUID = resultExist[0].CN_GUID;
// trayItemMstExist.CN_F_QUANTITY = resultExist[0].CN_F_QUANTITY + 1;
// foreach (var item in trayItemMstExist.TrayItemDtlList)
// {
// item.CN_PARENT_GUID = trayItemMstExist.CN_GUID;
// }
// mstModList.Add(trayItemMstExist);
// }
// else
// {
// mstAddList.Add(trayItemMstExist);
// //添加上架记录
// checkAuditPara.upHis.Add(new TN_WM_UP_HISTORYEntity
// {
// CN_GUID = Guid.NewGuid().ToString(),
// CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE,
// CN_S_ITEM_STATE = trayItemMstExist.CN_S_ITEM_STATE,
// CN_S_TRAY_CODE = trayItemMstExist.CN_S_TRAY_CODE,
// CN_S_TRAY_GRID = trayItemMstExist.CN_S_TRAY_GRID == null ? "" : trayItemMstExist.CN_S_TRAY_GRID,
// CN_S_ITEM_CODE = trayItemMstExist.CN_S_ITEM_CODE,
// CN_S_ITEM_NAME = trayItemMstExist.CN_S_ITEM_NAME,
// CN_S_PRODUCTION_BATCH = trayItemMstExist.CN_S_LOT_NO,
// CN_F_QUANTITY = checkDtl.CN_F_WEIGHT,
// CN_S_MODEL = trayItemMstExist.CN_S_MODEL,
// CN_S_STOCK_AREA = checkDtl.CN_S_STOCK_AREA,
// CN_S_STOCK_CODE = checkAuditPara.checkMst.CN_S_STOCK_CODE,
// CN_T_CREATE = DateTime.Now,
// CN_T_MODIFY = DateTime.Now,
// CN_S_OWNER = "",
// CN_S_MEASURE_UNIT = trayItemMstExist.CN_S_MEASURE_UNIT,
// CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR,
// CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY,
// CN_S_MODIFY = "",
// CN_S_MODIFY_BY = "",
// CN_S_OP_FROM = "盘点审核-新增",
// CN_S_EXT1 = checkDtl.CN_S_PACK_CODE,//trayItemMst.CN_S_UNIQUE_CODE,
// CN_S_EXT2 = "其他入库",
// CN_S_LOT_NO = checkDtl.CN_S_LOT_NO,
// CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO
// });
// }
// #endregion
// }
// if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.E.ToString()))//修改后
// {
// #region 主表新增或修改
// var trayItemMstExist = new TN_WM_B_TRAY_ITEM_MSTEntity
// {
// CN_GUID = Guid.NewGuid().ToString(),
// CN_S_TRAY_CODE = checkDtl.CN_S_TRAY_CODE,
// CN_S_TRAY_GRID = "1",
// CN_S_OWNER = checkDtl.CN_S_OWNER,
// CN_S_ITEM_CODE = checkDtl.CN_S_ITEM_CODE,
// CN_S_ITEM_NAME = checkDtl.CN_S_ITEM_NAME,
// CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO,
// CN_S_MODEL = checkDtl.CN_S_MODEL,
// CN_S_ITEM_STATE = "合格",//CN_S_ITEM_STATE = checkDtl.CN_S_ITEM_STATE,
// CN_F_QUANTITY = 1,
// CN_S_MEASURE_UNIT = checkDtl.CN_S_MEASURE_UNIT
// };
// List dtlList = new List();
// dtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity
// {
// CN_GUID = Guid.NewGuid().ToString(),
// CN_PARENT_GUID = trayItemMstExist.CN_GUID,
// CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE,
// CN_S_LOT_NO = checkDtl.CN_S_LOT_NO,
// CN_F_QUANTITY = checkDtl.CN_F_QUANTITY,
// CN_T_PRODUCTION = DateTime.Now,
// CN_T_EXPIRATION = DateTime.Now,
// CN_S_NOTE = "盘点新增",
// CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR,
// CN_T_CREATE = DateTime.Now,
// CN_T_MODIFY = DateTime.Now,
// CN_S_SERIAL_NO = checkDtl.CN_F_WEIGHT.ToString(),
// CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY
// });
// trayItemMstExist.TrayItemDtlList = dtlList;
// var resultExist = CreateDAL().CheckExists(trayItemMstExist);
// if (resultExist.Count > 1)
// {
// logPara.Push("此处有异常,根据条件获取到多条主表信息,Json条件:" + JsonConvert.SerializeObject(trayItemMstExist));
// }
// if (resultExist.Any())
// {
// trayItemMstExist.CN_GUID = resultExist[0].CN_GUID;
// //trayItemMstExist.CN_F_QUANTITY = resultExist[0].CN_F_QUANTITY + 1;
// foreach (var item in trayItemMstExist.TrayItemDtlList)
// {
// item.CN_PARENT_GUID = trayItemMstExist.CN_GUID;
// }
// //mstModList.Add(trayItemMstExist);
// //mstDeleteList.Add(trayItemMstExist);
// }
// //else
// //{
// mstAddList.Add(trayItemMstExist);
// //添加上架记录
// //checkAuditPara.upHis.Add(new TN_WM_UP_HISTORYEntity
// //{
// // CN_GUID = Guid.NewGuid().ToString(),
// // CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE,
// // CN_S_ITEM_STATE = trayItemMstExist.CN_S_ITEM_STATE,
// // CN_S_TRAY_CODE = trayItemMstExist.CN_S_TRAY_CODE,
// // CN_S_TRAY_GRID = trayItemMstExist.CN_S_TRAY_GRID == null ? "" : trayItemMstExist.CN_S_TRAY_GRID,
// // CN_S_ITEM_CODE = trayItemMstExist.CN_S_ITEM_CODE,
// // CN_S_ITEM_NAME = trayItemMstExist.CN_S_ITEM_NAME,
// // CN_S_PRODUCTION_BATCH = trayItemMstExist.CN_S_LOT_NO,
// // CN_F_QUANTITY = checkDtl.CN_F_WEIGHT,
// // CN_S_MODEL = trayItemMstExist.CN_S_MODEL,
// // CN_S_STOCK_AREA = checkDtl.CN_S_STOCK_AREA,
// // CN_S_STOCK_CODE = checkAuditPara.checkMst.CN_S_STOCK_CODE,
// // CN_T_CREATE = DateTime.Now,
// // CN_T_MODIFY = DateTime.Now,
// // CN_S_OWNER = "",
// // CN_S_MEASURE_UNIT = trayItemMstExist.CN_S_MEASURE_UNIT,
// // CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR,
// // CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY,
// // CN_S_MODIFY = "",
// // CN_S_MODIFY_BY = "",
// // CN_S_OP_FROM = "盘点审核-新增",
// // CN_S_EXT1 = checkDtl.CN_S_PACK_CODE,//trayItemMst.CN_S_UNIQUE_CODE,
// // CN_S_EXT2 = "其他入库",
// // CN_S_LOT_NO = checkDtl.CN_S_LOT_NO,
// // CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO
// //});
// // }
// #endregion
// }
// if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.D.ToString()))//删除
// {
// #region 判断主表是否需要删除
// var trayItemMst = checkDtl.trayItemMst;
// List dtlExistList = CreateDAL>().GetList(new { CN_PARENT_GUID = trayItemMst.CN_GUID });
// if (dtlExistList.Count == 1)
// {
// mstDeleteList.Add(trayItemMst);
// dtlDeleteList.Add(dtlExistList[0]);
// }
// if (dtlExistList.Count > 1)
// {
// var findDtl = dtlExistList.Where(x => x.CN_S_UNIQUE_CODE == checkDtl.CN_S_PACK_CODE);
// dtlDeleteList.AddRange(findDtl);
// }
// //添加下架记录
// checkAuditPara.downHis.Add(new TN_WM_DOWN_HISTORYEntity
// {
// CN_GUID = Guid.NewGuid().ToString(),
// CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE,
// CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
// CN_S_TRAY_CODE = trayItemMst.CN_S_TRAY_CODE,
// CN_S_TRAY_GRID = trayItemMst.CN_S_TRAY_GRID == null ? "" : trayItemMst.CN_S_TRAY_GRID,
// CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
// CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
// CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_LOT_NO,
// CN_F_QUANTITY = checkDtl.CN_F_WEIGHT,
// CN_S_MODEL = trayItemMst.CN_S_MODEL,
// CN_S_STOCK_AREA = checkDtl.CN_S_STOCK_AREA,
// CN_S_STOCK_CODE = checkAuditPara.checkMst.CN_S_STOCK_CODE,
// CN_T_CREATE = DateTime.Now,
// CN_T_MODIFY = DateTime.Now,
// CN_S_OWNER = "",
// CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT,
// CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR,
// CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY,
// CN_S_MODIFY = "",
// CN_S_MODIFY_BY = "",
// CN_S_OP_FROM = "盘点审核-删除",
// CN_S_EXT1 = checkDtl.CN_S_PACK_CODE,//trayItemMst.CN_S_UNIQUE_CODE,
// CN_S_EXT2 = "其它出库",
// CN_S_LOT_NO = checkDtl.CN_S_LOT_NO,
// CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO
// });
// #endregion
// }
// if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.EB.ToString()))//修改前
// {
// TN_WM_B_TRAY_ITEM_DTLEntity dtlDelete = CreateDAL>().GetSingleEntity(new { CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE });
// TN_WM_B_TRAY_ITEM_MSTEntity mstDelete = CreateDAL>().GetSingleEntity(new { CN_GUID = dtlDelete.CN_PARENT_GUID });
// dtlDeleteList.Add(dtlDelete);
// mstDeleteList.Add(mstDelete);
// }
//}
#endregion
}
#endregion
logPara.Push("删除料箱已绑定托盘mst:" + JsonConvert.SerializeObject(mstDeleteList));
logPara.Push("删除料箱已绑定托盘dtl:" + JsonConvert.SerializeObject(dtlDeleteList));
logPara.Push("新增托盘mst:" + JsonConvert.SerializeObject(mstAddList));
logPara.Push("新增托盘dtl:" + JsonConvert.SerializeObject(dtlAddList));
logPara.Push("修改托盘mst增:" + JsonConvert.SerializeObject(mstModAddQtyList));
logPara.Push("修改托盘mst减:" + JsonConvert.SerializeObject(mstModReduceQtyList));
#region 执行事务
var result = UseTransaction(trans =>
{
logPara.Push("更新盘点单状态为:" + checkAuditPara.state);
CreateDAL>().Update(new
{
CN_S_STATE = checkAuditPara.state,
CN_S_AUDIT_CONTENT = "审核通过!" + checkAuditPara.checkAuditDto.auditContent,
CN_S_CURR_ORG_CODE = checkAuditPara.checkAuditDto.checkAuditOrgDto.currentOrgCode,
CN_S_CURR_ORG_NAME = checkAuditPara.checkAuditDto.checkAuditOrgDto.currentOrgName,
CN_S_NEXT_ORG_CODE = checkAuditPara.checkAuditDto.checkAuditOrgDto.nextOrgCode,
CN_S_NEXT_ORG_NAME = checkAuditPara.checkAuditDto.checkAuditOrgDto.nextOrgName,
}, new { CN_S_OP_NO = checkAuditPara.checkAuditDto.opNo }, trans);
#region 最终审核
if (checkAuditPara.isEnd)
{
logPara.Push("降低仓库库存:" + JsonConvert.SerializeObject(checkAuditPara.stockQtys));
//降低仓库库存
CreateDAL().ReduceStockQty(checkAuditPara.stockQtys, trans);
//降低库区库存
CreateDAL().ReduceAreaQty(checkAuditPara.areaQtys, trans);
foreach (var item in trayLocationDeleteList)
{
//删除托盘货位关联
CreateDAL>().Delete(new { CN_S_TRAY_CODE = item.CN_S_TRAY_CODE, CN_S_LOCATION_CODE = item.CN_S_LOCATION_CODE }, trans);
CreateDAL>().Update(new
{
CN_S_LOCATION_STATE = "正常",
CN_S_USE_STATE = "空"
}, new
{
CN_S_LOCATION_CODE = item.CN_S_LOCATION_CODE
}, trans);
}
foreach (var mstEntity in mstDeleteList)
{
//删除前主表
CreateDAL>().Delete(new { CN_GUID = mstEntity.CN_GUID }, trans);
}
foreach (var dtlEntity in dtlDeleteList)
{
//删除前子表
CreateDAL>().Delete(new { CN_PARENT_GUID = dtlEntity.CN_PARENT_GUID, CN_S_UNIQUE_CODE = dtlEntity.CN_S_UNIQUE_CODE }, trans);
}
//新增主表
foreach (var item in mstAddList)
{
CreateDAL>().Add(item, trans);
}
//新增子表
foreach (var item in dtlAddList)
{
CreateDAL>().Add(item, trans);
}
//修改数量增
foreach (var item in mstModAddQtyList)
{
CreateDAL>().Update(new { CN_F_QUANTITY = item.CN_F_QUANTITY + 1 }, new { CN_GUID = item.CN_GUID }, trans);
}
//修改数量减
foreach (var item in mstModReduceQtyList)
{
CreateDAL>().Update(new { CN_F_QUANTITY = item.CN_F_QUANTITY - 1 }, new { CN_GUID = item.CN_GUID }, trans);
}
//释放被锁定货位
foreach (var checkDtl in checkAuditPara.checkMst.dtls)
{
logPara.Push("释放被锁定的货位" + checkDtl.CN_S_LOCATION_CODE);
CreateDAL>().Update(new
{
CN_S_LOCATION_STATE = "正常"
}, new
{
CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE
}, trans);
}
//删除list记录,并往历史表中添加
AuditAddHistory(checkAuditPara, logPara, trans);
//上下架记录
CreateDAL>().AddRange(checkAuditPara.upHis, trans);
CreateDAL>().AddRange(checkAuditPara.downHis, trans);
// throw new Exception("tedifanhui");
}
#endregion
});
#endregion
if (result.Success && checkAuditPara.isEnd)
{
//升库存
AuditAddQty(checkAuditPara, logPara, null);
//修改装箱数据
foreach (var checkDtl in checkAuditPara.checkMst.dtls)
{
if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.E.ToString()))//修改后
{
AutoBomItemEntity itemEntity = CreateDAL().GetItemEntity(checkDtl.CN_S_ITEM_CODE);
bool execResult = CreateDAL().UpdateZX(checkDtl.CN_S_PACK_CODE, checkDtl.CN_F_WEIGHT.ToString(),checkDtl.CN_F_PACKING_QTY.ToString(), checkDtl.CN_S_LOT_NO, checkDtl.CN_S_FIGURE_NO, itemEntity);
if (!execResult)
{
logPara.Push("更新装箱信息失败!" + JsonConvert.SerializeObject(checkDtl));
}
}
}
}
return result;
}
///
/// 盘点单审核 - 参数处理
///
///
public OperateResult AuditHandleParam(CheckAuditPara checkAuditPara, LogPara logPara)
{
logPara.Push("最终审核");
checkAuditPara.isEnd = true;
checkAuditPara.checkMst.dtls = BLLCreator.Create>().GetList(new { CN_S_OP_NO = checkAuditPara.checkAuditDto.opNo });
checkAuditPara.checkMst.dtls = checkAuditPara.checkMst.dtls.Where(e => !e.CN_S_CHECK_RESULT.Equals(CheckStateEnum.ERROR.ToString())).ToList();
if (checkAuditPara.checkMst.dtls.Count() == 0)
{
return OperateResult.Error("盘点单子表不存在数据!");
}
else
{
checkAuditPara.stockCode = checkAuditPara.checkMst.CN_S_STOCK_CODE;
checkAuditPara.areaCode = checkAuditPara.checkMst.dtls.FirstOrDefault().CN_S_STOCK_AREA;
}
foreach (var dtl in checkAuditPara.checkMst.dtls)
{
var trayItemDtl = CreateDAL>().GetSingleEntity(new { CN_S_UNIQUE_CODE = dtl.CN_S_PACK_CODE });
if (trayItemDtl != null)
{
var trayItemMst = CreateDAL>().GetSingleEntity(new { CN_GUID = trayItemDtl.CN_PARENT_GUID });
if (trayItemMst != null)
{
dtl.trayItemMst = trayItemMst;
}
}
else
{
var trayItemMst = CreateDAL>().GetSingleEntity(new { CN_S_TRAY_CODE = dtl.CN_S_TRAY_CODE, CN_S_ITEM_CODE = dtl.CN_S_ITEM_CODE });
if (trayItemMst != null)
{
dtl.trayItemMst = trayItemMst;
}
}
}
checkAuditPara.checkLists = CreateDAL>().GetList(new { CN_S_OP_NO = checkAuditPara.checkAuditDto.opNo });
checkAuditPara.upHis = new List();
checkAuditPara.downHis = new List();
return OperateResult.Succeed();
}
///
/// 盘点单审核 - 降库存
///
///
public void AuditReduceQty(CheckAuditPara checkAuditPara, LogPara logPara)
{
foreach (var dtl in checkAuditPara.checkMst.dtls)
{
var trayItemMstData = dtl.trayItemMst;
if (trayItemMstData == null)
{
logPara.Push("trayItemMstData异常为NULL:" + JsonConvert.SerializeObject(trayItemMstData));
continue;
};
var trayItemDtls = CreateDAL>().GetList(new { CN_PARENT_GUID = trayItemMstData.CN_GUID });
//decimal weight = 0;
foreach (var trayItemDlt in trayItemDtls)
{
// var weight = Convert.ToDecimal(trayItemDlt.CN_S_SERIAL_NO);
//var weight = Convert.ToDecimal(dtl.CN_F_QUANTITY);
checkAuditPara.stockQtys.Add(new TN_WM_B_STOCK_QTYEntity()
{
CN_S_ITEM_CODE = trayItemMstData.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = trayItemMstData.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = trayItemMstData.CN_S_ITEM_STATE,
CN_S_OWNER = trayItemMstData.CN_S_OWNER,
CN_S_PRODUCTION_BATCH = string.IsNullOrEmpty(trayItemDtls.FirstOrDefault().CN_S_PRODUCTION_BATCH) ? "" : trayItemDtls.FirstOrDefault().CN_S_PRODUCTION_BATCH,
CN_S_LOT_NO = trayItemDlt.CN_S_LOT_NO,
CN_F_QUANTITY = Convert.ToDecimal(trayItemDlt.CN_F_PACKING_QTY),
CN_S_STOCK_CODE = checkAuditPara.stockCode,//checkAuditPara.checkLists.FirstOrDefault().CN_S_STOCK_CODE,
CN_S_STOCK_AREA = checkAuditPara.areaCode,//checkAuditPara.checkLists.FirstOrDefault().CN_S_STOCK_AREA,
CN_F_PLANNED_QTY = trayItemMstData.CN_F_INQTY,
CN_S_MODEL = trayItemMstData.CN_S_MODEL,
CN_S_FIGURE_NO = trayItemDlt.CN_S_EXT1,
CN_S_MEASURE_UNIT = trayItemMstData.CN_S_MEASURE_UNIT
});
checkAuditPara.areaQtys.Add(new TN_WM_B_AREA_QTYEntity()
{
CN_S_ITEM_CODE = trayItemMstData.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = trayItemMstData.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = trayItemMstData.CN_S_ITEM_STATE,
CN_S_OWNER = trayItemMstData.CN_S_OWNER,
CN_S_PRODUCTION_BATCH = string.IsNullOrEmpty(trayItemDtls.FirstOrDefault().CN_S_PRODUCTION_BATCH) ? "" : trayItemDtls.FirstOrDefault().CN_S_PRODUCTION_BATCH,
CN_S_LOT_NO = trayItemDlt.CN_S_LOT_NO,
CN_F_QUANTITY = Convert.ToDecimal(trayItemDlt.CN_F_PACKING_QTY),
CN_S_STOCK_CODE = checkAuditPara.stockCode,//checkAuditPara.checkLists.FirstOrDefault().CN_S_STOCK_CODE,
CN_S_STOCK_AREA = checkAuditPara.areaCode,//checkAuditPara.checkLists.FirstOrDefault().CN_S_STOCK_AREA,
CN_F_PLANNED_QTY = trayItemMstData.CN_F_INQTY,
CN_S_MODEL = trayItemMstData.CN_S_MODEL,
CN_S_FIGURE_NO = trayItemDlt.CN_S_EXT1,
CN_S_MEASURE_UNIT = trayItemMstData.CN_S_MEASURE_UNIT
});
}
}
}
///
/// 盘点单审核
///
///
///
///
public void AuditAddHistory(CheckAuditPara checkAuditPara, LogPara logPara, IDbTransaction trans)
{
foreach (var checkList in checkAuditPara.checkLists)
{
checkAuditPara.checkListHistorys.Add(new TN_WM_CHECK_LIST_HISTORYEntity
{
CN_GUID = Guid.NewGuid().ToString(),
CN_S_OP_NO = checkList.CN_S_OP_NO,
CN_S_STOCK_CODE = checkList.CN_S_STOCK_CODE,
CN_S_STOCK_AREA = checkList.CN_S_STOCK_AREA,
CN_S_LOCATION_CODE = checkList.CN_S_LOCATION_CODE,
CN_S_TRAY_CODE = checkList.CN_S_TRAY_CODE,
CN_S_ITEM_CODE = checkList.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = checkList.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = checkList.CN_S_ITEM_STATE,
CN_S_LOT_NO = checkList.CN_S_LOT_NO,
CN_S_CHECK_RESULT = checkList.CN_S_CHECK_RESULT,
CN_S_MODEL = checkList.CN_S_MODEL,
CN_S_FIGURE_NO = checkList.CN_S_FIGURE_NO,
CN_F_QUANTITY = checkList.CN_F_QUANTITY,
CN_F_PACKING_QTY = checkList.CN_F_PACKING_QTY,
CN_F_WEIGHT = checkList.CN_F_WEIGHT,
CN_S_PACK_CODE = checkList.CN_S_PACK_CODE,
CN_S_CREATOR = checkList.CN_S_CREATOR,
CN_S_CREATOR_BY = checkList.CN_S_CREATOR_BY,
CN_T_CREATE = checkList.CN_T_CREATE,
CN_S_MODIFY = checkList.CN_S_MODIFY,
CN_S_MODIFY_BY = checkList.CN_S_MODIFY_BY,
CN_T_MODIFY = checkList.CN_T_MODIFY
});
}
logPara.Push("删除盘点列表记录,添加盘点历史表记录!");
if (checkAuditPara.checkListHistorys.Count() > 0)
{
checkAuditPara.checkListHistorys.ForEach(e => e.CN_GUID = Guid.NewGuid().ToString());
CreateDAL>().AddRange(checkAuditPara.checkListHistorys, trans);
CreateDAL>().Delete(new { CN_S_OP_NO = checkAuditPara.checkAuditDto.opNo }, trans);
}
}
///
/// 盘点单审核 - 升库存
///
///
///
///
public void AuditAddQty(CheckAuditPara checkAuditPara, LogPara logPara, IDbTransaction trans)
{
logPara.Push("统一升库存!");
var addStockQty = new List();
var addAreaQty = new List();
List trayItemList = new List();
List dtlList = checkAuditPara.checkMst.dtls;
List disdtlList = dtlList.Select(x => x.CN_S_TRAY_CODE).Distinct().ToList();
logPara.Push("去重!" + JsonConvert.SerializeObject(disdtlList));
foreach (var item in disdtlList)
{
List mstList = CreateDAL>().GetList(new { CN_S_TRAY_CODE = item });
if (!mstList.Any())
{
logPara.Push("trayItemList发生异常了!");
}
trayItemList.AddRange(mstList);
}
logPara.Push("trayItemList!" + JsonConvert.SerializeObject(trayItemList));
trayItemList.ForEach(dtl =>
{
var trayItemMstData = dtl;
var trayItemDtls = CreateDAL>().GetList(new { CN_PARENT_GUID = trayItemMstData.CN_GUID });
//判断如果物料明细为空,则清空托盘物料表,货位置为空
if (trayItemDtls.Count() == 0)
{
CreateDAL>().Delete(new { CN_GUID = trayItemMstData.CN_GUID });
}
//decimal weight = 0;
foreach (var trayItemDlt in trayItemDtls)
{
var qty = Convert.ToDecimal(trayItemDlt.CN_F_PACKING_QTY);
if (qty > 0)
{
addStockQty.Add(new TN_WM_B_STOCK_QTYEntity()
{
CN_S_ITEM_CODE = trayItemMstData.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = trayItemMstData.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = trayItemMstData.CN_S_ITEM_STATE,
CN_S_OWNER = trayItemMstData.CN_S_OWNER,
CN_S_PRODUCTION_BATCH = trayItemMstData.CN_S_PRODUCTION_BATCH,
CN_S_LOT_NO = trayItemDlt.CN_S_LOT_NO,
CN_F_QUANTITY = qty,
CN_S_STOCK_CODE = checkAuditPara.stockCode,
CN_S_STOCK_AREA = checkAuditPara.areaCode,
CN_F_PLANNED_QTY = trayItemMstData.CN_F_INQTY,
CN_S_MODEL = trayItemMstData.CN_S_MODEL,
CN_S_FIGURE_NO = trayItemDlt.CN_S_EXT1,
CN_S_MEASURE_UNIT = trayItemMstData.CN_S_MEASURE_UNIT
});
addAreaQty.Add(new TN_WM_B_AREA_QTYEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_S_ITEM_CODE = trayItemMstData.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = trayItemMstData.CN_S_ITEM_NAME,
CN_S_ITEM_STATE = trayItemMstData.CN_S_ITEM_STATE,
CN_S_OWNER = trayItemMstData.CN_S_OWNER,
CN_S_PRODUCTION_BATCH = trayItemMstData.CN_S_PRODUCTION_BATCH,
CN_S_LOT_NO = trayItemDlt.CN_S_LOT_NO,
CN_F_QUANTITY = qty,
CN_S_STOCK_CODE = checkAuditPara.stockCode,
CN_S_STOCK_AREA = checkAuditPara.areaCode,
CN_F_PLANNED_QTY = trayItemMstData.CN_F_INQTY,
CN_S_MODEL = trayItemMstData.CN_S_MODEL,
CN_S_FIGURE_NO = trayItemDlt.CN_S_EXT1,
CN_S_MEASURE_UNIT = trayItemMstData.CN_S_MEASURE_UNIT
});
}
}
});
////统一升库存
//foreach (var trayItemMstData in checkAuditPara.trayItemMsts)
//{
//}
//增加仓库库存
logPara.Push("升仓库库存:" + JsonConvert.SerializeObject(addStockQty));
var qtyResult = CreateDAL().AddStockQty(addStockQty, null);//ReduceStockQty(addStockQty, null);
logPara.Push("升仓库库存结果:" + qtyResult.Describe());
qtyResult = CreateDAL().AddAreaQty(addAreaQty, null);
logPara.Push("升库区库存结果:" + qtyResult.Describe());
}
///
/// 盘点单反审
///
///
///
public OperateResult ReAudit(CheckAuditDto checkAuditDto, LogPara logPara)
{
var state = BillStateEnum.ReAudit.GetDescription();
var checkMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_OP_NO = checkAuditDto.opNo });
if (checkMst == null)
{
return OperateResult.Error("未找到当前盘点单" + checkAuditDto.opNo);
}
var result = CreateDAL>().Update(new
{
CN_S_STATE = state,
CN_S_AUDIT_CONTENT = checkAuditDto.auditContent,
CN_S_CURR_ORG_CODE = "",
CN_S_CURR_ORG_NAME = "",
CN_S_NEXT_ORG_CODE = "",
CN_S_NEXT_ORG_NAME = "",
}, new { CN_S_OP_NO = checkAuditDto.opNo });
return result;
}
#endregion
#region DELETE
///
/// 删除盘点单
///
///
///
public OperateResult Delete(string opNo, LogPara logPara)
{
var checkDtls = BLLCreator.Create>().GetList(new { CN_S_OP_NO = opNo });
var reuslt = UseBasisTransaction(trans =>
{
CreateDAL>().Delete(new { CN_S_OP_NO = opNo }, trans);
CreateDAL>().Delete(new { CN_S_OP_NO = opNo }, trans);
CreateDAL>().Delete(new { CN_S_OP_NO = opNo }, trans);
foreach (var checkDtl in checkDtls)
{
logPara.Push("更新货位" + checkDtl.CN_S_LOCATION_CODE + "状态为正常!");
CreateDAL>().Update(new { CN_S_LOCATION_STATE = "正常" },
new { CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE }, trans);
}
});
return OperateResult.Succeed();
}
#endregion
}
}