Esempio n. 1
0
        /// <summary>
        /// 销售出库、退货
        /// </summary>
        /// <param name="easModel">Kis数据</param>
        /// <param name="isSave">是否保存为提交状态</param>
        /// <param name="isAgain">是否重新导入</param>
        /// <param name="enableEas">是否启用Kis</param>
        /// <param name="isData">是否只取xml数据</param>
        /// <returns>Result</returns>
        /// <remarks>2013-9-22 杨浩 创建</remarks>
        public static Result <string> SaleIssueBillFacade(Hyt.Model.LiJiaSyncLog easModel, bool isSave = false, bool isAgain = false, bool enableEas = true, bool isData = false)
        {
            var sale = easModel.Data.ToObject <SaleInfoWraper>();

            List <SaleInfo> model        = sale.Model;
            出库状态            type         = sale.Type;
            string          customer     = sale.Customer;
            string          description  = sale.Description;
            string          flowIdentify = easModel.FlowIdentify;
            string          dataMd5      = easModel.DataMd5;


            var name  = 出库状态.出库 == type ? "销售出库" : "销售退货";
            var watch = new Stopwatch();

            watch.Start();
            var result = new Eas.SaleIssueBillFacade.Result();

            #region 数据初始
            var     firstModel       = model.FirstOrDefault();
            int     warehouseSysNo   = firstModel != null ? firstModel.WarehouseSysNo : 0;              //仓库编号
            decimal voucherAmount    = model.Sum(q => q.Amount);
            var     organizationCode = firstModel != null ? firstModel.OrganizationCode : string.Empty; //组织架构
            if (出库状态.退货 == type)
            {
                voucherAmount = -voucherAmount;
            }


            if (firstModel.WarehouseNumber.Contains("-"))
            {
                firstModel.WarehouseNumber = firstModel.WarehouseNumber.Split('-')[0];
            }


            var saleInfo = model.FirstOrDefault();

            string billNo = "XSCK" + (saleInfo.ItemID ?? 0) + easModel.FlowIdentify;

            var request = new  StockOutAddRequset()
            {
                FBillNo      = billNo,
                FEntryID     = "0",
                Fdate        = DateTime.Now.ToString("yyyy-MM-dd"),
                FConsignee   = _userName,
                FDeptID      = "",
                FEmpID       = organizationCode,
                FExplanation = "",
                FFetchAdd    = "",
                FFManagerID  = "",
                FSaleStyle   = "线上电商平台",
                FSManagerID  = "",
                FCustID      = string.IsNullOrWhiteSpace(saleInfo.DeliveryCustomer) ? config.FCustID : saleInfo.DeliveryCustomer,// "01.001.003",
                FDCStockID   = firstModel.WarehouseNumber,
                FROB         = 出库状态.出库 == type?"1":"-1",
            };


            request.item = model.Select((q, i) => new JsonItem()
            {
                FItemID         = q.ErpCode,
                Fauxqty         = q.Quantity.ToString(),
                FItemName       = "",
                FDCStockID      = q.WarehouseNumber.Contains("-") ? q.WarehouseNumber.Split('-')[0] : q.WarehouseNumber,
                FUnitID         = config.FUnitID,// "ping",
                FConsignPrice   = decimal.Round(q.Amount / q.Quantity, 2).ToString("0.00"),
                FConsignAmount  = q.Amount.ToString("0.00"),
                FDiscountAmount = q.DiscountAmount.ToString("0.00"),
            }).ToList();

            string json = request.ToJson();

            var datajson = new SaleInfoWraper
            {
                Model       = model,
                Type        = type,
                Customer    = customer,
                Description = description
            }.ToJson();


            if (isData)
            {
                return(new Result <string>
                {
                    Data = json
                });
            }

            #endregion

            #region 调用利嘉接口
            步状态 status = 步状态.等待同步;
            if (enableEas && isAgain)
            {
                try
                {
                    using (var service = new Pisen.Framework.Service.Proxy.ServiceProxy <Grand.Platform.Api.Contract.IErpService>())
                    {
                        var response = service.Channel.LiJiaStockOutAdd(request);
                        status            = !response.IsError ?  步状态.成功 :  步状态.失败;
                        result.status     = !response.IsError;
                        result.message    = response.ErrMsg;
                        result.statusCode = response.ErrCode;
                        result.data       = response.FBillNo; //_result.Data != null && _result.Data.Count > 0 ? _result.Data.First().OutFBillNo : "";
                    }
                }
                catch (Exception e)
                {
                    result.message = e.Message;
                    result.status  = false;
                    status         = 步状态.失败;
                }
            }
            else
            {
                result.message = enableEas ? Model.EasConstant.EAS_WAIT : Model.EasConstant.EAS_MESSAGE_CLOSE;
                result.status  = false;
                status         = 步状态.等待同步;
            }

            #endregion

            watch.Stop();

            var resultData = new Result <string>
            {
                Data       = (result.data != null ?result.data.ToString() :""),
                Status     = result.status,
                StatusCode = result.statusCode,
                Message    = result.message
            };
            //记录日志
            int sysno = WriteLog(datajson, resultData, watch, name, 接口类型.销售出库退货, warehouseSysNo, description, flowIdentify, voucherAmount, status, isAgain);
            easModel.SysNo = sysno == 0 ? easModel.SysNo : sysno;
            //临时记录 检查是否重复
            var content = " 订单编号:" + description + " 外部编号:" + request.FBillNo + " 请求时间:" + request.Fdate +
                          " 返回结果:" + (result.status?result.data:result.message) + " 返回状态:" + result.status + "," + result.statusCode + " ElapseTime:" + watch.ElapsedMilliseconds;
            WriteLog(easModel.SysNo, content, request.Fdate, isAgain);

            return(resultData);
        }
