コード例 #1
0
ファイル: NoticeService.cs プロジェクト: amwtke/bkwecaht
        private void init()
        {
            _redis = new RedisManager2<WeChatRedisConfig>();
            MQManager.RegisterConsumerProcessor<NoticeMQConfig>(async delegate (BasicDeliverEventArgs ar, IModel channel)
            {
                try
                {
                    var rawObject = BinarySerializationHelper.DeserializeObject(ar.Body) as NoticeMQ;


                    var iso = new IsoDateTimeConverter();
                    iso.DateTimeFormat = "yyyy-MM-dd HH:mm:ss.fff";

                    if(rawObject.Id == 0)
                    {
                        //放入sqlserver 
                        rawObject.Id = await NoticeHelper.SaveNoticeToSql(rawObject);
                        if(rawObject.Id != 0)
                        {
                            //收信人的未读列表加1
                            await NoticeRedisOp.AddUnreadScore(rawObject.Receiver_Uuid, 1);
                            //放入redis
                            try
                            {
                                WeChatNoticeRedis redisObject = new WeChatNoticeRedis();
                                redisObject.Uuid = rawObject.Receiver_Uuid.ToString();
                                redisObject.Message = JsonConvert.SerializeObject(rawObject, iso);
                                //redisObject.Message = BinarySerializationHelper.BytesToHexString(
                                //    BinarySerializationHelper.SerializeObject(rawObject));
                                await _redis.SaveObjectAsync(redisObject);
                            }
                            catch(Exception ex)
                            {
                                LogHelper.LogErrorAsync(typeof(NoticeService), ex);
                            }
                        }
                    }
                    else
                    {
                        //按照id修改sqlserver
                        await NoticeHelper.SaveNoticeToSql(rawObject);
                        //按照id修改redis
                        try
                        {
                            WeChatNoticeRedis redisObject = new WeChatNoticeRedis();
                            redisObject.Uuid = rawObject.Receiver_Uuid.ToString();
                            redisObject.Message = JsonConvert.SerializeObject(rawObject, iso);
                            //redisObject.Message = BinarySerializationHelper.BytesToHexString(
                            //    BinarySerializationHelper.SerializeObject(rawObject));

                            rawObject.status = 0;
                            WeChatNoticeRedis originalRedisObject = new WeChatNoticeRedis();
                            originalRedisObject.Uuid = rawObject.Receiver_Uuid.ToString();
                            originalRedisObject.Message = JsonConvert.SerializeObject(rawObject, iso);
                            //originalRedisObject.Message = BinarySerializationHelper.BytesToHexString(
                            //    BinarySerializationHelper.SerializeObject(rawObject));

                            if(!await _redis.ReplaceObjectInListAsync(redisObject, originalRedisObject))
                                LogHelper.LogInfoAsync(typeof(NoticeService), "替换失败");
                        }
                        catch(Exception ex)
                        {
                            LogHelper.LogErrorAsync(typeof(NoticeService), ex);
                        }
                    }

                }
                catch (Exception ex)
                {
                    LogHelper.LogErrorAsync(typeof(NoticeService), ex);

                    //TODO:错误处理
                }
                finally
                {
                    channel.BasicAck(ar.DeliveryTag, false);
                    System.Threading.Thread.Sleep(1);
                }
            });

            MQManager.Prepare_All_C_MQ();
        }
コード例 #2
0
ファイル: NoticeController.cs プロジェクト: amwtke/bkwecaht
        public async Task<HttpResponseMessage> PostAddContact([FromBody]DualParameter postParameter)
        {
            string openid = postParameter.openID;
            long itemId = postParameter.itemId;

            using(NoticeRepository noticeRepository = new NoticeRepository())
            {
                Message m = await noticeRepository.GetNotice(itemId);

                NoticeMQ rawObject = new NoticeMQ();
                rawObject.Id = m.ID;
                rawObject.MsgType = NoticeType.Contact_Request;
                rawObject.Relation_Uuid = m.RelationID_uuid;
                rawObject.Receiver_Uuid = m.Receiver_uuid;
                rawObject.PayLoad = m.MessageInfo;
                //改了
                rawObject.status = 1;
                rawObject.TimeStamp = m.SendTime;

                var iso = new IsoDateTimeConverter();
                iso.DateTimeFormat = "yyyy-MM-dd HH:mm:ss.fff";

                RedisManager2<WeChatRedisConfig> _redis = new RedisManager2<WeChatRedisConfig>();
                WeChatNoticeRedis redisObject = new WeChatNoticeRedis();
                redisObject.Uuid = rawObject.Receiver_Uuid.ToString();
                redisObject.Message = JsonConvert.SerializeObject(rawObject, iso);
                //改回
                rawObject.status = 0;
                rawObject.TimeStamp = DateTime.Now;
                WeChatNoticeRedis originalRedisObject = new WeChatNoticeRedis();
                originalRedisObject.Uuid = rawObject.Receiver_Uuid.ToString();
                originalRedisObject.Message = JsonConvert.SerializeObject(rawObject, iso);

                await _redis.ReplaceObjectInListAsync(redisObject, originalRedisObject);
                return WebApiHelper.HttpRMtoJson(null, HttpStatusCode.OK, customStatus.Fail);
            }
        }