Ejemplo n.º 1
0
        /// <summary>
        /// get entity of WmsLogistics as the logistics of this entryorder represented by _order.
        /// -or- return null if failed in method executation.
        /// </summary>
        /// <returns></returns>
        public virtual WmsLogistics GetLogistics(CWmsOrderBase <TOrderType, TMangoType, TWmsType, TSubOrderType, THandlerType> pOrder)
        {
            Product_PeiSong_ProductMain   deliveryOrder = null;
            CWmsSystemParam_LogisticsItem logistics     = null;
            WmsLogistics retObj = null;

            if (null == pOrder)
            {
                C_WMS.Data.Utility.MyLog.Instance.Warning("Failed in getting entity of WmsLogistics by {0}, pOrder[{1}] is null", typeof(TOrderType), pOrder);
                return(retObj);
            }

            // get entity of deliveryorder by id of entryorder.
            if (null == (deliveryOrder = Mango.MisModelFactory.GetMisEntity <Product_PeiSong_ProductMain>(pOrder.Id)))
            {
                C_WMS.Data.Utility.MyLog.Instance.Warning("Failed in getting entity of WmsLogistics by ID[{0}], CANNOT retrieve deliveryorder by {1}(typeof[{2}])", pOrder?.Id, pOrder, typeof(TOrderType));
            }
            else
            {
                // 根据主配送单中的‘配送人’判读使用第三方物流还是芒果物流
                if (null == (logistics = CWmsMisSystemParamCache.Cache.GetLogisticsByUserId(deliveryOrder.DeliveryUserId.Int().ToString())))
                {
                    retObj = new WmsLogistics(logistics.Code, logistics.Name);
                }
                else
                {
                    C_WMS.Data.Utility.MyLog.Instance.Warning("Failed in getting entity of WmsLogistics by {0}.ID[{1}], CANNOT retrieve cached logistics by [{2}].DeliveryUserId[{3}]. return default logistics.", typeof(TOrderType), pOrder?.Id, deliveryOrder, deliveryOrder.DeliveryUserId);
                    retObj = CWmsDataFactory.GetDefaultLogistic();
                }
            }
            return(retObj);
        } // WmsLogistics GetLogistics()
