string conn = "data source=.;initial catalog=sjj;integrated security=True";
PopupWindow pcwin = new PopupWindow();
pcwin.ShowOnPageLoad = true;
// try
//{
Worksheet worksheet_jskc, worksheet_kcjs;//教师课程,课程节数
string filePath = sjklj.tb_wj.First().wjm;
if (string.IsNullOrWhiteSpace(filePath))
{
pcwin.Text = "请先上传已经设置好的采购可替代药品excel文件";
ASPxPopupControl1.Windows.Add(pcwin);
return;
}
this.ASPxSpreadsheet1.Open(filePath);
worksheet_jskc = this.ASPxSpreadsheet1.Document.Worksheets[0];//教师课程
//先更新班级表中的bjunit中的班主任和联系方式,可以根据njid,限定最多100个班级,15个学科
//先依次把bjunit填充剩下的:yhid,lxfs,bzr
//往tb_kcjs中添加数据,先清空数据对应yhid njid
var cx_kcjs = from aa in sjklj.采购可替代药品
select aa;
foreach (var kk in cx_kcjs)
{
// sjklj.重复收费9.Remove(kk);
// sjklj.Entry(kk).State = System.Data.Entity.EntityState.Deleted;
string cmdtxt = "DELETE FROM 采购可替代药品 where ID=@id";
SqlParameter cs1 = new SqlParameter("@id", kk.ID);
SqlParameter[] cs = new SqlParameter[] { cs1 };
bool tjjg = gj.sqltjscgx(conn, cmdtxt, cs);
if (!tjjg)//更新失败
{
pcwin.Text = "删除采购可替代药品失败";
this.ASPxPopupControl1.Windows.Add(pcwin);
return;
}
}
// sjklj.SaveChanges();//超大批量数据的更新,删除和添加,用SQL语句,速度很快;逐条添加,修改,删除;非linq,否则可能死机而且速度很慢,看不到进展。用SQL可以了解数据库动态
System.Threading.Thread.Sleep(100);
for (int i = 2; i <= 131; i++) //i:班级
{
try
{
string 区域= string.IsNullOrWhiteSpace(worksheet_jskc.Cells["A" + i.ToString()].Value.ToString()) ? "" : worksheet_jskc.Cells["A" + i.ToString()].Value.ToString().Trim();
//收费项目 = 收费项目.Replace("\"", "").Replace("“", "").Replace("'", "").Replace("”", "").Replace(" ", "").Replace(",", ",");
// string 规范收费项目 = 收费项目.Split('-')[2];
string 审计医疗机构名= string.IsNullOrWhiteSpace(worksheet_jskc.Cells["B" + i.ToString()].Value.ToString()) ? "" : worksheet_jskc.Cells["B" + i.ToString()].Value.ToString().Trim();
string 购买总量2020年= string.IsNullOrWhiteSpace(worksheet_jskc.Cells["C" + i.ToString()].Value.ToString()) ? "" : worksheet_jskc.Cells["C" + i.ToString()].Value.ToString().Trim();
string 总价2020年= string.IsNullOrWhiteSpace(worksheet_jskc.Cells["D" + i.ToString()].Value.ToString()) ? "" : worksheet_jskc.Cells["D" + i.ToString()].Value.ToString().Trim();
string 购买总量2021年= string.IsNullOrWhiteSpace(worksheet_jskc.Cells["E" + i.ToString()].Value.ToString()) ? "" : worksheet_jskc.Cells["E" + i.ToString()].Value.ToString().Trim();
string 总价2021年= string.IsNullOrWhiteSpace(worksheet_jskc.Cells["F" + i.ToString()].Value.ToString()) ? "" : worksheet_jskc.Cells["F" + i.ToString()].Value.ToString().Trim();
string 购买总量2022年= string.IsNullOrWhiteSpace(worksheet_jskc.Cells["G" + i.ToString()].Value.ToString()) ? "" : worksheet_jskc.Cells["G" + i.ToString()].Value.ToString().Trim();
string 总价2022年= string.IsNullOrWhiteSpace(worksheet_jskc.Cells["H" + i.ToString()].Value.ToString()) ? "" : worksheet_jskc.Cells["H" + i.ToString()].Value.ToString().Trim();
string 购买总量2023年= string.IsNullOrWhiteSpace(worksheet_jskc.Cells["I" + i.ToString()].Value.ToString()) ? "" : worksheet_jskc.Cells["I" + i.ToString()].Value.ToString().Trim();
string 总价2023年= string.IsNullOrWhiteSpace(worksheet_jskc.Cells["J" + i.ToString()].Value.ToString()) ? "" : worksheet_jskc.Cells["J" + i.ToString()].Value.ToString().Trim();
string 可替代药交所产品名称 = string.IsNullOrWhiteSpace(worksheet_jskc.Cells["K" + i.ToString()].Value.ToString()) ? "" : worksheet_jskc.Cells["K" + i.ToString()].Value.ToString().Trim();
int 购买总量2020年n = 购买总量2020年.Length > 0 ? int.Parse(购买总量2020年) : 0;
int 购买总量2021年n = 购买总量2021年.Length > 0 ? int.Parse(购买总量2021年) : 0;
int 购买总量2022年n = 购买总量2022年.Length > 0 ? int.Parse(购买总量2022年) : 0;
int 购买总量2023年n = 购买总量2023年.Length > 0 ? int.Parse(购买总量2023年) : 0;
double 总价2020年n = 总价2020年.Length > 0 ? Math.Round(double.Parse(总价2020年), 2) : 0;
double 总价2021年n = 总价2021年.Length > 0 ? Math.Round(double.Parse(总价2021年), 2) : 0;
double 总价2022年n = 总价2022年.Length > 0 ? Math.Round(double.Parse(总价2022年), 2) : 0;
double 总价2023年n = 总价2023年.Length > 0 ? Math.Round(double.Parse(总价2023年), 2) : 0;
//添加记录 数据表名称最前面不能包含数据库名称,否则无法加入 例如:数据库sjj 数据表名称:sjjly
string cmdtxt = "INSERT INTO 采购可替代药品 (区域,审计医疗机构名,购买总量2020年,总价2020年,购买总量2021年,总价2021年,购买总量2022年,总价2022年,购买总量2023年,总价2023年,可替代药交所产品名称) " +
"VALUES(@区域,@审计医疗机构名,@购买总量2020年,@总价2020年,@购买总量2021年,@总价2021年,@购买总量2022年,@总价2022年,@购买总量2023年,@总价2023年,@可替代药交所产品名称)";
SqlParameter cs1 = new SqlParameter("@区域", 区域);
SqlParameter cs2 = new SqlParameter("@审计医疗机构名", 审计医疗机构名);
SqlParameter cs3 = new SqlParameter("@购买总量2020年", 购买总量2020年n);
SqlParameter cs4 = new SqlParameter("@总价2020年", 总价2020年n);
SqlParameter cs5 = new SqlParameter("@购买总量2021年", 购买总量2021年n);
SqlParameter cs6 = new SqlParameter("@总价2021年", 总价2021年n);
SqlParameter cs7 = new SqlParameter("@购买总量2022年", 购买总量2022年n);
SqlParameter cs8 = new SqlParameter("@总价2022年", 总价2022年n);
SqlParameter cs9 = new SqlParameter("@购买总量2023年", 购买总量2023年n);
SqlParameter cs10 = new SqlParameter("@总价2023年", 总价2023年n);
SqlParameter cs11 = new SqlParameter("@可替代药交所产品名称", 可替代药交所产品名称);
SqlParameter[] cs = new SqlParameter[] { cs1, cs2, cs3, cs4, cs5, cs6, cs7, cs8, cs9,cs10,cs11 };
bool tjjg = gj.sqltjscgx(conn, cmdtxt, cs);
if (!tjjg)//更新失败
{
pcwin.Text = "添加采购可替代药品失败";
this.ASPxPopupControl1.Windows.Add(pcwin);
return;
}
// sjklj.tb_yjs_gx.Add(tj_tb_yjs);//超大数据量,特别是5万条以上,采用Linq批量添加和删除都不可取,很慢还容易崩溃
}
catch
{
// pcwin.Text = "药交所数据导入成功,请进行数据处理:"+i;
// ASPxPopupControl1.Windows.Add(pcwin);实际上日期转换没有问题,但是可能不用try-cach可能出错
}
}
// sjklj.SaveChanges();//这里保存一次,下面才能够查询得到
//后续tb_kcjs中加入优先级和上课节数,同时整合数据到course和courseinbj-处理中
pcwin.Text = "采购可替代药品数据导入成功,请进行数据处理";
ASPxPopupControl1.Windows.Add(pcwin);
return;
}
protected void ASPxButton_fx_ktdy_Click(object sender, EventArgs e)
{
string conn = "data source=.;initial catalog=sjj;integrated security=True";
PopupWindow pcwin = new PopupWindow();
pcwin.ShowOnPageLoad = true;
//先删除重复收费9统计的数据
var cx_kcjs = from aa in sjklj.可替代药品统计
select aa;
string cmdtxt = "DELETE FROM 可替代药品统计 where ID=@id";
foreach (var kk in cx_kcjs)
{
// sjklj.重复收费9.Remove(kk);
// sjklj.Entry(kk).State = System.Data.Entity.EntityState.Deleted;
SqlParameter cs1 = new SqlParameter("@id", kk.ID);
SqlParameter[] cs = new SqlParameter[] { cs1 };
bool tjjg = gj.sqltjscgx(conn, cmdtxt, cs);
if (!tjjg)//更新失败
{
pcwin.Text = "删除可替代药品统计失败";
this.ASPxPopupControl1.Windows.Add(pcwin);
return;
}
}
//按照医疗机构和规范医保项目名称进行分组统计的结果放入另外一个数据表中,因为:收费项目名称中要
// var cx_ckmc=from aa in sjklj.出库名称
var cx_cfsf = from aa in sjklj.采购可替代药品
where aa.审计医疗机构名 != null
group aa by aa.审计医疗机构名
into gg
select gg;
foreach (var kk in cx_cfsf)
{
//收费项目名称中有括号,无括号有其他字符的与规范医保项目名称比较
//没有处理全角的括号
string 区域 = kk.FirstOrDefault().区域;
string 医院 = kk.Key;
string 种类数 = kk.Select(aa => aa.可替代药交所产品名称).Distinct().Count().ToString();
double 总数量 = Math.Round((double)kk.Sum(aa => aa.购买总量2021年+aa.购买总量2022年+aa.购买总量2023年), 2);
double 总金额 = Math.Round((double)kk.Sum(aa => aa.总价2021年 + aa.总价2022年 + aa.总价2023年), 2);
double 总数量2020 = Math.Round((double)kk.Sum(aa => aa.购买总量2020年), 2);
double 总金额2020 = Math.Round((double)kk.Sum(aa => aa.总价2020年), 2);
double 增加数量 = 总数量 - 总数量2020;
double 增加金额 = 总金额 - 总金额2020;
string 总数量s=Math.Round(总数量/10000,2).ToString()+"万";
string 总金额s = Math.Round(总金额 / 10000, 2).ToString() + "万";
string 增加数量s = Math.Round(增加数量 / 10000, 2).ToString() + "万";
string 增加金额s = Math.Round(增加金额 / 10000, 2).ToString() + "万";
cmdtxt = "INSERT INTO 可替代药品统计 (区域,医院,种类数,总数量,总金额,增加数量,增加金额) " +
"VALUES(@区域,@医院,@种类数,@总数量,@总金额,@增加数量,@增加金额)";
SqlParameter cs1 = new SqlParameter("@区域", 区域);
SqlParameter cs2 = new SqlParameter("@医院", 医院);
SqlParameter cs3 = new SqlParameter("@种类数", 种类数);
SqlParameter cs4 = new SqlParameter("@总数量", 总数量s);
SqlParameter cs5 = new SqlParameter("@总金额", 总金额s);
SqlParameter cs6 = new SqlParameter("@增加数量", 增加数量s);
SqlParameter cs7 = new SqlParameter("@增加金额", 增加金额s);
SqlParameter[] cs = new SqlParameter[] { cs1, cs2, cs3, cs4, cs5,cs6,cs7 };
bool tjjg = gj.sqltjscgx(conn, cmdtxt, cs);
if (!tjjg)//更新失败
{
pcwin.Text = "添加可替代药品统计失败";
this.ASPxPopupControl1.Windows.Add(pcwin);
return;
}
}
pcwin.Text = "添加可替代药品统计成功,请导出分析结果";
this.ASPxPopupControl1.Windows.Add(pcwin);
|