/// <summary> /// 有单领用数据提交 /// (2019-08-27 18:08)变更提交顺序: /// 1)创建变更记录 /// 2)创建主单状态 /// 3)变更主单状态【已完成】,完成部分变更【进行中】,商品不在任务单内变更为【异常】 /// 注:主单没有传完成时间,需要把字段添加上(FinishDate) /// </summary> /// <param name="baseDataCommodityCode"></param> /// <param name="order"></param> /// <returns></returns> public BasePostData <CommodityInventoryChange> SubmitConsumingChangeWithOrder(BaseData <CommodityCode> baseDataCommodityCode, ConsumingOrder order) { //领用类来源单据 var sourceBill = new SourceBill() { object_name = "ConsumingOrder", object_id = order.id }; var tempChange = CommodityInventoryChangeBll.GetInstance().CreateCommodityInventoryChange(baseDataCommodityCode, sourceBill); //校验数据是否正常 HttpHelper.GetInstance().ResultCheck(tempChange, out bool isSuccess); if (isSuccess) { //更新领用单状态信息 var orderResult = UpdateConsumingOrderStatus(order); //校验数据是否正常 HttpHelper.GetInstance().ResultCheck(orderResult, out bool isSuccess2); if (!isSuccess2) { return(new BasePostData <CommodityInventoryChange>() { code = orderResult.code, message = orderResult.message }); } } return(tempChange); }
/// <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> /// <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> /// 无单领用提交接口 /// (2019-08-27 18:08)变更流程为:领用中->创建子表->变更主表状态[异常,已完成] /// 当领用过程中放进商品则主单状态异常,领用物品主单状态正常 /// </summary> /// <param name="baseDataCommodityCode"></param> /// <returns></returns> public BasePostData <CommodityInventoryChange> SubmitConsumingChangeWithoutOrder(BaseData <CommodityCode> baseDataCommodityCode, ConsumingOrderType type, SourceBill sourceBill = null) { var normalList = new List <CommodityCode>(); //回退商品列表 var lossList = new List <CommodityCode>(); //领用商品列表 var changeList = new List <CommodityInventoryChange>(); //商品库存变更记录列表 baseDataCommodityCode.body.objects.ForEach(commodityCode => { //为0标识为出库 if (commodityCode.operate_type == 0) { lossList.Add(commodityCode); } else { normalList.Add(commodityCode); }; }); ConsumingOrder consumingOrder = new ConsumingOrder() { FinishDate = GetDateTimeNow(),//完成时间 ////当入库数量大于0说明在领用的时候进行了入库操作,变更领用单状态为异常 //Status = normalList.Count > 0 ? ConsumingOrderStatus.异常.ToString() : ConsumingOrderStatus.已完成.ToString(), // Status = ConsumingOrderStatus.领用中.ToString(), StoreHouseId = ApplicationState.GetValue <String>((int)ApplicationKey.HouseId), //领用库房 Type = type.ToString(), //领用类型 SourceBill = type == ConsumingOrderType.医嘱处方领用 ? sourceBill : null // 需要填写医嘱处方SourceBill }; //创建领用单 var order = CreateConsumingOrder(consumingOrder); //校验数据是否正常 HttpHelper.GetInstance().ResultCheck(order, out bool isSuccess); if (!isSuccess) { LogUtils.Warn("CreateConsumingOrder 1:" + ResultCode.Result_Exception.ToString()); return(new BasePostData <CommodityInventoryChange>() { code = (int)ResultCode.Result_Exception, message = ResultCode.Result_Exception.ToString() }); } //当正常数量大于0说明向智能柜中存放商品,需要创建商品变更记录 if (normalList.Count > 0) { normalList.ForEach(normal => { changeList.Add(new CommodityInventoryChange() { CommodityCodeId = normal.id, SourceBill = new SourceBill() { object_name = "ConsumingReturnOrder" }, ChangeStatus = CommodityInventoryChangeStatus.正常.ToString(), EquipmentId = normal.EquipmentId, StoreHouseId = normal.StoreHouseId, GoodsLocationId = normal.GoodsLocationId }); }); } //当消耗数量大于0说明向智能柜中取出商品,需要创建商品变更记录 if (lossList.Count > 0) { lossList.ForEach(loss => { changeList.Add(new CommodityInventoryChange() { CommodityCodeId = loss.id, SourceBill = new SourceBill() { object_name = "ConsumingOrder", object_id = order.body[0].id }, ChangeStatus = CommodityInventoryChangeStatus.已消耗.ToString() }); }); } var changes = CommodityInventoryChangeBll.GetInstance().CreateCommodityInventoryChange(changeList); //校验数据是否正常 HttpHelper.GetInstance().ResultCheck(changes, out bool isSuccess2); if (!isSuccess2) { LogUtils.Warn("CreateConsumingOrder 2:" + ResultCode.Result_Exception.ToString()); } ////当入库数量大于0说明在领用的时候进行了入库操作, 或者领用商品中有过期商品, 变更领用单状态为异常 if (normalList.Count > 0 || lossList.Where(item => item.QualityStatus == QualityStatusType.过期.ToString() || item.InventoryStatus == CommodityInventoryChangeStatus.待回收.ToString()).Count() > 0) { order.body[0].Status = ConsumingOrderStatus.异常.ToString(); } else { order.body[0].Status = ConsumingOrderStatus.已完成.ToString(); } //更新主表状态 var orderResult = UpdateConsumingOrderStatus(order.body[0]); //校验数据是否正常,并记录日志 HttpHelper.GetInstance().ResultCheck(orderResult, out bool isSuccess3); if (!isSuccess3) { LogUtils.Warn("CreateConsumingOrder 3:" + ResultCode.Result_Exception.ToString()); } return(changes); }