Ejemplo n.º 2
0
        /// <summary>
        /// 从CWmsSubEntryOder实例中拷贝订单信息
        /// </summary>
        /// <param name="srcOrder">源订单实例</param>
        /// <returns>若成功则返回string.Empty; 否则返回错误描述</returns>
        public string CopyFrom(CWmsSubEntryOder srcOrder)
        {
#if !C_WMS_V1
            throw new NotFiniteNumberException();
#else
            if (null == srcOrder)
            {
                C_WMS.Data.Utility.MyLog.Instance.Warning("Failed in {0}.{1}(pSrc={2})", MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, srcOrder);
                return("非法入参,srcOrder为null");
            }
            try
            {
                outBizCode    = srcOrder.WmsOrder.OutBizCode;                                              // 外部业务编码, 消息ID, 用于去重,当单据需要分批次发送时使用
                orderLineNo   = srcOrder.Id;                                                               // 入库单的行号
                ownerCode     = CWmsDataFactory.GetOwner(srcOrder.MangoOrder.WarehouseId.ToString()).Code; // 根据仓库Id判断货主
                itemCode      = srcOrder.Product.ItemCode;                                                 // ret.Append("itemCode={0}", itemCode); // 商品编码
                itemName      = srcOrder.Product.MangoProduct.Title;                                       // 商品名称
                planQty       = srcOrder.WmsOrder.planQty.ToString();                                      // 获取应收数量
                inventoryType = srcOrder.WmsOrder.InventoryType.ToString();
                skuProperty   = srcOrder.Product.MangoProduct.GuiGe;
                purchasePrice = srcOrder.MangoOrder.ProductPrice.ToString(); // 采购价
                return(string.Empty);
            }
            catch (Exception ex)
            {
                C_WMS.Data.Utility.MyLog.Instance.Warning(ex, "!!Exception in {0}.{1}({2})", MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, srcOrder);
                return(ex.Message);
            }
#endif
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 创建HttpReqXml_InventoryMonitoring对象
        /// </summary>
        /// <returns></returns>
        override public HttpReqXml_InventoryMonitoring NewRequestObj()
        {
            try
            {
                _productIdList = CWmsDataFactory.GetV_ProductIds((0 == ProductIdList?.Count) ? null : ProductIdList).ToList();
                if (0 == OwnerList?.Count)
                {
                    _ownerList = CWmsDataFactory.GetV_Owners().ToList();
                }
                if (0 == ProductIdList.Count || 0 == OwnerList.Count)
                {
                    C_WMS.Data.Utility.MyLog.Instance.Warning("{0}.NewRequestObject(), no productId or owner.", GetType());
                    return(null);
                }

                var reqObj = new HttpReqXml_InventoryMonitoring();
                foreach (string id in ProductIdList)
                {
                    foreach (var owner in OwnerList)
                    {
                        var wList = CWmsDataFactory.GetV_Warehouse(owner);
                        if (!Utility.CWmsDataUtility.IEnumerableAny(wList))
                        {
                            C_WMS.Data.Utility.MyLog.Instance.Warning("{0}.NewRequestObject(), owner[{1}] has no warehouse.", GetType(), owner);
                        }
                        else
                        {
                            reqObj.items.AddRange(wList.Select(w => new HttpReqXml_InventoryMonitoring_item(w.WmsCode, owner.WOwner.WmsID, id)));
                        }
                    }
                }
                return(reqObj);
            }
            catch (Exception ex)
            {
                ProductIdList?.ForEach(id =>
                {
                    C_WMS.Data.Utility.MyLog.Instance.Warning("{0}.NewRequestObject()  Exception: Id={1}", GetType(), id);
                });
                C_WMS.Data.Utility.MyLog.Instance.Warning(ex, "{0}.NewRequestObject()发生异常", GetType());
                return(null);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 从CWmsReturnOrder对象实体拷贝数据
        /// </summary>
        /// <param name="srcObj">源对象实体</param>
        /// <returns>若拷贝成功则返回string.Empty; 否则返回错误描述</returns>
        public string CopyFrom(CWmsEntity.CWmsReturnOrder srcObj)
        {
            if (null == srcObj)
            {
                return("源实例srcObj为null");
            }
            var logistics = CWmsDataFactory.GetLogisticsBy(TCWmsOrderCategory.EReturnOrder
                                                           , (srcObj.MangoOrder as Mango.Data.MangoReturnOrder).THwuLiu.ToString());

            returnOrderCode = (srcObj.MangoOrder as Mango.Data.MangoReturnOrder).TuiHuoMainID.ToString();
            warehouseCode   = CWmsConsts.cStrDefaultWarehouseId;

            orderType = 1 > (srcObj.MangoOrder as Mango.Data.MangoReturnOrder).TuiHuoType.Int()? TWmsReturnOrderType.THRK.ToString(): TWmsReturnOrderType.HHRK.ToString();

            orderFlag            = (srcObj.WmsOrder as Wms.Data.WmsReturnOrder).OrderFlag.ToString();
            preDeliveryOrderCode = (srcObj.MangoOrder as Mango.Data.MangoReturnOrder).ProductIOputMainId.ToString();
            preDeliveryOrderId   = string.Empty;
            logisticsCode        = logistics.WmsID;
            logisticsName        = logistics.logisticsName;
            returnReason         = (srcObj.MangoOrder as Mango.Data.MangoReturnOrder).THYuanYin;
            remark = (srcObj.MangoOrder as Mango.Data.MangoReturnOrder).BeiZhu;
            return(string.Empty);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 从CWmsEntryOrder实例中拷贝订单信息
        /// </summary>
        /// <param name="pSrc">源订单实例</param>
        /// <returns>若成功则返回string.Empty; 否则返回错误描述</returns>
        public string CopyFrom(CWmsEntryOrder pSrc)
        {
#if !C_WMS_V1
            throw new NotFiniteNumberException();
#else
            if (null == pSrc)
            {
                C_WMS.Data.Utility.MyLog.Instance.Warning("Failed, {0}.{1}(pSrc={2})", MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, pSrc);
                return("非法参数,pSrc为null");
            }
            try
            {
                // 获取承运商信息
                var logistics = pSrc.Handler.GetLogistics(pSrc);// CWmsDataFactory.GetLogisticsBy(TCWmsOrderCategory.EEntryOrder, string.Empty);

                totalOrderLines   = pSrc.SubOrders.Count.ToString();
                entryOrderCode    = pSrc.Id;
                ownerCode         = CWmsDataFactory.GetOwner(pSrc.MangoOrder.WarehouseId.ToString()).Code;     // TODO: 根据仓库Id判断货主
                purchaseOrderCode = string.Empty;                                                              // 无法确定采购订单Id(多个主采购订单的子单据都可以加到一个主入库单中)
                warehouseCode     = CWmsDataFactory.GetWarehouse(pSrc.MangoOrder.WarehouseId.ToString()).Name; // CWmsConsts.cStrDefaultWarehouseId;  // TODO: get warehous ID
                orderCreateTime   = pSrc.MangoOrder.AddTime.ToString();
                orderType         = TWmsOrderType.QTRK.ToString();                                             // TODO: need to identify purchase entry and no-purchase entry for inventory adding from nowhere
                operatorCode      = MangoMis.Frame.Frame.CommonFrame.userid.ToString();                        // 操作人Id为当前登录用户
                operatorName      = MangoMis.Frame.Frame.CommonFrame.userid.User().UserName2;                  // 获取人员名称
                logisticsCode     = logistics.WmsID;
                logisticsName     = logistics.logisticsName;
                operateTime       = DateTime.Now.ToString(); // 操作时间为当前时间
                remark            = pSrc.MangoOrder.Remark;
                return(string.Empty);
            }
            catch (Exception ex)
            {
                C_WMS.Data.Utility.MyLog.Instance.Warning(ex, "!!Exception in {0}.{1}({2})", MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, pSrc);
                return(ex.Message);
            }
#endif
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 执行HTTP会话。
        /// </summary>
        /// <param name="args">重载方法应传入至少2个参数。且第一个输入参数为string类型的商城系统中的主出库单ID</param>
        /// <returns>返回存储了HTTP response body的HttpRespXmlBase实例</returns>
        public HttpRespXmlBase DoTransaction(params object[] args)
        {
            var ret = new ThirdResult <List <object> >("CWmsStockoutCreate.DoTransaction()开始");

            HttpReqXmlBase  reqBody      = null;         // new HttpReqXml_InventoryMonitoring();请求
            HttpRespXmlBase respBody     = null;         //响应
            int             addTo709Rows = 0;            //添加到709中的数据
            string          errMsg       = string.Empty; //错误信息

            #region 从入参中获取单据ID
            try { mCachedOrderId = args[0] as string; }//传递值转换成string 失败就抛出异常
            catch (Exception ex)
            {
                ret.Append(string.Format("发生异常:{0}", ex.Message));
                ret.End();
                return(null);
            }
            #endregion
            try
            {
                var cwmsOrder = CWmsStockoutOrderHandler.NewOrder(mCachedOrderId);
                cwmsOrder.Handler.UpdateDict709(cwmsOrder, TDict285_Values.EDeleted, TDict285_Values.ENormal, true);
                // update Dit[709]
                if (0 >= Dict709Handle.UpdateRow_StockoutCreate(mCachedOrderId, TDict285_Values.EDeleted, TDict285_Values.ENormal, out addTo709Rows, out errMsg))
                {
                    ret.Append(string.Format("CWmsStockoutCreate.DoTransaction()结束,向Dict[709]插入创建出库订单行失败:{0}, {1}", addTo709Rows, errMsg));
                    ret.End();
                    return(null);
                }//提交709数据

                // generate Http request body
                if (null == (reqBody = CWmsDataFactory.GetReqXmlBody_ExWarehouseCreate(mCachedOrderId)))
                {
                    ret.Append(string.Format("CWmsStockoutCreate.DoTransaction(),创建请求体对象失败"));
                    ret.End();
                    return(null);
                }

                respBody = Post(reqBody);   // Do Http transaction
                ret.Append(string.Format("ResponseXML={0}", respBody.ToString()));
                // 处理response body
                if (null == respBody)
                {
                    // update Dict[709]
                    Dict709Handle.UpdateRow_StockoutCreate(mCachedOrderId, TDict285_Values.ENormal, TDict285_Values.ENormal, out addTo709Rows, out errMsg);
                    ret.Append(string.Format("CWmsStockoutCreate.DoTransaction()结束"));
                    // TODO: 返回失败
                    ret.Append(string.Format("失败,ResponseXML对象为null"));
                    ret.End();

                    return(null);
                }
                else if (!respBody.IsSuccess())
                {
                    // TODO: 返回失败
                    ret.Append(string.Format("失败,ResponseXML对象flag=failure"));
                    ret.End();
                    return(respBody);
                }
                else
                {
                    Dict709Handle.UpdateRow_StockoutCreate(mCachedOrderId, TDict285_Values.ENormal, TDict285_Values.ENormal, out addTo709Rows, out errMsg);
                    ret.Append(string.Format("CWmsStockoutCreate.DoTransaction()结束"));
                    ret.End();
                    return(respBody);
                }
            }
            catch (Exception ex)
            {
                if (null != ex.InnerException)
                {
                    ret.Append(string.Format("InnerException: {0}", ex.InnerException.Message));
                }
                ret.Append(string.Format("发生异常: {0}\r\n调用堆栈:{1}", ex.Message, ex.StackTrace));
                ret.End();
                return(null);
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 执行接口的HTTP Transaction,该方法可以传入参数,返回HTTP Response Body、错误码和错误描述。需要在子类中实现
        /// </summary>
        /// <param name="pResp">返回HTTP Response Body</param>
        /// <param name="pMsg">错误描述,若返回成功则返回String.Empty</param>
        /// <param name="args">传入参数</param>
        /// <returns>返回错误码TError</returns>
        public override int DoTransaction(out HttpRespXmlBase pResp, out string pMsg, params object[] args)
        {
            try
            {
                #region temp variables
                pMsg  = string.Empty;
                pResp = null;
                int    errCode    = TError.RunGood.Int();
                int    errDict709 = TError.WCF_RunError.Int();
                string errMsg     = string.Empty;
                string ddMsg      = string.Empty;
                List <MisModel.Product_WMS_Interface> d709fList = null;
                string eid = string.Empty;                  // 主入库订单ID
                string pid = string.Empty;                  // 主采购单Id
                HttpReqXml_EntryOrderCreate reqBody = null; //请求xml
                #endregion
                #region handle arguments
                if (TError.RunGood.Int() != (errCode = ParseArguments(out eid, out pid, args)))
                {
                    errMsg = "params object[] args,非法入参";
                    C_WMS.Data.Utility.MyLog.Instance.Error("执行同步入库订单的HTTP会话失败 errCode={0}, msg={1}", errMsg, errMsg);
                    return(errCode);
                }
                #endregion
                #region Update Dict[709]
                var order = CWmsEntryOrderHandler.NewOrder(eid);
                order.Handler.UpdateDict709(order, TDict285_Values.EDeleted, TDict285_Values.EUnknown, true);
#if false
                if (TError.WCF_RunError.Int() ==
                    (errCode = Dict709Handle.UpdateRowVA_Order(TDict709_Value.EEntryOrder, eid, TDict285_Values.EDeleted, TDict285_Values.ENormal, out d709fList, out errCode, out pMsg)))
                {
                    C_WMS.Data.Utility.MyLog.Instance.Error("执行同步入库订单的HTTP会话,更新709失败: 入库单Id={0}, errCode={1}, errDict709={2}, errMsg={3}", eid, errCode, errDict709, errMsg);
                    return(errCode);
                }
#endif
                #endregion

                reqBody = CWmsDataFactory.GetReqXmlBody_EntryOrderCreate(eid, pid) as HttpReqXml_EntryOrderCreate; // get HTTP request body
                pResp   = Post(reqBody);                                                                           // Do http transaction

                #region handle response
                if (null == pResp)
                {
                    pMsg    = "HTTP会话异常,HTTP响应体为null";
                    errCode = TError.WCF_RunError.Int();
                    C_WMS.Data.Utility.MyLog.Instance.Error("执行同步入库订单的HTTP会话,服务器响应异常, message={0}", pMsg);
                }
                else if (!pResp.IsSuccess())
                {
                    pMsg    = pResp.message;
                    errCode = TError.Ser_ErrorPost.Int();
                    C_WMS.Data.Utility.MyLog.Instance.Error("执行同步入库订单的HTTP会话,服务器响应失败,message={0}", pMsg);
                }
                else
                {
                    errCode = Dict709Handle.UpdateRowVA_Order(TDict709_Value.EEntryOrder, eid, TDict285_Values.ENormal
                                                              , TDict285_Values.ENormal, out d709fList, out errCode, out pMsg);
                    C_WMS.Data.Utility.MyLog.Instance.Info("执行同步入库订单的HTTP会话完成,更新[709]:errCode={0}, errCode={1}, pMsg={2}", errCode, errCode, pMsg);
                }
                #endregion

                #region 推送钉钉通知
                ddMsg = (0 < errCode) ? ddMsg = string.Format(DingDingMsgFmtSuccess, eid) : ddMsg = string.Format(DingDingMsgFmtFailed, eid);
                mDlgtNotifySyncResult.BeginInvoke(CommonFrame.LoginUser.UserId.Int(), ddMsg, Acb_NotifySyncResult, mDlgtNotifySyncResult);
                #endregion

                return(errCode);
            }
            #region Handle exception
            catch (Exception ex)
            {
                pResp = null;
                pMsg  = ex.Message;
                C_WMS.Data.Utility.MyLog.Instance.Error(ex, "在{0}中发生异常", System.Reflection.MethodBase.GetCurrentMethod().Name);
                return(TError.WCF_RunError.Int());
            }
            #endregion
        }
Ejemplo n.º 8
0
        /// <summary>
        /// inner method. 执行HTTP会话
        /// </summary>
        /// <param name="pMapClassId">Dict[709].MapClassId</param>
        /// <param name="moid">待取消的主单据Id</param>
        /// <param name="pResp">返回HTTP Response XML实体</param>
        /// <param name="pMsg">返回错误描述</param>
        /// <returns>返回存储了HTTP response body的HttpRespXmlBase实例</returns>
        /// <returns></returns>
        protected int DoTransaction(TDict709_Value pMapClassId, string moid, out HttpRespXmlBase pResp, out string pMsg)
        {
            var ret = new ThirdResult <List <object> >(string.Format("同步取消单据HTTP会话,开始, MapClassId={0}, modi{1}", pMapClassId, moid));

            try
            {
                #region temp variables
                pMsg  = string.Empty;
                pResp = null;
                int    errCode    = TError.Post_ParamError.Int(); // 方法返回值
                int    errDict709 = TError.WCF_RunError.Int();
                string errMsg     = string.Empty;
                List <MisModel.Product_WMS_Interface> d709fList = null; // 操作Dict709失败时的,缓存操作失败的行的列表
                HttpReqXmlBase  reqBody  = null;                        // HTTP请求XML
                HttpRespXmlBase respBody = null;                        // HTTP响应XML
                #endregion
                #region validate arguments
                if (TDict709_Value.ECancelReturnOrder != pMapClassId)
                {
                    pMsg = string.Format("不支持的单据类型, pMapClassId={0}", pMapClassId);
                    ret.Append(pMsg);
                    ret.End();
                    return(errCode);
                }
                // TODO: other arguments validations
                #endregion
                #region Update Dict[709]
                errCode = Dict709Handle.UpdateRowVA_Order(pMapClassId, moid, TDict285_Values.EDeleted, TDict285_Values.ENormal, out d709fList, out errDict709, out pMsg);
                if (TError.WCF_RunError.Int() == errCode)
                {
                    errMsg = string.Format("更新Dict[709]失败:errCode={0}, errDict709={1}, pMsg={2}", errCode, errDict709, pMsg);
                    ret.Append(string.Format("同步取消单据HTTP会话失败, {0}", errMsg));
                    ret.End();
                    return(errCode);
                }
                #endregion

                reqBody  = CWmsDataFactory.GetReqXmlBody_CancelOrder(Dict709Handle.Dict709ToMoc(pMapClassId), moid) as HttpReqXml_OrderCacnel; // get HTTP request body
                respBody = Post(reqBody);                                                                                                      // Do http transaction

                #region handle response
                if (null == pResp)
                {
                    pMsg    = "HTTP会话异常,HTTP响应体为null";
                    errCode = TError.WCF_RunError.Int();
                    ret.Append(string.Format("同步取消单据HTTP会话失败,系统异常:errCode={0}, message={1}", errCode, pMsg));
                }
                else if (!pResp.IsSuccess())
                {
                    pMsg    = pResp.ToString();
                    errCode = pResp.code.Int();
                    ret.Append(string.Format("同步取消单据HTTP会话失败,响应失败: errCode={0}, message={1}", errCode, pMsg));
                }
                else
                {
                    // update Dict[709]
                    errCode = Dict709Handle.UpdateRowVA_Order(pMapClassId, moid, TDict285_Values.EDeleted, TDict285_Values.ENormal, out d709fList, out errDict709, out pMsg);
                    ret.Append(string.Format("同步取消单据HTTP会话成功:{0}, {1}", errCode, pMsg));
                }
                #endregion

                ret.End();
                return(errCode);
            }
            catch (Exception ex)
            {
                pResp = null;
                pMsg  = ex.Message;

                if (null != ex.InnerException)
                {
                    ret.Append(string.Format("InnerException: {0}", ex.InnerException.Message));
                }
                ret.Append(string.Format("发生异常: {0}\r\n调用堆栈:{1}", ex.Message, ex.StackTrace));
                ret.End();
                return(TError.WCF_RunError.Int());
            }
        }