Esempio n. 1
0
        /// <summary>
        /// 更新签核记录标记
        /// </summary>
        /// <param name="item"></param>
        /// <param name="tag"></param>
        /// <returns></returns>
        public bool IsUpdateTags(int item, int tag)
        {
            using (var _context = BaseUtility.ContextFactory.ContextHelper)
            {
                try
                {
                    FormSign formSign = _context.FormSigns.Find(item);
                    formSign.Tag = tag;

                    _context.Entry(formSign).State = EntityState.Modified;

                    return(_context.SaveChanges() > 0);
                }
                catch
                {
                    return(false);
                }
            }
        }
Esempio n. 2
0
        public ContentResult Pay(string Id,
                                 [FromServices] SessionManagerService sessionManager,
                                 [FromServices] OperationManagerService operationManager,
                                 [FromServices] FormManagerService formManager,
                                 [FromServices] PaymentSystemContext dbContext,
                                 [FromServices] FormDataCryptService cryptService)
        {
            try
            {
                var session = sessionManager.Get(Id);
                if (session.SessionType != SessionType.OneStep && session.SessionType != SessionType.TwoStep)
                {
                    return(base.Content(formManager.GetErrorForm()));
                }
                var result     = operationManager.CheckPaymentPossibility(session);
                var dictionary = new Dictionary <string, string>();
                switch (result)
                {
                case PaymentPossibility.LimitExceeded:
                case PaymentPossibility.SessionExpired:
                    return(base.Content(formManager.GetErrorForm()));

                case PaymentPossibility.AlreadyPaid:
                    return(base.Content(formManager.GetSuccessForm()));

                default:
                    var generationTime = DateTime.UtcNow;
                    session.LastFormGenerationTime = generationTime;
                    session.TryCount++;
                    dbContext.SaveChanges();
                    var formSign = new FormSign {
                        GenerationTime = generationTime, SessionId = session.Id
                    };
                    dictionary.Add("sessionId", session.ExternalId);
                    dictionary.Add("code", cryptService.Crypt(formSign));
                    return(base.Content(formManager.GetPaymentForm(dictionary)));
                }
            }
            catch (Exception)
            {
                return(base.Content(formManager.GetErrorForm()));
            }
        }
        public string Crypt(FormSign formSign)
        {
            var plainData = JsonConvert.SerializeObject(formSign);

            return(CryptHelper.Encrypt(plainData, _secret));
        }
Esempio n. 4
0
        /// <summary>
        ///  //0:失败 //1:成功 //2签核完成
        /// </summary>
        /// <param name="formNo"></param>
        /// <param name="item"></param>
        /// <param name="empNo"></param>
        /// <param name="nextEmpNo"></param>
        /// <param name="sourceEmpNo"></param>
        /// <param name="func"></param>
        /// <returns></returns>
        public bool Agree(string formNo, int item, string empNo, out string nextEmpNo, out string sourceEmpNo, Func <string, string, int, bool> func)
        {
            nextEmpNo   = null;
            sourceEmpNo = null;

            using (var context = BaseUtility.ContextFactory.ContextHelper)
            {
                try
                {
                    //如果被签记录号为0,则手动查找记录号
                    if (item == 0)
                    {
                        item = context.FormSigns.Single(c => c.FormNo == formNo && c.SignResult == (int)FormSign.SignResultEnum.Watting).RowId;
                    }

                    //确认记录是否存在
                    if (context.FormSigns.Single(c => c.FormNo == formNo && c.RowId == item && c.SignResult == (int)FormSign.SignResultEnum.Watting) == null)
                    {
                        return(false);
                    }

                    //将记录更改为签核完成
                    var signs = context.FormSigns.Where(c => c.FormNo == formNo && c.SignResult == (int)FormSign.SignResultEnum.Watting).ToList();

                    signs.ForEach(d => { d.SignResult = (int)FormSign.SignResultEnum.Agree; d.ActualSignEmpNo = empNo; d.SignTime = DateTime.Now; });

                    //查找表单实体
                    var formModel = context.Forms.Find(formNo);
                    //查找还未产生的签核人
                    var noCheck = formModel.SignPath.Split(',').ToList();
                    noCheck.RemoveAll(string.IsNullOrEmpty);

                    //还未产生的签核人
                    if (noCheck.Count > 0)
                    {
                        FormSign sign = (noCheck.First().Substring(0, 1) == "@")
                            ? new FormSign()
                        {
                            FormNo       = formNo,
                            SignEmpNo    = noCheck.First().Substring(1),
                            SourceType   = (int)FormSign.SourceTypeEnum.AddAfter,
                            SourceEmpNo  = formModel.SourceEmpNo,
                            SourceReason = formModel.Reason,
                            CreateTime   = DateTime.Now,
                            Grade        = 0,
                            Tag          = 0,
                            IsDel        = false,
                        }
                            : new FormSign()
                        {
                            FormNo = formNo, SignEmpNo = noCheck.First(), SourceType = (int)FormSign.SourceTypeEnum.Auto, CreateTime = DateTime.Now, Grade = 0, Tag = 0, IsDel = false,
                        };
                        context.FormSigns.Add(sign);

                        //下位签核人
                        nextEmpNo = sign.SignEmpNo;

                        //重组未签核顺序
                        noCheck.Remove(noCheck.First());
                        var sb = new StringBuilder();
                        noCheck.ForEach(k => sb.Append(k + ","));

                        formModel.SignPath    = sb.ToString();
                        formModel.SourceEmpNo = null;
                        formModel.Reason      = null;

                        context.Entry(formModel).State = EntityState.Modified;
                        context.SaveChanges();

                        sourceEmpNo = sign.SourceEmpNo;

                        return(true);
                    }
                    //没有签核人啦,将表单状态改为签核完成
                    //结案表单

                    if (!func(formNo, empNo, item))
                    {
                        return(false);
                    }
                    //签核完成
                    formModel.FormStatus = (int)Form.StatusEnum.签核完成;
                    formModel.CloseTime  = DateTime.Now;
                    context.SaveChanges();
                    return(true);
                }
                catch (Exception exception)
                {
                    Console.Write(exception.Message);
                    return(false);
                }
            }
        }