/// <summary> /// 拣货的库存变化 /// </summary> /// <param name="baseDatacommodityCode"></param> /// <param name="pickTask"></param> /// <param name="bAutoSubmit">是否是主动提交</param> /// <returns></returns> public BasePostData <CommodityInventoryChange> CreatePickTaskCommodityInventoryChange(BaseData <CommodityCode> baseDataCommodityCode, PickTask pickTask, bool bAutoSubmit) { BasePostData <CommodityInventoryChange> retBaseSinglePostDataCommodityInventoryChange = null; //校验是否含有数据,如果含有数据,有就继续下一步 baseDataCommodityCode = HttpHelper.GetInstance().ResultCheck(baseDataCommodityCode, out bool isSuccess); if (isSuccess) { var CommodityCodes = baseDataCommodityCode.body.objects; var CommodityInventoryChanges = new List <CommodityInventoryChange>(CommodityCodes.Count); CommodityCodes.ForEach(it => { CommodityInventoryChange cic = new CommodityInventoryChange() { CommodityCodeId = it.id, //商品码【扫描】 SourceBill = new SourceBill() //来源单据 { object_name = typeof(PickTask).Name, object_id = pickTask.id } }; if (it.operate_type == (int)OperateType.出库) { cic.ChangeStatus = CommodityInventoryChangeStatus.拣货作业.ToString(); cic.StoreHouseId = it.StoreHouseId; } else { cic.ChangeStatus = CommodityInventoryChangeStatus.正常.ToString(); cic.EquipmentId = it.EquipmentId; cic.StoreHouseId = it.StoreHouseId; cic.GoodsLocationId = it.GoodsLocationId; } if (!bAutoSubmit && it.AbnormalDisplay == AbnormalDisplay.异常.ToString()) { cic.AdjustStatus = CommodityInventoryChangeAdjustStatus.是.ToString(); } CommodityInventoryChanges.Add(cic); }); retBaseSinglePostDataCommodityInventoryChange = CommodityInventoryChangeBll.GetInstance().CreateCommodityInventoryChange(CommodityInventoryChanges); } else { retBaseSinglePostDataCommodityInventoryChange = new BasePostData <CommodityInventoryChange> { code = baseDataCommodityCode.code, message = baseDataCommodityCode.message }; } return(retBaseSinglePostDataCommodityInventoryChange); }
/// <summary> /// 创建库存调整中库存变更记录(用于开机启动的对比流程) /// </summary> /// <param name="baseDataCommodityCode"></param> /// <returns></returns> public BasePostData <CommodityInventoryChange> CreateCommodityInventoryChangeInStockChangeByOpen(BaseData <CommodityCode> baseDataCommodityCode) { if (null == baseDataCommodityCode) { return(new BasePostData <CommodityInventoryChange>() { code = (int)ResultCode.Parameter_Exception, message = ResultCode.Parameter_Exception.ToString() }); } List <CommodityInventoryChange> changes = new List <CommodityInventoryChange>(); //创建商品库存变更记录资料【出库::下架】 var outList = baseDataCommodityCode.body.objects.Where(it => it.operate_type == 0).ToList(); if (null != outList || outList.Count > 0) { outList.ForEach(commodityCode => { var temp = new CommodityInventoryChange() { CommodityCodeId = commodityCode.id, //出库变更更后库房、变更更后设备、变更更后货位 value 值都为null。 StoreHouseId = commodityCode.StoreHouseId, ChangeStatus = CommodityInventoryChangeStatus.未上架.ToString(), AdjustStatus = CommodityInventoryChangeAdjustStatus.是.ToString() }; changes.Add(temp); }); } //创建商品库存变更记录资料【入库::上架】 var inList = baseDataCommodityCode.body.objects.Where(it => it.operate_type == 1).ToList(); if (null != outList || outList.Count > 0) { inList.ForEach(commodityCode => { var temp = new CommodityInventoryChange() { CommodityCodeId = commodityCode.id, ChangeStatus = CommodityInventoryChangeStatus.正常.ToString(), AdjustStatus = CommodityInventoryChangeAdjustStatus.是.ToString(), EquipmentId = commodityCode.EquipmentId, GoodsLocationId = commodityCode.GoodsLocationId, StoreHouseId = commodityCode.StoreHouseId }; changes.Add(temp); }); } return(CreateCommodityInventoryChange(changes)); }
/// <summary> /// 根据商品码变更列表和来源单据创建库存变更记录资料(有单领用) /// </summary> /// <param name="baseDataCommodityCode"></param> /// <param name="sourceBill"></param> /// <returns></returns> public BasePostData <CommodityInventoryChange> CreateCommodityInventoryChange(BaseData <CommodityCode> baseDataCommodityCode, SourceBill sourceBill) { if (null == baseDataCommodityCode || null == sourceBill || null == sourceBill.object_name) { return(new BasePostData <CommodityInventoryChange>() { code = (int)ResultCode.Parameter_Exception, message = ResultCode.Parameter_Exception.ToString() }); } List <CommodityInventoryChange> changes = new List <CommodityInventoryChange>(); baseDataCommodityCode.body.objects.ForEach(commodityCode => { var temp = new CommodityInventoryChange() { CommodityCodeId = commodityCode.id, }; switch (commodityCode.operate_type) { case 0: //出库变更更后库房、变更更后设备、变更更后货位 value 值都为null。 temp.SourceBill = sourceBill; temp.ChangeStatus = CommodityInventoryChangeStatus.已消耗.ToString(); break; case 1: temp.SourceBill = new SourceBill() { object_name = "ConsumingReturnOrder", }; temp.ChangeStatus = CommodityInventoryChangeStatus.正常.ToString(); temp.EquipmentId = commodityCode.EquipmentId; temp.GoodsLocationId = commodityCode.GoodsLocationId; temp.StoreHouseId = commodityCode.StoreHouseId; break; } changes.Add(temp); }); return(CreateCommodityInventoryChange(changes)); }
/// <summary> /// 提交变更信息 /// </summary> /// <param name="baseDataCommodityCode"></param> /// <param name="allotShelf"></param> /// <param name="baseAllotShelfCommodity"></param> /// <returns></returns> public BasePostData <CommodityInventoryChange> SubmitAllotShelfChangeWithOrder(BaseData <CommodityCode> baseDataCommodityCode, AllotShelf allotShelf, BaseData <AllotShelfCommodity> baseAllotShelfCommodity) { BasePostData <CommodityInventoryChange> retBaseSinglePostDataCommodityInventoryChange = null; //校验是否含有数据,如果含有数据,有就继续下一步 baseDataCommodityCode = HttpHelper.GetInstance().ResultCheck(baseDataCommodityCode, out bool isSuccess); baseAllotShelfCommodity = HttpHelper.GetInstance().ResultCheck(baseAllotShelfCommodity, out bool isSuccess2); if (isSuccess && isSuccess2) { var CommodityCodes = baseDataCommodityCode.body.objects; var CommodityInventoryChanges = new List <CommodityInventoryChange>(CommodityCodes.Count); //调拨上架商品明细 var allotShelfCommodities = baseAllotShelfCommodity.body.objects; //获取待上架商品CommodityId列表(去重后) var detailCommodityIds = allotShelfCommodities.Select(it => it.CommodityId).Distinct().ToList(); CommodityCodes.ForEach(it => { CommodityInventoryChange cic = new CommodityInventoryChange() { CommodityCodeId = it.id, //商品码【扫描】 SourceBill = new SourceBill() //来源单据 { object_name = typeof(AllotShelf).Name, object_id = allotShelf.id }, //EquipmentId = ApplicationState.GetEquipId(), //StoreHouseId = ApplicationState.GetHouseId(), //GoodsLocationId = it.GoodsLocationId }; //【待确认】出库 if (it.operate_type == (int)OperateType.出库) { cic.ChangeStatus = CommodityInventoryChangeStatus.未上架.ToString(); cic.StoreHouseId = ApplicationState.GetHouseId(); cic.AdjustStatus = CommodityInventoryChangeAdjustStatus.是.ToString(); } //入库 else { cic.ChangeStatus = CommodityInventoryChangeStatus.正常.ToString(); cic.EquipmentId = it.EquipmentId; cic.StoreHouseId = it.StoreHouseId; cic.GoodsLocationId = it.GoodsLocationId; //【待确认】 if (!detailCommodityIds.Contains(it.CommodityId)) { cic.AdjustStatus = CommodityInventoryChangeAdjustStatus.是.ToString(); } } CommodityInventoryChanges.Add(cic); }); retBaseSinglePostDataCommodityInventoryChange = CommodityInventoryChangeBll.GetInstance().CreateCommodityInventoryChange(CommodityInventoryChanges); } else { retBaseSinglePostDataCommodityInventoryChange = new BasePostData <CommodityInventoryChange> { code = baseDataCommodityCode.code, message = baseDataCommodityCode.message }; LogUtils.Error("CreateShelfTaskCommodityInventoryChange 失败! " + baseDataCommodityCode.message); } return(retBaseSinglePostDataCommodityInventoryChange); }
/// <summary> /// 根据商品码变更列表和来源单据创建库存变更记录资料(回退) /// </summary> /// <param name="baseDataCommodityCode"></param> /// <returns></returns> public BasePostData <CommodityInventoryChange> CreateCommodityInventoryChange(BaseData <CommodityCode> baseDataCommodityCode) { if (null == baseDataCommodityCode) { return(new BasePostData <CommodityInventoryChange>() { code = (int)ResultCode.Parameter_Exception, message = ResultCode.Parameter_Exception.ToString() }); } List <CommodityInventoryChange> changes = new List <CommodityInventoryChange>(); var count = baseDataCommodityCode.body.objects.Where(it => it.operate_type == 0).Count(); //创建领用单实体用于后面更新操作 ConsumingOrder order = null; if (count > 0)//当出库数量大于0说明在领用需要创建领用单 { var consumingOrder = ConsumingBll.GetInstance().CreateConsumingOrder(new ConsumingOrder() { Status = ConsumingOrderStatus.领用中.ToString(), StoreHouseId = ApplicationState.GetValue <String>((int)ApplicationKey.HouseId), Type = ConsumingOrderType.一般领用.ToString() }); //校验数据是否正常 HttpHelper.GetInstance().ResultCheck(consumingOrder, out bool isSuccess); if (isSuccess) { //创建商品库存变更记录资料【出库::领用】 baseDataCommodityCode.body.objects.Where(it => it.operate_type == 0).ToList().ForEach(commodityCode => { var temp = new CommodityInventoryChange() { CommodityCodeId = commodityCode.id, //出库变更更后库房、变更更后设备、变更更后货位 value 值都为null。 SourceBill = new SourceBill() { object_name = "ConsumingOrder", object_id = consumingOrder.body[0].id }, ChangeStatus = CommodityInventoryChangeStatus.已消耗.ToString() }; changes.Add(temp); }); order = consumingOrder.body[0]; } } ////创建商品库存变更记录资料【入库::回退】 baseDataCommodityCode.body.objects.Where(it => it.operate_type == 1).ToList().ForEach(commodityCode => { var temp = new CommodityInventoryChange() { CommodityCodeId = commodityCode.id, SourceBill = new SourceBill() { object_name = "ConsumingReturnOrder", }, ChangeStatus = CommodityInventoryChangeStatus.正常.ToString(), EquipmentId = commodityCode.EquipmentId, GoodsLocationId = commodityCode.GoodsLocationId, StoreHouseId = commodityCode.StoreHouseId, }; changes.Add(temp); }); var result = CreateCommodityInventoryChange(changes); //校验数据是否正常 HttpHelper.GetInstance().ResultCheck(result, out bool isSuccess2); //添加变更记录成功时,且有出库记录(即创建过领用单) if (isSuccess2 && count > 0) { if (baseDataCommodityCode.body.objects.Where(item => (item.QualityStatus == QualityStatusType.过期.ToString() || item.InventoryStatus == CommodityInventoryChangeStatus.待回收.ToString()) && item.operate_type == 0).Count() > 0) { order.Status = ConsumingOrderStatus.异常.ToString(); } else { order.Status = ConsumingOrderStatus.已完成.ToString(); } var temp = ConsumingBll.GetInstance().UpdateConsumingOrderStatus(order); if (temp.code != 0) { LogUtils.Error("ConsummingOrder " + temp.message); } } return(result); }
/// <summary> /// 创建回收取货中库存变更记录 /// </summary> /// <param name="baseDataCommodityCode"></param> /// <returns></returns> public BasePostData <CommodityInventoryChange> CreateCommodityInventoryChange(BaseData <CommodityCode> baseDataCommodityCode, CommodityRecovery commodityRecovery, bool bAutoSubmit) { if (null == baseDataCommodityCode) { return(new BasePostData <CommodityInventoryChange>() { code = (int)ResultCode.Parameter_Exception, message = ResultCode.Parameter_Exception.ToString() }); } List <CommodityInventoryChange> changes = new List <CommodityInventoryChange>(); //创建商品库存变更记录资料【出库::下架】 var outList = baseDataCommodityCode.body.objects.Where(it => it.operate_type == 0).ToList(); if (null != outList || outList.Count > 0) { outList.ForEach(commodityCode => { CommodityInventoryChange cic = new CommodityInventoryChange() { CommodityCodeId = commodityCode.id, SourceBill = new SourceBill { object_name = "CommodityRecovery", object_id = commodityRecovery.id }, ChangeStatus = CommodityInventoryChangeStatus.待回收.ToString(), StoreHouseId = commodityRecovery.StoreHouse }; if (!bAutoSubmit) { cic.AdjustStatus = CommodityInventoryChangeAdjustStatus.是.ToString(); } changes.Add(cic); }); } if (!bAutoSubmit) { //创建商品库存变更记录资料【入库::上架】 var inList = baseDataCommodityCode.body.objects.Where(it => it.operate_type == 1).ToList(); if (null != inList || inList.Count > 0) { inList.ForEach(commodityCode => { CommodityInventoryChange cic = new CommodityInventoryChange() { CommodityCodeId = commodityCode.id, SourceBill = new SourceBill { object_name = "CommodityRecovery", object_id = commodityRecovery.id }, ChangeStatus = CommodityInventoryChangeStatus.正常.ToString(), StoreHouseId = commodityCode.StoreHouseId, EquipmentId = commodityCode.EquipmentId, GoodsLocationId = commodityCode.GoodsLocationId, AdjustStatus = CommodityInventoryChangeAdjustStatus.是.ToString() }; changes.Add(cic); }); } } return(CreateCommodityInventoryChange(changes)); }