using System; using System.Collections.Generic; using System.Linq; using MySystem.Models; using Library; using LitJson; using System.Text.RegularExpressions; using System.Threading; /// /// 更新签约码 /// namespace MySystem { public class UpdateSignUrlService { public readonly static UpdateSignUrlService Instance = new UpdateSignUrlService(); private UpdateSignUrlService() { } public void Start() { Thread th = new Thread(StartListen); th.IsBackground = true; th.Start(); } public void StartListen() { while (true) { string content = RedisDbconn.Instance.RPop("UpdateSignUrlQueue"); if (!string.IsNullOrEmpty(content)) { JsonData json = JsonMapper.ToObject(content); string result = UpdateSignUrl(int.Parse(json["MerchantId"].ToString()), int.Parse(json["Kind"].ToString())); if (result == "wait") { Thread.Sleep(10000); RedisDbconn.Instance.AddList("UpdateSignUrlQueue", content); } } else { Thread.Sleep(2000); } } } public string UpdateSignUrl(int MerchantId, int Kind) { try { WebCMSEntities db = new WebCMSEntities(); MerchantAddInfo AddInfo = db.MerchantAddInfo.FirstOrDefault(m => m.Id == MerchantId); MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == MerchantId); if (Kind == 1) //支付宝 { string content = AlipayFunction.Instance.GetBatchNo(AddInfo.IdCardName, AddInfo.MobilePhone, AddInfo.CreateMan); JsonData json = JsonMapper.ToObject(content); if (json["alipay_open_agent_create_response"]["code"].ToString() == "10000") { AddInfo.AlipayRemark = ""; AddInfo.QueryCount = 0; merchant.QueryCount = 0; db.SaveChanges(); string batch_no = json["alipay_open_agent_create_response"]["batch_no"].ToString(); string Qualifications = AddInfo.Qualifications; if (!string.IsNullOrEmpty(Qualifications)) { Qualifications = function.getPath("/" + Qualifications); } content = AlipayFunction.Instance.CommonSign(batch_no, AddInfo.UpdateMan, AddInfo.LicenseNumber, AddInfo.LicenseCopy, AddInfo.LicenseCopy, AddInfo.StoreEntrancePic, AddInfo.IndoorPic); json = JsonMapper.ToObject(content); if (json["alipay_open_agent_facetoface_sign_response"]["code"].ToString() == "10000") { content = AlipayFunction.Instance.AgentConfirm(batch_no); json = JsonMapper.ToObject(content); if (json["alipay_open_agent_confirm_response"]["code"].ToString() == "10000") { AddInfo.SeoTitle = batch_no; db.SaveChanges(); RedisDbconn.Instance.AddList("AlipaySignQueue", new MerchantSign() { BusinessCode = batch_no, MerchantAddInfoId = MerchantId, Status = "" }); } else { AddInfo.AlipayRemark = json["alipay_open_agent_confirm_response"]["sub_msg"].ToString(); AddInfo.QueryCount = -1; merchant.QueryCount = -1; db.SaveChanges(); } } else { AddInfo.AlipayRemark = json["alipay_open_agent_facetoface_sign_response"]["sub_msg"].ToString(); AddInfo.QueryCount = -1; merchant.QueryCount = -1; db.SaveChanges(); } } else { AddInfo.AlipayRemark = json["alipay_open_agent_create_response"]["sub_msg"].ToString(); AddInfo.QueryCount = -1; merchant.QueryCount = -1; db.SaveChanges(); } } if (Kind == 2) //微信 { string BusinessCode = AddInfo.BusinessCode; if (string.IsNullOrEmpty(BusinessCode)) { BusinessCode = "LKB" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(5); AddInfo.BusinessCode = BusinessCode; } string result = WeChatFunction.Instance.MerchantCreate(AddInfo, merchant); if (result.Contains("\"applyment_id\":")) { JsonData jsonObj = JsonMapper.ToObject(result); AddInfo.ApplymentId = jsonObj["applyment_id"].ToString(); AddInfo.WeChatRemark = ""; AddInfo.Status = 0; merchant.Status = 0; db.SaveChanges(); List signs = RedisDbconn.Instance.GetList("MerchantSignList", 1, 10000000); bool op = signs.Any(m => m.BusinessCode == BusinessCode); if (!op) { RedisDbconn.Instance.AddList("WeChatSignQueue", new MerchantSign() { BusinessCode = BusinessCode, MerchantAddInfoId = MerchantId, Status = "" }); } signs.Clear(); AddInfo.ApplymentId = AddInfo.ApplymentId; db.SaveChanges(); } else if (result.Contains("\"message\":")) { JsonData jsonObj = JsonMapper.ToObject(result); AddInfo.Status = -1; merchant.Status = -1; AddInfo.WeChatRemark = jsonObj["message"].ToString(); db.SaveChanges(); } } } catch (Exception ex) { LogHelper.Instance.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "更新签约码队列异常"); } return ""; } } }