Esempio n. 1
0
        /// <summary>
        /// 更新tcardlog日志
        /// </summary>
        /// <param name="tcardlog"></param>
        /// <returns></returns>
        public async Task <int> InsertCardLogAsync(tcardlog tcardlog)
        {
            const string sql = @"insert INTO public.tcardlog(pkid,fcode,fid,fcreatetime,flng,flat,ftype)values(@pkid,@fcode,@fid,@fcreatetime,@flng,@flat,@ftype)";

            return(await ExecuteEntityAsync(sql, tcardlog));
        }
Esempio n. 2
0
        /// <summary>
        /// TODO Mqtt回调消息处理
        /// </summary>
        /// <param name="received"></param>
        /// <returns></returns>
        public async Task MqttMessageReceivedAsync(MqttMessageReceived received)
        {
            if (!string.IsNullOrEmpty(received.Payload) && received.Payload != "close" && !string.IsNullOrEmpty(received.Topic) && received.Topic == "cnc_sbm/gps_card")
            {
                try
                {
                    var mqttMessage = JsonConvert.DeserializeObject <MqttMessage>(received.Payload);
                    if (int.TryParse(mqttMessage.card_num, out var cardnum) && cardnum > 0)
                    {
                        decimal.TryParse(mqttMessage.jd, out var jd);
                        decimal.TryParse(mqttMessage.wd, out var wd);
                        int.TryParse(mqttMessage.sxc_zt, out var sxcZt);
                        var cardList = mqttMessage.card_list;
                        if (cardList != null && cardList.Count > 0)
                        {
                            #region 记录打卡位置和实时位置
                            var map         = new Dictionary <string, string>();
                            var cardLogList = new List <tcardlog>();
                            foreach (var cardid in cardList)
                            {
                                //await _chatHub.Clients.Group(cardid).SendAsync("ReceiveMessage", jd, wd);
                                await _chatHub.Clients.Group("3603631297").SendAsync("ReceiveMessage", jd, wd);

                                var tcardlog = new tcardlog
                                {
                                    pkid        = Guid.NewGuid().ToString("N"),
                                    fcreatetime = DateTime.Now,
                                    fcode       = mqttMessage.dev_id,
                                    fid         = cardid,
                                    flng        = jd,
                                    flat        = wd,
                                    ftype       = sxcZt
                                };
                                cardLogList.Add(tcardlog);
                                map.TryAdd(cardid, tcardlog.pkid);
                            }

                            if (cardLogList.Count == 1)
                            {
                                await _schoolBusRepository.InsertCardLogAsync(cardLogList.First());
                            }
                            else
                            {
                                await _schoolBusRepository.InsertCardLogListAsync(cardLogList);
                            }
                            await _schoolBusRepository.InsertLocatelogAsync(new tlocatelog { fcreatetime = DateTime.Now, fcode = mqttMessage.dev_id, flng = jd, flat = wd });

                            #endregion

                            #region 推送模板消息和日志
                            var sb = new StringBuilder("SELECT tcard.fname as fname,twxuser.fwxid as fwxid,tdevice.fplatenumber as fplatenumber,tdevice.fdriver,tdevice.fdriverphone,tcard.fid,");
                            sb.Append("case when(tcard.ftrialdate >= now() or (SELECT count(1) FROM tterm INNER JOIN ttermpay ON ttermpay.fk_term_id = tterm.pkid ");
                            // 是否服务判断,未在试用期和付费用户只推送一条上车消息
                            sb.Append("where ttermpay.fcode = tcard.fcode and tterm.fstartdate <= now() and tterm.fenddate >= now()) > 0)");
                            sb.Append("then 1 else 0 end as paystate,");
                            // 判断当天是否推送过消息判断
                            sb.Append("(select count(1) from twxpushlog where twxpushlog.fwxid = twxuser.fwxid and ");
                            sb.Append("to_char(twxpushlog.fcreatetime, 'yyyy-mm-dd') = to_char(now(), 'yyyy-mm-dd')) as wxmsgcount ");
                            sb.Append("FROM tcard LEFT JOIN twxuser ON twxuser.fk_card_id = tcard.pkid LEFT JOIN tdevice ON tdevice.fcode = '" + mqttMessage.dev_id + "' and tdevice.fstate = 0 ");
                            // 2019年3月7日 填加试用和付款筛选 去掉筛选
                            sb.Append("WHERE tcard.fstatus in (0,1) and tcard.fid IN ( '" + cardList[0] + "'");
                            for (var i = 1; i < cardList.Count; i++)
                            {
                                sb.Append(",'" + cardList[i] + "'");
                            }
                            sb.Append(")");

                            var twxpushlogs = new List <twxpushlog>();
                            // 查询系统微信绑定卡记录
                            var userList = await _schoolBusRepository.GetUserBindCardAsync(sb.ToString());

                            foreach (var user in userList)
                            {
                                // paystate:1 付款用户,非付款用户 每天第一次上车 推送一条消息
                                if (user.paystate != 1 && (!int.TryParse(mqttMessage.sxc_zt, out var sxc) || sxc != 1 || user.wxmsgcount != 0))
                                {
                                    continue;
                                }

                                twxpushlogs.Add(new twxpushlog
                                {
                                    fk_id       = map.GetValueOrDefault(user.fid),
                                    fcreatetime = DateTime.Now,
                                    fwxid       = user.fwxid,
                                    fstate      = 1,
                                    fmsg        = "微信id:" + _option.WxOption.WXConfigName + ",模板id:" + _option.WxOption.TemplateId
                                });

                                #region 发送模板消息

#if !DEBUG
                                const string remk       = "\r\n鲸卫士全面上线,关注学生安全,鲸卫士让您实时了解孩子行程!";
                                string       url        = _option.WxOption.Domainnames + "SchoolBus/GoAddress?showType=0&cardLogId=" + map.GetValueOrDefault(user.fid);
                                const string openid     = "ovzSu1Ux_R10fGTWCEawfdVADSy8"; //user.fwxid
                                var          schoolData = new
                                {
                                    first    = new TemplateDataItem("点击查看刷卡位置", "#000000"),
                                    keyword1 = new TemplateDataItem(user.fname, "#000000"),
                                    keyword2 = new TemplateDataItem(DateTime.Now.ToString("HH:mm"), "#000000"),
                                    keyword3 = new TemplateDataItem(user.fplatenumber, "#000000"),
                                    remark   = new TemplateDataItem(remk, "#ff0000")
                                };
                                await Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessageAsync(Senparc.Weixin.Config.SenparcWeixinSetting.WeixinAppId, openid, _option.WxOption.TemplateId, url, schoolData, null);
#endif
                                #endregion
                            }
                            await _schoolBusRepository.InsertWXpushlogListAsync(twxpushlogs);

                            #endregion
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
        }