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 SendChargeRequestAsync(ChargeRequestPlugInsInput input) { var result = new ChargeRequestPlugInsOut(); return result; } public virtual async Task CancelChargeRequestAsync(ChargeRequestPlugInsInput input) { var result = new ChargeRequestPlugInsOut(); return result; } public virtual async Task RefundRequestAsync(ChargeRequestPlugInsInput input) { var result = new ChargeRequestPlugInsOut(); return result; } public async Task 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(sql, new { ChargeRequestId = chargeRequestId })).SingleOrDefault(); return patientRegisterForPlugIns; } } public async Task 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(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(sql, new { ChargeRequestId = chargeRequestId })).ToList(); return chargeRequestForPlugIns; } } public async Task> 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(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; } } }