You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

173 lines
8.1 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using DSWeb.Common.DB;
using DSWeb.Common.DbContexts;
using DSWeb.Common.DbContexts.Model;
using log4net;
using Newtonsoft.Json.Linq;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace DSWeb.Job.InsuranceTask
{
public class InsuranceTaskJob : IJob
{
private readonly ILog _logger = LogManager.GetLogger(typeof(InsuranceTaskJob));
public void Execute(IJobExecutionContext context)
{
_logger.Debug("调度执行...");
GetInsuranceState();
}
public void GetInsuranceState()
{
CommonDataContext commonData = new CommonDataContext();
string HTUrl = "";
string userKey = "";
var paraUrl = commonData.ParamSets.AsNoTracking().FirstOrDefault(p => p.PARAMNAME == "HuaiTaiInsuranceUrl");
if (paraUrl == null || string.IsNullOrEmpty(paraUrl.PARAMVALUE))
{
throw new Exception("华泰保险url配置有误请联系管理员");
}
HTUrl = paraUrl.PARAMVALUE;
if (!HTUrl.EndsWith("/"))
{
HTUrl = HTUrl + "/";
}
var paraUserKey = commonData.ParamSets.AsNoTracking().FirstOrDefault(p => p.PARAMNAME == "HuaiTaiInsuranceUserKey");
if (paraUserKey == null || string.IsNullOrEmpty(paraUserKey.PARAMVALUE))
{
throw new Exception("华泰保险用户KEY配置有误请联系管理员");
}
userKey = paraUserKey.PARAMVALUE;
OpSeaePxDbContenxt context = new OpSeaePxDbContenxt();
HttpClient httpclient = new HttpClient();
var lis = context.Insurance.Where(p => p.states != "保单生效" && p.states != "发送失败" && p.states != "已录入").ToList();
_logger.Debug("本次调度" + lis.Count() + "条记录");
foreach (var item in lis)
{
try
{
System.Threading.Tasks.Task<HttpResponseMessage> responseMessageState;
_logger.Debug($"调用流水号:{item.SerialNumber}");
responseMessageState = httpclient.GetAsync(HTUrl + "api/ApiInsurancePolicy/GetInsuranceState?apiUserKey=" + userKey + "&serialNumber=" + item.SerialNumber);
var resultState = responseMessageState.Result.Content.ReadAsStringAsync().Result;
_logger.Debug($"华泰返回:{resultState}");
var resultState_ = Newtonsoft.Json.JsonConvert.DeserializeObject(resultState);
var SendData = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(resultState_.ToString());
var rtnFlag = Convert.ToInt32(SendData["Flag"]);
_logger.Debug("返回状态:" + rtnFlag);
if (rtnFlag > 0)
{
InsuranceRider ride = new InsuranceRider();
ride.Rider = DateTime.Now;
item.PdfURL = SendData["PdfURL"].ToString();
item.InsuranceNumber = SendData["InsurancePolicy"].ToString();
item.TheBathNum = SendData.ToString().Contains("EdrPolicy") ? SendData["EdrPolicy"].ToString() : "";
item.states = "发送成功";
ride.Remark = "保单已提交";
if (rtnFlag == 1)
{
if (SendData["Premium"] != null && SendData["Premium"].ToString() != "")
{
item.Premium = Convert.ToDecimal(SendData["Premium"]);
}
item.states = "保单生效";
ride.Remark = "保单已生效";
}
if (rtnFlag == 2)
{
item.states = "人工核保";
ride.Remark = "正在人工核保";
}
if (rtnFlag == 3)
{
item.states = "核保通过待确认";
if (!string.IsNullOrEmpty(SendData["ChargeRate"].ToString()) && !string.IsNullOrEmpty(SendData["Premium"].ToString()) && !string.IsNullOrEmpty(SendData["ExchangeRate"].ToString()))
{
item.ChargeRate = System.Decimal.Round(Convert.ToDecimal(SendData["ChargeRate"]), 5);
item.SpecialAgreement = SendData["SpecialAgreement"].ToString();
item.Premium = System.Decimal.Round(Convert.ToDecimal(SendData["Premium"]), 5);
item.ExchangeRate = System.Decimal.Round(Convert.ToDecimal(SendData["ExchangeRate"]), 5);
_logger.Debug($"核保通过待确认:{item.ChargeRate}");
ride.Remark = "保单待确认,免赔声明更新,保费更新为" + System.Decimal.Round(Convert.ToDecimal(SendData["Premium"]), 5) + " 汇率更新为:" + System.Decimal.Round(Convert.ToDecimal(SendData["ExchangeRate"]), 5) + " 费率更新为万分之" + System.Decimal.Round(Convert.ToDecimal(SendData["ChargeRate"]) * 10000, 5);
}
var mianpeiContent = SendData["SpecialAgreement"].ToString();
item.MianPeiContent = mianpeiContent;
}
if (rtnFlag == 4)
{
item.states = "待确认";
ride.Remark = "保单待确认";
}
var log = context.InsuranceRider.Where(p => p.NID == item.GID).OrderByDescending(p => p.Rider).FirstOrDefault();
if (log.RiderState == item.states)
{
_logger.Debug(item.SerialNumber + "状态未改变," + item.states);
continue;
}
ride.RiderState = item.states;
ride.RiderAudit = "华泰保险";
ride.Gid = Guid.NewGuid().ToString();
ride.NID = item.GID;
context.InsuranceRider.Add(ride);
context.SaveChanges();
}
else
{
var backs = context.InsuranceBack.Where(p => p.NID == item.GID & p.BackCause == "保单生效").ToList();
var sids = context.InsuranceRider.Where(p => p.NID == item.GID & p.RiderState == "保单生效").ToList();
if (backs.Count() <= 0 || sids.Count() <= 0)
{
item.SerialNumber = "QDDJY" + DateTime.Now.ToString("yyyyMMddHHmmss") + DateTime.Now.Millisecond;
_logger.Debug("流水号已重新生成:" + item.SerialNumber);
}
item.states = "发送失败";
InsuranceBack back = new InsuranceBack();
back.BackTim = DateTime.Now;
back.BackCause = "驳回保单";
back.BackSide = "华泰保险";
back.Remark = SendData["Msg"].ToString();
back.Gid = Guid.NewGuid().ToString();
back.NID = item.GID;
context.InsuranceBack.Add(back);
context.SaveChanges();
}
_logger.Debug(item.SerialNumber + "执行完成," + item.states);
}
catch (Exception ex)
{
_logger.Debug("error" + ex.Message.ToString()+" 流水号:"+item.SerialNumber);
continue;
}
}
}
}
}