Esempio n. 2
0
        /// <summary>
        /// 记录日志
        /// </summary>
        /// <param name="datajson">同步数据</param>
        /// <param name="result">返回结果</param>
        /// <param name="watch">同步耗时</param>
        /// <param name="name">接口名称</param>
        /// <param name="interfaceType">接口类型</param>
        /// <param name="warehouseSysNo">仓库编号</param>
        /// <param name="remarks">记录商城原单据</param>
        /// <param name="flowIdentify">流程编号</param>
        /// <param name="voucherAmount">单据金额</param>
        /// <param name="status">同步状态</param>
        /// <param name="isAgain">是否开始同步</param>
        /// <remarks>2013-10-24 杨浩 创建</remarks>
        private static int WriteLog(string datajson, Result <string> result, Stopwatch watch, string name,
                                    接口类型 interfaceType, int warehouseSysNo, string remarks, string flowIdentify, decimal voucherAmount, 步状态 status, bool isAgain)
        {
            //是否为自动同步
            if (isAgain)
            {
                return(0);
            }
            //是否为自营
            if (!IsSelfSupport(warehouseSysNo))
            {
                return(0);
            }
            int    elapsedMilliseconds = 0;
            string message             = string.Empty;
            var    dataMd5             = Helper.MD5Encrypt(datajson);

            var isImport = Hyt.DataAccess.Sys.ILiJiaDao.Instance.IsImport(dataMd5);

            if (isImport)
            {
                return(0);
            }

            elapsedMilliseconds = (int)watch.ElapsedMilliseconds;
            message             = result.Message != null
                ? (result.Message.Length > 500 ? result.Message.Substring(0, 500) : result.Message)
                : string.Empty;

            var log = new Hyt.Model.LiJiaSyncLog()
            {
                VoucherNo      = result.Data,
                CreatedDate    = DateTime.Now,
                Data           = datajson,
                DataMd5        = dataMd5,
                ElapsedTime    = elapsedMilliseconds,
                InterfaceType  = (int)interfaceType,
                Message        = message,
                Name           = name,
                Status         = (int)status,
                StatusCode     = result.StatusCode,
                CreatedBy      = Hyt.Model.SystemPredefined.User.SystemUser,
                Remarks        = remarks,
                FlowIdentify   = flowIdentify,
                FlowType       = (接口类型.配送员借货还货 == interfaceType ? 20 : 10),
                LastupdateDate = DateTime.Now,
                WarehouseSysNo = warehouseSysNo,
                VoucherAmount  = voucherAmount,
                LastsyncTime   = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue,
            };

            return(Hyt.DataAccess.Sys.ILiJiaDao.Instance.LiJiaSyncLogCreate(log));
        }
