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

225 lines
8.6 KiB

using Dapper;
using Npgsql;
using Shentun.Peis.Enums;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Shentun.Peis.PlugIns
{
public class ChargeRequestPlugInsBase : ThirdPlugInsBase
{
public ChargeRequestPlugInsBase(string parmValue) : base(parmValue)
{
}
public virtual async Task<ChargeRequestPlugInsOut> SendChargeRequestAsync(ChargeRequestPlugInsInput input)
{
var result = new ChargeRequestPlugInsOut();
return result;
}
public virtual async Task<ChargeRequestPlugInsOut> CancelChargeRequestAsync(ChargeRequestPlugInsInput input)
{
var result = new ChargeRequestPlugInsOut();
return result;
}
public virtual async Task<ChargeRequestPlugInsOut> RefundRequestAsync(ChargeRequestPlugInsInput input)
{
var result = new ChargeRequestPlugInsOut();
return result;
}
public async Task<PatientRegisterForPlugIns> GetPatientRegisterAsync(Guid chargeRequestId)
{
using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
{
string sql;
sql = @"SELECT DISTINCT patient.id as patient_id,
patient_register.id as patient_register_id,
patient_register.patient_register_no,
patient.patient_no ,
patient_register.his_patient_id,
patient_register.medical_center_id,
patient_register.patient_name,
patient_register.sex_id,
patient_register.marital_status_id,
patient_register.birth_date,
patient_register.age,
patient.nation_id,
patient.id_no,
patient.email,
patient.telephone,
patient.mobile_telephone,
patient.address
from patient,patient_register,charge_request
where patient.id = patient_register.patient_id and
patient_register.id = charge_request.patient_register_id and
charge_request.id =@ChargeRequestId
";
var patientRegisterForPlugIns = (await conn.QueryAsync<PatientRegisterForPlugIns>(sql,
new { ChargeRequestId = chargeRequestId })).SingleOrDefault();
return patientRegisterForPlugIns;
}
}
public async Task<ChargeRequestForPlugIns> GetChargeRequestAsync(Guid chargeRequestId)
{
using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
{
string sql;
sql = @"SELECT id as charge_request_id,
charge_request_no,
his_charge_no,
charge_request_flag,
concurrency_stamp
FROM charge_request
WHERE id =@ChargeRequestId
";
var chargeRequestForPlugIns = (await conn.QueryAsync<ChargeRequestForPlugIns>(sql,
new { ChargeRequestId = chargeRequestId })).SingleOrDefault();
if (chargeRequestForPlugIns == null)
{
return null;
}
sql = @"
SELECT register_check_asbitem.asbitem_id,
asbitem.display_name as asbitem_name,
register_check_asbitem.amount * register_check_asbitem.charge_price as charges,
register_check_asbitem.concurrency_stamp
from register_check
JOIN register_check_asbitem on register_check.id = register_check_asbitem.register_check_id
JOIN charge_request on register_check_asbitem.charge_request_id = charge_request.id
JOIN asbitem on register_check_asbitem.asbitem_id = asbitem.id
where
charge_request.id=@ChargeRequestId
";
chargeRequestForPlugIns.Asbitems = (await conn.QueryAsync<ChargeRequestAsbitemForPlugIns>(sql,
new { ChargeRequestId = chargeRequestId })).ToList();
return chargeRequestForPlugIns;
}
}
public async Task<List<ChargeRequestForPlugIns>> GetRequests(int days)
{
using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
{
string sql;
var startDate = DateTime.Now.Date.AddDays(-days);
sql = @"SELECT id as charge_request_id,
charge_request_no,
his_charge_no,
charge_request_flag,
concurrency_stamp
FROM charge_request
WHERE (charge_request_flag = '0' or
charge_request_flag = '2' or
charge_request_flag = '4')and
creation_time >@StartDate
";
var chargeRequestForPlugInss = (await conn.QueryAsync<ChargeRequestForPlugIns>(sql,
new { StartDate = startDate })).ToList();
return chargeRequestForPlugInss;
}
}
//public async Task CancelAppChargeRequestAsync(Guid chargeRequestId)
//{
// using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
// {
// string sql;
// sql = @" update charge_request set charge_request_flag = '2' where id = @ChargeRequestId
// ";
// conn.Execute(sql,
// new { ChargeRequestId = chargeRequestId });
// }
//}
//public async Task RefundAppChargeRequestAsync(Guid chargeRequestId)
//{
// using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
// {
// string sql;
// sql = @" update charge_request set charge_request_flag = '3' where id = @ChargeRequestId
// ";
// conn.Execute(sql,
// new { ChargeRequestId = chargeRequestId });
// }
//}
public async Task SetAppChargeRequestFlagAsync(ChargeRequestForPlugIns chargeRequestForPlugIns,
char chargeRequestFlag)
{
using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
{
//加ConcurrencyStamp,以防止并发
string sql;
sql = @" update charge_request set charge_request_flag =" + chargeRequestFlag +
@" where id = @ChargeRequestId and concurrency_stamp = @ConcurrencyStamp
";
conn.Execute(sql,
new { ChargeRequestId = chargeRequestForPlugIns.ChargeRequestId,
ConcurrencyStamp = chargeRequestForPlugIns.ConcurrencyStamp
});
foreach(var chargeRequestAsbitem in chargeRequestForPlugIns.Asbitems)
{
if (chargeRequestFlag == ChargeRequestFlag.AlreadyCharge)
{
sql = @" update register_check_asbitem set is_charge = 'Y'
where charge_request_id = @ChargeRequestId and concurrency_stamp = @ConcurrencyStamp
";
conn.Execute(sql,
new { ChargeRequestId = chargeRequestForPlugIns.ChargeRequestId,
ConcurrencyStamp = chargeRequestAsbitem.ConcurrencyStamp
});
}
else if (chargeRequestFlag == ChargeRequestFlag.AlreadyRefund)
{
sql = @" update register_check_asbitem set is_charge = 'N'
where charge_request_id = @ChargeRequestId and concurrency_stamp = @ConcurrencyStamp
";
conn.Execute(sql,
new
{
ChargeRequestId = chargeRequestForPlugIns.ChargeRequestId,
ConcurrencyStamp = chargeRequestAsbitem.ConcurrencyStamp
});
}
}
}
}
public virtual async Task SyncChargeRequestFlagFromInterfaceAsync(Guid chargeRequestId)
{
}
}
public class ChargeRequestPlugInsInput
{
public Guid ChargeRequestId { get; set; }
}
//public class ChargeRequestAsbitemPlugInsInput
//{
//}
public class ChargeRequestPlugInsOut
{
public string? ThirdChargeRequestId { get; set; }
}
}