`
tonglinzhi
  • 浏览: 909 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

store 应用

阅读更多
/**
* @Title PrescriptionControl.java
* @Package control.oeds
* @Description TODO
* @author TLZ
* @time 2011-6-8 下午01:17:13
*/
package control.oeds;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.jh.control.DControl;
import com.jh.data.DMap;
import com.jh.ui.DCheckBox;
import com.jh.ui.DLabel;
import com.jh.ui.DPageFrame;
import com.jh.ui.DPagePanel;
import com.jh.ui.DTabPanel;
import com.jh.ui.DTabbedPane;
import com.jh.ui.DTable;
import com.jh.ui.DTextField;
import com.jh.util.DDataStore;
import com.jh.util.DSystem;
import com.jh.util.StringTool;
import com.jh.util.TypeTool;

import module.oecs.BaseChargeDetailTool;
import module.oecs.BaseChargeHpspTool;
import module.oeds.BaseFeeTool;
import module.oeds.DSWorkStationTool;
import module.oeds.TotQtyTool;
import module.oepha.BaseTool;
import module.pind.InventoryTool;
import util.publics.MessageTool;
import util.publics.PublicsTool;

/**
* @author TLZ
* @time 2011-6-8 下午01:17:13
*/
public class PrescriptionControl extends DControl {
private DTable exaTable;// 检验检查TABLE
private DTable tmtTable;// 诊疗项目TABLE
private DTable medTable;// 西药TABLE
private DTable chnTable;// 中药TABLE
private DTable ctlTable;// 管制药品TABLE
private OedsOrderDataStore oedsOrderDataStore;
private DTabbedPane tabbed;
private String caseNo;// 当前看诊病人就诊号
private String idNo;// 病人ID
private DTextField medComRxno;// 西药处方签
private DTextField exaComRxno;// 检验检查处方签
private DTextField ctlComRxno;// 管制药品处方签
private DTextField tmtComRxno;// 诊疗项目处方签
private DTextField chnComRxno;// 中药处方签
private DTextField medDeptCombox;// 西药执行科室
private DTextField tmtDepteCode;// 诊疗项目执行科室
private DTextField chnDeptCombox;// 中药执行科室
private DTextField ctlDeptCombox;// 管制药品执行科室
private DPageFrame parent;// 父页面
private DTextField chnFXCombo;// 中药HEAD 组件
private DTextField chnTakedays;// 中药HEAD 组件
private DCheckBox chnJZ;// 中药HEAD 组件
private DTextField chnQty;// 中药HEAD 组件
private DTextField chnFreq;// 中药HEAD 组件
private DTextField chnRoute;// 中药HEAD 组件
private DTextField chnNote;// 中药HEAD 组件
private int pageNum = 5;// 默认处方签个数 注:如果没有配置信息将用默认值,有则覆盖默认值
private DCheckBox medAllOrder;// 西药显示全部医嘱(连接医嘱)
private DCheckBox ctlAllOrder;// 管制药品显示全部医嘱(连接医嘱)
private boolean PHA_CTRL_FLG;// 药师开立管制药品权限
private String OEDSROUTETYPE;// 同一处方签允许的开立用法
private DMap patInfo;// 病患信息
private String lockColor = "128,255,255";// 收费颜色
private DPagePanel pageDown;
private String defaultFreq;// 诊疗项目默认频次
private String exeDeptCode;// 默认发药药房(诊间配置信息)
private DMap keepRxNo;// 记录最后一次显示的处方签号
private String REGION = TypeTool.getString(DSystem.getObject("REGION"));// hosp
private DLabel exaTot;// 检验检查处方签总价
private DLabel tmtTot;// 诊疗项目处方签总价
private DLabel medTot;// 西成药处方签总价
private DLabel chnTot;// 中药处方签总价
private DLabel ctrTot;// 管制药品处方签总价
private String antColor = "255,0,0";// 抗生素颜色

/**
* 初始化
*/
public void onInit() {
super.onInit();
initDC();// 初始化当前医师信息
initPage();// 初始化页面组件
}

/**
* @方法名:initDC
* @功能描述:当前医师信息
* @创建人:tong_lzhi
* @创建时间:2011-7-27上午11:48:11
* @修改人:
* @修改时间:
*/
private void initDC() {
DMap map = new DMap(DSWorkStationTool.getTool().getOperatorById(
TypeTool.getString(DSystem.getObject("USER_NAME"))));
PHA_CTRL_FLG = map.getValue("PHA_CTRL_FLG").equalsIgnoreCase("Y");
}

/**
* @方法名:initPage
* @功能描述:初始化页面组件
* @创建人:tong_lzhi
* @创建时间:2011-6-8下午02:04:47
* @修改人:
* @修改时间:
*/
private void initPage() {
exaTable = (DTable) getComponent("EXA_TABLE");
tmtTable = (DTable) getComponent("TMT_TABLE");
medTable = (DTable) getComponent("MED_TABLE");
chnTable = (DTable) getComponent("CHN_TABLE");
ctlTable = (DTable) getComponent("CTL_TABLE");
tabbed = (DTabbedPane) getComponent("TABBED");
tabbed.setEnabledAt(4, PHA_CTRL_FLG);// 设置是否可用管制药品
medDeptCombox = getTextField("MEDDEPTCOM");
ctlDeptCombox = getTextField("CTLDEPTCOM");
medComRxno = getTextField("MEDCOMRXNO");
exaComRxno = getTextField("EXACOMBO");
ctlComRxno = getTextField("CTLCOMRXNO");
chnComRxno = getTextField("CHNCOMRXNO");
chnDeptCombox = getTextField("CHNEXEDEPT");
tmtDepteCode = getTextField("TMTEXEDEPT");
chnFXCombo = getTextField("CHN_FX");
chnTakedays = getTextField("CHN_TAKEDAYS");
chnQty = getTextField("CHN_QTY");
chnFreq = getTextField("CHN_FREQ");
chnRoute = getTextField("CHN_TOUTE");
chnNote = getTextField("CHN_NOTE");
exaTot = getLabel("EXATOT");
tmtTot = getLabel("TMTTOT");
medTot = getLabel("MEDTOT");
chnTot = getLabel("CHNTOT");
ctrTot = getLabel("CTRTOT");
chnJZ = (DCheckBox) getComponent("CBOURGENT");
ctlAllOrder = (DCheckBox) this.getComponent("CBO_CTLALL");
parent = getPageFrame();
medAllOrder = (DCheckBox) this.getComponent("CBO_MEDALL");
pageDown = (DPagePanel) getComponent("PAGE_INFO");
tmtComRxno = (DTextField) getComponent("TMTCOMBO");
((DTabPanel) getComponent("OEREG_TAB")).open();
// 初始化Table ComBox
initTableComboData();
}

/**
* @方法名:initSysMap
* @功能描述:初始化诊间配置信息
* @创建人:tong_lzhi
* @创建时间:2011-8-3下午02:24:32
* @修改人:
* @修改时间:
*/
private void initSysMap() {
DMap sysMap = new DMap(DSWorkStationTool.getTool().getOEDSSysParm(REGION));
if (sysMap.getCount() > 0) {
pageNum = TypeTool.getInt(sysMap.getData("PAGE_NUM", 0));
OEDSROUTETYPE = TypeTool.getString(sysMap.getData("ROUTE_TYPE", 0));
defaultFreq = TypeTool.getString(sysMap.getData("OP_FREQ", 0));
chnFreq.setValue(sysMap.getData("G_FREQ_CODE", 0));// 中药频次
chnRoute.setValue(sysMap.getData("G_ROUTE_CODE", 0));// 中药用法
chnFXCombo.setValue(sysMap.getData("G_DCTAGENT_CODE", 0));// 煎药方式
chnTakedays.setValue(sysMap.getData("DCT_TAKE_DAYS", 0));// 中药日分
chnQty.setValue(sysMap.getData("DCT_TAKE_QTY", 0));// 中药用量
} else {
messageBox("该诊间没有配置信息");
}
}

/**
* @方法名:initTableComboData
* @功能描述:初始化列表中的Combox
* @创建人:tong_lzhi
* @创建时间:2011-6-22下午02:12:19
* @修改人:
* @修改时间:
*/
private void initTableComboData() {
DMap routeDmap = new DMap(DSWorkStationTool.getTool().getPhaRoute());// 用法
DMap phaDeptDmap = new DMap(DSWorkStationTool.getTool().getDeptList(REGION, 2));// 执行药房
DMap deptDmap = new DMap(DSWorkStationTool.getTool().getDeptList(REGION, 0));// 执行科室
DMap unitDmap = new DMap(DSWorkStationTool.getTool().getUnitList());// 单位
DMap freqDmap = new DMap(DSWorkStationTool.getTool().getFreqList());// 频次
DMap optitemDmap = new DMap(DSWorkStationTool.getTool().getBaseDictionary("SYS_OPTITEM"));// 检体
DMap dctagentDmap = new DMap(DSWorkStationTool.getTool().getDctagent());// 煎药方式
DMap dctexcetDmap = new DMap(DSWorkStationTool.getTool().getDctexcep());// 特殊煎法
medTable.getColumnComboData(14).setComboData(phaDeptDmap);// 西药科室
medTable.getColumnComboData(5).setComboData(freqDmap);// 西药频次
medTable.getColumnComboData(4).setComboData(unitDmap);// 西药单位
medTable.getColumnComboData(11).setComboData(unitDmap);// 西药单位
exaTable.getColumnComboData(5).setComboData(deptDmap);// 检验检查科室
exaTable.getColumnComboData(2).setComboData(unitDmap);// 检验检查单位
exaTable.getColumnComboData(6).setComboData(optitemDmap);// 检验检查部位
medTable.getColumnComboData(12).setComboData(routeDmap);// 用法
medDeptCombox.setComboData(phaDeptDmap);
ctlTable.getColumnComboData(14).setComboData(phaDeptDmap);// 管制科室
ctlTable.getColumnComboData(5).setComboData(freqDmap);// 管制频次
ctlTable.getColumnComboData(4).setComboData(unitDmap);// 管制单位
ctlTable.getColumnComboData(11).setComboData(unitDmap);// 管制单位
ctlTable.getColumnComboData(12).setComboData(routeDmap);// 用法
ctlDeptCombox.setComboData(phaDeptDmap);// 管制执行科室
/* 诊疗项目 */
tmtTable.getColumnComboData(10).setComboData(deptDmap);// 科室
tmtTable.getColumnComboData(5).setComboData(freqDmap);// 频次
tmtTable.getColumnComboData(4).setComboData(unitDmap);// 单位
/* 诊疗执行科室 */
tmtDepteCode.setComboData(deptDmap);
tmtDepteCode.setValue(DSystem.getObject("DEPT"));
/* 中药 */
chnDeptCombox.setComboData(phaDeptDmap);
chnFreq.setComboData(freqDmap);
chnRoute.setComboData(routeDmap);
chnFXCombo.setComboData(dctagentDmap);
chnTable.getColumnComboData(2).setComboData(dctexcetDmap);// 特殊煎法
chnTable.getColumnComboData(5).setComboData(dctexcetDmap);// 特殊煎法
chnTable.getColumnComboData(8).setComboData(dctexcetDmap);// 特殊煎法
chnTable.getColumnComboData(11).setComboData(dctexcetDmap);// 特殊煎法
}

/**
* 初始化DataStore
*
* @param case_no
* @time 2011-6-8 下午05:24:48
*/
public void initOedsOrderDataStore(String caseNo, String idNo, DMap dmpa) {
patInfo = dmpa;// 病患信息
this.idNo = idNo;
this.caseNo = caseNo;
if (oedsOrderDataStore != null) {
oedsOrderDataStore.clearChangeValue();
}
oedsOrderDataStore = new OedsOrderDataStore();
String sql = "SELECT HOSP_AREA,CASE_NO,RX_NO,SEQ_NO,EXM_EXEC_END_DATE,PRESRT_NO,ID_NO,ADM_TYPE,"
+ "PHSY_FLG,RX_TYPE,TEMPORARY_FLG,RELEASE_FLG,LINKMAIN_FLG,LINK_NO,ORDER_CODE,ORDER_NAME,"
+ "GOODS_DESC,SPECIFICATION,TRADE_ENG_DESC,ORDER_CAT1_CODE,CAT1_TYPE,MEDI_QTY,MEDI_UNIT,"
+ "FREQ_CODE,ROUTE_CODE,TAKE_DAYS,DOSAGE_QTY,DOSAGE_UNIT,DISPENSE_QTY,"
+ "DISPENSE_UNIT,GIVEBOX_FLG,DISPENSE_FLG,OWN_PRICE,NHI_PRICE,DISCOUNT_RATE,OWN_AMT,AR_AMT,"
+ "DR_NOTE,NS_NOTE,DR_CODE,ORDER_DATE,DEPT_CODE,DC_DR_CODE,DC_ORDER_DATE,DC_DEPT_CODE,"
+ "EXEC_DEPT_CODE,EXEC_DR_CODE,SETMAIN_FLG,ORDERSET_GROUP_NO,ORDERSET_CODE,HIDE_FLG,"
+ "RPTTYPE_CODE,OPTITEM_CODE,DEV_CODE,MR_CODE,MED_APPLY_NO,FILE_NO,DEGREE_CODE,URGENT_FLG,"
+ "INSPAY_TYPE,PHA_TYPE,DOSE_TYPE,EXPENSIVE_FLG,PRINTTYPEFLG_INFANT,CTRLDRUGCLASS_CODE,"
+ "PRESCRIPT_NO,ATC_FLG,SENDATC_DATE,RECEIPT_NO,BILL_FLG,BILL_DATE,BILL_USER,PRINT_FLG,"
+ "REXP_CODE,HEXP_CODE,CONTRACT_CODE,LDENTITY1,LDENTITY2,LDENTITY3,PHA_CHECK_CODE,"
+ "PHA_CHECK_DATE,PHA_DOSAGE_CODE,PHA_DOSAGE_DATE,EXEC_FLG,RECEIPT_FLG,BILL_TYPE,"
+ "PHA_DISPENSE_CODE,PHA_DISPENSE_DATE,PHA_RETN_CODE,PHA_RETN_DATE,NS_EXEC_CODE,"
+ "NS_EXEC_DATE,NS_EXEC_DEPT,DCTAGENT_CODE,DCTEXCEP_CODE,DCT_TAKE_QTY,PACKAGE_TOT,"
+ "AGENCY_ORG_CODE,DCTAGENT_FLG,DECOCT_CODE,REQUEST_FLG,REQUEST_NO,COUNTER_NO,FINAL_TYPE,"
+ "DECOCT_REMARK,SEND_DCT_USER,SEND_DCT_DATE,DECOCT_USER,DECOCT_DATE,SEND_ORG_USER,"
+ "SEND_ORG_DATE,COST_AMT,UNREQUEST_NO,CONN_FLG,CONN_NO,DS_PHA_NOTE,PHA_STATUS,"
+ "DS_PHA_CHECK_CODE,DS_PHA_CHECK_DATE,DS_PHA_DOSAGE_CODE,DS_PHA_DOSAGE_DATE,"
+ "DS_PHA_DISPENSE_CODE,DS_PHA_DISPENSE_DATE FROM OEDS_ORDER WHERE CASE_NO='" + caseNo
+ "' AND HOSP_AREA='" + REGION + "' AND RX_TYPE <> 0 ";
oedsOrderDataStore.setSQL(sql);
oedsOrderDataStore.retrieve();
// 初始化处方签
setRxnoComboDate();
// 默认显示第一个页签
initSysMap();
// 设置默认执行科室
changeTab();
// 初始化门诊配置信息
setDefaultExeDept();
setMedAndCtlExeDeptCode();// set med and Ctl_table head exe_dept code;
}

/**
* @方法名:setDefaultExeDept
* @功能描述:设置默认执行科室
* @创建人:tong_lzhi
* @创建时间:2011-8-3下午02:33:00
* @修改人:
* @修改时间:
*/
private void setDefaultExeDept() {
exeDeptCode = DSWorkStationTool.getTool().getPhaDept(caseNo);
if (exeDeptCode == null || exeDeptCode.length() == 0) {
exeDeptCode = DSWorkStationTool.getTool().getDefaultPahDept(REGION);
}
medDeptCombox.setValue(exeDeptCode);// 西药默认执行药房
ctlDeptCombox.setValue(exeDeptCode);// 管制药品执行药房
chnDeptCombox.setValue(exeDeptCode);// 中药默认执行科室
}

/**
* 初始化所有的查询Combo
*
* @author TLZ
* @time 2011-6-15 下午01:26:11
*/
private void setRxnoComboDate() {
DMap medComRxDmap = getRxNoList("1");// 西成药处方签combox
medComRxno.setComboData(medComRxDmap);
setRxnoSelect(medComRxno);
DMap exaComboxData = getRxNoList("5");// 检验检查处方combo
exaComRxno.setComboData(exaComboxData);
setRxnoSelect(exaComRxno);
DMap ctlComboxData = getRxNoList("2");// 管制药品处方combo
ctlComRxno.setComboData(ctlComboxData);
setRxnoSelect(ctlComRxno);
DMap tmtComboxData = getRxNoList("4");// 管制药品处方combo
tmtComRxno.setComboData(tmtComboxData);
setRxnoSelect(tmtComRxno);
DMap chnComboxData = getRxNoList("3");// 管制药品处方combo
chnComRxno.setComboData(chnComboxData);
setRxnoSelect(chnComRxno);
}

/**
* @方法名:setRxnoSelect
* @功能描述:设置西成药处方签框选中的值
* @param combox
* @创建人:tong_lzhi
* @创建时间:2011-6-15下午02:28:15
* @修改人:
* @修改时间:
*/
private void setRxnoSelect(DTextField combox) {
DMap medComRxDmap = combox.getComboData();
String defultRxno = "";
int count = medComRxDmap.getCount("TYPE");
for (int i = 0; i < count; i++) {
if (medComRxDmap.getValue("TYPE", i).trim().equals("N")) {
defultRxno = medComRxDmap.getValue("ID", i);
break;
}
}
combox.setValue(defultRxno);
}

/**
* @方法名:setTableData
* @功能描述:更新Table数据
* @创建人:tong_lzhi
* @创建时间:2011-7-13下午02:28:35
* @修改人:
* @修改时间:
*/
public void setTableData() {
DTable table = getTable();
oedsOrderDataStore.filterObject(this, "filteDataStore");
table.setDataStore(oedsOrderDataStore);
insertDataStoreRow();// 插一行空数据
if ("CHN_TABLE".equalsIgnoreCase(table.getTag())) {
setChnTableDSValue();
} else {
table.setDSValue();
}
lockTableValue();// 锁定
initRxInfo();// 初始化总价 等信息
}

/**
* @方法名:setChnTableDSValue
* @功能描述:绑定 中药饮片数据
* @创建人:tong_lzhi
* @创建时间:2011-8-5下午01:59:16
* @修改人:
* @修改时间:
*/
private void setChnTableDSValue() {
DTable table = getTable();
table.setSelectedRow(-1);
table.removeAllRow();
int row = -1;
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if (i / 4 > row) {
row = i / 4;
table.addRow();
}
table.setDataValue(row, i * 3 - 12 * row, oedsOrderDataStore.getItemData(i, "ORDER_NAME"));
table.setDataValue(row, i * 3 - 12 * row + 1, oedsOrderDataStore.getItemData(i, "MEDI_QTY"));
table.setDataValue(row, i * 3 - 12 * row + 2, oedsOrderDataStore.getItemData(i, "DCTEXCEP_CODE"));
if (oedsOrderDataStore.isActive(i)
&& "Y".equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "BILL_FLG"))) {
lockChnTableCell(i);
}
}
table.onComponentResized();
table.repaint();
setLockChnHead();// 是否锁定HEAD
}

/**
* @方法名:lockTableValue
* @功能描述:锁定收费注记
* @创建人:tong_lzhi
* @创建时间:2011-7-29下午04:45:34
* @修改人:
* @修改时间:
*/
private void lockTableValue() {
DTable table = getTable();
DDataStore store = table.getDataStore();
int count = store.rowCount();
for (int i = 0; i < count; i++) {
if (store.getItemString(i, "BILL_FLG").equalsIgnoreCase("Y") && store.isActive(i)) {
if ("CHN_TABLE".equalsIgnoreCase(table.getTag())) {// 中药处理
if ("Y".equalsIgnoreCase(store.getItemString(i, "BILL_FLG")) && store.isActive(i)) {
lockChnTableCell(i);
}
} else {
table.setRowLock(i, true);
table.setRowBKColor(i, lockColor);
}
} else {
table.setRowLock(i, false);
table.setRowBKColor(i, "255,255,255");
}
}
}

/**
* @方法名:lockTableCell
* @功能描述:锁定table单元格
* @param table
* @param row
* @param stateColumn
* @param endColumn
* @创建人:tong_lzhi
* @创建时间:2011-8-12下午02:56:13
* @修改人:
* @修改时间:
*/
private void lockChnTableCell(int storeRow) {
int tableRow = storeRow / 4;
int stateColumn = (storeRow % 4) * 3;// 开始锁定行
int endColumn = stateColumn + 3;// 结束锁定行
int count = chnTable.getRowCount();
for (int i = 0; i < count; i++) {
if (i == tableRow) {
int columnCount = chnTable.getColumnCount();
for (int j = 0; j < columnCount; j++) {
if (j >= stateColumn && j < endColumn) {
chnTable.setLock(i, j, true);
chnTable.setDataBKColor(i, j, lockColor);
}
}
}
}
chnTable.onComponentResized();
chnTable.repaint();
}

/**
* @方法名:insertDataStoreRow
* @功能描述:初始化当前的Table数据
* @创建人:tong_lzhi
* @创建时间:2011-7-20下午02:51:30
* @修改人:
* @修改时间:
*/
private void insertDataStoreRow() {
int index = tabbed.getSelectedIndex();
delActiveRowDataStore();
if (index == 0) {
addExaTableRow();// 检验检查
} else if (index == 1) {
addTmtTableRow();// 诊疗项目
} else if (index == 2) {
addMedTableRow();// 西成药
} else if (index == 3) {
addChnTable();// 中药饮片
} else if (index == 4) {
addCtlTableRow();// 管制药品
}
}

/**
* @方法名:addChnTable
* @功能描述:添加中药新行
* @创建人:tong_lzhi
* @创建时间:2011-8-5下午01:42:01
* @修改人:
* @修改时间:
*/
private void addChnTable() {
if (!insertRowTable(chnTable)) {
return;
}
int seq = getSeqNo();
int inserRow = oedsOrderDataStore.insertRow();
oedsOrderDataStore.setItem(inserRow, "ORDER_DATE", StringTool.getString(oedsOrderDataStore
.getDBTime(), "yyyyMMddHHmmss"));// 设置开药日期
oedsOrderDataStore.setItem(inserRow, "RX_TYPE", "3");// 设置医嘱分类
oedsOrderDataStore.setItem(inserRow, "CASE_NO", caseNo); // 设置CASE_NO
String rxNo = TypeTool.getString(chnComRxno.getValue());
oedsOrderDataStore.setItem(inserRow, "RX_NO", rxNo);// 设置RX_NO
oedsOrderDataStore.setItem(inserRow, "SEQ_NO", seq);// 顺序号
oedsOrderDataStore.setItem(inserRow, "HOSP_AREA", REGION);// 区域代码
oedsOrderDataStore.setItem(inserRow, "ID_NO", idNo);
oedsOrderDataStore.setItem(inserRow, "DR_CODE", DSystem.getObject("USER_NAME"));// 开立医师
oedsOrderDataStore.setItem(inserRow, "DEPT_CODE", DSystem.getObject("DEPT"));// 开立科室
oedsOrderDataStore.setActive(inserRow, false);
}

/**
* @方法名:addTmtTableRow
* @功能描述:添加诊疗项目行数据
* @创建人:tong_lzhi
* @创建时间:2011-8-3下午02:15:18
* @修改人:
* @修改时间:
*/
private void addTmtTableRow() {
if (!insertRowTable(tmtTable)) {
return;
}
int inserRow = oedsOrderDataStore.insertRow();
initTmtTableRow(inserRow);
oedsOrderDataStore.setActive(inserRow, false);
}

/**
* @方法名:initTmtTableRow
* @功能描述:初始化新行数据
* @param inserRow
* @创建人:tong_lzhi
* @创建时间:2011-8-9下午04:51:21
* @修改人:
* @修改时间:
*/
private void initTmtTableRow(int inserRow) {
int seq = getSeqNo();
oedsOrderDataStore.setItem(inserRow, "ORDER_DATE", StringTool.getString(oedsOrderDataStore
.getDBTime(), "yyyyMMddHHmmss"));// 设置开药日期
oedsOrderDataStore.setItem(inserRow, "RX_TYPE", "4");// 设置医嘱分类
oedsOrderDataStore.setItem(inserRow, "CASE_NO", caseNo); // 设置CASE_NO
String rxNo = TypeTool.getString(tmtComRxno.getValue());
oedsOrderDataStore.setItem(inserRow, "RX_NO", rxNo);// 设置RX_NO
oedsOrderDataStore.setItem(inserRow, "SEQ_NO", seq);// 顺序号
oedsOrderDataStore.setItem(inserRow, "HOSP_AREA", REGION);// 区域代码
oedsOrderDataStore.setItem(inserRow, "ID_NO", idNo);
oedsOrderDataStore.setItem(inserRow, "DR_CODE", DSystem.getObject("USER_NAME"));// 开立医师
oedsOrderDataStore.setItem(inserRow, "DEPT_CODE", DSystem.getObject("DEPT"));// 开立科室
}

/**
* @方法名:changeTab
* @功能描述:页签切换事件
* @创建人:tong_lzhi
* @创建时间:2011-6-8下午02:47:43
* @修改人:
* @修改时间:
*/
public void changeTab() {
setTableData();// 绑定table数据
initConnFlg();// 初始化是否是连接医嘱
setTitle();// title
setMedAndCtlExeDeptCode();// set head exe dept code
clearKeepRecord();// 清除要删除记录的Table
}

/**
* @方法名:setMedAndCtlExeDeptCode
* @功能描述:设置医嘱的执行科室
* @创建人:tong_lzhi
* @创建时间:2011-8-22下午05:32:04
* @修改人:
* @修改时间:
*/
private void setMedAndCtlExeDeptCode() {
if (getActiveCount(oedsOrderDataStore) > 0) {
String deptCode = oedsOrderDataStore.getItemString(0, "EXEC_DEPT_CODE");
String rxType = oedsOrderDataStore.getItemString(0, "RX_TYPE");
if ("1".equalsIgnoreCase(rxType)) {
medDeptCombox.setValue(deptCode);
} else if ("2".equalsIgnoreCase(rxType)) {
ctlDeptCombox.setValue(deptCode);
}
}
}

/**
* @方法名:initRxInfo
* @功能描述:初始化处方签信息(用于计算处方签总价格)
* @创建人:tong_lzhi
* @创建时间:2011-8-9下午01:04:39
* @修改人:
* @修改时间:
*/
private void initRxInfo() {
int index = tabbed.getSelectedIndex();
double tot = 0.0000;
switch (index) {
case 0:// 检查
tot = getExaRxNoTot();
break;
case 1:// 诊疗
tot = getTmtRxNoTot();
break;
case 2:// 西药
tot = getMedRxNoTot("1");
setAntColor();// 抗生素颜色
break;
case 3:// 中药
String rxNo = TypeTool.getString(chnComRxno.getValue());
DMap map = getChnOrderByRxNo(rxNo);
if (map != null) {
initChnHeadInfo(map);// 处方签信息
} else {// 门诊配置信息
initSysMap();
chnDeptCombox.setValue(exeDeptCode);// 设置默认科室
chnJZ.setSelected(false);
chnNote.setValue("");
}
tot = getTmtRxNoTot();// 与诊疗项目一样
break;
case 4:// 管制
tot = getMedRxNoTot("2");
setAntColor();// 抗生素颜色
break;
default:
break;
}
tot = PublicsTool.round(tot, 4);
getTotLable().setText(TypeTool.getString(tot));// 设置处方签金额
}

/**
* @方法名:setAntColor
* @功能描述:设置抗生素颜色
* @创建人:tong_lzhi
* @创建时间:2011-8-22下午02:51:02
* @修改人:
* @修改时间:
*/
private void setAntColor() {
int count = oedsOrderDataStore.rowCount();
DTable table = getTable();
for (int i = 0; i < count; i++) {
String antCode = oedsOrderDataStore.getItemString(i, "CTRLDRUGCLASS_CODE");// 管制药品等级
DMap antMap = DSWorkStationTool.getTool().getCtrldrugclassByCode(antCode);
if (antMap != null && "Y".equalsIgnoreCase(antMap.getValue("ANTIBIOTIC_FLG"))) {
table.setRowBKColor(i, antColor);
}
// else {
// table.setRowBKColor(i, "255,255,255");
// }
}

}

/**
* @方法名:getExaRxNoTot
* @功能描述:计算检验检查处方签价格
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-16下午02:31:08
* @修改人:
* @修改时间:
*/
private double getExaRxNoTot() {
double tot = 0;
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
tot += TypeTool.getDouble(oedsOrderDataStore.getOtherColumnValue(oedsOrderDataStore.getRowMap(i),
i, "EXA_YFJE"));
}
return tot;
}

/**
* @方法名:getTmtRxNoTot
* @功能描述:获得诊疗项目药品总应付金额
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-16下午02:34:17
* @修改人:
* @修改时间:
*/
private double getTmtRxNoTot() {
double tot = 0;
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
tot += oedsOrderDataStore.getItemDouble(i, "AR_AMT");
}
return tot;
}

/**
* @方法名:getTmtRxNoTot
* @功能描述:获得西药总应付金额
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-16下午02:34:17
* @修改人:
* @修改时间:
*/
private double getMedRxNoTot(String rxType) {
double tot = 0;
if (isConnRxNo()) {
DMap map = getRxNoCombox().getComboData().getRow(getRxNoCombox().getComboIndex());
int connNo = map.getInt("CONN_NO");
DMap data = oedsOrderDataStore.getAllData();
int dataCount = data.getCount();
for (int i = 0; i < dataCount; i++) {
if (rxType.equalsIgnoreCase(data.getValue("RX_TYPE", i))
&& connNo == data.getInt("CONN_NO", i)) {
tot += data.getDouble("AR_AMT", i);
}
}
} else {
tot = getTmtRxNoTot();// 与诊疗项目一样
}
return tot;
}

/**
* @方法名:initChnHeadInfo
* @功能描述:初始化中药处方签信息
* @param map
* @创建人:tong_lzhi
* @创建时间:2011-8-9下午01:16:15
* @修改人:
* @修改时间:
*/
private void initChnHeadInfo(DMap map) {
chnDeptCombox.setValue(map.getData("EXEC_DEPT_CODE"));
chnJZ.setSelected("Y".equalsIgnoreCase(map.getValue("URGENT_FLG")));
chnFXCombo.setValue(map.getData("DCTAGENT_CODE"));
chnTakedays.setValue(map.getData("TAKE_DAYS"));
chnQty.setValue(map.getData("DCT_TAKE_QTY"));
chnFreq.setValue(map.getData("FREQ_CODE"));
chnRoute.setValue(map.getData("ROUTE_CODE"));
chnNote.setValue(map.getData("DR_NOTE"));
}

/**
* @方法名:getChnOrderByRxNo
* @功能描述:根据处方签号获得中药的一条医嘱信息
* @param rxNo
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-9下午01:15:12
* @修改人:
* @修改时间:
*/
private DMap getChnOrderByRxNo(String rxNo) {
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if (oedsOrderDataStore.isActive(i)
&& rxNo.equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "RX_NO"))) {
return oedsOrderDataStore.getRowMap(i);
}
}
return null;
}

/**
* @方法名:setTitle
* @功能描述: 设置Title
* @创建人:tong_lzhi
* @创建时间:2011-8-16下午02:38:41
* @修改人:
* @修改时间:
*/
private void setTitle() {
String title = tabbed.getTitleAt(tabbed.getSelectedIndex());
pageDown.setTitle(title);
}

/**
* @方法名:initConnFlg
* @功能描述:初始化连接处方签
* @创建人:tong_lzhi
* @创建时间:2011-7-18下午03:23:47
* @修改人:
* @修改时间:
*/
private void initConnFlg() {
int index = tabbed.getSelectedIndex();
if (index == 2) {// 西成药
DMap map = medComRxno.getComboData().getRow(medComRxno.getComboIndex());
if (map.getInt("CONN_NO") != 0) {
medAllOrder.setEnabled(true);
medAllOrder.setVisible(true);
return;
} else {
medAllOrder.setEnabled(false);
medAllOrder.setVisible(false);
}
} else if (index == 4) {// 管制药品
DMap map = ctlComRxno.getComboData().getRow(ctlComRxno.getComboIndex());
if (map.getInt("CONN_NO") != 0) {
ctlAllOrder.setEnabled(true);
ctlAllOrder.setVisible(true);
return;
} else {
ctlAllOrder.setEnabled(false);
ctlAllOrder.setVisible(false);
}
}
}

/**
* @方法名:getTable
* @功能描述:根据当前的页签获得当前页签的Table
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-18下午02:57:03
* @修改人:
* @修改时间:
*/
private DTable getTable() {
int index = tabbed.getSelectedIndex();
if (index == 0) {
return exaTable;
} else if (index == 1) {
return tmtTable;
} else if (index == 2) {
return medTable;
} else if (index == 3) {
return chnTable;
} else {
return ctlTable;
}
}

/**
* @方法名:addMedTableRow
* @功能描述:对西成药增加一个新行并初始化数据(西成药)
* @创建人:tong_lzhi
* @创建时间:2011-6-9下午02:51:45
* @修改人:
* @修改时间:
*/
public void addMedTableRow() {
if (!insertRowTable(medTable)) {
return;
}
int seq = getSeqNo();
int inserRow = oedsOrderDataStore.insertRow();
DMap map = medComRxno.getComboData().getRow(medComRxno.getComboIndex());
int connNo = map.getInt("CONN_NO");
oedsOrderDataStore.setItem(inserRow, "ORDER_DATE", StringTool.getString(oedsOrderDataStore
.getDBTime(), "yyyyMMddHHmmss"));// 设置开药日期
oedsOrderDataStore.setItem(inserRow, "RX_TYPE", "1");// 设置医嘱分类
oedsOrderDataStore.setItem(inserRow, "CASE_NO", caseNo); // 设置CASE_NO
String rxNo = "";
if (medAllOrder.isVisible() && medAllOrder.isSelected()) {
rxNo = getLastLinkRxNo(connNo);
} else {
rxNo = TypeTool.getString(medComRxno.getValue());
}
oedsOrderDataStore.setItem(inserRow, "PHSY_FLG", 1);// 管制等级为1 西药
oedsOrderDataStore.setItem(inserRow, "RX_NO", rxNo);// 设置RX_NO
oedsOrderDataStore.setItem(inserRow, "SEQ_NO", seq);// 顺序号
oedsOrderDataStore.setItem(inserRow, "HOSP_AREA", REGION);// 区域代码
oedsOrderDataStore.setItem(inserRow, "ID_NO", idNo);
oedsOrderDataStore.setItem(inserRow, "DR_CODE", DSystem.getObject("USER_NAME"));// 开立医师
oedsOrderDataStore.setItem(inserRow, "DEPT_CODE", DSystem.getObject("DEPT"));// 开立科室
oedsOrderDataStore.setItem(inserRow, "CONN_FLG", map.getData("CONN_FLG"));// 连接处方签注记
oedsOrderDataStore.setItem(inserRow, "CONN_NO", connNo);// 连接处方签号
oedsOrderDataStore.setActive(inserRow, false);
}

/**
* @方法名:addMedTableRow
* @功能描述:对管制药品增加一个新行并初始化数据(管制药品)
* @创建人:tong_lzhi
* @创建时间:2011-8-1下午02:51:45
* @修改人:
* @修改时间:
*/
public void addCtlTableRow() {
if (!insertRowTable(ctlTable)) {
return;
}
int seq = getSeqNo();
int inserRow = oedsOrderDataStore.insertRow();
DMap map = ctlComRxno.getComboData().getRow(ctlComRxno.getComboIndex());
int connNo = map.getInt("CONN_NO");
oedsOrderDataStore.setItem(inserRow, "ORDER_DATE", StringTool.getString(oedsOrderDataStore
.getDBTime(), "yyyyMMddHHmmss"));// 设置开药日期
oedsOrderDataStore.setItem(inserRow, "RX_TYPE", "2");// 设置医嘱分类
oedsOrderDataStore.setItem(inserRow, "CASE_NO", caseNo); // 设置CASE_NO
String rxNo = "";
if (ctlAllOrder.isVisible() && ctlAllOrder.isSelected()) {
rxNo = getLastLinkRxNo(connNo);
} else {
rxNo = TypeTool.getString(ctlComRxno.getValue());
}
oedsOrderDataStore.setItem(inserRow, "PHSY_FLG", 2);// 管制等级为2管制药品
oedsOrderDataStore.setItem(inserRow, "RX_NO", rxNo);// 设置RX_NO
oedsOrderDataStore.setItem(inserRow, "SEQ_NO", seq);// 顺序号
oedsOrderDataStore.setItem(inserRow, "HOSP_AREA", REGION);// 区域代码
oedsOrderDataStore.setItem(inserRow, "ID_NO", idNo);
oedsOrderDataStore.setItem(inserRow, "DR_CODE", DSystem.getObject("USER_NAME"));// 开立医师
oedsOrderDataStore.setItem(inserRow, "DEPT_CODE", DSystem.getObject("DEPT"));// 开立科室
oedsOrderDataStore.setItem(inserRow, "CONN_FLG", map.getData("CONN_FLG"));// 连接处方签注记
oedsOrderDataStore.setItem(inserRow, "CONN_NO", connNo);// 连接处方签号
oedsOrderDataStore.setActive(inserRow, false);
}

/**
* @方法名:addExaTableRow
* @功能描述:对exa_Table增加一个新行并初始化数据(检验检查)
* @创建人:tong_lzhi
* @创建时间:2011-6-9下午02:52:02
* @修改人:
* @修改时间:
*/
private void addExaTableRow() {
if (!insertRowTable(exaTable)) {
return;
}
int inserRow = oedsOrderDataStore.insertRow();
initExaTaleData(inserRow);
oedsOrderDataStore.setActive(inserRow, false);
}

/**
* @方法名:initExaTaleData
* @功能描述:初始化默认数据(检验检查)
* @param inserRow
* @创建人:tong_lzhi
* @创建时间:2011-6-9下午02:52:18
* @修改人:
* @修改时间:
*/
private void initExaTaleData(int inserRow) {
int seq = getSeqNo();
oedsOrderDataStore.setItem(inserRow, "ORDER_DATE", StringTool.getString(oedsOrderDataStore
.getDBTime(), "yyyyMMddHHmmss"));// 设置开药日期
oedsOrderDataStore.setItem(inserRow, "RX_TYPE", "5");// 设置医嘱分类
oedsOrderDataStore.setItem(inserRow, "CASE_NO", caseNo);// 设置CASE_NO
oedsOrderDataStore.setItem(inserRow, "RX_NO", TypeTool.getString(exaComRxno.getValue()));// 设置RX_NO
oedsOrderDataStore.setItem(inserRow, "SEQ_NO", seq);// 顺序号
oedsOrderDataStore.setItem(inserRow, "ID_NO", idNo);// ID_NO
oedsOrderDataStore.setItem(inserRow, "HOSP_AREA", REGION);// 区域代码
oedsOrderDataStore.setItem(inserRow, "DR_CODE", DSystem.getObject("USER_NAME"));// 开立医师
oedsOrderDataStore.setItem(inserRow, "DEPT_CODE", DSystem.getObject("DEPT"));// 开立科室
oedsOrderDataStore.setItem(inserRow, "HIDE_FLG", "N");
}

/**
* @方法名:getSeqNo
* @功能描述:获得医嘱顺序号
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-17上午10:23:12
* @修改人:
* @修改时间:
*/
private int getSeqNo() {
int seq = 0;
DMap data = oedsOrderDataStore.getAllData();
int count = data.getCount();
for (int i = 0; i < count; i++) {
if (data.getInt("SEQ_NO", i) > seq) {
seq = data.getInt("SEQ_NO", i);
}
}
return seq + 1;
}

/**
* @方法名:insertRowTable
* @功能描述:判断是否新增行 true 新增 false 不新增
* @param table
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-20上午09:47:37
* @修改人:
* @修改时间:
*/
private boolean insertRowTable(DTable table) {
boolean result = true;
int rowCount = table.getDataStore().rowCount();
for (int i = 0; i < rowCount; i++) {
if (!table.getDataStore().isActive(i)) {
return false;
}
}
return result;
}

/**
* @方法名:delRowTableDataStore
* @功能描述:删除空行
* @param table
* @创建人:tong_lzhi
* @创建时间:2011-7-20上午10:08:21
* @修改人:
* @修改时间:
*/
public void delActiveRowDataStore() {
String buff = oedsOrderDataStore.isFilter() ? DDataStore.FILTER : DDataStore.PRIMARY;
int rowCount = oedsOrderDataStore.isFilter() ? oedsOrderDataStore.rowCountFilter()
: oedsOrderDataStore.rowCount();
for (int i = rowCount - 1; i >= 0; i--) {
if (!oedsOrderDataStore.isActive(i, buff)) {
oedsOrderDataStore.deleteRow(i, buff);
}
}
}

/**
* Table新增行
*
* @author TLZ
* @time 2011-6-8 上午11:03:17
*/
private void baseTableModified(int i) {
initRxInfo();// 重新计算处方签金额
DTable table = getTable();
DDataStore diagDataStore = table.getDataStore();
int row = table.getModifiedRow();
int column = table.getModifiedColumn();
if (column != i) {
table.setDSValue();
return;
}
diagDataStore.setActive(row, true);
// 根据当前的Table新增一行
insertDataStoreRow();
table.setDSValue();
}

/**
* exaTableModified(检验检查)
*
* @author TLZ
* @time 2011-6-9 下午05:23:00
*/
public void onExaTableModified() {
int column = exaTable.getModifiedColumn();
int row = exaTable.getModifiedRow();
String columnName = exaTable.getColumnName(column);
// 集合医嘱组号
int storeGroupNo = exaTable.getDataStore().getItemInt(row, "ORDERSET_GROUP_NO");
// 1.判断是否是ORDER_CODE触发事件
if ("ORDER_NAME".equalsIgnoreCase(columnName)) {
String orderCode = oedsOrderDataStore.getItemString(row, "ORDER_NAME");
if (orderCode == null || orderCode.trim().length() == 0) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
removeExaChilren(row, "5");// 删除细项
} else {
return;
}
}
String orderName = getExaNameByCode(orderCode, row);
if (orderName != null) {
if (messageBox(MessageTool.message("T0034", orderName), DControl.YES_NO_OPTION) != 1) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
removeExaChilren(row, "5");// 删除细项
} else {
oedsOrderDataStore.setItem(row, "ORDER_NAME", "");
exaTable.setDSValue();
return;
}
}
}
// 2.判断是否是已有医嘱
if (storeGroupNo != 0) {
removeExaChilren(row, "5");// 删除细项
}
DMap result = new DMap(BaseFeeTool.getTool().getAllBaseDetailBySetCode(orderCode));
if (result.getCount() <= 0) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
removeExaChilren(row, "5");// 删除细项
result = new DMap(BaseFeeTool.getTool().getAllBaseDetailBySetCode(orderCode));
} else {
oedsOrderDataStore.setItem(row, "ORDER_NAME", "");
exaTable.setDSValue();
return;
}
}
// 3.获取主项
DMap main = (DMap) result.getData("MAIN");
if (main != null && main.getCount() > 0) {
// 获取随机组号
String groupNo = (row + 1) + "";
// 4.添加细项信息
DMap chilren = (DMap) result.getData("CHILREN");
addExaChilrenDetail(main, row, 0, "Y", groupNo, orderCode, "N");
double total = addExaChilrenRow(chilren, groupNo, orderCode);
exaTable.getDataStore().setItem(row, "OWN_PRICE", total);
}
}
// 7.主项更改执行科室
else if ("EXEC_DEPT_CODE".equalsIgnoreCase(columnName)) {
String value = exaTable.getDataStore().getItemString(row, "EXEC_DEPT_CODE");
updateExaChilren(row, "EXEC_DEPT_CODE", value);
}// 8.主项更改检体
else if ("OPTITEM_CODE".equalsIgnoreCase(columnName)) {
String value = exaTable.getDataStore().getItemString(row, "OPTITEM_CODE");
updateExaChilren(row, "OPTITEM_CODE", value);
}
// 9.重新过滤
baseTableModified(0);
oedsOrderDataStore.filterObject(this, "filteDataStore");
exaTable.setDSValue();
}

/**
* @方法名:getExaNameByCode
* @功能描述:根据code查找检验检查
* @param orderCode
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-20下午03:16:35
* @修改人:
* @修改时间:
*/
private String getExaNameByCode(String orderCode, int row) {
if (orderCode == null || orderCode.trim().length() == 0) {
return null;
}
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if (i == row || !oedsOrderDataStore.isActive(i)) {
continue;
}
if (orderCode.equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "ORDER_CODE"))) {
return oedsOrderDataStore.getItemString(i, "ORDER_NAME");
}
}
return null;
}

/**
* 检验检查初始化主细项数据公用方法
*
* @param map 数据源
* @param row 在DataStore里的行号
* @param index 数据在数据源的位置
* @param mainFlg 是否是主项
* @param groupNo 分组号
* @param orderSetCode 集合医嘱Code
* @param hideFlg 隐藏注记
* @param mainPrice 主项价格是细项价格之和
* @author TLZ
* @time 2011-6-22 下午03:22:26
*/
private void addExaChilrenDetail(DMap map, int row, int index, String mainFlg, String groupNo,
String orderSetCode, String hideFlg) {
DTable table = getTable();
String orderCode = map.getValue("ORDER_CODE", index);
String hexpCode = map.getValue("CHARGE_HOSP_CODE", index);// HEXP_CODE
table.getDataStore().setItem(row, "HEXP_CODE", hexpCode);
table.getDataStore().setItem(row, "REXP_CODE",
BaseChargeHpspTool.getToolInstance().returnChargeCode(hexpCode));// REXP_CODE
table.getDataStore().setItem(row, "ORDER_CODE", orderCode);// order
// code
table.getDataStore().setItem(row, "ORDER_NAME", map.getValue("ORDER_NAME", index));// order
// Name
table.getDataStore().setItem(row, "BILL_FLG", "N");// 收费注记
int count = map.getInt("DOSAGE_QTY", index);// 数量
if (mainFlg.equals("Y") && count == 0) {
count = 1;
}
table.getDataStore().setItem(row, "INSPAY_TYPE", map.getValue("INSPAY_TYPE", index));// 自费‘医保
table.getDataStore().setItem(row, "MEDI_QTY", count);
double price = map.getDouble("OWN_PRICE", index);// 单价
table.getDataStore().setItem(row, "OWN_PRICE", price);
double total = TotQtyTool.getTool().getRound(price * count);// 总价
table.getDataStore().setItem(row, "DISPENSE_QTY", total);
table.getDataStore().setItem(row, "AR_AMT", total);
table.getDataStore().setItem(row, "OWN_AMT", total);
table.getDataStore().setItem(row, "MEDI_UNIT", map.getData("UNIT_CODE", index));// 单位默认项
table.getDataStore().setItem(row, "OWN_PRICE", map.getData("OWN_PRICE", index));// 价格
String deptCode = TypeTool.getString(map.getData("EXEC_DEPT_CODE", index));// 执行科室
if (deptCode == null || deptCode.length() == 0) {
deptCode = TypeTool.getString(DSystem.getObject("DEPT"));
}
table.getDataStore().setItem(row, "EXEC_DEPT_CODE", deptCode);
String optCode = map.getValue("OPTITEM_CODE", index);// 检体
table.getDataStore().setItem(row, "OPTITEM_CODE", optCode);
// 组号 隐藏注记 主项 集合医嘱代码、就诊号
table.getDataStore().setItem(row, "HIDE_FLG", hideFlg);
table.getDataStore().setItem(row, "SETMAIN_FLG", mainFlg);
table.getDataStore().setItem(row, "ORDERSET_GROUP_NO", groupNo);
table.getDataStore().setItem(row, "ORDERSET_CODE", orderSetCode);
// 计算细项折扣金额
if (!"Y".equalsIgnoreCase(mainFlg)) {
getMedCount(row, total);
}
setStoreBaseData(exaTable.getDataStore(), row, map, index);// 基础数据
}

/**
* @方法名:addTmtChilrenDetail
* @功能描述:诊疗项目集合医嘱添加
* @param map
* @param row
* @param index
* @param mainFlg
* @param groupNo
* @param orderSetCode
* @param hideFlg
* @创建人:tong_lzhi
* @创建时间:2011-8-9下午05:12:52
* @修改人:
* @修改时间:
*/
private void addTmtChilrenDetail(DMap map, int row, int index, String mainFlg, String groupNo,
String orderSetCode, String hideFlg, int takedays) {
DTable table = getTable();
String orderCode = map.getValue("ORDER_CODE", index);
String hexpCode = map.getValue("CHARGE_HOSP_CODE", index);// HEXP_CODE
table.getDataStore().setItem(row, "HEXP_CODE", hexpCode);
table.getDataStore().setItem(row, "REXP_CODE",
BaseChargeHpspTool.getToolInstance().returnChargeCode(hexpCode));// REXP_CODE
table.getDataStore().setItem(row, "ORDER_CODE", orderCode);// order
// code
table.getDataStore().setItem(row, "ORDER_NAME", map.getValue("ORDER_NAME", index));// order
// Name
table.getDataStore().setItem(row, "BILL_FLG", "N");// 收费注记
int count = map.getInt("DOSAGE_QTY", index);// 数量
if (count == 0) {
count = 1;
}
table.getDataStore().setItem(row, "MEDI_QTY", count);// 默认用量
table.getDataStore().setItem(row, "DOSAGE_QTY", count);// 总量
table.getDataStore().setItem(row, "DISPENSE_QTY", count);// 总量
table.getDataStore().setItem(row, "INSPAY_TYPE", map.getValue("INSPAY_TYPE", index));// 自费‘医保
double price = map.getDouble("OWN_PRICE", index);// 单价
table.getDataStore().setItem(row, "OWN_PRICE", price);
String deptCode = TypeTool.getString(map.getData("EXEC_DEPT_CODE", index));// 执行科室
if (deptCode == null || deptCode.length() == 0) {
deptCode = TypeTool.getString(DSystem.getObject("DEPT"));
}
table.getDataStore().setItem(row, "EXEC_DEPT_CODE", deptCode);
String optCode = map.getValue("OPTITEM_CODE", index);// 检体
table.getDataStore().setItem(row, "OPTITEM_CODE", optCode);
// 组号 隐藏注记 主项 集合医嘱代码、就诊号
table.getDataStore().setItem(row, "HIDE_FLG", hideFlg);
table.getDataStore().setItem(row, "TAKE_DAYS", takedays);
table.getDataStore().setItem(row, "SETMAIN_FLG", mainFlg);
table.getDataStore().setItem(row, "ORDERSET_GROUP_NO", groupNo);
table.getDataStore().setItem(row, "ORDERSET_CODE", orderSetCode);
oedsOrderDataStore.setItem(row, "FREQ_CODE", defaultFreq);// 默认频次
oedsOrderDataStore.setItem(row, "EXEC_DR_CODE", DSystem.getObject("USER_NAME"));// 执行医师
// 计算细项折扣金额
sumTmtQty(row);// 计算总量
setStoreBaseData(exaTable.getDataStore(), row, map, index);// 基础数据
}

/**
* @方法名:addExaChilrenRow
* @功能描述:添加细项并计算价格 获取细项的用量*价格获得总价返回
* @param map 细项数据源
* @param groupNo
* @param orderSetCode
* @return
* @创建人:tong_lzhi
* @创建时间:2011-6-19下午03:25:26
* @修改人:
* @修改时间:
*/
private double addExaChilrenRow(DMap map, String groupNo, String orderSetCode) {
double total = 0.0;
int count = map.getCount();
for (int i = 0; i < count; i++) {
int row = getTable().getDataStore().insertRow();
// 初始化默认数据
initExaTaleData(row);
addExaChilrenDetail(map, row, i, "N", groupNo, orderSetCode, "Y");
double price = map.getDouble("OWN_PRICE", i);
double qty = map.getDouble("DOSAGE_QTY", i);
total += (price * qty);
}
return total;
}

/**
* @方法名:addTmtChilrenRow
* @功能描述:诊疗项目细项数据添加
* @param map
* @param groupNo
* @param orderSetCode
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-9下午04:46:55
* @修改人:
* @修改时间:
*/
private Map addTmtChilrenRow(DMap map, String groupNo, String orderSetCode, int takedays) {
Map result = new HashMap();
double total = 0.0;
double totPrice = 0.0;
int count = map.getCount();
for (int i = 0; i < count; i++) {
int row = getTable().getDataStore().insertRow();
// 初始化默认数据
initTmtTableRow(row);
addTmtChilrenDetail(map, row, i, "N", groupNo, orderSetCode, "Y", takedays);
double qty = map.getDouble("DOSAGE_QTY", i);// 细项执行次数
double price = map.getDouble("OWN_PRICE", i) * qty;
totPrice += price;
total += (price * 1);
}
result.put("PRICE", totPrice);
result.put("TOTAL", total);
return result;
}

/**
* @方法名:removeExaChilren
* @功能描述:根据组号删除检验检查细项
* @param row
* @创建人:tong_lzhi
* @创建时间:2011-6-22下午02:42:52
* @修改人:
* @修改时间:
*/
private void removeExaChilren(int row, String rxType) {
int groupNo = oedsOrderDataStore.getItemInt(row, "ORDERSET_GROUP_NO");
oedsOrderDataStore.setFilter("RX_TYPE IN(" + rxType + ")");
oedsOrderDataStore.filter();
int count = oedsOrderDataStore.rowCount();
for (int i = (count - 1); i >= 0; i--) {
if (groupNo == oedsOrderDataStore.getItemInt(i, "ORDERSET_GROUP_NO")) {
if (oedsOrderDataStore.getItemString(i, "HIDE_FLG").equalsIgnoreCase("Y")) {
// 处方签号
if (oedsOrderDataStore.getItemString(i, "RX_NO").trim().equalsIgnoreCase(
TypeTool.getString(exaComRxno.getValue()))) {
// 删除组号相同的细项
oedsOrderDataStore.deleteRow(i);
}
}
}
}
oedsOrderDataStore.filterObject(this, "filteDataStore");
}

/**
* @方法名:updateExaChilren
* @功能描述:根据组号更新属性信息
* @param row
* @param parmter
* @param value
* @创建人:tong_lzhi
* @创建时间:2011-6-22下午02:43:22
* @修改人:
* @修改时间:
*/
private void updateExaChilren(int row, String parmter, String value) {
int groupNo = oedsOrderDataStore.getItemInt(row, "ORDERSET_GROUP_NO");
if (groupNo == 0) {
return;
}
oedsOrderDataStore.setFilter("RX_TYPE='5'");
oedsOrderDataStore.filter();
int count = oedsOrderDataStore.rowCount();
for (int i = (count - 1); i >= 0; i--) {
if (groupNo == oedsOrderDataStore.getItemInt(i, "ORDERSET_GROUP_NO")) {
if (oedsOrderDataStore.isActive(i)
&& oedsOrderDataStore.getItemString(i, "HIDE_FLG").equalsIgnoreCase("Y")) {
// 处方签相同
if (oedsOrderDataStore.getItemString(i, "RX_NO").trim().equalsIgnoreCase(
TypeTool.getString(exaComRxno.getValue()))) {
oedsOrderDataStore.setItem(i, parmter, value);
}
}
}
}
oedsOrderDataStore.filterObject(this, "filteDataStore");
}

/**
* @方法名:onMedTableModified
* @功能描述: medTableModified(西成药)
* @创建人:tong_lzhi
* @创建时间:2011-6-22下午02:43:45
* @修改人:
* @修改时间:
*/
public void onMedTableModified() {
DDataStore medStore = medTable.getDataStore();
int column = medTable.getModifiedColumn();
int row = medTable.getModifiedRow();
String columnName = medTable.getColumnName(column);
int linkNo = medStore.getItemInt(row, "LINK_NO");
// 连合医嘱
if ("LINKMAIN_FLG".equalsIgnoreCase(columnName)) {
doLinkOrder(row, TypeTool.getString(medComRxno.getValue()));
} else if ("LINK_NO".equalsIgnoreCase(columnName)) {
// 判断是否有值
if (linkNo == 0 || !medStore.isActive(row)) {
medStore.setItem(row, "LINK_NO", "");
medStore.setItem(row, "LINKMAIN_FLG", "N");
} else {
String isChecked = "N";
if (!checkLinkNo(linkNo, row)) {
isChecked = "Y";
}
medStore.setItem(row, "LINKMAIN_FLG", isChecked);
if (!"Y".equalsIgnoreCase(isChecked)) {
setMainLinkData(row, linkNo);
}
}
// 清除没有主项的细项组号
clearNoLinkOrder();
}
// 判断是否是ORDER_CODE触发事件
else if ("ORDER_NAME".equalsIgnoreCase(columnName)) {
String exeDeptCode = TypeTool.getString(medDeptCombox.getValue());// 执行科室
String orderCode = medStore.getItemString(row, "ORDER_NAME");
if (orderCode == null || orderCode.trim().length() == 0) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
} else {
return;
}
}
// 2.验证是否是过敏药品
String ergName = getNameByCodeFromAllErg(orderCode);
if (ergName != null) {
if (messageBox(MessageTool.message("T0035", ergName), DControl.YES_NO_OPTION) != 1) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
} else {
deleteRow();// 删除当前行
return;
}
}
}
// 3.验证是否已经开立
String orderName = getNameByCodeFromDataStore(orderCode, row, 1);
if (orderName != null) {
if (messageBox(MessageTool.message("T0034", orderName), DControl.YES_NO_OPTION) != 1) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
} else {
deleteRow();// 删除当前行
return;
}
}
}
DMap map = new DMap(BaseFeeTool.getTool().getMedFeeByCode(orderCode));// 药品信息
// 4.是否有结果
if (map.getCount() <= 0) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
map = new DMap(BaseFeeTool.getTool().getMedFeeByCode(orderCode));
} else {
medStore.setItem(row, "ORDER_NAME", "");
medTable.setDSValue();
return;
}
}
// 5.是否是毒麻类
String ctrCode = map.getValue("CTRLDRUGCLASS_CODE", 0);// 管制CODE
DMap ctrMap = DSWorkStationTool.getTool().getCtrldrugclassByCode(ctrCode);
if (ctrMap != null && "Y".equalsIgnoreCase(ctrMap.getValue("CTRL_FLG"))) {
if (!PHA_CTRL_FLG) {// 判断医师是否有权限
messageBox(MessageTool.message("T0031", "您&开立毒麻类药品"));
medStore.setItem(row, "ORDER_NAME", "");
medTable.setDSValue();
return;
} else {
medStore.setItem(row, "ORDER_NAME", "");
medTable.setDSValue();
messageBox(MessageTool.message("T0031", "西成药处方签&开立毒麻类药品,需要在管制药品中开立"));
return;
}
}
// 6.剂型
String routeCode = map.getValue("ROUTE_CODE", 0);// 获得用法code
if (!checkRoute(medStore, routeCode, row)) {
if (messageBox("您开立的药品剂型与当前处方签不相符,是否在新的处方签开立?", DControl.YES_NO_OPTION) == 1) {
medStore.setItem(row, "ORDER_NAME", "");
String rxNo = newRxno(0);
oedsOrderDataStore.setItem(0, "RX_NO", rxNo);
setMedTableData(medStore, 0, map, orderCode, exeDeptCode);
medTable.setModifiedColumn(2);
medTable.setModifiedRow(0);
medTable.setSelectedRow(0);
baseTableModified(2);
return;
}
}
// begin
// 1.验证是否达到处方签数量
if (getPhaCount(row) > pageNum) {
if (messageBox("已经达到处方签最大药品数量,是否在新的处方签中开立?", DControl.YES_NO_OPTION) == 1) {
medStore.setItem(row, "ORDER_NAME", "");
// 当前处方签信息
DMap comMap = medComRxno.getComboData().getRow(medComRxno.getComboIndex());
if (medAllOrder.isVisible() && medAllOrder.isSelected()) {// 连处显示
String rxNo = newRxno(comMap.getInt("CONN_NO"));
oedsOrderDataStore.setItem(row, "RX_NO", rxNo);
} else {//
if (comMap.getInt("CONN_NO") != 0) {
newRxno(comMap.getInt("CONN_NO"));
} else {// 主连接处方签
int connNo = getConnNo();
comMap.setData("CONN_FLG", "Y");
comMap.setData("CONN_NO", connNo);
int count = oedsOrderDataStore.rowCount();
for (int r = 0; r < count; r++) {// 设置为主连接处方签
oedsOrderDataStore.setItem(r, "CONN_NO", connNo);
oedsOrderDataStore.setItem(r, "CONN_FLG", "Y");
}
newRxno(connNo);
}
setMedTableData(medStore, 0, map, orderCode, exeDeptCode);
medTable.setModifiedColumn(2);
medTable.setModifiedRow(0);
medTable.setSelectedRow(0);
baseTableModified(2);
return;
}
}
}
// end
setMedTableData(medStore, row, map, orderCode, exeDeptCode);// 填充数据
// 更改一项触发重新计算
} else if ("MEDI_QTY".equalsIgnoreCase(columnName) || "GIVEBOX_FLG".equalsIgnoreCase(columnName)) {
sumMedQty(row);
} else if ("TAKE_DAYS".equalsIgnoreCase(columnName)) {// 日分
// 判断是否是连接医嘱
if (linkNo == 0) {
sumMedQty(row);
} else if (isHasBillOrder(row, linkNo)) {// 是否有已经收费的医嘱
messageBox(MessageTool.message("T0031", "部分医嘱已经收费&修改"));
setMainLinkData(row, linkNo);// 重新设置数据
} else {
setMedRowValue(medStore, row, columnName, linkNo);
}
} else if ("FREQ_CODE".equalsIgnoreCase(columnName)) {
// 判断是否是连接医嘱
if (linkNo == 0) {
sumMedQty(row);
} else if (isHasBillOrder(row, linkNo)) {// 是否有已经收费的医嘱
messageBox(MessageTool.message("T0031", "部分医嘱已经收费&修改"));
setMainLinkData(row, linkNo);// 重新设置数据
} else {
setMedRowValue(medStore, row, columnName, linkNo);
}
} else if ("DISPENSE_QTY".equalsIgnoreCase(columnName)) {
getTakeQty(row);
} else if ("ROUTE_CODE".equalsIgnoreCase(columnName)) {
// 判断是否是连接医嘱
if (linkNo != 0) {
setMedRowValue(medStore, row, columnName, linkNo);
}
}
baseTableModified(2);
}

/**
* @方法名:isHasBillOrder
* @功能描述:连接医嘱中 是否有收费的医嘱信息
* @param row
* @param linkNo
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-17上午09:23:32
* @修改人:
* @修改时间:
*/
private boolean isHasBillOrder(int row, int linkNo) {
String rxNo = oedsOrderDataStore.getItemString(row, "RX_NO");
if (isConnRxNo()) {// 连接处方
String rxType = oedsOrderDataStore.getItemString(row, "RX_TYPE");
String connNo = oedsOrderDataStore.getItemString(row, "CONN_NO");
oedsOrderDataStore.setFilter("RX_TYPE='" + rxType + "' AND CONN_NO=" + connNo);
oedsOrderDataStore.filter();
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if (linkNo == oedsOrderDataStore.getItemInt(i, "LINK_NO")
&& "Y".equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "BILL_FLG"))) {
oedsOrderDataStore.filterObject(this, "filteDataStore");
return true;
}
}
oedsOrderDataStore.filterObject(this, "filteDataStore");
} else {// 非连接处方
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if (rxNo.equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "RX_NO"))
&& linkNo == oedsOrderDataStore.getItemInt(i, "LINK_NO")
&& "Y".equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "BILL_FLG"))) {
return true;
}
}
}
return false;
}

/**
* @方法名:setMainLinkData
* @功能描述:设置为主项的熟悉 注:日分 频次 用法
* @param row
* @param linkNo
* @创建人:tong_lzhi
* @创建时间:2011-8-15下午05:28:31
* @修改人:
* @修改时间:
*/
private void setMainLinkData(int row, int linkNo) {
String rxType = oedsOrderDataStore.getItemString(row, "RX_TYPE");
int connNo = oedsOrderDataStore.getItemInt(row, "CONN_NO");
String rxNo = oedsOrderDataStore.getItemString(row, "RX_NO");
DMap map = getMainLinkData(linkNo, rxType, connNo, rxNo);
if (map != null) {
if ("1".equalsIgnoreCase(rxType) || "2".equalsIgnoreCase(rxType)) {// 西药、管制药品
oedsOrderDataStore.setItem(row, "TAKE_DAYS", map.getData("TAKE_DAYS"));
oedsOrderDataStore.setItem(row, "FREQ_CODE", map.getData("FREQ_CODE"));
sumMedQty(row);
} else if ("4".equalsIgnoreCase(rxType)) {// 诊疗项目
setTmtRowValue(row, "TAKE_DAYS", map.getData("TAKE_DAYS"));
setTmtRowValue(row, "FREQ_CODE", map.getData("FREQ_CODE"));
sumTmtQty(row);
}
}
}

/**
* @方法名:getMainLinkData
* @功能描述:获得主项数据
* @param linkNo
* @param rxType
* @param connNo
* @param rxNo
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-15下午05:25:15
* @修改人:
* @修改时间:
*/
private DMap getMainLinkData(int linkNo, String rxType, int connNo, String rxNo) {
DMap dmap = new DMap();
if (isConnRxNo()) {// 连接医嘱
oedsOrderDataStore.setFilter("RX_TYPE='" + rxType + "' AND CONN_NO=" + connNo);
oedsOrderDataStore.filter();
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if (linkNo == oedsOrderDataStore.getItemInt(i, "LINK_NO")
&& "Y".equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "LINKMAIN_FLG"))) {
dmap.setData("TAKE_DAYS", oedsOrderDataStore.getItemString(i, "TAKE_DAYS"));
dmap.setData("FREQ_CODE", oedsOrderDataStore.getItemString(i, "FREQ_CODE"));
dmap.setData("ROUTE_CODE", oedsOrderDataStore.getItemString(i, "ROUTE_CODE"));
oedsOrderDataStore.filterObject(this, "filteDataStore");
return dmap;
}
}
} else {// 非连接医嘱
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if (rxNo.equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "RX_NO"))
&& linkNo == oedsOrderDataStore.getItemInt(i, "LINK_NO")
&& "Y".equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "LINKMAIN_FLG"))) {
dmap.setData("TAKE_DAYS", oedsOrderDataStore.getItemString(i, "TAKE_DAYS"));
dmap.setData("FREQ_CODE", oedsOrderDataStore.getItemString(i, "FREQ_CODE"));
dmap.setData("ROUTE_CODE", oedsOrderDataStore.getItemString(i, "ROUTE_CODE"));
return dmap;
}
}
}
return null;
}

/**
* @方法名:clearNoLinkOrder
* @功能描述:清除没有连接主项的医嘱信息
* @创建人:tong_lzhi
* @创建时间:2011-8-15下午01:10:48
* @修改人:
* @修改时间:
*/
private void clearNoLinkOrder() {
if (isConnRxNo()) {// 连接处方
DMap map = oedsOrderDataStore.getAllData();
int count = map.getCount();
for (int i = 0; i < count; i++) {
int linkNo = map.getInt("LINK_NO", i);
if (linkNo == 0) {
continue;
}
int connNo = map.getInt("CONN_NO", i);
if (!isHasMainLinkNo("", linkNo, connNo)) {
setNoLinkOrderLinkNo(map.getValue("RX_NO", i), linkNo, connNo, map.getValue("RX_TYPE", i));
}
}
} else {// 非连接处方
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
int linkNo = oedsOrderDataStore.getItemInt(i, "LINK_NO");
if (linkNo == 0) {
continue;
}
int connNo = oedsOrderDataStore.getItemInt(i, "CONN_NO");
String rxNo = oedsOrderDataStore.getItemString(i, "RX_NO");
String type = oedsOrderDataStore.getItemString(i, "RX_TYPE");
if (!isHasMainLinkNo(rxNo, linkNo, connNo)) {
setNoLinkOrderLinkNo(rxNo, linkNo, connNo, type);
}
}
}
}

/**
* @方法名:setNoLinkOrderLinkNo
* @功能描述:设置没有主项的细项为空值
* @param rxNo
* @param linkNo
* @param connNo
* @param rxType
* @创建人:tong_lzhi
* @创建时间:2011-8-15下午02:20:22
* @修改人:
* @修改时间:
*/
private void setNoLinkOrderLinkNo(String rxNo, int linkNo, int connNo, String rxType) {
if (isConnRxNo()) {// 连接处方
oedsOrderDataStore.setFilter("RX_TYPE='" + rxType + "' AND CONN_NO=" + connNo);
oedsOrderDataStore.filter();
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if (linkNo == oedsOrderDataStore.getItemInt(i, "LINK_NO")) {
oedsOrderDataStore.setItem(i, "LINK_NO", "");
}
}
oedsOrderDataStore.filterObject(this, "filteDataStore");
} else {// 非连接医嘱
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if (rxNo.equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "RX_NO"))
&& linkNo == oedsOrderDataStore.getItemInt(i, "LINK_NO")) {
oedsOrderDataStore.setItem(i, "LINK_NO", "");
}
}
}
}

/**
* @方法名:isHasMainLinkNo
* @功能描述:查看当前连接医嘱是否有主项
* @param rxNo
* @param linkNo
* @param connNo
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-15下午01:53:29
* @修改人:
* @修改时间:
*/
private boolean isHasMainLinkNo(String rxNo, int linkNo, int connNo) {
if (isConnRxNo()) {// 连接医嘱
DMap map = oedsOrderDataStore.getAllData();
int count = map.getCount();
for (int i = 0; i < count; i++) {
int storeConnNo = map.getInt("CONN_NO", i);
if (storeConnNo == connNo && map.getInt("LINK_NO", i) == linkNo
&& "Y".equalsIgnoreCase(map.getValue("LINKMAIN_FLG", i))) {
return true;
}
}
} else {
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if (rxNo.equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "RX_NO"))
&& linkNo == oedsOrderDataStore.getItemInt(i, "LINK_NO")
&& "Y".equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "LINKMAIN_FLG"))) {
return true;
}
}
}
return false;
}

/**
* @方法名:setMedRowValue
* @功能描述:设置连接医嘱所有连接细项的值
* @param medStore
* @param row
* @param columnName
* @param linkNo
* @创建人:tong_lzhi
* @创建时间:2011-8-12下午02:41:16
* @修改人:
* @修改时间:
*/
private void setMedRowValue(DDataStore medStore, int row, String columnName, int linkNo) {
String code = medStore.getItemString(row, columnName);
if (isConnRxNo()) {// 连接处方签
String rxType = medStore.getItemString(row, "RX_TYPE");
String connNo = medStore.getItemString(row, "CONN_NO");
medStore.setFilter("RX_TYPE='" + rxType + "' AND CONN_NO=" + connNo);
medStore.filter();
int count = medStore.rowCount();
for (int i = 0; i < count; i++) {
if (linkNo == medStore.getItemInt(i, "LINK_NO")// 并且未收费
&& !"Y".equalsIgnoreCase(medStore.getItemString(i, "BILL_FLG"))) {
// 设置属性
updateMedParmeter(i, columnName, code);
// 重新计算总量
sumMedQty(i);
}
}
medStore.filterObject(this, "filteDataStore");
} else {// 非连接处方签
int count = medStore.rowCount();
for (int i = 0; i < count; i++) {
if (linkNo == medStore.getItemInt(i, "LINK_NO")// 并且未收费
&& !"Y".equalsIgnoreCase(medStore.getItemString(i, "BILL_FLG"))) {
// 设置属性
updateMedParmeter(i, columnName, code);
// 重新计算总量
sumMedQty(i);
}
}
}
}

/**
* @方法名:onCtrTableModified
* @功能描述: 管制药品改变事件
* @创建人:tong_lzhi
* @创建时间:2011-6-22下午02:43:45
* @修改人:
* @修改时间:
*/
public void onCtlTableModified() {
DDataStore ctrStore = ctlTable.getDataStore();
int column = ctlTable.getModifiedColumn();
int row = ctlTable.getModifiedRow();
String columnName = ctlTable.getColumnName(column);
int linkNo = ctrStore.getItemInt(row, "LINK_NO");
// 连合医嘱
if ("LINKMAIN_FLG".equalsIgnoreCase(columnName)) {
doLinkOrder(row, TypeTool.getString(ctlComRxno.getValue()));
} else if ("LINK_NO".equalsIgnoreCase(columnName)) {
// 判断是否有值
if (linkNo == 0 || !ctrStore.isActive(row)) {
ctrStore.setItem(row, "LINK_NO", "");
ctrStore.setItem(row, "LINKMAIN_FLG", "N");
} else {
String isChecked = "N";
if (!checkLinkNo(linkNo, row)) {
isChecked = "Y";
}
ctrStore.setItem(row, "LINKMAIN_FLG", isChecked);
if (!"Y".equalsIgnoreCase(isChecked)) {
setMainLinkData(row, linkNo);
}
}
// 清除没有主项的细项组号
clearNoLinkOrder();
}
// 判断是否是ORDER_CODE触发事件
else if ("ORDER_NAME".equalsIgnoreCase(columnName)) {
String orderCode = ctrStore.getItemString(row, "ORDER_NAME");
String exeDeptCode = TypeTool.getString(ctlDeptCombox.getValue());// 执行科室
if (orderCode == null || orderCode.trim().length() == 0) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
} else {
return;
}
}
// 2.验证是否是过敏药品
String ergName = getNameByCodeFromAllErg(orderCode);
if (ergName != null) {
if (messageBox(MessageTool.message("T0035", ergName), DControl.YES_NO_OPTION) != 1) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
} else {
deleteRow();// 删除当前行
return;
}
}
}
// 3.验证是否已经开立
String orderName = getNameByCodeFromDataStore(orderCode, row, 2);
if (orderName != null) {
if (messageBox(MessageTool.message("T0034", orderName), DControl.YES_NO_OPTION) != 1) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
} else {
deleteRow();// 删除当前行
return;
}
}
}
DMap map = new DMap(BaseFeeTool.getTool().getCtlFeeByCode(orderCode));// 药品信息
// 4.是否有结果
if (map.getCount() <= 0) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
map = new DMap(BaseFeeTool.getTool().getCtlFeeByCode(orderCode));
} else {
ctrStore.setItem(row, "ORDER_NAME", "");
ctlTable.setDSValue();
return;
}
}
// 6.剂型
String routeCode = map.getValue("ROUTE_CODE", 0);// 获得用法code
if (!checkRoute(ctrStore, routeCode, row)) {
if (messageBox("您开立的药品剂型与当前处方签不相符,是否在新的处方签开立?", DControl.YES_NO_OPTION) == 1) {
ctrStore.setItem(row, "ORDER_NAME", "");
String rxNo = newRxno(0);
oedsOrderDataStore.setItem(0, "RX_NO", rxNo);
setMedTableData(ctrStore, 0, map, orderCode, exeDeptCode);
ctlTable.setModifiedColumn(2);
ctlTable.setModifiedRow(0);
ctlTable.setSelectedRow(0);
baseTableModified(2);
return;
}
}
// begin
// 1.验证是否达到处方签数量
if (getPhaCount(row) > pageNum) {
if (messageBox("已经达到处方签最大药品数量,是否在新的处方签中开立?", DControl.YES_NO_OPTION) == 1) {
ctrStore.setItem(row, "ORDER_NAME", "");
// 当前处方签信息
DMap comMap = ctlComRxno.getComboData().getRow(ctlComRxno.getComboIndex());
if (ctlAllOrder.isVisible() && ctlAllOrder.isSelected()) {// 连处显示
String rxNo = newRxno(comMap.getInt("CONN_NO"));
oedsOrderDataStore.setItem(row, "RX_NO", rxNo);
} else {//
if (comMap.getInt("CONN_NO") != 0) {
newRxno(comMap.getInt("CONN_NO"));
} else {// 主连接处方签
int connNo = getConnNo();
comMap.setData("CONN_FLG", "Y");
comMap.setData("CONN_NO", connNo);
int count = oedsOrderDataStore.rowCount();
for (int r = 0; r < count; r++) {// 设置为主连接处方签
oedsOrderDataStore.setItem(r, "CONN_NO", connNo);
oedsOrderDataStore.setItem(r, "CONN_FLG", "Y");
}
newRxno(connNo);
}
setMedTableData(ctrStore, 0, map, orderCode, exeDeptCode);
ctlTable.setModifiedColumn(2);
ctlTable.setModifiedRow(0);
ctlTable.setSelectedRow(0);
baseTableModified(2);
return;
}
}
}
// end
setMedTableData(ctrStore, row, map, orderCode, exeDeptCode);// 填充数据
// 更改一项触发重新计算
} else if ("MEDI_QTY".equalsIgnoreCase(columnName) || "GIVEBOX_FLG".equalsIgnoreCase(columnName)) {
sumMedQty(row);
} else if ("TAKE_DAYS".equalsIgnoreCase(columnName)) {// 日分
// 判断是否是连接医嘱
if (linkNo == 0) {
sumMedQty(row);
} else if (isHasBillOrder(row, linkNo)) {// 是否有已经收费的医嘱
messageBox(MessageTool.message("T0031", "部分医嘱已经收费&修改"));
setMainLinkData(row, linkNo);// 重新设置数据
} else {
setMedRowValue(oedsOrderDataStore, row, columnName, linkNo);
}
} else if ("FREQ_CODE".equalsIgnoreCase(columnName)) {
// 判断是否是连接医嘱
if (linkNo == 0) {
sumMedQty(row);
} else if (isHasBillOrder(row, linkNo)) {// 是否有已经收费的医嘱
messageBox(MessageTool.message("T0031", "部分医嘱已经收费&修改"));
setMainLinkData(row, linkNo);// 重新设置数据
} else {
setMedRowValue(oedsOrderDataStore, row, columnName, linkNo);
}
} else if ("DISPENSE_QTY".equalsIgnoreCase(columnName)) {
getTakeQty(row);
} else if ("ROUTE_CODE".equalsIgnoreCase(columnName)) {
// 判断是否是连接医嘱
if (linkNo != 0) {
setMedRowValue(oedsOrderDataStore, row, columnName, linkNo);
}
}
baseTableModified(2);
}

/**
* @方法名:setMedTableData
* @功能描述:填充西药数据
* @param medStore
* @param row
* @param map
* @param orderCode
* @创建人:tong_lzhi
* @创建时间:2011-7-29上午11:18:42
* @修改人:
* @修改时间:
*/
private void setMedTableData(DDataStore medStore, int row, DMap map, String orderCode, String exeDept) {
medStore.setItem(row, "ROUTE_CODE", map.getData("ROUTE_CODE", 0));// 用法
String hexpCode = map.getValue("CHARGE_HOSP_CODE", 0);// HEXP_CODE
medStore.setItem(row, "HEXP_CODE", hexpCode);
medStore.setItem(row, "REXP_CODE", BaseChargeHpspTool.getToolInstance().returnChargeCode(hexpCode));// REXP_CODE
medStore.setItem(row, "ORDER_CODE", orderCode);// order code
medStore.setItem(row, "INSPAY_TYPE", map.getValue("INSPAY_TYPE", 0));// 自费‘医保
medStore.setItem(row, "ORDER_NAME", map.getValue("ORDER_NAME", 0));// orderName+
medStore.setItem(row, "BILL_FLG", "N"); // 收费注记
medStore.setItem(row, "MEDI_QTY", map.getData("MEDI_QTY", 0));// 开药数量
medStore.setItem(row, "MEDI_UNIT", map.getData("MEDI_UNIT", 0));// 单位默认项
medStore.setItem(row, "FREQ_CODE", map.getData("FREQ_CODE", 0));// 频次FREQ_CODE
medStore.setItem(row, "PHA_TYPE", map.getValue("PHA_TYPE", 0));// PHA_TYPE
medStore.setItem(row, "CTRLDRUGCLASS_CODE", map.getValue("CTRLDRUGCLASS_CODE", 0));// PHA_TYPE
int days = map.getInt("TAKE_DAYS", 0);
days = days == 0 ? 1 : days;
medStore.setItem(row, "TAKE_DAYS", days);// 日分TAKE_DAYS
medStore.setItem(row, "DISPENSE_FLG", map.getData("DISPENSE_FLG", 0));// 备药DISPENSE_FLG
medStore.setItem(row, "GIVEBOX_FLG", map.getData("GIVEBOX_FLG", 0));// 盒发药注记GIVEBOX_FLG
medStore.setItem(row, "DISPENSE_UNIT", map.getData("DISPENSE_UNIT", 0));// 发药单位DISPENSE_UNIT
medStore.setItem(row, "URGENT_FLG", map.getData("URGENT_FLG", 0)); // 急作URGENT_FLG
medStore.setItem(row, "OWN_PRICE", map.getData("OWN_PRICE", 0));// 价格
medStore.setItem(row, "EXEC_DEPT_CODE", exeDept);
String optCode = map.getValue("OPTITEM_CODE", 0);// 检体
medStore.setItem(row, "OPTITEM_CODE", optCode);
setStoreBaseData(medStore, row, map, 0);// 基础数据
// 计算
sumMedQty(row);
}

/**
* @方法名:getUpRxInfo
* @功能描述:获得上一处方签的医嘱用法信息
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-29上午10:37:17
* @修改人:
* @修改时间:
*/
private String getUpRxInfo(int connNo, String rxNo, DDataStore store) {
String bufferString = store.isFilter() ? DDataStore.FILTER : DDataStore.PRIMARY;
DMap data = store.getBuffer(bufferString);
int count = data.getCount();
for (int i = 0; i < count; i++) {
// 连接号相同 并且不是当前处方签
if (connNo == data.getInt("CONN_NO", i) && !rxNo.equalsIgnoreCase(data.getValue("RX_NO", i))) {
return data.getValue("ROUTE_CODE", i);
}
}
return null;
}

private boolean checkRoute(DDataStore store, String routeCode, int row) {
String lastRoute = null;
if (row == 0) {// 第一行
if (getActiveRowCount(store) > 1) {
lastRoute = store.getItemString(1, "ROUTE_CODE");
} else {// 单一行
DMap rowMap = store.getRowMap(row);// 准备取连接号 查看是否是连接处方签
int connNo = rowMap.getInt("CONN_NO");
if (connNo == 0) {
return true;
} else {
lastRoute = getUpRxInfo(connNo, rowMap.getValue("RX_NO"), store);
}
}
} else {
lastRoute = store.getItemString(0, "ROUTE_CODE");// 始终是和第一行比较
}
DMap routeMap = DSWorkStationTool.getTool().getRouteByCode(routeCode);// 获得当前药品用法详细信息
DMap lastRouteMap = DSWorkStationTool.getTool().getRouteByCode(lastRoute);// 获得上一药品用法详细信息
String routeType = "";// 当前药品的分类信息
String lastRouteType = "";
if (routeMap != null && lastRouteMap != null) {
routeType = routeMap.getValue("CLASSIFY_TYPE");// 获得药品用法大分类
lastRouteType = lastRouteMap.getValue("CLASSIFY_TYPE");
} else {
return true;
}
if ("".equalsIgnoreCase(routeType) || "".equalsIgnoreCase(lastRouteType)) {// 未获得到药品分类信息
System.out.println("药品用法未获得到");
return true;
}
if (routeType.equalsIgnoreCase(lastRouteType)) {
return true;
} else {
if (OEDSROUTETYPE.indexOf(routeType) != -1 && OEDSROUTETYPE.indexOf(lastRouteType) != -1) {
return true;
}
return false;
}
}

/**
* @方法名:getActiveRowCount
* @功能描述:获得有效行
* @param store
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-29上午10:27:28
* @修改人:
* @修改时间:
*/
private int getActiveRowCount(DDataStore store) {
int result = 0;
int count = store.rowCount();
for (int i = 0; i < count; i++) {
if (store.isActive(i)) {
++result;
}
}
return result;
}

/**
* @方法名:getPhaCount
* @功能描述:从处方签中获得开药的个数
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-20上午11:13:49
* @修改人:
* @修改时间:
*/
private int getPhaCount(int row) {
int count = 0;
DCheckBox cbo = getAllOrder();
if (cbo.isVisible() && cbo.isSelected()) {// 连接处方签显示
DMap map = getRxNoCombox().getComboData().getRow(getRxNoCombox().getComboIndex());
int connNo = map.getInt("CONN_NO");
String rxNo = getLastLinkRxNo(connNo);
DMap data = oedsOrderDataStore.getAllData();
int dataCount = data.getCount();
for (int i = 0; i < dataCount; i++) {
if (connNo != 0 && data.getInt("RX_TYPE", i) == 1 && data.getInt("CONN_NO", i) == connNo) {
if (rxNo.equalsIgnoreCase(data.getValue("RX_NO", i))) {
count++;
}
}
}
} else {
count = getTable().getDataStore().rowCount();
if (oedsOrderDataStore.isActive(row)) {
--count;
}
}
return count;
}

/**
* @方法名:getAllOrder
* @功能描述:获得连处显示的复选框
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-1上午11:52:44
* @修改人:
* @修改时间:
*/
private DCheckBox getAllOrder() {
int index = tabbed.getSelectedIndex();
if (index == 2) {
return medAllOrder;
} else if (index == 4) {
return ctlAllOrder;
}
return null;
}

/**
* @方法名:getLastLinkRxNo
* @功能描述:获得最后一个处方签号
* @param connNo 连处号
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-20上午11:39:37
* @修改人:
* @修改时间:
*/
private String getLastLinkRxNo(int connNo) {
String result = "";
DMap data = oedsOrderDataStore.getAllData();
int count = data.getCount();
for (int i = 0; i < count; i++) {
if (connNo != 0 && data.getInt("RX_TYPE", i) == 1 && data.getInt("CONN_NO", i) == connNo) {
String rxNo = data.getValue("RX_NO", i);
if (rxNo.compareTo(result) > 0) {
result = rxNo;
}
}
}
return result;
}

/**
* @方法名:updateMedParmeter
* @功能描述:更改连合医嘱属性
* @param row
* @param parmeter
* @param value
* @创建人:tong_lzhi
* @创建时间:2011-7-20下午02:44:12
* @修改人:
* @修改时间:
*/
private void updateMedParmeter(int row, String parmeter, String value) {
getTable().getDataStore().setItem(row, parmeter, value);
}

/**
* @方法名:doLinkOrder
* @功能描述:连接医嘱
* @param row
* @param rxNo
* @创建人:tong_lzhi
* @创建时间:2011-6-22下午02:44:21
* @修改人:
* @修改时间:
*/
private void doLinkOrder(int row, String rxNo) {
DDataStore store = getTable().getDataStore();
int groupNo = store.getItemInt(row, "ORDERSET_GROUP_NO");
// 1.选定
if ("Y".equalsIgnoreCase(store.getItemString(row, "LINKMAIN_FLG"))) {
if (store.getItemString(row, "RX_NO").equalsIgnoreCase(rxNo)) {
int linkNo = getLinkNo(rxNo, row);
if (groupNo != 0) {
setChilrenValueByGroupNo(rxNo, "LINK_NO", linkNo, groupNo, null, false);// 子项
}
store.setItem(row, "LINK_NO", linkNo);// 主项
}
// 2.取消连接医嘱
} else {
int linkNo = store.getItemInt(row, "LINK_NO");
// 取消连接子项
int count = store.rowCount();
for (int i = 0; i < count; i++) {
if (store.getItemInt(i, "LINK_NO") == linkNo) {
groupNo = store.getItemInt(i, "ORDERSET_GROUP_NO");
if (groupNo != 0) {
setChilrenValueByGroupNo(rxNo, "LINK_NO", "", groupNo, null, false);
}
store.setItem(i, "LINK_NO", "");
}
}
}
}

/**
* @方法名:setChilrenValueByGroupNo
* @功能描述:集合医嘱根据组号设置值
* @param rxNo 处方签号
* @param column 列名
* @param value 值
* @param groupNo 集合医嘱号
* @param flg 是否重新计算总量
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-12上午09:08:59
* @修改人:
* @修改时间:
*/
private Map setChilrenValueByGroupNo(String rxNo, String column, Object value, int groupNo,
String orderSetCode, boolean flg) {
oedsOrderDataStore.setFilter("RX_NO='" + rxNo + "' AND ORDERSET_GROUP_NO=" + groupNo
+ " AND SETMAIN_FLG <>'Y'");
oedsOrderDataStore.filter();
Map map = new HashMap();
double total = 0.0;
double totPrice = 0.0;
double aramt = 0.0;
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
String orderCode = oedsOrderDataStore.getItemString(i, "ORDER_CODE");
double chilrenCount = BaseFeeTool.getTool().getChilrenCount(orderCode, orderSetCode, REGION);
if ("MEDI_QTY".equalsIgnoreCase(column)) {// 用量相乘
double newzQty = TypeTool.getInt(value);
oedsOrderDataStore.setItem(i, "MEDI_QTY", chilrenCount * newzQty);
} else {
oedsOrderDataStore.setItem(i, column, value);
}
if (flg) {
sumTmtQty(i);// 总量计算
}
double amt = oedsOrderDataStore.getItemDouble(i, "OWN_PRICE")
* oedsOrderDataStore.getItemDouble(i, "DOSAGE_QTY");
// 重新计算单价和总价
total += amt;
aramt += oedsOrderDataStore.getItemDouble(i, "AR_AMT");
totPrice += (oedsOrderDataStore.getItemDouble(i, "OWN_PRICE") * chilrenCount);
}
oedsOrderDataStore.filterObject(this, "filteDataStore");
map.put("PRICE", totPrice);
map.put("TOTAL", total);
map.put("AR_AMT", aramt);
return map;
}

/**
* @方法名:checkLinkNo
* @功能描述:验证组号是否存在
* @param linkNo
* @param row
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-19上午09:42:13
* @修改人:
* @修改时间:
*/
private boolean checkLinkNo(int linkNo, int row) {
boolean isHas = false;
OedsOrderDataStore store = (OedsOrderDataStore) getTable().getDataStore();
if (isConnRxNo()) {// 连接处方签
DMap allData = store.getAllData();
int rowId = store.getID(row, DDataStore.PRIMARY);
int count = allData.getCount();
for (int i = 0; i < count; i++) {
int no = allData.getInt("LINK_NO", i);
int curId = allData.getInt("#ID#", i);
if (rowId != curId && no == linkNo// 非当前行、连接号、有主项
&& "Y".equalsIgnoreCase(allData.getValue("LINKMAIN_FLG", i))) {
isHas = true;
}
}
} else {// 非连接处方签
int count = store.rowCount();
for (int i = 0; i < count; i++) {
int no = store.getItemInt(i, "LINK_NO");
if (i != row && no == linkNo && TypeTool.getBoolean(store.getItemData(i, "LINKMAIN_FLG"))) {
isHas = true;
}
}
}
return isHas;
}

/**
* @方法名:getLinkNo
* @功能描述:获取最大组号
* @param rxNo
* @return
* @创建人:tong_lzhi
* @创建时间:2011-6-23上午09:42:23
* @修改人:
* @修改时间:
*/
private int getLinkNo(String rxNo, int row) {
int linkNo = 0;
if (isConnRxNo()) {// 连处
DMap allData = oedsOrderDataStore.getAllData();
int rowId = getTable().getDataStore().getID(row, DDataStore.PRIMARY);
int count = allData.getCount();
for (int i = 0; i < count; i++) {
int no = allData.getInt("LINK_NO", i);
int curId = allData.getInt("#ID#", i);
if (rowId != curId && no > linkNo) {
linkNo = no;
}
}
} else {
DDataStore store = getTable().getDataStore();
int count = store.rowCount();
for (int i = 0; i < count; i++) {
int no = store.getItemInt(i, "LINK_NO");
if (i != row && no > linkNo) {
linkNo = no;
}
}
}

return linkNo + 1;

}

/**
* @方法名:getTakeQty
* @功能描述:总量计算用量(西成药)
* @param row
* @创建人:tong_lzhi
* @创建时间:2011-7-22上午09:42:40
* @修改人:
* @修改时间:
*/
private void getTakeQty(int row) {
// 1.获取当前行数据
DDataStore tempDataStore = medTable.getDataStore();
DMap order = tempDataStore.getRowMap(row);
order.setData("DOSAGE_QTY", order.getDouble("DISPENSE_QTY"));
// 2.调用计算用量方法
DMap result = TotQtyTool.getTool().getTakeQty(order);
double qty = result.getDouble("MEDI_QTY");
double dosageQty = result.getDouble("DOSAGE_QTY");
tempDataStore.setItem(row, "MEDI_QTY", qty);
tempDataStore.setItem(row, "DOSAGE_QTY", dosageQty);
// 重新计算价格
double amt = dosageQty * tempDataStore.getItemDouble(row, "OWN_PRICE");
amt = PublicsTool.round(amt, 4);
tempDataStore.setItem(row, "OWN_AMT", amt);
tempDataStore.setItem(row, "DISCOUNT_AMT", amt);
getMedCount(row, amt);// 计算折扣比例和应付金额
}

/**
* @方法名:sumMedQty
* @功能描述:计算数据(西成药)
* @param row
* @创建人:tong_lzhi
* @创建时间:2011-7-13下午02:30:24
* @修改人:
* @修改时间:
*/
private void sumMedQty(int row) {
// 1.获得DDataStore
DDataStore tempDataStore = getTable().getDataStore();
DMap dmap = tempDataStore.getRowMap(row);
// 2.计算总量
DMap result = TotQtyTool.getTool().getTotQty(dmap);
// 3.获得单价
double price = tempDataStore.getItemDouble(row, "OWN_PRICE");
// 4.获得总量
double totqty = result.getDouble("DOSAGE_QTY");
double amt = totqty * price;
amt = PublicsTool.round(amt, 4);
// 5.获得发药单位和库存单位
int dispenseUnit = result.getInt("DOSAGE_UNIT"); // 发药单位
int dosageUnit = result.getInt("DOSAGE_UNIT"); // 实际发药单位
int stockUnit = result.getInt("STOCK_UNIT"); // 库存单位
double dispense_qty = totqty;// 总量
double dosage_qty = totqty;// 扣库数量
// 6.如果是盒发药 发药数量和单位 按库存单位
if (tempDataStore.getItemString(row, "GIVEBOX_FLG").equalsIgnoreCase("Y")) {
dispense_qty = result.getDouble("DISPENSE_QTY");
dispenseUnit = result.getInt("STOCK_UNIT");
}
// 7.更新显示发药数量及单位数据
tempDataStore.setItem(row, "DISPENSE_UNIT", dispenseUnit);
tempDataStore.setItem(row, "DISPENSE_QTY", dispense_qty);
// 8.更新实际发药单位及数量单位
tempDataStore.setItem(row, "DOSAGE_UNIT", dosageUnit);
tempDataStore.setItem(row, "DOSAGE_QTY", dosage_qty);
// 9.库存单位、金额
tempDataStore.setItem(row, "STOCK_UNIT", stockUnit);
tempDataStore.setItem(row, "OWN_AMT", amt);
tempDataStore.setItem(row, "DISCOUNT_AMT", amt);
getMedCount(row, amt);// 计算折扣比例和应付金额
boolean isHas = InventoryTool.getTool().getStockAmount(
tempDataStore.getItemString(row, "EXEC_DEPT_CODE"),
tempDataStore.getItemString(row, "ORDER_CODE"), REGION, TypeTool.getInt(dosage_qty));
if(!isHas){
messageBox("'"+tempDataStore.getItemString(row, "ORDER_NAME")+"'库存不足");
}
}

/**
* @方法名:getMedCount
* @功能描述:计算西药折扣比例实收金额ownAmt 总价
* @创建人:tong_lzhi
* @创建时间:2011-8-4下午05:03:21
* @修改人:
* @修改时间:
*/
private void getMedCount(int row, double ownAmt) {
DMap parterMap = new DMap();
parterMap.setData("HOSP_AREA", REGION);
parterMap.setData("LDENTITY_CODE", patInfo.getValue("LDENTITY1", 0));// 身份一
parterMap.setData("CHARGE_HOSP_CODE", oedsOrderDataStore.getItemData(row, "HEXP_CODE"));
parterMap.setData("OWN_AMT", ownAmt);
DMap resultMap = BaseChargeDetailTool.getInstanceTool().getDidsCountRate(parterMap);// 折扣比例
String zkbl = resultMap.getValue("DISCOUNT_RATE");
oedsOrderDataStore.setItem(row, "DISCOUNT_RATE", zkbl);// //折扣比例
oedsOrderDataStore.setItem(row, "AR_AMT", resultMap.getDouble("AR_AMT"));// //应付金额
}

/**
* @方法名:getRX_NO
* @功能描述:获得处方签号随机
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-19上午09:42:55
* @修改人:
* @修改时间:
*/
private String getRX_NO() {
String value = new Date().getTime() + "";
value += (int) (Math.random() * 10000);
return value;
}

/**
* @方法名:getUpdateSql
* @功能描述:获得要更新的SQL
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-13下午02:30:13
* @修改人:
* @修改时间:
*/
public Object[] getOedsUpdateSql() {
exaTable.acceptText();
tmtTable.acceptText();
medTable.acceptText();
chnTable.acceptText();
ctlTable.acceptText();
DMap numMap = setOedsStoreSaveValue();// 获得领药号和柜台号
// 获得要删除的数据 并生成日志 sql
String[] insertSql = getInsertSql();
String[] oedsExeSql = oedsOrderDataStore.getUpdateSQL();
Object[] result = new Object[] { StringTool.copyArray(insertSql, oedsExeSql), numMap };
return result;
}

/**
* @方法名:getInsertSql
* @功能描述:获得要删除的数据并生成insert SQL
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-16下午03:45:11
* @修改人:
* @修改时间:
*/
private String[] getInsertSql() {
DMap delData = oedsOrderDataStore.getBuffer(DDataStore.DELETE);
List sqlList = new ArrayList();
String[] columns = oedsOrderDataStore.getColumns();
int count = delData.getCount();
for (int i = 0; i < count; i++) {
if (!delData.getBoolean("#ACTIVE#", i)) {
continue;
}
String sql = "INSERT INTO OEDS_ORDER_HISTORY (" + getColumString(columns) + ") ";
sql += "VALUES ( " + getValues(delData.getRow(i), columns) + ") ";
sqlList.add(sql);
}
return (String[]) sqlList.toArray(new String[sqlList.size()]);
}

/**
* @方法名:getValues
* @功能描述:获得值
* @param data
* @param columns
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-16下午04:21:07
* @修改人:
* @修改时间:
*/
private String getValues(DMap data, String[] columns) {
StringBuffer buf = new StringBuffer("");
for (String column : columns) {
buf.append("'" + data.getValue(column) + "',");
}
String result = buf.toString();
if (result.endsWith(",")) {
result = result.substring(0, result.length() - 1);
}
return result;
}

/**
* @方法名:getColumString
* @功能描述:获得列的字符串
* @param colums
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-16下午04:16:07
* @修改人:
* @修改时间:
*/
private String getColumString(String[] colums) {
StringBuffer buf = new StringBuffer("");
for (String str : colums) {
buf.append(str + ",");
}
String result = buf.toString();
if (result.endsWith(",")) {
result = result.substring(0, result.length() - 1);
}
return result;
}

/**
* @方法名:setOedsStoreSaveValue
* @功能描述:在保存之前设置柜台号和领药号
* @创建人:tong_lzhi
* @创建时间:2011-8-1下午08:07:45
* @修改人:
* @修改时间:
*/
private DMap setOedsStoreSaveValue() {
DMap returnValue = new DMap();
Map resultMap = new HashMap();
String bufferString = oedsOrderDataStore.isFilter() ? DDataStore.FILTER : DDataStore.PRIMARY;
int rowCountD = oedsOrderDataStore.isFilter() ? oedsOrderDataStore.rowCountFilter()
: oedsOrderDataStore.rowCount();
List rowIdNew = new java.util.ArrayList();
// 新增行
for (int i = 0; i < rowCountD; i++) {
if (!oedsOrderDataStore.isNew(i, bufferString)) {
continue;
}
if (!oedsOrderDataStore.isActive(i, bufferString)) {
continue;
}
DMap tempOrder = oedsOrderDataStore.getRowMap(i, bufferString);
tempOrder.setData("ONLYID", oedsOrderDataStore.getID(i, bufferString));
rowIdNew.add(tempOrder);
}
if (rowIdNew.size() == 0) {
return returnValue;// 表示没有新增行
}
// 所有的RXNO
for (int i = 0; i < rowCountD; i++) {
if (!oedsOrderDataStore.isActive(i, bufferString)) {
continue;
}
String temp = TypeTool.getString(oedsOrderDataStore.getItemData(i, "RX_TYPE", bufferString))
+ TypeTool.getString(oedsOrderDataStore.getItemData(i, "EXEC_DEPT_CODE", bufferString));
putDMapToMap(resultMap, temp, TypeTool.getString(oedsOrderDataStore.getItemData(i, "RX_NO",
bufferString)));
}
Iterator iterator = resultMap.keySet().iterator();
while (iterator.hasNext()) {
String key = TypeTool.getString(iterator.next());
if (key.startsWith("1")) {// 西药
Set setMed = (Set) resultMap.get(key);
String orgCode = key.substring(1);
int[] nums = getNum(setMed, orgCode, 0, returnValue);
for (int index = 0; index < rowIdNew.size(); index++) {
DMap temp = (DMap) rowIdNew.get(index);
for (int i = 0; i < rowCountD; i++) {
if (oedsOrderDataStore.getID(i, bufferString) == temp.getInt("ONLYID")) {
if ("1".equals(TypeTool.getString(oedsOrderDataStore.getItemData(i, "RX_TYPE",
bufferString)))) {
oedsOrderDataStore.setItem(i, "COUNTER_NO", nums[0], bufferString);
oedsOrderDataStore.setItem(i, "PRESCRIPT_NO", nums[1], bufferString);
}
}
}
}
}
if (key.startsWith("2")) {// 管制药品
Set setCtl = (Set) resultMap.get(key);
String orgCode = key.substring(1);
int[] nums = getNum(setCtl, orgCode, 1, returnValue);
for (int index = 0; index < rowIdNew.size(); index++) {
DMap temp = (DMap) rowIdNew.get(index);
for (int i = 0; i < rowCountD; i++) {
if (oedsOrderDataStore.getID(i, bufferString) == temp.getInt("ONLYID")) {
if ("2".equals(TypeTool.getString(oedsOrderDataStore.getItemData(i, "RX_TYPE",
bufferString)))) {
oedsOrderDataStore.setItem(i, "COUNTER_NO", nums[0], bufferString);
oedsOrderDataStore.setItem(i, "PRESCRIPT_NO", nums[1], bufferString);
}
}
}
}
}
}
return returnValue;
}

/**
* @方法名:getNum
* @功能描述:获得领药号
* @return 0 柜台 1领药号
* @创建人:tong_lzhi
* @创建时间:2011-8-2上午10:24:50
* @修改人:
* @修改时间:
*/
private int[] getNum(Set set, String orgCode, int type, DMap map) {
String rxType = type == 0 ? "1" : "2";// 西药为1 管制为2
Iterator iterator = set.iterator();
int GTNO = 0;
int LYNO = 0;
while (iterator.hasNext()) {
String rxNo = (String) iterator.next();
if (!isNewRxNo(rxNo, rxType)) {
if (!isBill(rxNo, rxType)) {// 没有收费处方签
int[] nums = getNumByRxNo(rxNo, rxType);
if (nums[0] != 0 && nums[1] != 0) {
if (!isUse(nums[0], nums[1], rxType)) {// 验证处方签未收费
GTNO = nums[0];
LYNO = nums[1];
}
}
}
}
}
if (GTNO == 0 || LYNO == 0) {// 获取
DMap result = BaseTool.getInstance().getCounterData(REGION, orgCode, type);
GTNO = result.getInt("COUNTER_NO");
LYNO = result.getInt("UPDATE_PRESCRIPT_NO");
map.addData("TYPE", type);
map.addData("COUNTER_NO", GTNO);
map.addData("PRESCRIPT_NO", LYNO);
map.addData("HOSP_AREA", REGION);
map.addData("ORGCODE", orgCode);
}
return new int[] { GTNO, LYNO };
}

/**
* @方法名:isUse
* @功能描述:验证领药号和柜台号处方签是否已经收费
* @param gtNo
* @param lyNo
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-2上午11:14:28
* @修改人:
* @修改时间:
*/
private boolean isUse(int gtNo, int lyNo, String rxType) {
oedsOrderDataStore.setFilter("COUNTER_NO=" + gtNo + " AND PRESCRIPT_NO=" + lyNo);
oedsOrderDataStore.filter();
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if ("Y".equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "BILL_FLG"))
&& rxType.equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "RX_TYPE"))) {
oedsOrderDataStore.filterObject(this, "filteDataStore");
return true;
}
}
oedsOrderDataStore.filterObject(this, "filteDataStore");
return false;
}

/**
* @方法名:getNumByRxNo
* @功能描述:根据处方签号获得领药号、柜台号
* @param rxNo
* @return index0 柜台,index1 领药号
* @创建人:tong_lzhi
* @创建时间:2011-8-2上午11:11:28
* @修改人:
* @修改时间:
*/
private int[] getNumByRxNo(String rxNo, String rxType) {
int GTNO = 0;
int LYNO = 0;
oedsOrderDataStore.setFilter("RX_NO='" + rxNo + "'");
oedsOrderDataStore.filter();
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if (oedsOrderDataStore.getItemInt(i, "COUNTER_NO") != 0
&& oedsOrderDataStore.getItemInt(i, "PRESCRIPT_NO") != 0
&& rxType.equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "RX_TYPE"))) {
GTNO = oedsOrderDataStore.getItemInt(i, "COUNTER_NO");
LYNO = oedsOrderDataStore.getItemInt(i, "PRESCRIPT_NO");
}
}
int[] nums = new int[] { GTNO, LYNO };
return nums;
}

/**
* @方法名:isBill
* @功能描述:是否收费
* @param rxNo
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-2上午10:44:34
* @修改人:
* @修改时间:
*/
private boolean isBill(String rxNo, String rxType) {
oedsOrderDataStore.setFilter("RX_NO='" + rxNo + "'");
oedsOrderDataStore.filter();
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if ("Y".equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "BILL_FLG"))// 收费并且是同一类处方签
&& rxType.equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "RX_TYPE"))) {
oedsOrderDataStore.filterObject(this, "filteDataStore");
return true;
}
}
oedsOrderDataStore.filterObject(this, "filteDataStore");
return false;
}

/**
* @方法名:isNewRxNo
* @功能描述:处方签是否是新增处方签
* @param rxNo
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-2上午10:41:53
* @修改人:
* @修改时间:
*/
private boolean isNewRxNo(String rxNo, String rxType) {
oedsOrderDataStore.setFilter("RX_NO='" + rxNo + "'");
oedsOrderDataStore.filter();
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if (!oedsOrderDataStore.isNew(i)// 不是新并且是同一类处方签
&& rxType.equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "RX_TYPE"))) {
return false;
}
}
return true;
}

/**
* @方法名:putDMapToMap
* @功能描述:整理数据
* @param map
* @param key
* @param value
* @创建人:tong_lzhi
* @创建时间:2011-8-2上午09:37:54
* @修改人:
* @修改时间:
*/
private void putDMapToMap(Map map, Object key, Object rxNo) {
if (map.containsKey(key)) {
Set set = (Set) map.get(key);
set.add(rxNo);
map.put(key, set);
} else {
Set set = new HashSet();
set.add(rxNo);
map.put(key, set);
}
}

/**
* @方法名:retrieveDataStore
* @功能描述:保存成功后要更新DataStore的数据
* @创建人:tong_lzhi
* @创建时间:2011-7-13下午02:30:02
* @修改人:
* @修改时间:
*/
public void retrieveDataStore() {
oedsOrderDataStore.resetModify();
// 设置处方签Combox
DTextField combox = getRxNoCombox();
Object comValue = combox.getValue();
cleanUpComboRxno(combox);
combox.setValue(comValue);
changeTab();
}

/**
* @方法名:filteDataStore
* @功能描述:过滤方法
* @param data
* @param row
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-19上午09:43:07
* @修改人:
* @修改时间:
*/
public boolean filteDataStore(DMap data, int row) {
String value = "5";
boolean flg = true;
int index = tabbed.getSelectedIndex();
switch (index) {
case 0:// 检验检查
value = "5";
flg = exaTableFilte(data, row);
break;
case 1:// 诊疗项目
value = "4";
flg = tmtTableFilter(data, row);
break;
case 2:// 西药
value = "1";
DMap map = medComRxno.getComboData().getRow(medComRxno.getComboIndex());
if (map.getInt("CONN_NO") != 0 && medAllOrder.isSelected()) {
flg = medTableConnFilter(data.getInt("CONN_NO", row));
} else {
flg = medTableFilte(data.getValue("RX_NO", row));
}
break;
case 3:// 草药
value = "3";
flg = chnTableFilter(data, row);
break;
case 4:// 管制药品CTL_TABLE
value = "2";
DMap ctlmap = ctlComRxno.getComboData().getRow(ctlComRxno.getComboIndex());
if (ctlmap.getInt("CONN_NO") != 0 && ctlAllOrder.isSelected()) {
flg = ctlTableConnFilter(data.getInt("CONN_NO", row));
} else {
flg = ctlTableFilte(data.getValue("RX_NO", row));
}
break;
default:
value = "5";
break;
}
return data.getValue("RX_TYPE", row).equals(value) && flg;
}

/**
* @方法名:tmtTableFilter
* @功能描述:诊疗项目过滤
* @param data
* @param row
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-22上午11:26:47
* @修改人:
* @修改时间:
*/
private boolean tmtTableFilter(DMap data, int row) {
boolean rxnoFlg = false;
String rxNo = data.getValue("RX_NO", row);
if (tmtComRxno.getValue() != null) {
rxnoFlg = TypeTool.getString(tmtComRxno.getValue()).equals(rxNo);
}
boolean flg2 = data.getValue("HIDE_FLG", row).equalsIgnoreCase("N")
|| data.getValue("HIDE_FLG", row).trim().equalsIgnoreCase("");
return rxnoFlg && flg2;
}

/**
* @方法名:tmtTableFilter
* @功能描述:中药过滤
* @param data
* @param row
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-22上午11:26:47
* @修改人:
* @修改时间:
*/
private boolean chnTableFilter(DMap data, int row) {
boolean rxnoFlg = false;
String rxNo = data.getValue("RX_NO", row);
if (tmtComRxno.getValue() != null) {
rxnoFlg = TypeTool.getString(chnComRxno.getValue()).equals(rxNo);
}
return rxnoFlg;
}

/**
* @方法名:medTableFilte
* @功能描述:西成药过滤
* @param rx_no
* @return boolean
* @创建人:tong_lzhi
* @创建时间:2011-6-18下午03:18:50
* @修改人:
* @修改时间:
*/
public boolean medTableFilte(String rx_no) {
boolean rxnoFlg = true;
if (medComRxno.getValue() != null) {
rxnoFlg = TypeTool.getString(medComRxno.getValue()).equals(rx_no);
}
return rxnoFlg;
}

/**
* @方法名:medTableFilte
* @功能描述:管制药品过滤
* @param rx_no
* @return boolean
* @创建人:tong_lzhi
* @创建时间:2011-6-18下午03:18:50
* @修改人:
* @修改时间:
*/
public boolean ctlTableFilte(String rx_no) {
boolean rxnoFlg = true;
if (ctlComRxno.getValue() != null) {
rxnoFlg = TypeTool.getString(ctlComRxno.getValue()).equals(rx_no);
}
return rxnoFlg;
}

/**
* @方法名:medTableConnFilter
* @功能描述:连接处方签过滤
* @param connNo
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-19上午09:06:41
* @修改人:
* @修改时间:
*/
private boolean medTableConnFilter(int connNo) {
if (connNo == 0) {
return false;
}
DMap map = medComRxno.getComboData().getRow(medComRxno.getComboIndex());
int textId = map.getInt("CONN_NO");
return textId == connNo;
}

/**
* @方法名:ctlTableConnFilter
* @功能描述:管制药品过滤
* @param connNo
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-1上午10:01:37
* @修改人:
* @修改时间:
*/
private boolean ctlTableConnFilter(int connNo) {
if (connNo == 0) {
return false;
}
DMap map = ctlComRxno.getComboData().getRow(ctlComRxno.getComboIndex());
int textId = map.getInt("CONN_NO");
return textId == connNo;
}

/**
* @方法名:exaTableFilte
* @功能描述:检验检查过滤
* @param data
* @param row
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-13下午02:29:48
* @修改人:
* @修改时间:
*/
public boolean exaTableFilte(DMap data, int row) {
boolean rxnoFlg = true;
String rx_no = data.getValue("RX_NO", row);
if (exaComRxno.getValue() != null) {
rxnoFlg = TypeTool.getString(exaComRxno.getValue()).equals(rx_no);
}
boolean flg2 = data.getValue("HIDE_FLG", row).equalsIgnoreCase("N")
|| data.getValue("HIDE_FLG", row).trim().equalsIgnoreCase("");
rxnoFlg = rxnoFlg && flg2;
return rxnoFlg;
}

/**
* @方法名:getRxNoCombox
* @功能描述:获得当前的RxNo Combox
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-13下午02:29:35
* @修改人:
* @修改时间:
*/
private DTextField getRxNoCombox() {
DTextField combox = null;
int index = tabbed.getSelectedIndex();
switch (index) {
case 0:
combox = exaComRxno;
break;
case 1:
combox = tmtComRxno;
break;
case 2:
combox = medComRxno;
break;
case 3:
combox = chnComRxno;
break;
case 4:
combox = ctlComRxno;
break;
default:
break;
}
return combox;
}

/**
* @方法名:newRxno
* @功能描述:新处方签
* @创建人:tong_lzhi
* @创建时间:2011-7-13下午02:29:24
* @修改人:
* @修改时间:
*/
public String newRxno(int connNo) {
setRxnoComboDate();// 重新加载combo
DTextField combox = getRxNoCombox();
cleanUpComboRxno(combox);// 整理Rx_No
DMap map = combox.getComboData();
String rxNo = getRX_NO();
// 验证是否有未使用的处方签
if (!checkComData(map)) {
map.addData("ID", rxNo);
map.addData("TEXT", "");// 处方签名字在排序中填充保证处方签循序。
map.addData("TYPE", "N");
map.addData("CONN_FLG", "N");
map.addData("CONN_NO", connNo);
}
combox.setComboData(sortMapByRxNo(map));// 排序
setRxnoSelect(combox);
changeTab();
return rxNo;
}

/**
* @方法名:checkComData
* @功能描述:验证是否有未使用的处方签
* @param map
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-25下午02:39:23
* @修改人:
* @修改时间:
*/
private boolean checkComData(DMap map) {
DMap data = oedsOrderDataStore.getAllData();
int count = map.getCount("ID");
for (int i = 0; i < count; i++) {
String rxNo = map.getValue("ID", i);
boolean isHas = false;
int countTemp = data.getCount();
for (int j = 0; j < countTemp; j++) {
if ("Y".equalsIgnoreCase(data.getValue("#ACTIVE#", j))) {
if (rxNo.equalsIgnoreCase(data.getValue("RX_NO", j))) {
isHas = true;
}
}
}
if (!isHas) {// 未使用
map.setData("TYPE", i, "N");
return true;
}
}
return false;
}

/**
* @方法名:cleanUpComboRxno
* @功能描述:整理RX_NOCombox
* @param combox
* @创建人:tong_lzhi
* @创建时间:2011-6-16下午02:45:09
* @修改人:
* @修改时间:
*/
private void cleanUpComboRxno(DTextField combox) {
DMap map = combox.getComboData();
int count = map.getCount("TYPE");
for (int i = 0; i < count; i++) {
if (map.getValue("TYPE", i).equals("N")) {
map.setData("TYPE", i, "O");
}
}
combox.setComboData(map);
}

/**
* @方法名:delMedRxno
* @功能描述:删除处方签
* @创建人:tong_lzhi
* @创建时间:2011-6-16下午02:45:35
* @修改人:
* @修改时间:
*/
public void delMedRxno() {
if (oedsOrderDataStore == null) {
return;
}
if (isBill()) {
messageBox("当前处方签有已收费药品不允许删除!");
return;
}
int type = messageBox(MessageTool.message("T0016", ""), DControl.YES_NO_OPTION);
if (type != 1) {
return;
}
int index = tabbed.getSelectedIndex();
// 西成药,是连接处方签、没有连接显示全部、主处方签
DMap map = medComRxno.getComboData().getRow(medComRxno.getComboIndex());
if (index == 2 && medAllOrder.isVisible() && !medAllOrder.isSelected()
&& "Y".equalsIgnoreCase(map.getValue("CONN_FLG"))) {
deleteLinkRxNo(map.getInt("CONN_NO"));
} else {
oedsOrderDataStore.deleteRowAll();
if (isConnRxNo()) {
clearUpLinkRxNo();// 重新刷新连接处方签
}
}
if (isConnRxNo()) {
clearUpLinkRxNo();// 重新刷新连接处方签
}
// 初始化处方签combo
setRxnoComboDate();
changeTab();
}

/**
* @方法名:isBill
* @功能描述:当前处方签是否收费
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-12下午02:15:49
* @修改人:
* @修改时间:
*/
private boolean isBill() {
int count = oedsOrderDataStore.rowCount();
if (count == 0) {
return true;
}
for (int i = 0; i < count; i++) {
if ("Y".equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "BILL_FLG"))) {
return true;
}
}
return false;
}

/**
* @方法名:deleteLinkRxNo
* @功能描述: 删除连接西成药处方签主和子
* @param connNo 连接号
* @创建人:tong_lzhi
* @创建时间:2011-7-25下午03:22:52
* @修改人:
* @修改时间:
*/
private void deleteLinkRxNo(int connNo) {
oedsOrderDataStore.setFilter("RX_TYPE=1 AND CONN_NO=" + connNo);
oedsOrderDataStore.filter();
oedsOrderDataStore.deleteRowAll();
}

/**
* @方法名:clearUpLinkRxNo
* @功能描述:在执行完删除操作后,如果有主处方签没有子连处的情况下,删除主项注记
* @创建人:tong_lzhi
* @创建时间:2011-7-25下午04:18:08
* @修改人:
* @修改时间:
*/
private void clearUpLinkRxNo() {
oedsOrderDataStore.setFilter("(RX_TYPE=1 OR RX_TYPE=2) AND CONN_NO <> 0");// 西药和管制药品有连处
oedsOrderDataStore.filter();
Set connNoSet = new HashSet();// 连接号
Map map = new HashMap();
// 1.将所有的连接号放入SET集合
int setCount = oedsOrderDataStore.rowCount();
for (int i = 0; i < setCount; i++) {
connNoSet.add(oedsOrderDataStore.getItemInt(i, "CONN_NO"));
}
Iterator iterator = connNoSet.iterator();
// 2.遍历所有的connNo 获得处方签 并把处方签号放入set集合中,然后组成Map(connNO,rxNoSet)
while (iterator.hasNext()) {
Set rxNoSet = new HashSet();
int connNo = TypeTool.getInt(iterator.next());// 连接号
int oedsCount = oedsOrderDataStore.rowCount();
for (int i = 0; i < oedsCount; i++) {
if (connNo == oedsOrderDataStore.getItemInt(i, "CONN_NO")) {
rxNoSet.add(oedsOrderDataStore.getItemString(i, "RX_NO"));
}
}
map.put(connNo, rxNoSet);
}
// 3.遍历map 是否有未满的处方签
iterator = map.keySet().iterator();
while (iterator.hasNext()) {
int connNo = TypeTool.getInt(iterator.next());
Set rxNoSet = (Set) map.get(connNo);
int count = getLinkRxNoCount(connNo);// 获得医嘱的个数
int pageCount = (count + pageNum - 1) / pageNum;// 获得需要最少的处方签个数
String rxNoString[] = toStringArray(rxNoSet);// 现用处方签的个数
if (count <= pageNum) {
if (rxNoString.length > 0) {
setOedsStroeParm("N", 0, connNo, rxNoString[0]);
} else {
setOedsStroeParm("N", 0, connNo, getRX_NO());
}
}
if (count > pageNum) {
if (pageCount < rxNoString.length) {// 判断最少用的处方签是否是现有的处方签(否)
int countTemp = oedsOrderDataStore.rowCount();
for (int i = 0; i < countTemp; i++) {
if (!oedsOrderDataStore.isActive(i)) {
oedsOrderDataStore.deleteRow(i);
i--;
}
if (oedsOrderDataStore.getItemInt(i, "CONN_NO") == connNo) {
oedsOrderDataStore.setItem(i, "CONN_FLG", i < pageNum ? "Y" : "N");
oedsOrderDataStore.setItem(i, "RX_NO", rxNoString[i / pageNum]);
}
}
}
}
}
}

/**
* @方法名:setOedsStroeParm
* @功能描述:根据connNO 设置新的connNO和flg,处方签号
* @param conn_flg
* @param newConnNo
* @param oldConnNo
* @创建人:tong_lzhi
* @创建时间:2011-7-26上午09:28:56
* @修改人:
* @修改时间:
*/
private void setOedsStroeParm(String conn_flg, int newConnNo, int oldConnNo, String rxNo) {
oedsOrderDataStore.setFilter("(RX_TYPE=1 OR RX_TYPE=2) AND CONN_NO <> 0");// 西药和管制药品有连处
oedsOrderDataStore.filter();
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if (oedsOrderDataStore.getItemInt(i, "CONN_NO") == oldConnNo) {
oedsOrderDataStore.setItem(i, "CONN_NO", newConnNo);
oedsOrderDataStore.setItem(i, "CONN_FLG", conn_flg);
oedsOrderDataStore.setItem(i, "RX_NO", rxNo);
}
}
}

/**
* @方法名:toStringArray
* @功能描述:将set转化为数据 并且排序
* @param set
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-25下午05:35:46
* @修改人:
* @修改时间:
*/
private String[] toStringArray(Set set) {
String result[] = (String[]) set.toArray(new String[set.size()]);
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result.length - i - 1; ++j) {
if (result[j].compareTo(result[j + 1]) > 0) {
String temp = result[j];
result[j] = result[j + 1];
result[j + 1] = temp;
}
}
}
return result;
}

/**
* @方法名:getLinkRxNoCount
* @功能描述:根据连处号获得医嘱的个数
* @param connNo
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-25下午04:32:36
* @修改人:
* @修改时间:
*/
private int getLinkRxNoCount(int connNo) {
oedsOrderDataStore.setFilter("(RX_TYPE=1 OR RX_TYPE=2) AND CONN_NO <> 0");// 西药和管制药品有连处
oedsOrderDataStore.filter();
int count = 0;
int storeCount = oedsOrderDataStore.rowCount();
for (int i = 0; i < storeCount; i++) {
if (oedsOrderDataStore.getItemInt(i, "CONN_NO") == connNo && oedsOrderDataStore.isActive(i)) {
++count;
}
}
return count;
}

/**
* @方法名:getConnNo
* @功能描述: 获得连接处方签号
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-19下午04:13:15
* @修改人:
* @修改时间:
*/
@SuppressWarnings("static-access")
private int getConnNo() {
DMap data = oedsOrderDataStore.getAllData();
int rowCount = data.getCount("RX_TYPE");
int connNo = 0;
for (int i = 0; i < rowCount; i++) {
if (data.getInt("CONN_NO", i) > connNo) {
connNo = data.getInt("CONN_NO", i);
}
}
return connNo + 1;
}

/**
* @方法名:getRxNoList
* @功能描述:获得处方签ComboData
* @param rx_Type
* @return
* @创建人:tong_lzhi
* @创建时间:2011-6-14下午04:12:33
* @修改人:
* @修改时间:
*/
@SuppressWarnings("static-access")
private DMap getRxNoList(String rx_Type) {
Set rxNoSet = new HashSet();
DMap data = oedsOrderDataStore.getAllData();
int rowCount = data.getCount("RX_TYPE");
for (int i = 0; i < rowCount; i++) {
if (rx_Type.equals(data.getValue("RX_TYPE", i))
&& "Y".equalsIgnoreCase(data.getValue("#ACTIVE#", i))) {
rxNoSet.add(data.getValue("RX_NO", i));
}
}
DMap comboData = new DMap();
Iterator iterator = rxNoSet.iterator();
boolean isHave = false;
while (iterator.hasNext()) {
String id = TypeTool.getString(iterator.next());// id
comboData.addData("ID", id);
int connNO = 0;
String flg = "N";
for (int c = 0; c < rowCount; c++) {// 遍历
int tempConnNo = data.getInt("CONN_NO", c);
if (id.equalsIgnoreCase(data.getValue("RX_NO", c)) && tempConnNo != 0) {
if ("Y".equalsIgnoreCase(data.getValue("CONN_FLG", c))) {// 主连处方签
connNO = tempConnNo;
flg = "Y";
break;
} else if ("N".equalsIgnoreCase(data.getValue("CONN_FLG", c))) {// 子连接处方签
connNO = data.getInt("CONN_NO", c);
break;
}
}
}
comboData.addData("TYPE", "O");
comboData.addData("CONN_NO", connNO);
comboData.addData("CONN_FLG", flg);
comboData.addData("TEXT", "");
isHave = true;
}
if (!isHave) {// 空的处方签
comboData.addData("ID", getRX_NO());
comboData.addData("TYPE", "N");
comboData.addData("CONN_NO", 0);
comboData.addData("CONN_FLG", "N");
comboData.addData("TEXT", "");
}
if (keepRxNo != null && isHave) {// 上次选择的处方签&&该病患有数据
String defultRxno = null;// 要显示到combo上的处方签号
int comCount = comboData.getCount("TYPE");
for (int i = 0; i < comCount; i++) {
if (comboData.getValue("TYPE", i).trim().equals("N")) {
defultRxno = comboData.getValue("ID", i);
break;
}
}
if (defultRxno == null) {// 没有新的处方签
String lastRxNo = keepRxNo.getValue("ID");
int comTypeCount = comboData.getCount("TYPE");
for (int i = 0; i < comTypeCount; i++) {
if (comboData.getValue("ID", i).equalsIgnoreCase(lastRxNo)) {
defultRxno = comboData.getValue("ID", i);
break;
}
}
}
// 没有处方签是连接处方签的,根据连接号找到其他连接处方签
if (defultRxno == null) {
int connNo = keepRxNo.getInt("CONN_NO");
if (connNo != 0) {
defultRxno = keepRxNo.getValue("LASTRXNO");
}
}
if (defultRxno != null && !"".equalsIgnoreCase(defultRxno)) {// 设置为要显示的处方签
int comTempCount = comboData.getCount("TYPE");
for (int i = 0; i < comTempCount; i++) {
if (comboData.getValue("ID", i).equalsIgnoreCase(defultRxno)) {
comboData.setData("TYPE", i, "N");
break;
}
}
}
}
return sortMapByRxNo(comboData);
}

/**
* @方法名:sortMap
* @功能描述:对DMap 进行冒泡排序
* @param map
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-25上午09:21:28
* @修改人:
* @修改时间:
*/
private DMap sortMapByRxNo(DMap map) {
boolean isHasNew = false;
int count = map.getCount("ID");
for (int i = 0; i < count; i++) {
if (map.getValue("TYPE", i).trim().equals("N")) {
isHasNew = true;
break;
}
}
for (int i = 0; i < map.getCount("ID"); i++) {
for (int j = 0; j < count - i - 1; ++j) {
String rxNo = map.getValue("ID", j);
String rxNoNext = map.getValue("ID", j + 1);
if (rxNo.compareTo(rxNoNext) > 0) {
DMap temp = map.getRow(j);
map.setRowData(j, map.getRow(j + 1));
map.setRowData(j + 1, temp);
}
}
}
// 设置处方签名字
for (int i = 0; i < count; i++) {
String text = "第" + (i + 1) + "张处方签";
int connNo = map.getInt("CONN_NO", i);
String connFlg = map.getValue("CONN_FLG", i);
if (connNo != 0) {
if ("Y".equalsIgnoreCase(connFlg)) {
text += "(" + connNo + "主)";
} else {
text += "(" + connNo + "子)";
}
}
if (!isHasNew && i == 0) {
map.setData("TYPE", i, "N");
}
map.setData("TEXT", i, text);
}
return map;
}

/**
* @方法名:keepRecord
* @功能描述:记录点击的Table
* @创建人:tong_lzhi
* @创建时间:2011-7-20下午02:45:52
* @修改人:
* @修改时间:
*/
public void keepRecord() {
DSWorkStationControl parentControl = (DSWorkStationControl) parent.getControl();
parentControl.setDeleltTableRow("OEDS");
keepRxNo = getLastRxInfo();// 记录
}

/**
* @方法名:clearKeepRecord
* @功能描述: 清除删除
* @创建人:tong_lzhi
* @创建时间:2011-8-16上午11:29:04
* @修改人:
* @修改时间:
*/
public void clearKeepRecord() {
DSWorkStationControl parentControl = (DSWorkStationControl) parent.getControl();
parentControl.setDeleltTableRow(null);
}

/**
* @方法名:getLastRxInfo
* @功能描述:获得记录当前处方签的信息
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-28下午03:10:03
* @修改人:
* @修改时间:
*/
private DMap getLastRxInfo() {
DMap map = getRxNoCombox().getComboData().getRow(getRxNoCombox().getComboIndex());// 记录
int connNo = map.getInt("CONN_NO");
map.addData("LASTRXNO", "");
if (connNo != 0) {
map.setData("LASTRXNO", getUpRxNO(connNo, map.getValue("ID")));
}
return map;
}

/**
* @方法名:getUpRxNO
* @功能描述:根据connNo 获得上一个处方签号
* @param connNo
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-28下午03:14:10
* @修改人:
* @修改时间:
*/
private String getUpRxNO(int connNo, String rxNo) {
if (connNo == 0) {
return "";
}
DMap map = getRxNoCombox().getComboData();
boolean begin = false;
int count = map.getCount("TEXT");
for (int i = count; i >= 0; i--) {
if (map.getValue("ID", i).equalsIgnoreCase(rxNo)) {// 不取本身,渠道本身后开始去自己的上一个
begin = true;
continue;
}
if (begin && map.getInt("CONN_NO", i) == connNo) {
return map.getValue("ID", i);
}
}
return "";
}

/**
* @方法名:deleteRow
* @功能描述:删除行
* @创建人:tong_lzhi
* @创建时间:2011-7-13下午02:29:08
* @修改人:
* @修改时间:
*/
public void deleteRow() {
DTable table = getTable();
int row = table.getSelectedRow();
if (row < 0) {
return;
}
if ("3".equalsIgnoreCase(table.getDataStore().getItemString(row, "RX_TYPE"))) {// 中药处理
int column = table.getSelectedColumn();
if (row == 0) {
row = column / 3;
} else {
row = (row * 4 + column / 3);
}
}
if ("Y".equalsIgnoreCase(table.getDataStore().getItemString(row, "BILL_FLG"))) {
messageBox(MessageTool.message("T0031", "当前药品已经收费&删除"));
return;
}
// 连接医嘱
if (table.getDataStore().getItemString(row, "LINKMAIN_FLG").equalsIgnoreCase("Y")) {
int rowCount = table.getDataStore().rowCount();
int linkNo = table.getDataStore().getItemInt(row, "LINK_NO");
if (linkNo != 0) {
for (int i = 0; i < rowCount; i++) {
if (linkNo == table.getDataStore().getItemInt(i, "LINK_NO")) {
table.getDataStore().deleteRow(i);
i--;
}
}
table.setDSValue();
return;
}
}
// 集合医嘱
if (table.getDataStore().getItemString(row, "SETMAIN_FLG").equalsIgnoreCase("Y")) {
removeExaChilren(row, "4,5");
}
table.getDataStore().deleteRow(row);
if (isConnRxNo()) {// 如果是西药连接处方签
clearUpLinkRxNo();// 重新刷新连接处方签
setRxnoComboDate();// 刷新处方签combo
}
changeTab();
}

/**
* @方法名:getNameByCodeFromAllErg
* @功能描述:根据code 查找过敏药品
* @param code
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-13下午03:39:32
* @修改人:
* @修改时间:
*/
private String getNameByCodeFromAllErg(String code) {
DSWorkStationControl parentControl = (DSWorkStationControl) parent.getControl();
DDataStore store = parentControl.getErgDatastore();
int count = store.rowCount();
for (int i = 0; i < count; i++) {
if (store.getItemString(i, "DRUG_TYPE").equalsIgnoreCase("A")
&& code.equalsIgnoreCase(store.getItemString(i, "DRUGORINGRD_CODE")) && store.isActive(i)) {
return store.getItemString(i, "DRUGORINGRD_NAME");
}
}
return null;
}

/**
* @方法名:isConnRxNo
* @功能描述:判断是否是连接处方签
* @return
* @创建人:tong_lzhi
* @创建时间:2011-7-28上午10:14:05
* @修改人:
* @修改时间:
*/
private boolean isConnRxNo() {
int index = tabbed.getSelectedIndex();
if (index == 2 && medAllOrder.isVisible()) {
return true;
}
if (index == 4 && ctlAllOrder.isVisible()) {
return true;
}
return false;
}

/**
* @方法名:onTmtTableModified
* @功能描述:诊疗项目改变事件
* @创建人:tong_lzhi
* @创建时间:2011-8-3下午04:14:30
* @修改人:
* @修改时间:
*/
public void onTmtTableModified() {
int column = tmtTable.getModifiedColumn();
int row = tmtTable.getModifiedRow();
String columnName = ctlTable.getColumnName(column);
int linkNo = oedsOrderDataStore.getItemInt(row, "LINK_NO");
int storeGroupNo = exaTable.getDataStore().getItemInt(row, "ORDERSET_GROUP_NO");
// 连合医嘱
if ("LINKMAIN_FLG".equalsIgnoreCase(columnName)) {
doLinkOrder(row, TypeTool.getString(tmtComRxno.getValue()));
} else if ("LINK_NO".equalsIgnoreCase(columnName)) {
// 判断是否有值
if (linkNo == 0 || !oedsOrderDataStore.isActive(row)) {
oedsOrderDataStore.setItem(row, "LINK_NO", "");
oedsOrderDataStore.setItem(row, "LINKMAIN_FLG", "N");
if (storeGroupNo != 0) {
setChilrenValueByGroupNo(TypeTool.getString(tmtComRxno.getValue()), "LINK_NO", "",
storeGroupNo, null, false);
}
} else {
if (storeGroupNo != 0) {
setChilrenValueByGroupNo(TypeTool.getString(tmtComRxno.getValue()), "LINK_NO", linkNo,
storeGroupNo, null, false);
}
String isChecked = "N";
if (!checkLinkNo(linkNo, row)) {
isChecked = "Y";
}
oedsOrderDataStore.setItem(row, "LINKMAIN_FLG", isChecked);
if (!"Y".equalsIgnoreCase(isChecked)) {
setMainLinkData(row, linkNo);
}
}
// 清除没有主项的细项组号
clearNoLinkOrder();
}
// 判断是否是ORDER_CODE触发事件
else if ("ORDER_NAME".equalsIgnoreCase(columnName)) {
String orderCode = oedsOrderDataStore.getItemString(row, "ORDER_NAME");
if (storeGroupNo != 0) {
removeExaChilren(row, "4");
}
if (orderCode == null || orderCode.trim().length() == 0) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
} else {
return;
}
}
// 2.验证是否已经开立
String orderName = getNameByCodeFromDataStore(orderCode, row, 4);
if (orderName != null) {
if (messageBox(MessageTool.message("T0034", orderName), DControl.YES_NO_OPTION) != 1) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
} else {
oedsOrderDataStore.setItem(row, "ORDER_NAME", "");
tmtTable.setDSValue();
return;
}
}
}
DMap map = new DMap(BaseFeeTool.getTool().getTmtFeeByCode(orderCode));// 药品信息
// 4.是否有结果
if (map.getCount() <= 0) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(row, "ORDER_CODE");
map = new DMap(BaseFeeTool.getTool().getTmtFeeByCode(orderCode));
} else {
oedsOrderDataStore.setItem(row, "ORDER_NAME", "");
tmtTable.setDSValue();
return;
}
}
// 判断是否是集合医嘱
if ("Y".equalsIgnoreCase(map.getValue("ORDERSET_FLG", 0))) {
DMap result = new DMap(BaseFeeTool.getTool().getAllBaseDetailBySetCode(orderCode));
// 获取主项
DMap main = (DMap) result.getData("MAIN");
if (main != null && main.getCount() > 0) {
// 获取随机组号
String groupNo = (row + 1) + "";
// 4.添加细项信息
DMap chilren = (DMap) result.getData("CHILREN");
int takeDays = map.getInt("TAKE_DAYS", 0);// 日分统一
takeDays = takeDays == 0 ? 1 : takeDays;
addTmtChilrenDetail(main, row, 0, "Y", groupNo, orderCode, "N", takeDays);
Map resultMap = addTmtChilrenRow(chilren, groupNo, orderCode, takeDays);
double ownAmt = TypeTool.getDouble(resultMap.get("TOTAL"));
oedsOrderDataStore.setItem(row, "OWN_PRICE", resultMap.get("PRICE"));
oedsOrderDataStore.setItem(row, "OWN_AMT", ownAmt);
getMedCount(row, ownAmt);// 应付金额
}
} else {
setTmtTableData(oedsOrderDataStore, row, map);// 填充数据
}
} else if ("TAKE_DAYS".equalsIgnoreCase(columnName) || "FREQ_CODE".equalsIgnoreCase(columnName)) {
// 判断是否是连接医嘱
if (isHasBillOrder(row, linkNo)) {// 是否有已经收费的医嘱
messageBox(MessageTool.message("T0031", "部分项目已经收费&修改"));
setMainLinkData(row, linkNo);// 重新设置数据
} else {
setChnStoreValue(columnName, storeGroupNo, row);
}
} else if ("MEDI_QTY".equalsIgnoreCase(columnName)) {
setChnStoreValue(columnName, storeGroupNo, row);
}
baseTableModified(2);
oedsOrderDataStore.filterObject(this, "filteDataStore");
tmtTable.setDSValue();
}

/**
* @方法名:setChnStoreValue
* @功能描述:根据当前行组号组号设置value
* @param columnName
* @param storeGroupNo
* @param row
* @创建人:tong_lzhi
* @创建时间:2011-8-11下午01:12:26
* @修改人:
* @修改时间:
*/
private void setChnStoreValue(String columnName, int storeGroupNo, int row) {
int linkNo = oedsOrderDataStore.getItemInt(row, "LINK_NO");
String value = oedsOrderDataStore.getItemString(row, columnName);
if (linkNo != 0) {
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
int chliredLinkNo = oedsOrderDataStore.getItemInt(i, "LINK_NO");
if ("Y".equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "BILL_FLG"))) {
continue;
}
if (linkNo != chliredLinkNo) {
continue;
}
int groupNoTemp = oedsOrderDataStore.getItemInt(i, "ORDERSET_GROUP_NO");
oedsOrderDataStore.setItem(i, columnName, value);// 主项
String orderSetCode = oedsOrderDataStore.getItemString(i, "ORDERSET_CODE");
if (groupNoTemp != 0) {// 集合医嘱需要更改细项
String rxNo = oedsOrderDataStore.getItemString(i, "RX_NO");
Map map = setChilrenValueByGroupNo(rxNo, columnName, value, groupNoTemp, orderSetCode,
true);// 细项
oedsOrderDataStore.setItem(i, "OWN_PRICE", map.get("PRICE"));// 设置主项单价和总价
oedsOrderDataStore.setItem(i, "OWN_AMT", map.get("TOTAL"));// 设置主项单价和总价
oedsOrderDataStore.setItem(i, "AR_AMT", map.get("AR_AMT"));// 应付金额
}
sumTmtQty(i);
}
} else {// 非连接
setTmtRowValue(row, columnName, value);
sumTmtQty(row);
}
}

/**
* @方法名:setTmtRowValue
* @功能描述:设置诊疗项目单行value
* @param row
* @param columnName
* @param value
* @创建人:tong_lzhi
* @创建时间:2011-8-15下午05:42:02
* @修改人:
* @修改时间:
*/
private void setTmtRowValue(int row, String columnName, Object value) {
int storeGroupNo = oedsOrderDataStore.getItemInt(row, "ORDERSET_GROUP_NO");
oedsOrderDataStore.setItem(row, columnName, value);// 主项
if (storeGroupNo != 0) {// 集合医嘱需要更改细项
String rxNo = oedsOrderDataStore.getItemString(row, "RX_NO");
String orderSetCode = oedsOrderDataStore.getItemString(row, "ORDERSET_CODE");
Map map = setChilrenValueByGroupNo(rxNo, columnName, value, storeGroupNo, orderSetCode, true);// 细项
oedsOrderDataStore.setItem(row, "OWN_PRICE", map.get("PRICE"));// 设置主项单价和总价
oedsOrderDataStore.setItem(row, "OWN_AMT", map.get("TOTAL"));// 设置主项单价和总价
oedsOrderDataStore.setItem(row, "AR_AMT", map.get("AR_AMT"));// 应付金额
}
}

/**
* @方法名:setTmtTableData
* @功能描述:诊疗项目填充行数据
* @param medStore
* @param row
* @param map
* @param orderCode
* @param exeDept
* @创建人:tong_lzhi
* @创建时间:2011-8-3下午05:34:15
* @修改人:
* @修改时间:
*/
private void setTmtTableData(DDataStore tmtStore, int row, DMap map) {
String orderCode = map.getValue("ORDER_CODE", 0);
String hexpCode = map.getValue("CHARGE_HOSP_CODE", 0);// HEXP_CODE
tmtStore.setItem(row, "HEXP_CODE", hexpCode);
tmtStore.setItem(row, "REXP_CODE", BaseChargeHpspTool.getToolInstance().returnChargeCode(hexpCode));// REXP_CODE
tmtStore.setItem(row, "ORDER_CODE", orderCode);// order
tmtStore.setItem(row, "ORDER_NAME", map.getValue("ORDER_NAME", 0));// order
tmtStore.setItem(row, "BILL_FLG", "N");// 收费注记
int count = 1;// 数量默认为1
tmtStore.setItem(row, "MEDI_QTY", count);
tmtStore.setItem(row, "DOSAGE_QTY", count);
tmtStore.setItem(row, "FREQ_CODE", defaultFreq);// 频次
tmtStore.setItem(row, "TAKE_DAYS", 1);// 日分TAKE_DAYS
double price = map.getDouble("OWN_PRICE", 0);// 单价
tmtStore.setItem(row, "OWN_PRICE", price);
double total = TotQtyTool.getTool().getRound(price * count);// 总价
tmtStore.setItem(row, "DISPENSE_QTY", total);
tmtStore.setItem(row, "AR_AMT", total);
tmtStore.setItem(row, "OWN_AMT", total);
tmtStore.setItem(row, "MEDI_UNIT", map.getData("UNIT_CODE", 0));// 单位默认项
tmtStore.setItem(row, "OWN_PRICE", map.getData("OWN_PRICE", 0));// 价格
tmtStore.setItem(row, "EXEC_DR_CODE", DSystem.getObject("USER_NAME"));// 执行医师
String deptCode = TypeTool.getString(map.getData("EXEC_DEPT_CODE", 0));// 执行科室
if (deptCode == null || deptCode.length() == 0) {
deptCode = TypeTool.getString(tmtDepteCode.getValue());
}
tmtStore.setItem(row, "EXEC_DEPT_CODE", deptCode);
String optCode = map.getValue("OPTITEM_CODE", 0);// 检体
tmtStore.setItem(row, "OPTITEM_CODE", optCode);
tmtStore.setItem(row, "INSPAY_TYPE", map.getValue("INSPAY_TYPE", 0));// 自费‘医保
tmtStore.setItem(row, "HIDE_FLG", "N");
setStoreBaseData(tmtStore, row, map, 0);// 基础数据
sumTmtQty(row);
}

/**
* @方法名:sumTmtQty
* @功能描述:计算总量(诊疗项目)
* @param row
* @创建人:tong_lzhi
* @创建时间:2011-7-13下午02:30:24
* @修改人:
* @修改时间:
*/
private void sumTmtQty(int row) {
// 注意:最后计算折扣比例和
// 1.获得DDataStore
DDataStore tempDataStore = getTable().getDataStore();
DMap dmap = tempDataStore.getRowMap(row);
// 2.计算总量
DMap result = TotQtyTool.getTool().getTotQty(dmap);
// 3.获得单价
double price = tempDataStore.getItemDouble(row, "OWN_PRICE");
// 4.获得总量
double totqty = result.getDouble("DOSAGE_QTY");
double amt = totqty * price;
// 5.获得发药单位和库存单位
int dispenseUnit = result.getInt("DOSAGE_UNIT"); // 发药单位
int dosageUnit = result.getInt("DOSAGE_UNIT"); // 实际发药单位
int stockUnit = result.getInt("STOCK_UNIT"); // 库存单位
double dispense_qty = totqty;// 总量
double dosage_qty = totqty;// 扣库数量
// 7.更新显示发药数量及单位数据
tempDataStore.setItem(row, "DISPENSE_UNIT", dispenseUnit);
tempDataStore.setItem(row, "DISPENSE_QTY", dispense_qty);
// 8.更新实际发药单位及数量单位
tempDataStore.setItem(row, "DOSAGE_UNIT", dosageUnit);
tempDataStore.setItem(row, "DOSAGE_QTY", dosage_qty);
// 9.库存单位、金额
tempDataStore.setItem(row, "STOCK_UNIT", stockUnit);
tempDataStore.setItem(row, "OWN_AMT", amt);
tempDataStore.setItem(row, "DISCOUNT_AMT", amt);
getMedCount(row, amt);// 折扣比例和总价
}

/**
* @方法名:onChnTableModified
* @功能描述:中药饮片改变
* @创建人:tong_lzhi
* @创建时间:2011-8-5下午02:02:56
* @修改人:
* @修改时间:
*/
@SuppressWarnings("static-access")
public void onChnTableModified() {
int column = chnTable.getModifiedColumn();
int row = chnTable.getModifiedRow();
int storeRow = 0;
DDataStore store = chnTable.getDataStore();
if (row == 0) {
storeRow = column / 3;
} else {
storeRow = row * 4 + column / 3;
}
if (column % 3 == 0) {// code
String orderCode = TypeTool.getString(chnTable.getDataValue(row, column));
String exeDeptCode = TypeTool.getString(chnDeptCombox.getValue());// 执行科室
if (orderCode == null || orderCode.trim().length() == 0) {
if (oedsOrderDataStore.isActive(storeRow)) {
orderCode = oedsOrderDataStore.getItemString(storeRow, "ORDER_CODE");
} else {
return;
}
}
// 2.验证是否已经开立
String orderName = getNameByCodeFromDataStore(orderCode, storeRow, 3);
if (orderName != null) {
if (messageBox(MessageTool.message("T0034", orderName), DControl.YES_NO_OPTION) != 1) {
if (oedsOrderDataStore.isActive(storeRow)) {
orderCode = oedsOrderDataStore.getItemString(storeRow, "ORDER_CODE");
} else {
oedsOrderDataStore.setItem(storeRow, "ORDER_NAME", "");
setChnTableDSValue();
return;
}
}
}
DMap map = new DMap(BaseFeeTool.getTool().getChnFeeByCode(orderCode));// 药品信息
// 4.是否有结果
if (map.getCount() <= 0) {
if (oedsOrderDataStore.isActive(row)) {
orderCode = oedsOrderDataStore.getItemString(storeRow, "ORDER_CODE");
map = new DMap(BaseFeeTool.getTool().getChnFeeByCode(orderCode));
} else {
oedsOrderDataStore.setItem(row, "ORDER_NAME", "");
setChnTableDSValue();
return;
}
}
storeRow = setChnTableData(chnTable.getDataStore(), storeRow, map, orderCode, exeDeptCode);
} else if (column % 3 == 1) {// 用量
int storeId = store.getID(storeRow, store.PRIMARY);
if (storeId != 0) {// 表示没有这一行
double mediQty = TypeTool.getDouble(chnTable.getDataValue(row, column));
store.setItem(storeRow, "MEDI_QTY", mediQty);
sumChbQty(storeRow);
}
} else if (column % 3 == 2) {// 特殊煎发
int storeId = store.getID(row, store.PRIMARY);
if (storeId != 0) {// 表示没有这一行
String jf = TypeTool.getString(chnTable.getDataValue(row, column));// 特殊煎法
store.setItem(storeRow, "DCTEXCEP_CODE", jf);
}
}
insertChnNullRow(storeRow);
initRxInfo();// 重新计算处方签金额
}

/**
* @方法名:insertChnNullRow
* @功能描述:中药饮片新行
* @创建人:tong_lzhi
* @创建时间:2011-8-5下午02:40:45
* @修改人:
* @修改时间:
*/
private void insertChnNullRow(int row) {
DDataStore store = chnTable.getDataStore();
int column = chnTable.getModifiedColumn();
if (column % 3 != 0) {
setChnTableDSValue();
return;
}
store.setActive(row, true);
// 根据当前的Table新增一行
insertDataStoreRow();
setChnTableDSValue();
}

/**
* @方法名:setChnTableData
* @功能描述:中药数据
* @param store
* @param row
* @param map
* @param orderCode
* @param exeDept
* @创建人:tong_lzhi
* @创建时间:2011-8-5下午02:31:21
* @修改人:
* @修改时间:
*/
private int setChnTableData(DDataStore store, int row, DMap map, String orderCode, String exeDept) {
int storeId = store.getID(row, DDataStore.PRIMARY);
if (storeId == 0) {
row = getActiveRow(store);// 获取当前的空行
}
store.setItem(row, "URGENT_FLG", chnJZ.isSelected() ? "Y" : "N");// 急作
Object route = chnRoute.getValue();
store.setItem(row, "ROUTE_CODE", route);// 用法
Object dctageentCode = chnFXCombo.getValue();// 煎药方式
store.setItem(row, "DCTAGENT_CODE", dctageentCode);
store.setItem(row, "DR_NOTE", chnNote.getValue());// 医师备注DR_NOTE
String hexpCode = map.getValue("CHARGE_HOSP_CODE", 0);// HEXP_CODE
store.setItem(row, "HEXP_CODE", hexpCode);
store.setItem(row, "REXP_CODE", BaseChargeHpspTool.getToolInstance().returnChargeCode(hexpCode));// REXP_CODE
store.setItem(row, "ORDER_CODE", orderCode);// order code
store.setItem(row, "INSPAY_TYPE", map.getValue("INSPAY_TYPE", 0));// 自费‘医保
store.setItem(row, "PHA_TYPE", map.getValue("PHA_TYPE", 0));// PHA_TYPE
store.setItem(row, "ORDER_NAME", map.getValue("ORDER_NAME", 0));// orderName+
store.setItem(row, "BILL_FLG", "N"); // 收费注记
store.setItem(row, "MEDI_QTY", map.getData("MEDI_QTY", 0));// 开药数量
store.setItem(row, "DCT_TAKE_QTY", chnQty.getValue());// 饮片服用量(ml) or
store.setItem(row, "MEDI_UNIT", map.getData("MEDI_UNIT", 0));// 开药单位
store.setItem(row, "FREQ_CODE", chnFreq.getValue());// 频次FREQ_CODE
store.setItem(row, "TAKE_DAYS", chnTakedays.getValue());// 日分TAKE_DAYS
store.setItem(row, "DISPENSE_UNIT", map.getData("DISPENSE_UNIT", 0));// 发药单位DISPENSE_UNIT
store.setItem(row, "URGENT_FLG", map.getData("URGENT_FLG", 0)); // 急作URGENT_FLG
store.setItem(row, "OWN_PRICE", map.getData("OWN_PRICE", 0));// 价格
store.setItem(row, "EXEC_DEPT_CODE", exeDept);// 执行科室
String optCode = map.getValue("OPTITEM_CODE", 0);// 检体
store.setItem(row, "OPTITEM_CODE", optCode);
setStoreBaseData(store, row, map, 0);// 基础数据
sumChbQty(row);// 总量计算
return row;
}

/**
* @方法名:sumTmtQty
* @功能描述:计算总量(中药饮片)
* @param row
* @创建人:tong_lzhi
* @创建时间:2011-7-13下午02:30:24
* @修改人:
* @修改时间:
*/
private void sumChbQty(int row) {
// 注意:最后计算折扣比例和
// 1.获得DDataStore
DDataStore tempDataStore = getTable().getDataStore();
DMap dmap = tempDataStore.getRowMap(row);
// 2.计算总量
DMap result = TotQtyTool.getTool().getTotQty(dmap);
// 3.获得单价
double price = tempDataStore.getItemDouble(row, "OWN_PRICE");
// 4.获得总量
double totqty = result.getDouble("DOSAGE_QTY");
double amt = totqty * price;
// 5.获得发药单位和库存单位
int dispenseUnit = result.getInt("DOSAGE_UNIT"); // 发药单位
int dosageUnit = result.getInt("DOSAGE_UNIT"); // 实际发药单位
int stockUnit = result.getInt("STOCK_UNIT"); // 库存单位
double dispense_qty = totqty;// 总量
double dosage_qty = totqty;// 扣库数量
// 7.更新显示发药数量及单位数据
tempDataStore.setItem(row, "DISPENSE_UNIT", dispenseUnit);
tempDataStore.setItem(row, "DISPENSE_QTY", dispense_qty);
// 8.更新实际发药单位及数量单位
tempDataStore.setItem(row, "DOSAGE_UNIT", dosageUnit);
tempDataStore.setItem(row, "DOSAGE_QTY", dosage_qty);
// 9.库存单位、金额
tempDataStore.setItem(row, "STOCK_UNIT", stockUnit);
tempDataStore.setItem(row, "OWN_AMT", amt);
tempDataStore.setItem(row, "DISCOUNT_AMT", amt);
getMedCount(row, amt);// 折扣比例和总价
boolean isHas = InventoryTool.getTool().getStockAmount(
tempDataStore.getItemString(row, "EXEC_DEPT_CODE"),
tempDataStore.getItemString(row, "ORDER_CODE"), REGION, TypeTool.getInt(dosage_qty));
if(!isHas){
messageBox("'"+tempDataStore.getItemString(row, "ORDER_NAME")+"'库存不足");
}
}

/**
* @方法名:getActiveRow
* @功能描述:获得中药active 为false的行
* @param store
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-8下午03:25:53
* @修改人:
* @修改时间:
*/
private int getActiveRow(DDataStore store) {
int count = store.rowCount();
for (int i = 0; i < count; i++) {
if (!store.isActive(i)) {
return i;
}
}
return 0;
}

/**
* @方法名:getChnNameByCode
* @功能描述:根据code从datastore中获得Name
* @param code
* @param row
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-5下午02:26:39
* @修改人:
* @修改时间:
*/
@SuppressWarnings("static-access")
private String getNameByCodeFromDataStore(String code, int row, int rxType) {
if (code == null || code.trim().length() == 0) {
return null;
}
int tableId = oedsOrderDataStore.getID(row, oedsOrderDataStore.PRIMARY);
DMap data = oedsOrderDataStore.getAllData();
int count = data.getCount();
for (int i = 0; i < count; i++) {
int id = data.getInt("#ID#", i);
if (tableId == id) {
continue;
}
if (data.getInt("RX_TYPE", i) == rxType && code.equalsIgnoreCase(data.getValue("ORDER_CODE", i))) {
return data.getValue("ORDER_NAME", i);
}
}
return null;
}

/**
* @方法名:setStoreBaseData
* @功能描述:oedsStore 基础数据
* @param store
* @param row
* @param map
* @param mapIndex
* @创建人:tong_lzhi
* @创建时间:2011-8-8上午11:38:54
* @修改人:
* @修改时间:
*/
private void setStoreBaseData(DDataStore store, int row, DMap map, int mapIndex) {
store.setItem(row, "SPECIFICATION", map.getData("SPECIFICATION", mapIndex));// 规格
store.setItem(row, "ORDER_CAT1_CODE", map.getValue("ORDER_FINE_CODE", mapIndex));// 医嘱分类CAT1_TYPE
store.setItem(row, "CAT1_TYPE", map.getValue("ORDER_FINE_GROUP", mapIndex));
store.setItem(row, "TRADE_ENG_DESC", map.getValue("TRADE_ENG_NAME", mapIndex));// 英文名字
store.setItem(row, "GOODS_DESC", map.getValue("GOODS_NAME", mapIndex));// Good_name
}

/**
* @方法名:validateDataStore
* @功能描述:验证datastore 数据
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-8下午01:28:39
* @修改人:
* @修改时间:
*/
public boolean isValidateDataStore() {
DMap data = oedsOrderDataStore.getAllData();
int count = data.getCount();
for (int i = 0; i < count; i++) {
int rxType = data.getInt("RX_TYPE", i);
if (rxType != 5 && rxType != 4 && "Y".equalsIgnoreCase(data.getValue("#ACTIVE#", i))) {
if (data.getDouble("DOSAGE_QTY", i) <= 0) {
String orderName = data.getValue("ORDER_NAME", i);
String rxNo = data.getValue("RX_NO", i);
String mes = "在[" + getRxTypeString(rxType) + "]-" + getRxNoName(rxNo, rxType) + "中,药品["
+ orderName + "]的总量";
messageBox(MessageTool.message("T0010", mes + "&小于或等于0"));
getRxNoComboByRxType(rxType).setValue(rxNo);// 设置选中处方签
tabbed.setSelectedIndex(getTabBedIndex(rxType));
return false;
}
}
}
return true;
}

/**
* @方法名:getRxNoComboByRxType
* @功能描述:根据rxType获得combo
* @param rxType
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-9上午11:31:45
* @修改人:
* @修改时间:
*/
private DTextField getRxNoComboByRxType(int rxType) {
switch (rxType) {
case 1:
return medComRxno;
case 2:
return ctlComRxno;
case 3:
return chnComRxno;
case 4:
return tmtComRxno;
case 5:
return exaComRxno;
default:
return ctlComRxno;
}
}

/**
* @方法名:getTabBedIndex
* @功能描述:获得页签index
* @param rxType
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-8下午02:06:01
* @修改人:
* @修改时间:
*/
private int getTabBedIndex(int rxType) {
switch (rxType) {
case 1:
return 2;
case 2:
return 4;
case 3:
return 3;
case 4:
return 1;
case 5:
return 0;
default:
return 0;
}
}

/**
* @方法名:getRxNoName
* @功能描述:根据处方签号获得处方签名字
* @param rxNo
* @param rxType
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-8下午01:50:46
* @修改人:
* @修改时间:
*/
private String getRxNoName(String rxNo, int rxType) {
DMap comData = getRxComData(rxType);
int count = comData.getCount("ID");
for (int i = 0; i < count; i++) {
if (rxNo.equalsIgnoreCase(comData.getValue("ID", i))) {
return comData.getValue("TEXT", i);
}
}
return "";
}

/**
* @方法名:getRxComData
* @功能描述:获得处方签信息
* @param rxType
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-8下午01:47:45
* @修改人:
* @修改时间:
*/
private DMap getRxComData(int rxType) {
switch (rxType) {
case 1:
return medComRxno.getComboData();
case 2:
return ctlComRxno.getComboData();
case 3:
return chnComRxno.getComboData();
case 4:
return tmtComRxno.getComboData();
case 5:
return exaComRxno.getComboData();
default:
return ctlComRxno.getComboData();
}
}

/**
* @方法名:getRxTypeString
* @功能描述:获得医嘱类型
* @param rxType
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-8下午01:40:06
* @修改人:
* @修改时间:
*/
private String getRxTypeString(int rxType) {
switch (rxType) {
case 1:
return "西成药";
case 2:
return "管制药品";
case 3:
return "中药饮片";
case 4:
return "诊疗项目";
case 5:
return "检验检查";
default:
return "";
}
}

/**
* @方法名:onChnHeadChange
* @功能描述:改变处方签信息
* @创建人:tong_lzhi
* @创建时间:2011-8-9上午09:32:21
* @修改人:
* @修改时间:
*/
public void onChnHeadChange() {
DDataStore store = chnTable.getDataStore();
int count = store.rowCount();
for (int i = 0; i < count; i++) {
if ("Y".equalsIgnoreCase(store.getItemString(i, "BILL_FLG"))) {
continue;
}
store.setItem(i, "EXEC_DEPT_CODE", chnDeptCombox.getValue());// 科室
store.setItem(i, "URGENT_FLG", chnJZ.isSelected() ? "Y" : "N");// 急作
store.setItem(i, "DCTAGENT_CODE", chnFXCombo.getValue());// 煎药方式
store.setItem(i, "TAKE_DAYS", chnTakedays.getValue());// 日分TAKE_DAYS
store.setItem(i, "DCT_TAKE_QTY", chnQty.getValue());// 饮片服用量(ml) or
// 饮片使用计量
store.setItem(i, "FREQ_CODE", chnFreq.getValue());// 频次FREQ_CODE
store.setItem(i, "DR_NOTE", chnNote.getValue());// 医师备注DR_NOTE
store.setItem(i, "ROUTE_CODE", chnRoute.getValue());// 用法
sumChbQty(i);
}
if (getActiveCount(store) > 0) {
setChnTableDSValue();
initRxInfo();// 重新计算处方签金额
}
}

/**
* @方法名:getActiveCount
* @功能描述:获得有效行的行数
* @param store store
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-17下午05:27:43
* @修改人:
* @修改时间:
*/
private int getActiveCount(DDataStore store) {
int count = 0;
int storeCount = store.rowCount();
for (int i = 0; i < storeCount; i++) {
if (store.isActive(i)) {
count++;
}
}
return count;
}

/**
* @方法名:isSaveData
* @功能描述:
* @return
* @创建人:TONG
* @创建时间:2011-8-12下午04:28:49
* @修改人:
* @修改时间:
*/
public boolean isHaveSaveData() {
if (oedsOrderDataStore == null) {
return true;
}
return oedsOrderDataStore.getUpdateSQL().length == 0;
}

/**
* @方法名:getTotLable
* @功能描述:获得处方签金额LABLE
* @return DLabel
* @创建人:tong_lzhi
* @创建时间:2011-8-16下午02:19:24
* @修改人:
* @修改时间:
*/
private DLabel getTotLable() {
int index = tabbed.getSelectedIndex();
if (index == 0) {
return exaTot;
} else if (index == 1) {
return tmtTot;
} else if (index == 2) {
return medTot;
} else if (index == 3) {
return chnTot;
} else {
return ctrTot;
}

}

/**
* @方法名:setLockChnHead
* @功能描述: 设置锁定中药Head信息
* @创建人:tong_lzhi
* @创建时间:2011-8-17上午11:59:04
* @修改人:
* @修改时间:
*/
private void setLockChnHead() {
boolean lock = !isBill();
chnDeptCombox.setEnabled(lock);
chnJZ.setEnabled(lock);
chnFXCombo.setEnabled(lock);
chnTakedays.setEnabled(lock);
chnQty.setEnabled(lock);
chnFreq.setEnabled(lock);
chnNote.setEnabled(lock);
chnRoute.setEnabled(lock);
}

/**
* @方法名:onExeDeptChange
* @功能描述:重新设置执行科室
* @param flg
* @创建人:tong_lzhi
* @创建时间:2011-8-22下午04:55:41
* @修改人:
* @修改时间:
*/
public void onExeDeptChange(int flg) {
DMap map = getRxNoCombox().getComboData().getRow(getRxNoCombox().getComboIndex());// 记录
int connNo = map.getInt("CONN_NO");
if (flg == 1) {// 西药
setExeDeptCode("1", connNo, medDeptCombox);
} else if (flg == 2) {// 管制药品
setExeDeptCode("2", connNo, ctlDeptCombox);
}
getTable().setDSValue();
}

/**
* @方法名:setExeDeptCode
* @功能描述:执行药房修改
* @param rxType
* @param connNo
* @param exeDept
* @创建人:tong_lzhi
* @创建时间:2011-8-22下午04:50:10
* @修改人:
* @修改时间:
*/
private void setExeDeptCode(String rxType, int connNo, DTextField exeDept) {
String deptCode = getBillDeptCode(rxType, connNo);
if (deptCode != null) {
messageBox(MessageTool.message("T0031", "部分项目已经收费&修改"));
exeDept.setValue(deptCode);
return;
}
deptCode = TypeTool.getString(exeDept.getValue());
if (isConnRxNo()) {// 连接处方
oedsOrderDataStore.setFilter("RX_TYPE='" + rxType + "' AND CONN_NO=" + connNo);
oedsOrderDataStore.filter();
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
oedsOrderDataStore.setItem(i, "EXEC_DEPT_CODE", deptCode);
}
oedsOrderDataStore.filterObject(this, "filteDataStore");
} else {// 非连接处方签
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
oedsOrderDataStore.setItem(i, "EXEC_DEPT_CODE", deptCode);
}
}

}

/**
* @方法名:
* @功能描述:获得收费药品的执行科室
* @param rxType
* @param connNo
* @return
* @创建人:tong_lzhi
* @创建时间:2011-8-22下午04:46:20
* @修改人:
* @修改时间:
*/
private String getBillDeptCode(String rxType, int connNo) {
if (isConnRxNo()) {// 连接处方
oedsOrderDataStore.setFilter("RX_TYPE='" + rxType + "' AND CONN_NO=" + connNo);
oedsOrderDataStore.filter();
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if ("Y".equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "BILL_FLG"))) {
oedsOrderDataStore.filterObject(this, "filteDataStore");
return oedsOrderDataStore.getItemString(i, "EXEC_DEPT_CODE");
}
}
oedsOrderDataStore.filterObject(this, "filteDataStore");
} else {// 非连接处方签
int count = oedsOrderDataStore.rowCount();
for (int i = 0; i < count; i++) {
if ("Y".equalsIgnoreCase(oedsOrderDataStore.getItemString(i, "BILL_FLG")))
return oedsOrderDataStore.getItemString(i, "EXEC_DEPT_CODE");
}
}
return null;
}
}
分享到:
评论

相关推荐

    WindowsStore应用商店

    首先下载WindowsStore压缩文件解压缩得到以下文件如图 https://img-blog.csdn.net/20180514145017390 运行红圈区域的installstore---点击开始菜单会发现刚新增的应用【应用商店】点击它运行就完成了

    win10专业版Microsoftstore 应用商店 重新安装

    这条命令的作用是重新注册Microsoft Store应用,以解决可能存在的损坏或丢失问题。 3. **检查网络设置** 如果上述步骤后Microsoft Store仍无法打开,可能与网络设置有关。确保系统日期和时间正确,并检查网络连接...

    appStore 应用管理系统

    本系统为手机应用管理平台,主要实现了用户浏览,下载,评论应用的功能;开发者上传,管理应用的功能;管理员管理系统,管理应用的功能,主要以Andorid手机应用为主。Struts + Hibernate + Spring + ExtJs

    谷歌Play Store应用程序数据集

    尽管许多公共数据集(在Kaggle等上)提供了Apple App Store数据,但在网络上的任何地方,都没有太多可用于Google Play Store应用程序的对应数据集。在深入研究时,我发现iTunes App Store页面部署了索引良好的附录式...

    AppStore应用软件官网模板

    "AppStore应用软件官网模板"是专为此类企业设计的一款网页模板,旨在帮助他们快速、高效地创建专业且具有吸引力的在线存在。 这款模板的设计考虑到了iOS用户的浏览习惯和审美倾向,它通常包含以下几个关键组成部分...

    app store应用开发者官网响应式模板

    "App Store应用开发者官网响应式模板"就是这样一个工具,旨在帮助开发者创建能够适应各种屏幕尺寸和设备类型的官方网站,无论用户是通过桌面电脑、平板还是智能手机访问,都能提供优秀的用户体验。 1. **响应式设计...

    苹果推iPad版Apple Store应用.docx

    苹果公司最近为iPad用户带来了重大更新,推出了专为iPad设计的Apple Store应用。这款应用的发布恰逢感恩节购物季之前,预示着苹果可能在黑色星期五等大型购物活动中有所动作,为用户提供更加便捷的购物体验。 iPad...

    win10 Store应用商店如何切换到全屏状态?.docx

    在Windows 10操作系统中,用户可以通过特定的操作步骤来使Store应用商店切换到全屏状态。这不仅可以提供更沉浸式的浏览体验,而且有助于充分利用屏幕空间。以下是如何在Win10中将Store应用切换到全屏的详细步骤: 1...

    AppStore应用软件官网模板是一款适合iPhone手机app开发公司网站模板。.rar

    "AppStore应用软件官网模板"是指一种专为展示在Apple的AppStore上发布的应用程序而设计的网站模板。这样的模板通常包含了各种页面元素,如首页、应用介绍页、功能展示页、下载页面等,旨在为iPhone app开发公司提供...

    音乐播放器APP网站模板是一款音乐AppStore应用官网网站模板 .rar

    而"音乐播放器APP网站模板是一款音乐AppStore应用官网网站模板。"这个文件名可能是HTML文件或者整个模板的压缩子文件,里面包含了模板的所有页面、图像、CSS样式表、JavaScript脚本等资源。 总的来说,音乐播放器...

    AppStore应用软件官网模板是一款适合iPhone手机app开发公司网站模板 .rar

    标题中的“AppStore应用软件官网模板”指的是专为在苹果AppStore上发布的应用程序设计的网站模板,这样的模板通常用于展示应用程序的功能、截图、用户评价以及下载链接,旨在吸引潜在用户并促进下载。这类模板需要...

    app store应用开发者官网响应式模板-响应式 app ios7 苹果 安卓 bootstrap 手机 简洁 官网.rar

    标题中的“app store应用开发者官网响应式模板”指的是为苹果App Store的应用开发者设计的一款网站模板,该模板具有响应式布局,能够适应不同设备的屏幕尺寸,包括iOS 7及更新版本的苹果设备和安卓设备。这表明模板...

    手机APP软件网站模板是一款苹果手机app store应用网站模板。.rar

    标题“手机APP软件网站模板是一款苹果手机app store应用网站模板”表明了这是一个专门为苹果手机APP设计的网站模板,适用于展示在Apple App Store中的应用。这个模板可能是为了帮助开发者或市场营销人员创建一个专业...

    生成App Store应用图标

    在App Store上发布应用时,一个重要的步骤是创建符合苹果严格规范的应用图标。这个过程涉及到多个尺寸和格式的图标,以便适应不同的设备和操作系统版本。本文将深入探讨如何使用Python来自动化生成适用于App Store的...

    Mac App Store应用 内购 破解 免费

    Mac App Store 内有不少应用是免费版+收费版,很多可以先下载免费版,然后在应用内购买收费版或其他。 俄罗斯一位黑客盯上了Mac App Store后,自建DNS服务器,把这应用内购买给破了。

    音乐播放器APP网站模板是一款音乐AppStore应用官网网站模板。.zip源码资源下载

    音乐播放器APP网站模板是一款音乐AppStore应用官网网站模板。.zip源码资源下载音乐播放器APP网站模板是一款音乐AppStore应用官网网站模板。.zip源码资源下载 1.学生做毕业设计用 2.程序员学习研究用 3.小公司换皮做...

    microsoft store安装包

    可能是因为Windows PowerShell中没有找到Microsoft Store的相关命令或者服务未启动,这种情况通常是由于系统更新出现问题、Microsoft Store应用程序被意外卸载或禁用,或者是系统中缺少必要的组件导致的。...

    ios应用内跳转到AppStore或者iTunes

    跳转到AppStore应用详情页 若要直接打开应用的详情页面,可以使用`UIApplication`的`openURL:`方法配合AppStore的URL。URL格式通常是`itms-apps://itunes.apple.com/app/id&lt;APP_ID&gt;`,其中`&lt;APP_ID&gt;`是你的应用在...

Global site tag (gtag.js) - Google Analytics