Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r13330 -r13355 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 13330) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 13355) @@ -38,6 +38,7 @@ import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; +import com.forgon.directory.model.CssdHandleTousses; import com.forgon.directory.model.CssdServiceDepts; import com.forgon.directory.model.OrgUnit; import com.forgon.directory.service.OrgUnitManager; @@ -1241,7 +1242,7 @@ tousseItem.setTousseName(tousseName); tousseItem.setAmount(entry.getValue()); tousseItem.setInvoicePlan(recyclingApplication); - tousseItem.setDiposable("否"); + tousseItem.setDiposable(TousseItem.DIPOSABLE_NO); TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName(tousseName); if (td != null){ tousseItem.setTousseType(td.getTousseType()); @@ -3196,7 +3197,7 @@ return existApplication; } - private void SetInstanceIdsToApplication(List tousseInstanceIds, + private void setInstanceCodesToApplication(List tousseInstanceIds, RecyclingApplication recyclingApplication) { String barcodes = recyclingApplication.getTousseBarcodes(); if (StringUtils.isBlank(barcodes)) { @@ -3393,92 +3394,115 @@ }); } + /** + * 创建申请单(根据申请科室、器械包的处理供应室生成一个或多个申请单) + * @param tousseNameAndAmount 器械包map,key为名称,value为数量 + * @param diposableGoodMap 一次性物品map,key为名称,value为数量 + * @param applicant 申请人 + * @param depart 使用记录的科室名称 + * @param departCoding 使用记录的科室编码 + * @param remark 备注 + * @param tousseInstanceCodes 器械包条码(含对应标识牌条码),应用至申请单的备注字段中 + * @param applicationCreateDate 申请时间(使用记录的时间) + * @param operationRoom 使用记录的病房 + * @param dpf 一次性物品价格浮动系数 + */ @Override public void createRecyclingApplicationByTousse( - Map tousseNameAndAmount,Map diposableGoodMap, String applicant, + Map tousseNameAndAmountMap,Map diposableGoodMap, String applicant, String depart, String departCoding, String remark, - List tousseInstanceIds,Date applicationCreateDate,String operationRoom,double dpf) { - if (tousseNameAndAmount.size() > 0 || diposableGoodMap.size() > 0) { - RecyclingApplication recyclingApplication = new RecyclingApplication(); - recyclingApplication - .setType(RecyclingApplication.TYPE_COMBO_FORM); - recyclingApplication.setApplicant(applicant); - recyclingApplication.setDepart(depart); - recyclingApplication.setSubmitTime(new Date()); - recyclingApplication.setDepartCoding(departCoding); - //设置处理科室为器械包类型服务科室 - CssdServiceDepts cssdService = orgUnitManager.getCssdServiceDepts(departCoding, CssdServiceDepts.TOUSSETYPE_TOUSSE); - if(cssdService != null){ - recyclingApplication.setHandleDepartCoding(cssdService.getCssdOrgUnitCode()); - recyclingApplication.setHandleDepart(cssdService.getCssdOrgUnitName()); - recyclingApplication.setHandleDepartId(cssdService.getCssdOrgUnitId() + ""); - } - recyclingApplication.setSettleAccountsDepart(depart); - recyclingApplication.setOperationRoom(operationRoom); - recyclingApplication.setSettleAccountsDepartCoding(departCoding); - recyclingApplication.setReaders(";ORGUNIT_" - + recyclingApplication.getDepartCoding() + ";"); - recyclingApplication.setSerialNumber(serialNumManager - .getSerialNumberStr(SerialNum.TYPE_RECYCLINGAPPLICATION)); - recyclingApplication.setApplicationTime(applicationCreateDate); - if (remark != null && StringUtils.isNotBlank(remark)) { - recyclingApplication.setRemark(remark); - } - SetInstanceIdsToApplication(tousseInstanceIds, recyclingApplication); - setApplicationStatus(recyclingApplication, tousseNameAndAmount); - createApplicationItems(recyclingApplication, tousseNameAndAmount); - List items = recyclingApplication.getApplicationItems(); - if(items == null){ - items = new ArrayList(); - recyclingApplication.setApplicationItems(items); - } - if(diposableGoodMap.size()>0){ - //一次性物品申请单,应该改为一次性物品类型的服务科室 - cssdService = orgUnitManager.getCssdServiceDepts(departCoding, CssdServiceDepts.TOUSSETYPE_DIPOSABLEGOODS); - if(cssdService != null){ - recyclingApplication.setHandleDepartCoding(cssdService.getCssdOrgUnitCode()); - recyclingApplication.setHandleDepart(cssdService.getCssdOrgUnitName()); - recyclingApplication.setHandleDepartId(cssdService.getCssdOrgUnitId() + ""); + List tousseInstanceCodes,Date applicationCreateDate,String operationRoom,double dpf) { + if (tousseNameAndAmountMap.size() > 0 || diposableGoodMap.size() > 0) { + //根据申请科室、器械包与一次性物品及其处理的供应室确定一共涉及需要多少个处理的供应室然后按处理科室进行拆分 + //如果需要转换的处理科室为多少个,则需要对应生成多少个申请单,一个申请单对应一个处理科室 + List> handleDepartMapList = getHandleDepartMapList(tousseNameAndAmountMap, diposableGoodMap, depart, departCoding); + for(Map handleDepartMap : handleDepartMapList){ + //按处理科室拆后的器械包及数量map + Map newTousseNameAndAmountMap = new HashMap(); + //按处理科室拆后的器械包及数量map + Map newDiposableGoodMap = new HashMap(); + List tousseItemList = (List)handleDepartMap.get("tousseItemList"); + if(CollectionUtils.isNotEmpty(tousseItemList)){ + for(TousseItem ti : tousseItemList){ + if(TousseDefinition.PACKAGE_TYPE_INSIDE.equals(ti.getTousseType())){ + newTousseNameAndAmountMap.put(ti.getTousseName(), ti.getAmount()); + }else if(TousseItem.TYPE_DIPOSABLE_GOODS.equals(ti.getTousseType())){ + newDiposableGoodMap.put(ti.getTousseName(), ti.getAmount()); + } + } } - for (Entry entry : diposableGoodMap.entrySet()) { - TousseItem tousseItem = new TousseItem(); - String dgName = entry.getKey(); - tousseItem.setTousseName(dgName); - tousseItem.setAmount(entry.getValue()); - tousseItem.setInvoicePlan(recyclingApplication); - tousseItem.setDiposable("是"); - tousseItem.setTousseType("一次性物品"); - String name = dgName; - String sp = null; - int startIndex = dgName.lastIndexOf("["); - int endIndex = dgName.lastIndexOf("]"); - if(startIndex != -1 && endIndex != -1){ - name = dgName.substring(0,startIndex); - sp = dgName.substring(startIndex + 1,endIndex); + + RecyclingApplication recyclingApplication = new RecyclingApplication(); + recyclingApplication + .setType(RecyclingApplication.TYPE_COMBO_FORM); + recyclingApplication.setApplicant(applicant); + recyclingApplication.setDepart(depart); + recyclingApplication.setSubmitTime(new Date()); + recyclingApplication.setDepartCoding(departCoding); + recyclingApplication.setHandleDepartCoding((String)handleDepartMap.get("handleDepartCoding")); + recyclingApplication.setHandleDepart((String)handleDepartMap.get("handleDepart")); + recyclingApplication.setSettleAccountsDepart(depart); + recyclingApplication.setOperationRoom(operationRoom); + recyclingApplication.setSettleAccountsDepartCoding(departCoding); + recyclingApplication.setReaders(";ORGUNIT_" + + recyclingApplication.getDepartCoding() + ";"); + recyclingApplication.setSerialNumber(serialNumManager + .getSerialNumberStr(SerialNum.TYPE_RECYCLINGAPPLICATION)); + recyclingApplication.setApplicationTime(applicationCreateDate); + if (remark != null && StringUtils.isNotBlank(remark)) { + recyclingApplication.setRemark(remark); + } + setInstanceCodesToApplication(tousseInstanceCodes, recyclingApplication); + setApplicationStatus(recyclingApplication, newTousseNameAndAmountMap); + createApplicationItems(recyclingApplication, newTousseNameAndAmountMap); + List items = recyclingApplication.getApplicationItems(); + if(items == null){ + items = new ArrayList(); + recyclingApplication.setApplicationItems(items); + } + + //遍历按处理科室拆分后的一次性物品map + if(newDiposableGoodMap.size()>0){ + for (Entry entry : newDiposableGoodMap.entrySet()) { + TousseItem tousseItem = new TousseItem(); + String dgName = entry.getKey(); + tousseItem.setTousseName(dgName); + tousseItem.setAmount(entry.getValue()); + tousseItem.setInvoicePlan(recyclingApplication); + tousseItem.setDiposable(TousseItem.DIPOSABLE_YES); + tousseItem.setTousseType(TousseItem.TYPE_DIPOSABLE_GOODS); + String name = dgName; + String sp = null; + int startIndex = dgName.lastIndexOf("["); + int endIndex = dgName.lastIndexOf("]"); + if(startIndex != -1 && endIndex != -1){ + name = dgName.substring(0,startIndex); + sp = dgName.substring(startIndex + 1,endIndex); + } + DisposableGoods disposableGoods = diposableGoodsManager.getDisposableGoodsByName(name, sp); + if(disposableGoods != null){ + tousseItem.setDisposableGoodsId(disposableGoods.getId()); + // Double price = diposableGoodBatchStockManager + // .getRecentPrice(dg); + Double price = disposableGoods.getReferencePrice(); + price = MathTools.mul(price, dpf, 2); + Double rowPrice = MathTools.mul(price, + tousseItem.getAmount(), 2); + tousseItem.setPrice(price); + tousseItem.setRowPrice(rowPrice); + } + items.add(tousseItem); } - DisposableGoods disposableGoods = diposableGoodsManager.getDisposableGoodsByName(name, sp); - if(disposableGoods != null){ - tousseItem.setDisposableGoodsId(disposableGoods.getId()); -// Double price = diposableGoodBatchStockManager -// .getRecentPrice(dg); - Double price = disposableGoods.getReferencePrice(); - price = MathTools.mul(price, dpf, 2); - Double rowPrice = MathTools.mul(price, - tousseItem.getAmount(), 2); - tousseItem.setPrice(price); - tousseItem.setRowPrice(rowPrice); - } - items.add(tousseItem); } + + try { + boolean checkRecyclingStatus = true; + saveOrUpdateRecyclingApplicationAndAddPackingTask( + recyclingApplication, newTousseNameAndAmountMap, null, null,checkRecyclingStatus); + } catch (Exception e) { + e.printStackTrace(); + } } - - try { - boolean checkRecyclingStatus = true; - saveOrUpdateRecyclingApplicationAndAddPackingTask( - recyclingApplication, tousseNameAndAmount, null, null,checkRecyclingStatus); - } catch (Exception e) { - e.printStackTrace(); - } } } @@ -3492,6 +3516,256 @@ } return null; } + + /** + * 根据申请科室,器械包及一次性物品查出处理科室 + * @param tousseNameAndAmount 器械包map + * @param diposableGoodMap 一次性物品map + * @param depart 申请科室名称 + * @param departCoding 申请科室编码 + * @return List> 结果格式如:[{handleDepart:"",handleDepartCoding:"",tousseItemList:[{tousseName:"",disposable:"",tousseDefinitionId:1,disposabledGoodsId:0,amount:10}],}] + */ + private List> getHandleDepartMapList(Map tousseNameAndAmountMap,Map diposableGoodMap, + String depart, String departCoding){ + List> handleDepartMapList = new ArrayList>(); + + //器械包处理 + if(tousseNameAndAmountMap != null && tousseNameAndAmountMap.size() > 0){ + for(String tousseName : tousseNameAndAmountMap.keySet()){ + CssdHandleTousses handleTousses = null;//该器械包生成申请单时对应处理科室 + //器械包处理科室sql + String tousseHandleSql = "select cd.cssdOrgUnitCode,cd.cssdOrgUnitName,ct.tousseDefinitionId from CssdServiceDepts cd join CssdHandleTousses ct on cd.cssdOrgUnitCode=ct.orgUnitCode " + +" where cd.tousseType='" + CssdServiceDepts.TOUSSETYPE_TOUSSE + "' and cd.clinicOrgUnitCode='" + departCoding + "' and ct.tousseName ='" + tousseName + "'"; + ResultSet rs = null; + try{ + rs = objectDao.executeSql(tousseHandleSql); + List list = new ArrayList(); + while(rs.next()){ + CssdHandleTousses cssdHandleTousses = new CssdHandleTousses(); + cssdHandleTousses.setOrgUnitCode(rs.getString("cssdOrgUnitCode")); + cssdHandleTousses.setOrgUnitName(rs.getString("cssdOrgUnitName")); + cssdHandleTousses.setTousseDefinitionId(rs.getLong("tousseDefinitionId")); + list.add(cssdHandleTousses); + } + if(list.size() != 1){ + TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName(tousseName); + if(td != null && StringUtils.isNotBlank(td.getHandlerDepartCode())){ + list.clear(); + CssdHandleTousses cssdHandleTousses = new CssdHandleTousses(); + cssdHandleTousses.setOrgUnitCode(td.getHandlerDepartCode()); + cssdHandleTousses.setOrgUnitName(td.getHandlerDepartName()); + list.add(cssdHandleTousses); + }else{ + handleTousses = list.get(0); + } + }else{ + handleTousses = list.get(0); + } + + if(handleTousses == null){ + throw new RuntimeException(tousseName+"未配置处理科室."); + } + + if(CollectionUtils.isNotEmpty(handleDepartMapList)){ + boolean existsHandleDepartInList = false; + for(Map map : handleDepartMapList){ + if(StringUtils.equals(handleTousses.getOrgUnitCode(), (String)map.get("handleDepartCoding"))){ + if(map.get("tousseItemList") != null){ + List tousseItemList = (List)map.get("tousseItemList"); + TousseItem tousseItem = newTousseItem(tousseName,tousseNameAndAmountMap.get(tousseName),TousseDefinition.PACKAGE_TYPE_INSIDE,handleTousses.getTousseDefinitionId(),TousseItem.DIPOSABLE_NO); + tousseItemList.add(tousseItem); + map.put("tousseItemList", tousseItemList); + }else{ + List tousseItemList = new ArrayList(); + TousseItem tousseItem = newTousseItem(tousseName,tousseNameAndAmountMap.get(tousseName),TousseDefinition.PACKAGE_TYPE_INSIDE,handleTousses.getTousseDefinitionId(),TousseItem.DIPOSABLE_NO); + tousseItemList.add(tousseItem); + map.put("tousseItemList", tousseItemList); + } + existsHandleDepartInList = true; + break; + } + } + + if(existsHandleDepartInList == false){ + //根据处理科室返回 + Map map = new HashMap(); + map.put("handleDepartCoding", handleTousses.getOrgUnitCode()); + map.put("handleDepart", handleTousses.getOrgUnitName()); + List tousseItemList = new ArrayList(); + TousseItem tousseItem = newTousseItem(tousseName,tousseNameAndAmountMap.get(tousseName),TousseDefinition.PACKAGE_TYPE_INSIDE,handleTousses.getTousseDefinitionId(),TousseItem.DIPOSABLE_NO); + tousseItemList.add(tousseItem); + map.put("tousseItemList", tousseItemList); + } + }else{ + //根据处理科室返回 + Map map = new HashMap(); + map.put("handleDepartCoding", handleTousses.getOrgUnitCode()); + map.put("handleDepart", handleTousses.getOrgUnitName()); + List tousseItemList = new ArrayList(); + TousseItem tousseItem = newTousseItem(tousseName,tousseNameAndAmountMap.get(tousseName),TousseDefinition.PACKAGE_TYPE_INSIDE,handleTousses.getTousseDefinitionId(),TousseItem.DIPOSABLE_NO); + tousseItemList.add(tousseItem); + map.put("tousseItemList", tousseItemList); + } + }catch(Exception e){ + throw new RuntimeException("查询"+tousseName+"处理科室出错."); + }finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + } + + //一次性物品 + if(diposableGoodMap != null && diposableGoodMap.size() > 0){ + //一次性物品处理 + String disposableHandleSql = "select cd.cssdOrgUnitCode,cd.cssdOrgUnitName,ct.tousseName from CssdServiceDepts cd join CssdHandleTousses ct on cd.cssdOrgUnitCode=ct.orgUnitCode " + +" where cd.tousseType='" + CssdServiceDepts.TOUSSETYPE_DIPOSABLEGOODS + "' and cd.clinicOrgUnitCode='" + departCoding + "' "; + ResultSet rs = null; + List disposableGoodsHandlelist = new ArrayList(); + try{ + rs = objectDao.executeSql(disposableHandleSql); + while(rs.next()){ + CssdHandleTousses cssdHandleTousses = new CssdHandleTousses(); + cssdHandleTousses.setOrgUnitCode(rs.getString("cssdOrgUnitCode")); + cssdHandleTousses.setOrgUnitName(rs.getString("cssdOrgUnitName")); + disposableGoodsHandlelist.add(cssdHandleTousses); + } + + //如果配置服务该申请科室一次性物品的供应室数量为0时 + if(disposableGoodsHandlelist.size() == 0){ + throw new RuntimeException("未配置供应室服务该科室一次性物品"); + } + + if(disposableGoodsHandlelist.size() == 1){ + CssdHandleTousses handleTousses = disposableGoodsHandlelist.get(0); + for(String diposableGoodName : diposableGoodMap.keySet()){ + if(CollectionUtils.isNotEmpty(handleDepartMapList)){ + boolean existsHandleDepartInList = false; + for(Map map : handleDepartMapList){ + if(StringUtils.equals(handleTousses.getOrgUnitCode(), (String)map.get("handleDepartCoding"))){ + if(map.get("tousseItemList") != null){ + List tousseItemList = (List)map.get("tousseItemList"); + TousseItem tousseItem = newTousseItem(diposableGoodName,diposableGoodMap.get(diposableGoodName),TousseItem.TYPE_DIPOSABLE_GOODS,null,TousseItem.DIPOSABLE_YES); + tousseItemList.add(tousseItem); + map.put("tousseItemList", tousseItemList); + }else{ + List tousseItemList = new ArrayList(); + TousseItem tousseItem = newTousseItem(diposableGoodName,diposableGoodMap.get(diposableGoodName),TousseItem.TYPE_DIPOSABLE_GOODS,null,TousseItem.DIPOSABLE_YES); + tousseItemList.add(tousseItem); + map.put("tousseItemList", tousseItemList); + } + existsHandleDepartInList = true; + break; + } + } + + if(existsHandleDepartInList == false){ + //根据处理科室返回 + Map map = new HashMap(); + map.put("handleDepartCoding", handleTousses.getOrgUnitCode()); + map.put("handleDepart", handleTousses.getOrgUnitName()); + List tousseItemList = new ArrayList(); + TousseItem tousseItem = newTousseItem(diposableGoodName,diposableGoodMap.get(diposableGoodName),TousseItem.TYPE_DIPOSABLE_GOODS,null,TousseItem.DIPOSABLE_YES); + tousseItemList.add(tousseItem); + map.put("tousseItemList", tousseItemList); + } + }else{ + Map map = new HashMap(); + map.put("handleDepartCoding", handleTousses.getOrgUnitCode()); + map.put("handleDepart", handleTousses.getOrgUnitName()); + List tousseItemList = new ArrayList(); + TousseItem tousseItem = newTousseItem(diposableGoodName,diposableGoodMap.get(diposableGoodName),TousseItem.TYPE_DIPOSABLE_GOODS,null,TousseItem.DIPOSABLE_YES); + tousseItemList.add(tousseItem); + map.put("tousseItemList", tousseItemList); + } + } + }else{ + //如果配置服务该申请科室一次性物品的供应室为多个时,取器械包的处理供应室 + if(CollectionUtils.isNotEmpty(handleDepartMapList)){ + boolean existsHandleDepartInList = false; + for(Map map : handleDepartMapList){ + //遍历服务该科室一次性物品的所有供应室 + for(CssdHandleTousses disposableHandleTousses : disposableGoodsHandlelist){ + if(StringUtils.equals(disposableHandleTousses.getOrgUnitCode(), (String)map.get("handleDepartCoding"))){ + if(map.get("tousseItemList") != null){ + List tousseItemList = (List)map.get("tousseItemList"); + + //循环所有的一次性物品 + for(String diposableGoodName : diposableGoodMap.keySet()){ + TousseItem tousseItem = newTousseItem(diposableGoodName,diposableGoodMap.get(diposableGoodName),TousseItem.TYPE_DIPOSABLE_GOODS,null,TousseItem.DIPOSABLE_YES); + tousseItemList.add(tousseItem); + } + map.put("tousseItemList", tousseItemList); + }else{ + List tousseItemList = new ArrayList(); + //循环所有的一次性物品 + for(String diposableGoodName : diposableGoodMap.keySet()){ + TousseItem tousseItem = newTousseItem(diposableGoodName,diposableGoodMap.get(diposableGoodName),TousseItem.TYPE_DIPOSABLE_GOODS,null,TousseItem.DIPOSABLE_YES); + tousseItemList.add(tousseItem); + } + map.put("tousseItemList", tousseItemList); + } + existsHandleDepartInList = true; + break; + } + } + } + + if(existsHandleDepartInList == false){ + CssdHandleTousses disposableHandleTousses = disposableGoodsHandlelist.get(0); + //根据处理科室返回 + Map map = new HashMap(); + map.put("handleDepartCoding", disposableHandleTousses.getOrgUnitCode()); + map.put("handleDepart", disposableHandleTousses.getOrgUnitName()); + List tousseItemList = new ArrayList(); + //循环所有的一次性物品 + for(String diposableGoodName : diposableGoodMap.keySet()){ + TousseItem tousseItem = newTousseItem(diposableGoodName,diposableGoodMap.get(diposableGoodName),TousseItem.TYPE_DIPOSABLE_GOODS,null,TousseItem.DIPOSABLE_YES); + tousseItemList.add(tousseItem); + } + map.put("tousseItemList", tousseItemList); + } + }else{ + CssdHandleTousses disposableHandleTousses = disposableGoodsHandlelist.get(0); + //根据处理科室返回 + Map map = new HashMap(); + map.put("handleDepartCoding", disposableHandleTousses.getOrgUnitCode()); + map.put("handleDepart", disposableHandleTousses.getOrgUnitName()); + List tousseItemList = new ArrayList(); + //循环所有的一次性物品 + for(String diposableGoodName : diposableGoodMap.keySet()){ + TousseItem tousseItem = newTousseItem(diposableGoodName,diposableGoodMap.get(diposableGoodName),TousseItem.TYPE_DIPOSABLE_GOODS,null,TousseItem.DIPOSABLE_YES); + tousseItemList.add(tousseItem); + } + map.put("tousseItemList", tousseItemList); + } + } + }catch(Exception e){ + throw new RuntimeException("查询一次性物品处理科室出错."); + }finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + return handleDepartMapList; + } + + /** + * 构造tousseItem对象 + * @param tousseName + * @param amount + * @param tousseType + * @param tousseDefinitionId + * @param diposable + * @return + */ + private TousseItem newTousseItem(String tousseName , Integer amount , String tousseType , Long tousseDefinitionId , String diposable){ + TousseItem tousseItem = new TousseItem(); + tousseItem.setTousseName(tousseName); + tousseItem.setAmount(amount); + tousseItem.setTousseType(tousseType); + tousseItem.setDiposable(diposable); + tousseItem.setTousseDefinitionId(tousseDefinitionId); + return tousseItem; + } @SuppressWarnings("unchecked") @Override Index: ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js =================================================================== diff -u -r12934 -r13355 --- ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js (.../goodsTemplateApplicationView.js) (revision 12934) +++ ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js (.../goodsTemplateApplicationView.js) (revision 13355) @@ -2201,24 +2201,26 @@ // departComp.disable(); var departCodingComp = top.Ext4.ComponentQuery.query("#recyclingApplicationForm #departCoding")[0]; departCodingComp.setValue($Id('departCoding').value); - - //选择申请科室后,根据申请科室及单类型加载处理科室,如果加载后的数量为1,则进行默认处理科室赋值 - handleDepartStore.proxy.extraParams.applyDepartCode = $Id('departCoding').value; - handleDepartStore.proxy.extraParams.tousseType = invoicePlanForTousseType; - handleDepartStore.load({ - //params:{applyDepartCode:deptCoding,tousseType:invoicePlanForTousseType}, - callback: function(records, operation, success) { - var record = records; - if (records.length == 1){ - record = records[0]; - top.Ext4.getCmp("handleDepartCoding").setValue(record.data.cssdOrgUnitCode); - top.Ext4.getCmp('handleDepart').setValue(record.data.name); - - comboGoodsStore.proxy.extraParams.cssdOrgUnitCode = record.data.cssdOrgUnitCode; - comboGoodsStore.reload(); + + if(!id || id == 0){ + //选择申请科室后,根据申请科室及单类型加载处理科室,如果加载后的数量为1,则进行默认处理科室赋值 + handleDepartStore.proxy.extraParams.applyDepartCode = $Id('departCoding').value; + handleDepartStore.proxy.extraParams.tousseType = invoicePlanForTousseType; + handleDepartStore.load({ + //params:{applyDepartCode:deptCoding,tousseType:invoicePlanForTousseType}, + callback: function(records, operation, success) { + var record = records; + if (records && records.length == 1){ + record = records[0]; + top.Ext4.getCmp("handleDepartCoding").setValue(record.data.cssdOrgUnitCode); + top.Ext4.getCmp('handleDepart').setValue(record.data.name); + + comboGoodsStore.proxy.extraParams.cssdOrgUnitCode = record.data.cssdOrgUnitCode; + comboGoodsStore.reload(); + } } - } - }); + }); + } } if(id == ""){//添加 // 设置表单的默认焦点 @@ -2521,10 +2523,28 @@ top.Ext4.getCmp("settleAccountsDepartCoding").setValue(recyclingApplication.settleAccountsDepartCoding); top.Ext4.getCmp("handleDepart").forceSelection = false; - top.Ext4.getCmp("handleDepart").setValue(recyclingApplication.handleDepart); + top.Ext4.getCmp("handleDepart").setValue(recyclingApplication.handleDepart); + top.Ext4.getCmp("handleDepart").setRawValue(recyclingApplication.handleDepart); top.Ext4.getCmp("handleDepart").forceSelection = true; top.Ext4.getCmp("handleDepartCoding").setValue(recyclingApplication.handleDepartCoding); + handleDepartStore.proxy.extraParams.applyDepartCode = recyclingApplication.departCoding;alert(recyclingApplication.departCoding); + //handleDepartStore.proxy.extraParams.tousseType = recyclingApplication.tousseType:invoicePlanForTousseType; + handleDepartStore.load({ + //params:{applyDepartCode:deptCoding,tousseType:invoicePlanForTousseType}, + callback: function(records, operation, success) { + var record = records; + if (records && records.length == 1){ + record = records[0]; + top.Ext4.getCmp("handleDepartCoding").setValue(record.data.cssdOrgUnitCode); + top.Ext4.getCmp('handleDepart').setValue(record.data.name); + + comboGoodsStore.proxy.extraParams.cssdOrgUnitCode = record.data.cssdOrgUnitCode; + comboGoodsStore.reload(); + } + } + }); + if(recyclingApplication.applicationTime){ top.Ext4.getCmp('applicationTimeStr').setValue(Ext.util.Format.date(new Date(recyclingApplication.applicationTime.time),'Y-m-d H:i')); } Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r12640 -r13355 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 12640) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 13355) @@ -574,25 +574,21 @@ } } - // 获取使用记录参数 + /** + * 获取使用记录参数 + * @param ids 使用记录id,多个值用;分隔 + * @return + */ private Map checkedUseRecords(Collection ids) { Map applyTousseMap = new HashMap(); - Map applyTousseOfSecondSupplyRoomMap = new HashMap(); - Map applyDisinfectTousseMap = new HashMap(); + //自定义器械包map,非消毒物品map,变量命名错误 + Map applyCustomTousseMap = new HashMap(); Map applyDiposableGoodsMap = new HashMap(); List useRecordList = new ArrayList(); - List tousseInstanceIDs = new ArrayList(); + //器械包实例(如有标识牌时同时记录绑定的标识牌)条码,非id,命名有误。包定义为需要转申请单的才记录, + List tousseInstanceCodes = new ArrayList(); // key-使用记录id,value-该使用记录中包含的器械包实例条码 int i = 1; - SupplyRoomConfig firstSupplyRoom = supplyRoomConfigManager - .getFirstSupplyRoomConfig(); - String secondSupplyRoomCode = ""; - List secondSupplyRooms = supplyRoomConfigManager - .getSecondSupplyRoomList(); - if (secondSupplyRooms != null && secondSupplyRooms.size() > 0 ) { - secondSupplyRoomCode = secondSupplyRooms.get(0) - .getOrgUnitCoding(); - } for (Long id : ids) { List tousseInstanceList = tousseInstanceManager .findTousseInstanceListByUseRecordId(id); @@ -602,12 +598,12 @@ .getTousseDefinition().getIsConvertApplyGoods())) { continue; } - tousseInstanceIDs.add(tousseInstance.getBarcode()); + tousseInstanceCodes.add(tousseInstance.getBarcode()); IDCardInstance clothInstance = idCardInstanceManager.getIDCardInstanceByTousseInstanceBarcode(tousseInstance.getBarcode()); if (clothInstance != null) { - tousseInstanceIDs.add(clothInstance.getBarcode()); + tousseInstanceCodes.add(clothInstance.getBarcode()); } String tousseType = tousseInstance.getTousseDefinition() .getTousseType(); @@ -640,49 +636,26 @@ continue; } else if (StringUtils.equals(tousseType, TousseDefinition.PACKAGE_TYPE_CUSTOM)) { - if (applyDisinfectTousseMap.containsKey(tousseInstance + if (applyCustomTousseMap.containsKey(tousseInstance .getTousseName())) { - Integer oldAmount = applyDisinfectTousseMap + Integer oldAmount = applyCustomTousseMap .get(tousseInstance.getTousseName()); - applyDisinfectTousseMap.put( + applyCustomTousseMap.put( tousseInstance.getTousseName(), oldAmount + i); } else { - applyDisinfectTousseMap.put( + applyCustomTousseMap.put( tousseInstance.getTousseName(), i); } } else { - // 一级供应室器械包 - if (firstSupplyRoom != null - && StringUtils.equals(firstSupplyRoom - .getOrgUnitCoding(), tousseInstance - .getTousseDefinition() - .getHandlerDepartCode())) { - if (applyTousseMap.containsKey(tousseInstance - .getTousseName())) { - Integer oldAmount = applyTousseMap - .get(tousseInstance.getTousseName()); - applyTousseMap.put(tousseInstance.getTousseName(), - oldAmount + 1); - } else { - applyTousseMap.put(tousseInstance.getTousseName(), - 1); - } - // 二级供应室器械包 - } else if (StringUtils.isNotBlank(secondSupplyRoomCode) - && StringUtils.equals(secondSupplyRoomCode, - tousseInstance.getTousseDefinition() - .getHandlerDepartCode())) { - if (applyTousseOfSecondSupplyRoomMap - .containsKey(tousseInstance.getTousseName())) { - Integer oldAmount = applyTousseOfSecondSupplyRoomMap - .get(tousseInstance.getTousseName()); - applyTousseOfSecondSupplyRoomMap.put( - tousseInstance.getTousseName(), - oldAmount + 1); - } else { - applyTousseOfSecondSupplyRoomMap.put( - tousseInstance.getTousseName(), 1); - } + if (applyTousseMap.containsKey(tousseInstance + .getTousseName())) { + Integer oldAmount = applyTousseMap + .get(tousseInstance.getTousseName()); + applyTousseMap.put(tousseInstance.getTousseName(), + oldAmount + 1); + } else { + applyTousseMap.put(tousseInstance.getTousseName(), + 1); } } } @@ -699,12 +672,11 @@ } } Map map = new HashMap(); - map.put("applyTousseMap", applyTousseMap); - map.put("applyDisinfectTousseMap", applyDisinfectTousseMap); - map.put("applyTousseOfSecondSupplyRoomMap",applyTousseOfSecondSupplyRoomMap); - map.put("applyDiposableGoodsMap", applyDiposableGoodsMap); + map.put("applyTousseMap", applyTousseMap);//一级供应室普通器械包(含敷料包,不含消毒物品、外来器械等)map + map.put("applyCustomTousseMap", applyCustomTousseMap);//自定义器械包map + map.put("applyDiposableGoodsMap", applyDiposableGoodsMap);//一次性物品 map.put("useRecordList", useRecordList); - map.put("recordid_tousseInstanceIds", tousseInstanceIDs); + map.put("recordid_tousseInstanceCodes", tousseInstanceCodes);//器械包条码 return map; } @@ -724,20 +696,21 @@ * @param applicationCreateDate */ @SuppressWarnings("unchecked") - public void mintRecyclingApplication( + private void mintRecyclingApplication( boolean isAutomaticlyMergeApplications, boolean isSecondSupplyRoomNeedRecycle,Boolean isDgConvertApplication,Boolean isTousseDgMergeConvert, Map useRecordsMap, String applicant, String depart, String departCoding, String remark,String operationRoom,String patientName,Date applicationCreateDate,double dpf) { - + //器械包map,不区分处理科室为一级或二级供应室 Map applyTousseMap = (Map) useRecordsMap .get("applyTousseMap"); - Map applyDisinfectTousseMap = (Map) useRecordsMap - .get("applyDisinfectTousseMap"); - Map applyTousseOfSecondSupplyRoomMap = (Map) useRecordsMap - .get("applyTousseOfSecondSupplyRoomMap"); - List tousseInstanceIds = (List) useRecordsMap - .get("recordid_tousseInstanceIds"); + //自定义器械包map + Map applyCustomTousseMap = (Map) useRecordsMap + .get("applyCustomTousseMap"); + //器械包条码集合 + List tousseInstanceCodes = (List) useRecordsMap + .get("recordid_tousseInstanceCodes"); + //一次性物品 Map applyDiposableGoodsMap = (Map)useRecordsMap.get("applyDiposableGoodsMap"); /*// 待回收状态器械包申请单记录 @@ -763,7 +736,7 @@ //自动合并申请单(处理所属供应室的包) if (isAutomaticlyMergeApplications && recyclingApplication != null) { // 设置申请单的器械包id的值 - setInstanceIdsToApplication(tousseInstanceIds, recyclingApplication); + setInstanceIdsToApplication(tousseInstanceCodes, recyclingApplication); mergeRecyclingApplications(applyTousseMap, remark, recyclingApplication); try { @@ -778,7 +751,7 @@ } else { recyclingApplicationManager.createRecyclingApplicationByTousse( applyTousseMap, applicant, depart, departCoding, remark, - tousseInstanceIds,applicationCreateDate,operationRoom); + tousseInstanceCodes,applicationCreateDate,operationRoom); }*/ //一次性物品是否转换申请单 @@ -789,25 +762,27 @@ if(isTousseDgMergeConvert == null){ isTousseDgMergeConvert = false; } + //如果一次性物品是否转换申请单为是,并且器械包一次性物品转换成申请单是否合并成一张单为否时 if(isDgConvertApplication && !isTousseDgMergeConvert){ if(applyTousseMap.size() > 0){ recyclingApplicationManager.createRecyclingApplicationByTousse( applyTousseMap,new HashMap(), applicant, depart, departCoding, remark, - tousseInstanceIds,applicationCreateDate,operationRoom,dpf); + tousseInstanceCodes,applicationCreateDate,operationRoom,dpf); } if(applyDiposableGoodsMap.size() > 0){ recyclingApplicationManager.createRecyclingApplicationByTousse( new HashMap(),applyDiposableGoodsMap, applicant, depart, departCoding, remark, - tousseInstanceIds,applicationCreateDate,operationRoom,dpf); + tousseInstanceCodes,applicationCreateDate,operationRoom,dpf); } }else{ + //否则一次性物品是否转换申请单为否 if(!isDgConvertApplication){ applyDiposableGoodsMap = new HashMap(); } //改为不管科室供应室配置定义是否自动合并,都将重新创建新的申请单 recyclingApplicationManager.createRecyclingApplicationByTousse( applyTousseMap,applyDiposableGoodsMap, applicant, depart, departCoding, remark, - tousseInstanceIds,applicationCreateDate,operationRoom,dpf); + tousseInstanceCodes,applicationCreateDate,operationRoom,dpf); } //二级供应室是否需要回收(处理所属手术室的包) @@ -847,18 +822,18 @@ }*/ //改为不管科室供应室配置定义是否自动合并,都将重新创建新的申请单 - recyclingApplicationManager + /*recyclingApplicationManager .createSecondSupplyRoomRecyclingApplicationByTousse( applyTousseOfSecondSupplyRoomMap, applicant, - depart, departCoding, remark,operationRoom,patientName,applicationCreateDate); + depart, departCoding, remark,operationRoom,patientName,applicationCreateDate);*/ } //自定义器械包生成申请单 recyclingApplicationManager.createRecyclingApplicationByCustomTousse( - applyDisinfectTousseMap, applicant, depart, departCoding, + applyCustomTousseMap, applicant, depart, departCoding, remark,applicationCreateDate); } - private void setInstanceIdsToApplication(List tousseInstanceIds, + private void setInstanceIdsToApplication(List tousseInstanceCodes, RecyclingApplication recyclingApplication) { String instanceIds = recyclingApplication.getTousseBarcodes(); if (instanceIds == null) { @@ -868,10 +843,10 @@ if (sb.length() == 0) { sb.append(";"); } - for (String id : tousseInstanceIds) { - if (sb.indexOf(id) == -1) { + for (String code : tousseInstanceCodes) { + if (sb.indexOf(code) == -1) { if (sb.length() == 0) { - sb.append(id).append(";"); + sb.append(code).append(";"); } } } @@ -1020,9 +995,10 @@ } // 新建申请单 mintRecyclingApplication(config.getAutoMergeApplication(), - config.isSecondSupplyRoomNeedRecycle(), - config.getIsDgConvertApplication(), - config.getIsTousseDgMergeConvert(), useRecordsMap, applicant, + config.isSecondSupplyRoomNeedRecycle(),// 二级供应室是否需要回收 + config.getIsDgConvertApplication(),//使用记录登记的一次性物品是否转换申请单 + config.getIsTousseDgMergeConvert(), //是否器械包一次性物品合并转换申请单 + useRecordsMap, applicant, depart, departCoding, remark.toString(), operationRoom, patientName, applicationCreateDate,config.getDiposablePriceFluctuation()); return returnMsg; Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r13138 -r13355 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 13138) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 13355) @@ -1,6 +1,7 @@ package com.forgon.disinfectsystem.packing.service; import java.lang.reflect.InvocationTargetException; +import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; @@ -11,6 +12,7 @@ import java.util.Collections; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -40,6 +42,7 @@ import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.OrgUnit; +import com.forgon.directory.service.OrgUnitManager; import com.forgon.directory.vo.LoginUserData; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedata.becleanitem.service.BeCleanItemManager; @@ -59,10 +62,13 @@ import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; import com.forgon.disinfectsystem.entity.becleanitem.ClassifiedItem; import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; +import com.forgon.disinfectsystem.entity.departmentstock.DepartmentStock; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock; import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; +import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceItem; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.packing.IDCardInfoForPackingTask; import com.forgon.disinfectsystem.entity.packing.PackingRecord; @@ -82,6 +88,7 @@ import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskItemVo; import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskVo; import com.forgon.disinfectsystem.stockmanage.cssdstock.service.TousseStockManager; +import com.forgon.disinfectsystem.stockmanage.departmentstock.service.DepartmentStockManager; import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; @@ -93,6 +100,7 @@ import com.forgon.systemsetting.model.HttpOption; import com.forgon.systemsetting.service.HttpOptionManager; import com.forgon.tools.MathTools; +import com.forgon.tools.Path; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JSONUtil; @@ -142,6 +150,10 @@ private LogManager appLogManager; + private OrgUnitManager orgUnitManager; + + private DepartmentStockManager departmentStockManager; + private GoodsStockManager goodsStockManager; private WareHouseManager wareHouseManager; @@ -230,7 +242,15 @@ public void setIdCardInstanceManager(IDCardInstanceManager idCardInstanceManager) { this.idCardInstanceManager = idCardInstanceManager; } + public void setOrgUnitManager(OrgUnitManager orgUnitManager) { + this.orgUnitManager = orgUnitManager; + } + public void setDepartmentStockManager( + DepartmentStockManager departmentStockManager) { + this.departmentStockManager = departmentStockManager; + } + @Override public void saveOrUpdate(PackingTask task) { String supplyRoomOrgUnitCoding = ""; @@ -693,7 +713,8 @@ JSONArray materialsJsonArray = new JSONArray(); if (!isTraceable) { - String tousseDefinitionName = CssdUtils.filterDisinfectGoodsName(tousseName); + //String tousseDefinitionName = CssdUtils.filterDisinfectGoodsName(tousseName); + String tousseDefinitionName = tousseName; fixedBarcode = tousseInstanceManager.getTousseDefinitionFixedBarcode(tousseDefinitionName); } @@ -925,7 +946,8 @@ stock.setAmount(addAmount); stock.setGoodsType(GoodsStock.TYPE_MATERIAL); stock.setMaterialDefinitionId(md.getId()); - stock.setName(originalMaterialName); + //名称需要带上规格 + stock.setName(CssdUtils.getMaterialName(md)); stock.setOrgUnitCode(wareHouse.getOrgUnitCode()); stock.setOrgUnitName(wareHouse.getOrgUnitName()); stock.setWareHouseId(wareHouse.getId()); @@ -1513,6 +1535,15 @@ boolean isPrintUserName = supplyRoomConfigManager.getSystemParamsObj().isPrintUserFullName(); Date now = new Date(); + + //不需要灭菌的器械包(一般是消毒物品),用于二级供应室发货 + List withoutSterilingTousseInstanceList = new ArrayList(); + //科室供应室配置的参数配置 + SupplyRoomConfig supplyRoomConfigParams = supplyRoomConfigManager.getSystemParamsObj(); + //是否为二级供应室发货 + boolean isSecondSupplyRoomAutoInvoice = + !SupplyRoomConfig.RECYCLING_PACKING_NO.equals(supplyRoomConfigParams.getIsSecondSupplyRoomAutoInvoice()); + for (TousseInstance tousseInstance : tousses) { tousseInstance.setReviewTime(now); @@ -1558,33 +1589,30 @@ tousseInstance.setReviewBasket_id(reviewedBasket.getId()); tousseInstance.setVirtualBasketSeqNum(null);//需要将虚拟篮筐的别名字段也删除,防止还能通过别名查到 } - } - - if (supplyRoomConfig != null){ - int supplyRoomType = supplyRoomConfig.getSupplyRoomType(); - - if (supplyRoomType == SupplyRoomConfig.SUPPLYROOM_TYPE_1) { - // 更新消毒物品的库存 + }else{ + //不需要灭菌的器械包实例(消毒物品)集合 + withoutSterilingTousseInstanceList.add(tousseInstance); + if (supplyRoomConfig != null){ + int supplyRoomType = supplyRoomConfig.getSupplyRoomType(); - boolean isTraceable = tousseInstance.getUnTraceableTousse(); - - String name = tousseInstance.getTousseDefinitionName(); - - // 如果不追溯,则库存的名字不需要带下划线 - if (!isTraceable){ - name = CssdUtils.filterDisinfectGoodsName(name); + if (supplyRoomType == SupplyRoomConfig.SUPPLYROOM_TYPE_1) { + // 更新消毒物品的库存 + + boolean isTraceable = tousseInstance.getUnTraceableTousse(); + + String name = tousseInstance.getTousseDefinitionName(); + + // 如果不追溯,则库存的名字不需要带下划线 + if (!isTraceable){ + name = CssdUtils.filterDisinfectGoodsName(name); + } + + tousseStockManager.increaseStockByTousseName(name); + + } else if (supplyRoomType == SupplyRoomConfig.SUPPLYROOM_TYPE_2 && isSecondSupplyRoomAutoInvoice) { + //不需要灭菌的器械包实例(消毒物品)集合 + withoutSterilingTousseInstanceList.add(tousseInstance); } - - tousseStockManager.increaseStockByTousseName(name); - - } else if (supplyRoomType == SupplyRoomConfig.SUPPLYROOM_TYPE_2) { - if (StringUtils.isNotBlank(coding)) { - tousseInstance.setLocation(coding); - tousseInstance - .setLocationForDisplay(directOrgUnitNamesWhereUserBelong); - tousseInstance - .setStatus(TousseInstance.STATUS_SHIPPED); - } } } @@ -1719,6 +1747,41 @@ } updateGoodsStock(coding, tousses); + + //判断如果配置二级供应室是否自动发货不为否才自动发货,否则不自动发货 + if(supplyRoomConfig.getSupplyRoomType() == SupplyRoomConfig.SUPPLYROOM_TYPE_2 + && isSecondSupplyRoomAutoInvoice){ + String rootPath = Path.getWebAppRoot(); + String project = CssdUtils.getConfigProperty("project"); + String jsonPath = rootPath + "/WEB-INF/classes/config/"+project+"/orInvoiceDeptConfig.json"; + String jsonStr = CssdUtils.readFile(jsonPath); + + String deptName = loginUser.getCurrentOrgUnitName(); + String deptCode = loginUser.getCurrentOrgUnitCode(); + + if(StringUtils.isNotBlank(jsonStr)){ + JSONArray jsonArray = JSONArray.fromObject(jsonStr); + if(jsonArray != null){ + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObj = jsonArray.getJSONObject(i); + String cssdName = jsonObj.getString("cssdName");//二级供应室名称:如手术器械消毒供应区 + deptName = jsonObj.getString("deptName");//发货科室:如中心手术室 + OrgUnit org = orgUnitManager.getCurrentOrgUintByName(cssdName); + if(org != null && org.getOrgUnitCoding().equals(deptCode)){ + OrgUnit org2 = orgUnitManager.getCurrentOrgUintByName(deptName); + if(org2 != null){ + deptCode = org2.getOrgUnitCoding(); + } + break; + } + } + } + } + //二级供应室 + if (withoutSterilingTousseInstanceList.size() > 0) { + extractTousseInvoice(withoutSterilingTousseInstanceList,deptName,deptCode); + } + } json.put("success", success); json.put("message", msg); @@ -1763,7 +1826,105 @@ } return json; } + + /** + * 提取出器械包实例用于发货 + * 复制的SterilizationRecordManagerImpl类的方法 + * @param tousseInstances + * @param deptName + * @param deptCode + */ + private void extractTousseInvoice(List tousseInstances,String deptName,String deptCode) { + if (tousseInstances.size() > 0) { + Invoice invoice = new Invoice(); + invoice.setSerialNumber(serialNumManager + .getSerialNumberStr(SerialNum.TYPE_INVOICE)); + invoice.setSender(AcegiHelper.getLoginUser().getUserFullName()); + invoice.setSendTime(new Date()); + invoice.setDepart(deptName); + invoice.setSettleAccountsDepart(deptName); + invoice.setOrgUnitCoding(AcegiHelper.getLoginUser() + .getCurrentOrgUnitCode()); + invoice.setStatus(Invoice.STATUS_DELIVERED); + objectDao.saveOrUpdate(invoice); + Map map = new HashMap(); + Double totalPrice = 0.0; + for (TousseInstance tousseInstance : tousseInstances) { + tousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance.setLocation(deptCode); + tousseInstance.setLocationForDisplay(deptName); + tousseInstance.setInvoice_id(invoice.getId()); + tousseInstanceManager.saveOrUpdate(tousseInstance); + TousseDefinition td = tousseInstance + .getTousseDefinition(); + totalPrice = new BigDecimal(totalPrice) + .add(new BigDecimal(td.getPrice())) + .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + InvoiceItem item = map.get(tousseInstance.getTousseName()); + if (item == null) { + item = new InvoiceItem(); + item.setTousseName(tousseInstance.getTousseName()); + item.setDiposable("否"); + item.setTousseType(td.getTousseType()); + item.setAmount(1); + map.put(item.getTousseName(), item); + } else { + item.setAmount(item.getAmount() + 1); + } + /**更新手术室二级库存**/ + updateDepartmentStock(tousseInstance); + } + Set items = new HashSet(); + items.addAll(map.values()); + invoice.setInvoiceItem(items); + invoice.setTotalPrice(totalPrice); + invoice.setTousseAmount(tousseInstances.size()); + objectDao.saveOrUpdate(invoice); + } + } + + /** + * 更新二级供应室库存 + * 复制的SterilizationRecordManagerImpl类的方法 + * @param tousseinstance + */ + private void updateDepartmentStock(TousseInstance tousseinstance) { + // 普通器械包 + if (TousseDefinition.PACKAGE_TYPE_INSIDE.equals(tousseinstance + .getTousseDefinition().getTousseType())) { + List list = supplyRoomConfigManager + .getSecondSupplyRoomList(); + String departmentCoding = ""; + String departmentName = ""; + if (list != null && list.size() > 0) { + departmentCoding = list.get(0).getOrgUnitCoding(); + departmentName = list.get(0).getOrgUnitName(); + } + String tousseName = tousseinstance.getTousseName(); + DepartmentStock departmentStock = departmentStockManager + .getByDepartCodingAndTousseName(departmentCoding, + tousseName); + if (departmentStock != null + && (departmentStock.getAmount() != null || departmentStock + .getAmount() >= 0)) { + departmentStock.setAmount(departmentStock.getAmount() + 1); + } else { + departmentStock = new DepartmentStock(); + departmentStock.setAmount(1); + departmentStock.setDepartCoding(departmentCoding); + departmentStock.setDepartName(departmentName); + departmentStock.setCardinalNum(0); + departmentStock.setUsedAmount(0); + departmentStock.setTousseName(tousseName); + } + + tousseinstance.setDepartmentStock_id(departmentStock.getId()); + + departmentStockManager.saveOrUpdata(departmentStock); + } + } + /** * 获得标识牌定义的使用次数 * @param idCardInstanceId 标识牌实例的ID @@ -2008,10 +2169,10 @@ packingRecord.setTousseName(tousseName); packingRecord.setTousseType(tousseDefinition .getTousseType()); - // 如果装配的是消毒物品,取装配任务的数量作为装配记录的数量 - if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseDefinition.getTousseType())){ + // 如果装配的是消毒物品,取装配任务的数量作为装配记录的数量(会导致历史装配数量为该装配任务的数量,所以暂注释SYF20160506) + /*if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseDefinition.getTousseType())){ packingAmount = currentPackingTask.getAmount(); - } + }*/ packingRecord.setAmount(packingAmount); packingRecord.setTaskGroup(taskGroup); @@ -2059,8 +2220,21 @@ JSONArray toussesArray = new JSONArray(); - boolean isPrintUserName = supplyRoomConfigManager.getSystemParamsObj().isPrintUserFullName(); + LoginUserData loginUser = AcegiHelper.getLoginUser(); + String coding = loginUser.getOrgUnitCodingFromSupplyRoomConfig(); + SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager + .getSupplyRoomConfigByOrgUnitCoding(coding); + //不需要灭菌的器械包(一般是消毒物品),用于二级供应室发货 + List withoutReviewingAndSterilingTousseInstanceList = new ArrayList(); + //科室供应室配置的参数配置 + SupplyRoomConfig supplyRoomConfigParams = supplyRoomConfigManager.getSystemParamsObj(); + //是否为二级供应室发货 + boolean isSecondSupplyRoomAutoInvoice = + !SupplyRoomConfig.RECYCLING_PACKING_NO.equals(supplyRoomConfigParams.getIsSecondSupplyRoomAutoInvoice()); + //是否打印装配人 + boolean isPrintUserName = supplyRoomConfigParams.isPrintUserFullName(); + Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(Long.parseLong(sterileDateStr)); Date sterileStartTime = calendar.getTime(); @@ -2193,8 +2367,6 @@ Date packingDate = new Date(); - LoginUserData loginUser = AcegiHelper.getLoginUser(); - String orgUnitCoding = ""; String orgUnitName = ""; @@ -2278,7 +2450,7 @@ PackingRecord packingRecord = createPackingRecord(inspector, operator, wrapper, orgUnitCoding, taskGroup, sterilizerName, sterileFrequency, td, packingDate, - currentPackAmount, currentPackingTask); + packingAmountForThisTask, currentPackingTask); //对于器械包名称含有下划线的,将对参数进行特殊处理 currentPackingTaskAsList = packingTasks; @@ -2298,7 +2470,7 @@ toussePrice, fluctuationPrice, tousseAmount, orgUnitCoding, orgUnitName,basketBarcode, - !isTraceable, confirmContinue); + !isTraceable, confirmContinue,withoutReviewingAndSterilingTousseInstanceList); needPackingAmount -= currentPackingTask.getUnPackAmount(); @@ -2428,6 +2600,41 @@ } //更新清洗明细记录及修改删除对应的装配任务 updatePackingTask(currentPackingTaskAsList, packingAmountForThisTask , tousseName,basketBarcode); + + //判断如果配置二级供应室是否自动发货不为否才自动发货,否则不自动发货 + if(supplyRoomConfig.getSupplyRoomType() == SupplyRoomConfig.SUPPLYROOM_TYPE_2 + && isSecondSupplyRoomAutoInvoice){ + String rootPath = Path.getWebAppRoot(); + String project = CssdUtils.getConfigProperty("project"); + String jsonPath = rootPath + "/WEB-INF/classes/config/"+project+"/orInvoiceDeptConfig.json"; + String jsonStr = CssdUtils.readFile(jsonPath); + + String deptName = loginUser.getCurrentOrgUnitName(); + String deptCode = loginUser.getCurrentOrgUnitCode(); + + if(StringUtils.isNotBlank(jsonStr)){ + JSONArray jsonArray = JSONArray.fromObject(jsonStr); + if(jsonArray != null){ + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObj = jsonArray.getJSONObject(i); + String cssdName = jsonObj.getString("cssdName");//二级供应室名称:如手术器械消毒供应区 + deptName = jsonObj.getString("deptName");//发货科室:如中心手术室 + OrgUnit org = orgUnitManager.getCurrentOrgUintByName(cssdName); + if(org != null && org.getOrgUnitCoding().equals(deptCode)){ + OrgUnit org2 = orgUnitManager.getCurrentOrgUintByName(deptName); + if(org2 != null){ + deptCode = org2.getOrgUnitCoding(); + } + break; + } + } + } + } + //二级供应室 + if (withoutReviewingAndSterilingTousseInstanceList.size() > 0) { + extractTousseInvoice(withoutReviewingAndSterilingTousseInstanceList,deptName,deptCode); + } + } } } }else{ @@ -2618,6 +2825,8 @@ * @param basketBarcode * @param unTraceableTousse * @param confirmContinue 确认继续,为"true"表示继续 + * @param tousseInstances 全部器械包实例 + * @param withoutReviewingAndSterilingTousseInstanceList 不需要审核与灭菌的包实例集合 * @return Map */ private JSONObject batchCreateTousseInstance(String operator, @@ -2632,7 +2841,7 @@ Date packingDate, Integer currentPackAmount, double toussePrice, double fluctuationPrice, Integer tousseAmount, String orgUnitCoding, String orgUnitName,String basketBarcode, - boolean unTraceableTousse, String confirmContinue) { + boolean unTraceableTousse, String confirmContinue,List withoutReviewingAndSterilingTousseInstanceList) { JSONObject obj = new JSONObject(); long t1 = System.currentTimeMillis(); @@ -2701,7 +2910,11 @@ unTraceableTousse, barcodeStr, prePackingTask); tousseList.add(tousseInstance); - + //如果即不需审核又不需灭菌时,需要记录下这个器械包实例,使用二级供应室的自动发货机制 + if(TousseDefinition.STR_NO.equals(tousseDefinition.getIsReview()) + && TousseDefinition.STR_NO.equals(tousseDefinition.getIsSterile())){ + withoutReviewingAndSterilingTousseInstanceList.add(tousseInstance); + } if(packingAmountPerVirtualBasket != null && packingAmountPerVirtualBasket > 0 && CollectionUtils.isNotEmpty(reviewedBasketList)){ @@ -3030,8 +3243,8 @@ tousseInstance.setSterileFrequency(frequency); } if (StringUtils.isNotBlank(sterileStartTime)) { - // 已灭菌或者已审核才能修改的属性 - if (tousseInstance.isPacked() || tousseInstance.isReviewed()) { + // 已装配或者已审核才能修改的属性。增加已装配或已灭菌或已消毒都可以更改灭菌时间 + if (tousseInstance.isPacked() || tousseInstance.isReviewed() || TousseInstance.STATUS_DISINFECTED.equals(tousseInstance.getStatus())) { tousseInstance.setSterileStartTime(TousseInstanceUtils.buildSterileStartTime(sterileStartTime, TousseInstance.STERILE_START_TIME_FMT)); modifyValidDate = true; } else { Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/tousse/tousseForm.js =================================================================== diff -u -r13300 -r13355 --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/tousse/tousseForm.js (.../tousseForm.js) (revision 13300) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/tousse/tousseForm.js (.../tousseForm.js) (revision 13355) @@ -1035,7 +1035,7 @@ layout : 'form', items:[{ xtype : 'combo', - fieldLabel : '处理科室', + fieldLabel : '优先处理科室', id : 'handlerDepartName', name : 'handlerDepartName', editable:false,