functionProhibitNumbers(datetype,startdate,enddate,org,pageindex,pagesize) {//违规检查-数量控制 ProhibitNumbers('','','','',1,5)
//查询违规收费对应的DictID
var DictID=db.Dict.find({$and:[{DictName:"违规检查"},{value:"数量控制"}]},{ID:1,_id:0}).toArray()[0].ID;//根据字典ID查询对应的RuleID
var RuleIDs=db.CheckRules.aggregate(
{"$match" : {"DictID":DictID,"RuleValueLow":{"$in":["每日","全期","首日"]}} },
{"$group":{ "_id" :"$DictID","RuleIDs":{"$push":"$ID"}
}
}
).result[0].RuleIDs;//根据规则ID查询对应的Pcode
var Codes=db.CheckItems.aggregate(
{"$match" : {"DictID":DictID,"CheckRuleID":{"$in":RuleIDs}} },
{"$group":{ "_id" :{"DictID":"$DictID","RuleID":"$CheckRuleID","Code":"$StdCode"}
}
}
).result;//创建一个数组,用来存放违反规则的数据(该数据只包含id、pcode)
var myResult={};
myResult.result=newArray();//遍历Pcode,以对"全期","首日","每日"分别进行判断
var res=Codes.forEach(function(d){//根据规则id查找rule表中的RuleValueHigh、RuleValueLow
var m=db.CheckRules.find({"ID":d._id.RuleID},{"RuleValueHigh":1,"RuleValueLow":1,"_id":0}).toArray()[0];
d.Alimit=m.RuleValueLow;
d.AValue=parseFloat(m.RuleValueHigh);switch(d.Alimit)
{//查找每个患者每次住院首日出现的次数超过d.AValue的数据
case "首日":var n=db.Detail.aggregate(
{"$unwind" : "$Report"},
{"$match" : {"Report.PCode":d._id.Code} },
{"$group":{"_id":{"ID":"$_id","PCode":"$Report.PCode"},"sum_Amount":{"$first":"$Report.Amount"}
}
},
{"$match" : {"sum_Amount":{$gt:d.AValue}} }
);
d.Info=n.result;break;//查找每个患者每次住院的每个日期出现的总次数超过d.AValue的数据
case "每日":var n=db.Detail.aggregate(
{"$unwind" : "$Report"},
{"$match" : {"Report.PCode":d._id.Code} },
{"$group":{"_id":{"ID":"$_id","PCode":"$Report.PCode","PDate":"$Report.PDate"},"sum_Amount":{"$sum":"$Report.Amount"}
}
},
{"$match" : {"sum_Amount":{$gt:d.AValue}} }
);
d.Info=n.result;break;//查找每个患者每次住院的出现的总次数超过d.AValue的数据
case "全期":var n=db.Detail.aggregate(
{"$unwind" : "$Report"},
{"$match" : {"Report.PCode":d._id.Code} },
{"$group":{"_id":{"ID":"$_id","PCode":"$Report.PCode"},"sum_Amount":{"$sum":"$Report.Amount"}
}
},
{"$match" : {"sum_Amount":{$gt:d.AValue}} }
);
d.Info=n.result;break;
}//将违规的数据插入到一个全局数组里
if(d.Info.length!=0)
{
myResult.result.push({"CodeReport":d.Info[0]});
}
}
)//用来存放更详细的违规数据
var myResult2={};
myResult2.result=newArray();//对上面查找出来的违规数据(只包含id和pcode)进行遍历,根据其id和pcode匹配查找更详细的数据
myResult.result.forEach(function(d){var r=db.Detail.aggregate(
{"$unwind" : "$Report"},
{"$match" : {"_id":d.CodeReport._id.ID,"Report.PCode":d.CodeReport._id.PCode} },
{"$group":{"_id":{"ID":"$_id","Number":"$Info.Number","Name":"$Patient.Name","Sex":"$Patient.Sex","Birth":"$Patient.Birth","PDate":"$Report.PDate","PCode":"$Report.PCode","Price":"$Report.Price","Amount":"$Report.Amount","Total":"$Report.Total","OrgCode":"$Org.Code"}
}
}
).result;//遍历查找到的详细违规数据,分别将其插入到一个全局的数组myResult2里
r.forEach(function(b){
myResult2.result.push(b);
});
});
myResult2.count=myResult2.result.length;//创建一个数组,以存放符合分页条件的数据
var myResult3={};
myResult3.result=newArray();
myResult3.count=myResult2.count;var count=parseInt(myResult3.count);for(var i=(pageindex-1)*pagesize;i
{if(i==count) break;
myResult3.result.push(myResult2.result[i]);
}//补全最终要返回的结果集
myResult3.result.forEach(function(d){
d.RuleName='否决规则';var RuleID=db.CheckItems.find({"StdCode":d._id.PCode},{"CheckRuleID":1}).toArray()[0].CheckRuleID;var RuleTypeName=db.CheckRules.find({"ID":RuleID},{"RuleName":1}).toArray()[0].RuleName;
d.RuleType=RuleTypeName;
d.PName=db.ItemStd.find({"Code":d._id.PCode},{"CNName":1}).toArray()[0].CNName;
}
);returnmyResult3;
}