Exemplo n.º 1
0
 /// <summary>
 /// 导入收款单据
 /// </summary>
 /// <param name="model">收款明细</param>
 /// <param name="receivingType">收款单类型(5:商品收款单;10:服务收款单)</param>
 /// <param name="customer">往来账客户编号</param>
 /// <param name="isUpgrades">是否为升舱</param>
 /// <param name="description">单据摘要(请备注订单号、会员名称、收款仓库(在线支付订单:备注商城、升舱:备注淘宝))</param>
 /// <param name="flowIdentify"></param>
 /// <returns></returns>
 /// <remarks>2013-9-25 杨浩 创建</remarks>
 public Model.Result Receiving(List <Model.Receiving.ReceivingInfo> model, 收款单类型 receivingType, string customer, bool isUpgrades, string description, string flowIdentify)
 {
     //var status = XingYeCore.Instance.ReceivingBillFacade(model, receivingType, customer, description, flowIdentify,null, false, false);
     //return status;
     return(new Result {
         Message = Model.EasConstant.EAS_MESSAGE_CLOSE, Status = false
     });
 }
Exemplo n.º 2
0
        /// <summary>
        /// 导入收款单据
        /// </summary>
        /// <param name="model">收款明细</param>
        /// <param name="receivingType">收款单类型(5:商品收款单;10:服务收款单)</param>
        /// <param name="customer">往来账客户编号</param>
        /// <param name="isUpgrades">是否为升舱</param>
        /// <param name="description">单据摘要(请备注订单号、会员名称、收款仓库(在线支付订单:备注商城、升舱:备注淘宝))</param>
        /// <param name="flowIdentify"></param>
        /// <returns></returns>
        /// <remarks>2013-9-25 杨浩 创建</remarks>
        public Result Receiving(List <ReceivingInfo> model, 收款单类型 receivingType, string customer, bool isUpgrades, string description, string flowIdentify)
        {
            var status = XingYeCore.ReceivingBillFacade(0, model, receivingType, customer, description, flowIdentify);

            return(status);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 导入收款单据
        /// </summary>
        /// <param name="easSysNo"></param>
        /// <param name="model"></param>
        /// <param name="receivingType">收款单类型(5:商品收款单;10:服务收款单)</param>
        /// <param name="customer">送货客户(商城客户:3003999997(如果为升舱订单 客服编号就要对应))</param>
        /// <param name="flowIdentify"></param>
        /// <param name="dataMd5"></param>
        /// <param name="isAgain">是否开始同步</param>
        /// <param name="description"></param>
        /// <param name="enableEas">是否启用Eas</param>
        /// <param name="isData">是否只取xml数据</param>
        /// <returns>Result</returns>
        /// <remarks>2013-9-25 杨浩 创建</remarks>
        public static Result <string> ReceivingBillFacade(int easSysNo, List <ReceivingInfo> model, 收款单类型 receivingType, string customer, string description, string flowIdentify, string dataMd5 = null, bool isAgain = false, bool enableEas = true, bool isData = false)
        {
            var name  = (receivingType == 收款单类型.退销售回款 ? "导入付款单" : "导入收款单");
            var watch = new Stopwatch();

            watch.Start();
            var    result    = new Eas.ReceivingBillFacade.Result();
            string sessionId = "";

            #region 数据初始

            var datajson = new ReceivingInfoWraper
            {
                Model         = model,
                Description   = description,
                Customer      = customer,
                ReceivingType = receivingType
            }.ToJson();
            var     firstModel       = model.FirstOrDefault();
            var     organizationCode = firstModel != null ? firstModel.OrganizationCode : string.Empty; //组织架构
            var     payeeAccount     = firstModel != null ? firstModel.PayeeAccount : string.Empty;     //收款科目
            int     warehouseSysNo   = firstModel != null ? firstModel.WarehouseSysNo : 0;              //仓库编号
            decimal voucherAmount    = model.Sum(q => q.Amount);
            if (receivingType == 收款单类型.退销售回款)
            {
                voucherAmount = -voucherAmount;
            }

            var billHead = new Model.Receiving.BillHead
            {
                number         = "SK" + Number,
                company        = "30", //品牌管理有限公司
                creator        = _userName,
                createtime     = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                lastUpdateUser = _userName,
                lastUpdateTime = DateTime.Now.ToString(dateFormater),
                bizdate        = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                handler        = _userName,
                description    = description,
                auditor        = _userName,
                //recbilltype = 100, //销售回款
                //paymenttype = "002", //赊销
                fundtype         = (receivingType == 收款单类型.商品收款单 || receivingType == 收款单类型.退销售回款) ? "100" : "101",            //现金=100,银行=101,其他=102
                rectype          = (receivingType == 收款单类型.商品收款单) ? "100" : ((receivingType == 收款单类型.退销售回款) ? "102" : "999"), //收款类型 销售回款(应收系统)=100,,其他(出纳系统)=999
                currency         = "RMB",
                actrecamt        = 0,                                                                                         //0表头自动计算
                actreclocamt     = 0,                                                                                         //0表头自动计算
                exchangerate     = 1,
                payeeaccount     = payeeAccount,                                                                              //收款科目
                payeeaccountbank = firstModel != null ? firstModel.PayeeAccountBank : string.Empty,                           //收款账户,支付宝,网银需传入
                settlementtype   = firstModel != null ? firstModel.SettlementType : string.Empty,                             //结算方式 需hyt对应(对应)01:现金
                biztype          = string.Empty,
                payeebank        = string.Empty,
                settlementnumber = string.Empty,
                adminorgunit     = GetOrganizeCode(organizationCode),                              //组织架构
                person           = firstModel != null ? firstModel.WarehouseNumber : string.Empty, //仓库编码
                oppaccount       = string.Empty,
                costcenter       = string.Empty,
                oppbgitemnumber  = string.Empty,
                payertype        = "00001",  //客户
                payernumber      = customer, //商城客户
                payerbank        = string.Empty,
                payeraccountbank = string.Empty,
                sourcebillid     = string.Empty,
                sourcefunction   = string.Empty,
                auditdate        = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"),
                billstatus       = "10",                                                                           //保存=10,已提交=11,已审批=12,已收款=14,已付款=15,审批中=6,已审核=8
                sourcebilltype   = string.Empty,
                sourcesystype    = (receivingType == 收款单类型.商品收款单 || receivingType == 收款单类型.退销售回款) ? "100" : "103", //100:应收系统,103:出纳系统
                sourcetype       = (receivingType == 收款单类型.商品收款单 || receivingType == 收款单类型.退销售回款) ? "100" : "103", //100:应收系统,103:出纳系统
                baseStatus       = 14                                                                              //保存=10,已提交=11(提交即审核) 14=收款状态
            };

            var billEntries = model.Select((q, i) => new Model.Receiving.entry
            {
                seq              = 1 + i,
                recbilltype      = (receivingType == 收款单类型.商品收款单) ? 100 : 0, //100:销售回款(应收系统需要)
                amount           = (receivingType == 收款单类型.退销售回款) ? -q.Amount : q.Amount,
                localamt         = (receivingType == 收款单类型.退销售回款) ? -q.Amount : q.Amount,
                rebate           = 0,
                rebatelocamt     = 0,
                actualamt        = (receivingType == 收款单类型.退销售回款) ? -q.Amount : q.Amount,
                actuallocamt     = (receivingType == 收款单类型.退销售回款) ? -q.Amount : q.Amount,
                remark           = q.Remark,
                corebilltype     = (receivingType == 收款单类型.商品收款单) ? 102 : 0, //102:销售出库单(应收系统需要)
                corebillnumber   = string.Empty,
                corebillentryseq = string.Empty,
                project          = string.Empty,
                tracknumber      = string.Empty,
                contractnum      = string.Empty,
                contractentryseq = string.Empty,
                lockamt          = 0, //结算状态为收款金额
                //unlockamt = q.Amount, //未结算状态为收款金额
                amountvc   = 0,
                localamtvc = 0,
                //unvcamount = q.Amount, //未结算状态为收款金额
                //unvclocamount = q.Amount, //未结算状态为收款金额
                matchedamount    = 0,
                matchedamountloc = 0,
                oppaccount       = string.Empty,
                oppbgitemname    = string.Empty,
                ck = (payeeAccount == EasConstant.PayeeAccount?EasConstant.HytWharehouse: q.WarehouseNumber), //仓库Eas编号
            }).ToList();

            var data = new ReceivingBill
            {
                billHead       = billHead,
                billEntries    = billEntries,
                thirdSysBillID = dataMd5 ?? Helper.MD5Encrypt(datajson),
                checkDuplicate = "true"
            };

            //按照Eas格式,去掉xmlns和空格
            string xml = Helper.XmlSerialize(data)
                         .Replace(xsi, "")
                         .Replace(xsd, "")
                         .Replace("utf-16", "UTF-8")
                         .Trim();
            if (isData)
            {
                return(new Result <string>
                {
                    Data = xml
                });
            }

            #endregion

            #region 调用外部Eas接口

            #region 检查基础资料是否完备

            string message = EasConstant.Information + ":";
            bool   isFull  = true;
            if (string.IsNullOrEmpty(billHead.payeeaccount))
            {
                message += " 收款科目为空";
                isFull   = false;
            }
            //仅在收款科目为1002开头时才是必录项
            if (!string.IsNullOrEmpty(billHead.payeeaccount) && billHead.payeeaccount.StartsWith("1002"))
            {
                if (string.IsNullOrEmpty(billHead.payeeaccountbank))
                {
                    message += " 收款账户为空";
                    isFull   = false;
                }
            }
            if (string.IsNullOrEmpty(billHead.adminorgunit))
            {
                message += " 部门为空";
                isFull   = false;
            }
            if (string.IsNullOrEmpty(billHead.person))
            {
                message += " 人员为空";
                isFull   = false;
            }
            #endregion
            步状态 status;
            if (enableEas && isAgain && isFull)
            {
                try
                {
                    var context = ErpLogin();
                    sessionId = context.sessionId;
                    var client = new Eas.ReceivingBillFacade.WSReceivingBillFacadeSrvProxyService
                    {
                        Timeout   = Settings.Default.Timeout,
                        SessionId = new SoapUnknownHeader {
                            Element = GetSessionHeader(sessionId)
                        }
                    };
                    if (sessionId != null)
                    {
                        result = client.importData(xml);
                    }
                    status = result.status ?  步状态.成功 :  步状态.失败;
                }
                catch (Exception e)
                {
                    result.message = e.Message;
                    result.status  = false;
                    status         = 步状态.失败;
                }
            }
            else
            {
                if (enableEas)
                {
                    result.message = isFull ? Model.EasConstant.EAS_WAIT : message;
                }
                else
                {
                    result.message = 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
            };
            //记录日志
            var sysno = WriteLog(datajson, resultData, watch, name, 接口类型.收款单据导入, warehouseSysNo, description, flowIdentify, voucherAmount, status, isAgain);
            easSysNo = sysno == 0 ? easSysNo : sysno;
            //临时记录 检查是否重复
            var content = " 订单编号:" + description + " 会话ID:" + sessionId + " 外部编号:" + data.thirdSysBillID + " 请求时间:" + billHead.lastUpdateTime +
                          " 返回结果:" + (result.status ? result.data : result.message) + " 返回状态:" + result.status + "," + result.statusCode + " ElapseTime:" + watch.ElapsedMilliseconds;
            WriteLog(easSysNo, content, billHead.createtime, isAgain);
            return(resultData);
        }