Esempio n. 3
0
        ///// <summary>
        ///// 销售出库单、销售退货入库单同步接口
        ///// </summary>
        ///// <param name="request"></param>
        ///// <returns></returns>
        ///// <remarks>2016-1-4 王江 创建</remarks>
        //public TpcStockInOutResponse SyncTpcStockInOut(TpcStockInOutRequest request)
        //{
        //    var json = request.ToJson();
        //    var param = new NameValueCollection()
        //    {
        //        {"json",json},
        //        {"sign",EncryptionUtil.EncryptWithMd5(json + Extra.Erp.Properties.Settings.Default.IMS_TPC_SysncSignature)}
        //    };
        //    var client = new WebClient();
        //    var bytes = client.UploadValues(Extra.Erp.Properties.Settings.Default.Extra_Ims_SyncTpcStockInOutProxyService, param);
        //    return JsonUtil.ToObject<TpcStockInOutResponse>(Encoding.UTF8.GetString(bytes));
        //}

        ///// <summary>
        ///// 收款单同步接口
        ///// </summary>
        ///// <param name="request"></param>
        ///// <returns></returns>
        ///// <remarks>2016-1-4 王江 创建</remarks>
        //public TpcReceivePaymentResponse SyncTpcReceivePayment(TpcReceivePaymentRequest request)
        //{
        //    var json = request.ToJson();
        //    var param = new NameValueCollection()
        //    {
        //        {"json",json},
        //        {"sign",EncryptionUtil.EncryptWithMd5(json + Extra.Erp.Properties.Settings.Default.IMS_TPC_SysncSignature)}
        //    };
        //    var client = new WebClient();
        //    var bytes = client.UploadValues(Extra.Erp.Properties.Settings.Default.Extra_Ims_SyncTpcReceivePaymentProxyService, param);
        //    return JsonUtil.ToObject<TpcReceivePaymentResponse>(Encoding.UTF8.GetString(bytes));
        //}

        ///// <summary>
        ///// IMS库存查询接口
        ///// </summary>
        ///// <param name="request"></param>
        ///// <returns></returns>
        ///// <remarks>2016-1-11 王江 创建</remarks>
        //public TpcInventoryQueryResponse GetInventorySearch(TpcInventoryQueryRequest request)
        //{
        //    var json = request.ToJson();
        //    var param = new NameValueCollection()
        //    {
        //        {"json",json},
        //        {"sign",EncryptionUtil.EncryptWithMd5(json + Extra.Erp.Properties.Settings.Default.IMS_TPC_SysncSignature)}
        //    };
        //    var client = new WebClient();
        //    var bytes = client.UploadValues(Extra.Erp.Properties.Settings.Default.Extra_Ims_SyncGetInventoryProxyService, param);
        //    return JsonUtil.ToObject<TpcInventoryQueryResponse>(Encoding.UTF8.GetString(bytes));
        //}

        ///// <summary>
        ///// 从IMS系统获取加盟商库存
        ///// </summary>
        ///// <param name="enterpriseID">加盟商客户编码</param>
        ///// <param name="erpCode">商品编码</param>
        ///// <param name="wareHouse">仓库信息</param>
        ///// <returns></returns>
        ///// <remarks>2016-01-05 朱成果 创建</remarks>
        //public static Result<List<Inventory>> GetInventory(string[] erpCode, Hyt.Model.WhWarehouse wareHouse)
        //{
        //    Result<List<Inventory>> r=new Result<List<Inventory>>(){
        //         Status=false
        //    };
        //    if(erpCode!=null&&wareHouse!=null&&wareHouse.IsSelfSupport==(int)Hyt.Model.WorkflowStatus.WarehouseStatus.是否自营.否)
        //    {
        //        string enterpriseID=GetJiaMengCustomer(wareHouse.SysNo);//加盟商EAS 客户编码
        //        if (!string.IsNullOrEmpty(enterpriseID) && !string.IsNullOrEmpty(wareHouse.ErpCode) && wareHouse.ErpCode.Trim() != defaultJiamengCode)
        //        {
        //            TpcInventoryQueryRequest request=new TpcInventoryQueryRequest();
        //            request.enterpriseID=enterpriseID;//加盟商客户编码
        //            request.warehouseIDs=new List<string>();
        //            request.warehouseIDs.Add(wareHouse.ErpCode.Trim());
        //            request.productIDs=erpCode.ToList();
        //            try
        //            {
        //                var response= ImsHelper.Instance.GetInventorySearch(request);
        //                if(response!=null)
        //                {
        //                    r.Status=response.Status;
        //                    r.Message=response.Message;
        //                    if(response.Data!=null)
        //                    {
        //                        r.Data=new List<Inventory>();
        //                        response.Data.ForEach((m)=>{
        //                            r.Data.Add(
        //                                new Inventory()
        //                                {
        //                                    Quantity = (int)m.Quantity,
        //                                    MaterialNumber = m.ProductCode,
        //                                    WarehouseSysNo = wareHouse.SysNo,
        //                                    WarehouseName = wareHouse.WarehouseName,
        //                                    WarehouseSysName = wareHouse.WarehouseName,
        //                                    WarehouseNumber = m.WareHouseCode
        //                                }

        //                            );

        //                        });
        //                    }
        //                }
        //            }
        //            catch(Exception ex)
        //            {
        //                r.Status=false;
        //                r.Message=ex.Message;
        //            }
        //        }
        //    }
        //    return r;
        //}
        ///// <summary>
        ///// 获取加盟商客户信息
        ///// </summary>
        ///// <param name="wareHouseSysNo">仓库信息</param>
        ///// <returns></returns>
        ///// <remarks>2016-01-05 朱成果 创建</remarks>
        //private static string GetJiaMengCustomer(int wareHouseSysNo)
        //{
        //    string enterpriseID = string.Empty;
        //    var dw= Hyt.DataAccess.Distribution.IDsDealerWharehouse.Instance.GetByWarehousSysNo(wareHouseSysNo);
        //    if(dw!=null)
        //    {
        //       var dd= Hyt.DataAccess.Distribution.IDsDealerDao.Instance.GetDsDealer(dw.DealerSysNo);
        //       if(dd!=null)
        //        {
        //            enterpriseID = dd.ErpCode;
        //        }
        //    }
        //    return enterpriseID;
        //}

        ///// <summary>
        ///// IMS 出库单和退换货单同步
        ///// </summary>
        ///// <param name="request"></param>
        ///// <param name="status"></param>
        ///// <returns>返回单据号码</returns>
        ///// <remarks>2016-01-05 朱成果 创建</remarks>
        //public static Result<string> SyncTpcStockInOut(TpcStockInOutData datainfo, ImportStatus status)
        //{
        //    string xml = Helper.XmlSerialize(datainfo)
        //                           .Replace(xsi, "")
        //                           .Replace(xsd, "")
        //                           .Replace("utf-16", "UTF-8")
        //                           .Trim();
        //    if (status.isData)
        //    {
        //        return new Result<string>
        //        {
        //            Data = xml
        //        };
        //    }
        //    if (System.Configuration.ConfigurationManager.AppSettings["EnableIMSSync"] != "true")//接口关闭
        //    {
        //        return new Result<string>
        //        {

        //            Message = Model.EasConstant.EAS_MESSAGE_CLOSE,
        //            Status = false
        //        };
        //    }
        //    if (string.IsNullOrEmpty(datainfo.RequestData.Warehouse) || datainfo.RequestData.Warehouse.Trim() == defaultJiamengCode)//基础资料没有维护
        //    {
        //        return new Result<string>
        //        {
        //            Message = Model.EasConstant.Information,
        //            Status = false
        //        };
        //    }
        //    var datajson = datainfo.ToJson();
        //    var md5 = Helper.MD5Encrypt(datajson);
        //    Extra.Erp.Entity.Result result = new Extra.Erp.Entity.Result() { Status = false };
        //    同步状态 sendstatus = 同步状态.等待同步;
        //    var watch = new System.Diagnostics.Stopwatch();
        //    watch.Start();
        //    if (status.enableEas && status.isAgain)
        //    {
        //        try
        //        {
        //            datainfo.RequestData.Guid = md5;
        //            var response = ImsHelper.Instance.SyncTpcStockInOut(datainfo.RequestData);
        //            if (response != null)
        //            {
        //                result.Status = response.Status;
        //                result.Message = response.Message;
        //                result.data = response.Code ?? "";
        //                sendstatus = response.Status ? 同步状态.成功 : 同步状态.失败;
        //            }
        //            else
        //            {
        //                sendstatus = 同步状态.失败;
        //            }

        //        }
        //        catch (Exception e)
        //        {
        //            result.Message = e.Message;
        //            result.Status = false;
        //            sendstatus = 同步状态.失败;
        //        }
        //    }
        //    else
        //    {
        //        result.Message = status.enableEas ? Model.EasConstant.EAS_WAIT : Model.EasConstant.EAS_MESSAGE_CLOSE;
        //        result.Status = false;
        //        sendstatus = 同步状态.等待同步;
        //    }
        //    watch.Stop();
        //    var resultData = new Result<string>
        //    {
        //        Data = (result.data != null ? result.data.ToString() : ""),
        //        Status = result.Status,
        //        StatusCode = result.statusCode,
        //        Message = result.Message
        //    };
        //    decimal voucherAmount = datainfo.RequestData.ItemList.Sum(m => m.Quantity * m.UnitPrice - m.OriginalCurrency);
        //    if (datainfo.RequestData.InOutType == "22")
        //    {
        //        voucherAmount = 0 - voucherAmount;
        //    }
        //    var sysno = WriteQueue(datajson, md5, resultData, watch, 接口类型.IMS出入库, datainfo.WarehouseNo, datainfo.RequestData.Remarks, datainfo.Identifier, voucherAmount, sendstatus, status.isAgain);
        //    return resultData;

        //}
        #region 将日志写入数据库
        /// <summary>
        /// 将日志写入到同步队列
        /// </summary>
        /// <param name="datajson">同步数据</param>
        /// <param name="dataMd5">校验信息</param>
        /// <param name="result">返回结果</param>
        /// <param name="watch">同步耗时</param>
        /// <param name="interfaceType">接口类型</param>
        /// <param name="warehouseSysNo">仓库编号</param>
        /// <param name="remarks">记录当日达原单据</param>
        /// <param name="flowIdentify">流程编号</param>
        /// <param name="voucherAmount">单据金额</param>
        /// <param name="status">同步状态</param>
        /// <param name="isAgain">是否开始同步</param>
        /// <remarks>2015-09-29 朱成果 创建</remarks>
        private static int WriteQueue(string datajson, string dataMd5, Result <string> result, Stopwatch watch, 接口类型 interfaceType, int warehouseSysNo, string remarks, string flowIdentify, decimal voucherAmount, 步状态 status, bool isAgain)
        {
            //是否为自动同步
            if (isAgain)
            {
                return(0);
            }

            int    elapsedMilliseconds = 0;
            string message             = string.Empty;

            if (string.IsNullOrEmpty(dataMd5))
            {
                dataMd5 = Helper.MD5Encrypt(datajson);
            }
            var isImport = Hyt.DataAccess.Sys.IEasDao.Instance.IsImport(dataMd5);

            if (isImport)
            {
                return(0);
            }

            elapsedMilliseconds = (int)watch.ElapsedMilliseconds;
            message             = result.Message != null
                ? (result.Message.Length > 500 ? result.Message.Substring(0, 500) : result.Message)
                : string.Empty;

            var log = new Hyt.Model.EasSyncLog()
            {
                VoucherNo      = result.Data,
                CreatedDate    = DateTime.Now,
                Data           = datajson,
                DataMd5        = dataMd5,
                ElapsedTime    = elapsedMilliseconds,
                InterfaceType  = (int)interfaceType,
                Message        = message,
                Name           = interfaceType.ToString(),
                Status         = (int)status,
                StatusCode     = result.StatusCode,
                CreatedBy      = Hyt.Model.SystemPredefined.User.SystemUser,
                Remarks        = remarks,
                FlowIdentify   = flowIdentify,
                FlowType       = (接口类型.配送员借货还货 == interfaceType ? 20 : 10),
                LastupdateDate = DateTime.Now,
                WarehouseSysNo = warehouseSysNo,
                VoucherAmount  = voucherAmount
            };
            var r = Hyt.DataAccess.Sys.IEasDao.Instance.EasSyncLogCreate(log);

            return(r);
        }