Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r16194 -r16196 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 16194) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 16196) @@ -1,10 +1,12 @@ package com.forgon.disinfectsystem.packing.service; +import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -20,6 +22,8 @@ import java.util.Set; import java.util.function.Consumer; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import net.sf.json.JSONArray; @@ -56,6 +60,7 @@ import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; import com.forgon.disinfectsystem.disposablegoods.service.DisposableGoodsServiceContext; +import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatchStock; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsIdentification; @@ -116,6 +121,7 @@ import com.forgon.timeout.service.TimeoutManager; import com.forgon.tools.MathTools; import com.forgon.tools.Path; +import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; import com.forgon.tools.hibernate.ObjectDao; @@ -4815,4 +4821,374 @@ return tousseInstance; } + // 传参方式待重构 + // 自定义装配 + public void packingWithoutTask(JSONObject retObj, + HttpServletRequest request) { + SupplyRoomConfig supplyRoomConfigParams = supplyRoomConfigManager.getSystemParamsObj(); + String inspector = request.getParameter("inspector");// 检查人 + String inspectorCode = request.getParameter("inspectorCode"); + String operator = request.getParameter("operator");// 配包者 + String operatorCode = request.getParameter("operatorCode");// 配包者 + String reviewer = request.getParameter("reviewer");// 审核者 + String reviewerCode = request.getParameter("reviewerCode");// 审核者 + String sterileUser = request.getParameter("sterileUser");// 灭菌员 + String sterileCode = request.getParameter("sterileCode");// 灭菌员条码 + String wrapper = request.getParameter("wrapper");// 配包者 + String wrapperCode = request.getParameter("wrapperCode");// 配包者 + String packageType = request.getParameter("packageType");// 包装类型 + String sterilingType = request.getParameter("sterilingType");// 灭菌程序 + String sterilizer = request.getParameter("sterilizer");// 灭菌炉名称 + String frequency = request.getParameter("frequency");// 炉次号 + String tousseName = request.getParameter("tousseName");// 器械包 + String packAmountStr = request.getParameter("packAmount");// 配包数量 + String taskGroup = request.getParameter("taskGroup");// 任务组 + String tousseType = request.getParameter("tempTousseType"); + String idCardInstanceId = request.getParameter("idCardBarcode"); + String idCardDefinitionId = request.getParameter("idCardDefinitionId"); + String disinfectionDate = request.getParameter("disinfectionDate"); + String depart = request.getParameter("depart");// 临床科室 + String departCoding = request.getParameter("departCoding");// 临床科室编码 + String continueOnVirtualBasketInsufficient = request + .getParameter("continueOnVirtualBasketInsufficient");// 虚拟篮筐不够时是否继续 + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date date = null; + try { + date = sdf.parse(disinfectionDate); + } catch (ParseException e1) { + e1.printStackTrace(); + } + + Date validUntil = null; + Date warningUntil = null; + // 失效期和预警期计算 + JSONObject expirationObj = expirationDateInfoManager.getExpirationDate( + new Date().getTime() + "", packageType); + + String packageTypeAbbreviation = TousseInstanceUtils + .getPackageTypeAbbreviation(objectDao, packageType); + + boolean isDefined = expirationObj.optBoolean("isDefined"); + if (isDefined) { + validUntil = (Date) JSONObject.toBean( + expirationObj.optJSONObject("validUntil"), Date.class); + warningUntil = (Date) JSONObject.toBean( + expirationObj.optJSONObject("warningUntil"), Date.class); + } + + String barcodes = "";// 待打印的条码标签 + String virtualSeqNums = ""; + JSONArray toussesArray = new JSONArray(); + boolean isDisinfection = false;// 是否为消毒物品 + JSONArray materials = new JSONArray(); + boolean isPrint = true; + boolean isTraceable = true; + String idCardDefinitionUseAmount = ""; + + // 修改装配数量 + barcodes += tousseName + ":"; + Integer packAmount = Integer.parseInt(packAmountStr); + TousseDefinition td = tousseDefinitionManager + .getTousseDefinitionBySql(" where po.name = '" + tousseName + + "' and po.tousseType = '" + tousseType + "'"); + if (td == null) { + throw new RuntimeException(String.format("装配失败,未找到[%s]的包定义!", + tousseName)); + } + if (td.isDisinfection()) { + throw new RuntimeException(String.format("装配失败,消毒物品不能自定义装配!", + tousseName)); + } + + if (TousseDefinition.STR_NO.equals(td.getIsPrint())) { + isPrint = false; + isTraceable = false; + } else { + if (TousseDefinition.STR_NO.equals(td.getIsTraceable())) { + isTraceable = false; + } + } + + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(td + .getTousseType())) { + isDisinfection = true; + JSONObject material = new JSONObject(); + // 是否为消毒物品-->打印物品明细 + List materialInstanceList = td + .getMaterialInstances(); + if (materialInstanceList != null) { + for (MaterialInstance instance : materialInstanceList) { + + String name = instance.getMaterialDefinition().getName(); + if (StringUtils.isNotBlank(instance.getMaterialDefinition() + .getSpecification())) { + name += ("[" + + instance.getMaterialDefinition() + .getSpecification() + "]"); + } + material.put("name", name); + material.put("count", instance.getCount()); + material.put("isDiposable", "否"); + materials.add(material); + } + } + + List diposableGoodsInstanceList = td + .getDiposableGoodsItems(); + if (diposableGoodsInstanceList != null) { + for (DiposableGoodsInstance instance : diposableGoodsInstanceList) { + DisposableGoods disposableGoods = instance + .getDiposableGoods(); + if (disposableGoods != null) { + // 如果配置为打印,才打印一次性物品 + if (disposableGoods.printInLabel()) { + String name = disposableGoods.getName(); + if (StringUtils.isNotBlank(disposableGoods + .getSpecification())) { + name += ("[" + + disposableGoods.getSpecification() + "]"); + } + material.put("name", name); + material.put("amount", instance.getAmount()); + material.put("isDiposable", "是"); + materials.add(material); + } + } + } + } + } + + // 价格及浮动价格 + double price = td.getPrice(); + double fPrice = supplyRoomConfigManager + .getTousseFluctuationPrice(price); + + // 保存装配记录 + PackingRecord packingRecord = new PackingRecord(); + packingRecord.setIsDirectPacking(true); + packingRecord.setPacker(operator); + packingRecord.setPackTime(new Date()); + packingRecord.setInspector(inspector); + packingRecord.setWrapper(wrapper); + packingRecord.setTousseName(tousseName); + packingRecord.setTousseType(td.getTousseType()); + packingRecord.setSterilizer(sterilizer); + packingRecord.setFrequency(frequency); + packingRecord.setTaskGroup((taskGroup == null || taskGroup.trim() + .length() == 0) ? td.getTaskGroup() : taskGroup); + packingRecord.setOrgUnitCoding(AcegiHelper.getLoginUser() + .getOrgUnitCodingFromSupplyRoomConfig()); + packingRecord.setDepart(depart); + packingRecord.setDepartCoding(departCoding); + saveOrUpdate(packingRecord); + + // 打印条码、保存包实例 + List tousseInstanceList = new ArrayList(); + + Date currentDate = new Date(); + String sterileStartTime = Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS + .format(currentDate); + // 虚拟篮筐校验 + Integer packingAmountPerVirtualBasket = td == null ? null : td + .getPackingAmountPerVirtualBasket(); + int needVirtualBasketAmount = 0;// 需要虚拟篮筐数量 + List reviewedBasketList = null; + // 根据器械包的数量及每虚拟可装配该器械包的数量调出虚拟篮筐 + if (packingAmountPerVirtualBasket != null + && packingAmountPerVirtualBasket > 0) { + needVirtualBasketAmount = packAmount + % packingAmountPerVirtualBasket == 0 ? (packAmount / packingAmountPerVirtualBasket) + : (packAmount / packingAmountPerVirtualBasket + 1); + reviewedBasketList = containerManager.callVirtualContainer( + needVirtualBasketAmount, td.getTaskGroup()); + } + + // 需要装入虚拟篮筐,但虚拟篮筐数据不够用时的提示 + if (packingAmountPerVirtualBasket != null + && packingAmountPerVirtualBasket > 0 + && !"true".equals(continueOnVirtualBasketInsufficient) + && CollectionUtils.isEmpty(reviewedBasketList)) { + retObj.put("success", "false"); + retObj.put("errType", "虚拟篮筐数量不足"); + throw new RuntimeException("器械包:" + td.getName() + + " 需要装入的虚拟篮筐数量不足,如果继续装配系统将不会分配虚拟篮筐,是否继续装配?"); + } + + for (int i = 0; i < packAmount; i++) { + + TousseInstance tousseInstance = new TousseInstance(); + + tousseInstance.setPackingRecord_id(packingRecord.getId()); + + String barcodeStr = serialNumManager + .getSerialNumberStr(SerialNum.TYPE_BARCODE); + tousseInstance.setBarcode(barcodeStr); + tousseInstance.setType(BarcodeDevice.BARCODE_TYPE_PACKAGE); + tousseInstance.setTousseDefinition(td); + tousseInstance.setStatisticsAmount(td.getTousseAmount()); + tousseInstance.setTousseName(tousseName); + tousseInstance.setOperator(operator); + tousseInstance.setOperatorCode(operatorCode); + tousseInstance.setReviewerCode(reviewerCode); + tousseInstance.setSterilizationUser(sterileUser); + tousseInstance.setSterilizationUserCode(sterileCode); + + tousseInstance.setOperationTime(currentDate); + // 将装配时间作为默认的灭菌开始时间 + tousseInstance.setSterileStartTime(sterileStartTime); + + tousseInstance.setPrice(price); + tousseInstance.setFluctuationPrice(fPrice); + + if (i == 0) { + barcodes += tousseInstance.getBarcode(); + } else { + barcodes += "," + tousseInstance.getBarcode(); + } + tousseInstance.setReviewer(reviewer); + tousseInstance.setType(BarcodeDevice.BARCODE_TYPE_PACKAGE); + tousseInstance.setPackageType(packageType); + tousseInstance.setSterilingType(sterilingType); + tousseInstance.setSterilizerName(sterilizer); + tousseInstance.setSterileFrequency(frequency); + + // 不审核器械包修改状态 + if (TousseDefinition.STR_NO.equals(td.getIsReview())) { + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(td + .getTousseType())) { + tousseInstance.setStatus(TousseInstance.STATUS_DISINFECTED); + } else { + tousseInstance.setStatus(TousseInstance.STATUS_REVIEWED); + } + tousseInstance.setReviewTime(currentDate); + } else { + tousseInstance.setStatus(TousseInstance.STATUS_PACKED); + } + + tousseInstance.setValidUntil(validUntil); + tousseInstance.setWarningUntil(warningUntil); + tousseInstance.setOrgUnitCoding(AcegiHelper.getLoginUser() + .getOrgUnitCodingFromSupplyRoomConfig()); + tousseInstance.setOrgUnitName(AcegiHelper.getLoginUser() + .getOrgUnitNameCodingFromSupplyRoomConfig()); + // 设置虚拟篮筐 + if (packingAmountPerVirtualBasket != null + && packingAmountPerVirtualBasket > 0 + && CollectionUtils.isNotEmpty(reviewedBasketList)) { + try { + ReviewedBasket belongVirtualBasket = reviewedBasketList + .get(i / packingAmountPerVirtualBasket); + tousseInstance.setReviewBasket_id(belongVirtualBasket + .getId()); + Container container = belongVirtualBasket.getContainer(); + tousseInstance.setVirtualBasketSeqNum(container + .getContainerName()); + } catch (Exception e) { + e.printStackTrace(); + } + } + if (i == 0) { + virtualSeqNums += StringUtils.defaultIfEmpty(tousseInstance.getVirtualBasketSeqNum(), ""); + } else { + virtualSeqNums += StringUtils.defaultIfEmpty(tousseInstance.getVirtualBasketSeqNum(), ""); + } + tousseInstanceManager.saveOrUpdate(tousseInstance); + tousseInstanceList.add(tousseInstance); + +// JSONArray subBarcodeArray = new JSONArray(); +// JSONArray subVirtualSeqNumArray = new JSONArray(); +// subBarcodeArray.add(tousseInstance.getBarcode()); +// subVirtualSeqNumArray.add(tousseInstance.getVirtualBasketSeqNum()); + +// JSONObject obj = CssdUtils.getTousseObjForPrint( +// td.getName(), getTousseDefinitionJson(td), subBarcodeArray, subVirtualSeqNumArray, tousseType, +// packageType,packageTypeAbbreviation, sterilingType, +// sterilizer, frequency, +// supplyRoomConfigParams.isPrintUserFullName(), +// operator, operatorCode, reviewer, reviewerCode,sterileUser,sterileCode, +// validUntilDateToPrint, +// sterileDateToPrint, +// markTousse, +// packingDate, +// false, +// isDisinfectionGoodsPrintExpirationDate, +// isPrint, isReview, isTraceable, isBigPackage, +// fixedBarcode, materialsJsonArray, +// null,supplierName, +// 0, +// 0,department, +// isPrintOrg,idCardDefinitionUseAmount,objectDao,td.getBarcodePaperType(),tousseInstance.getWashOperator(),tousseInstance.getWashOperatorCode(), +// tousseInstance.getWeight(),td.getPrintAmount()); +// toussesArray.add(obj); + // 器械包标志牌处理 + // 如果找到对应的器械包标识牌实例,则该器械包实例与标识牌实例关联,并退出循环,因为这里是1对1的关系 + if (StringUtils.isNotBlank(idCardInstanceId)) { + if (addTousseInstanceToIdCardInstance(idCardDefinitionId, + idCardInstanceId, null, tousseInstance)) { + Long useAmount = tousseInstance.getUseAmount(); + if (useAmount != null) { + idCardDefinitionUseAmount = useAmount.toString(); + } + + break; + } + } + + } + // 更新装配数量 + packingRecord.setAmount(tousseInstanceList.size()); + saveOrUpdate(packingRecord); + // 更新库存 + updateGoodsStock(packingRecord.getOrgUnitCoding(), tousseInstanceList); + + if (StringUtils.isNotBlank(barcodes)) { + String fixedBarcode = ""; + if (!isTraceable) { + String tName = td.getName(); + fixedBarcode = tousseInstanceManager + .getTousseDefinitionFixedBarcode(td.getId()); + } + retObj.put("success", true); + retObj.put("message", "保存成功"); + retObj.put("barcode", barcodes); + retObj.put("virtualSeqNums", virtualSeqNums); + retObj.put("isPrint", isPrint); + retObj.put("isTraceable", isTraceable); + retObj.put("idCardDefinitionUseAmount", idCardDefinitionUseAmount); + retObj.put("fixedBarcode", fixedBarcode); + retObj.put("isDisinfection", isDisinfection); + retObj.put("disinfectionItem", materials); + retObj.put("packageTypeAbbreviation", packageTypeAbbreviation); + } + + updatePackingConfigSession(request); + } + + /** + * 将用户打包时常用的字段记录到session中,传参方式待重构 + */ + private void updatePackingConfigSession(HttpServletRequest request) { + HttpSession session = request.getSession(false); + if (session != null) { + String inspector = request.getParameter("inspector"); + String inspectorCode = request.getParameter("inspectorCode"); + String operator = request.getParameter("operator"); + String operatorCode = request.getParameter("operatorCode"); + String reviewer = request.getParameter("reviewer"); + String reviewerCode = request.getParameter("reviewerCode"); + String sterileUserName = request.getParameter("sterileUser");// 灭菌员 + String sterileUserCode = request.getParameter("sterileCode");// 灭菌员条码 + String wrapper = request.getParameter("wrapper"); + String wrapperCode = request.getParameter("wrapperCode"); + + String packageType = request.getParameter("packageType");// 包装类型 + String sterilingType = request.getParameter("sterilingType");// 灭菌程序 + String sterilizer = request.getParameter("sterilizer");// 灭菌炉 + String frequency = request.getParameter("frequency");// 炉次 + + updatePackingConfigSession(session, inspector, inspectorCode, operator, operatorCode, reviewer, reviewerCode, + sterileUserName,sterileUserCode,wrapper, wrapperCode, packageType, sterilingType, sterilizer, frequency); + } + } } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r16187 -r16196 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 16187) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 16196) @@ -5,6 +5,7 @@ import java.util.Date; import java.util.List; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import net.sf.json.JSONArray; @@ -148,4 +149,6 @@ */ public void interfereSplitForeignTousse(String params); + public void packingWithoutTask(JSONObject retObj,HttpServletRequest request); + } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java =================================================================== diff -u -r16187 -r16196 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 16187) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 16196) @@ -190,35 +190,6 @@ } /** - * 将用户打包时常用的字段记录到session中 - */ - private void updatePackingConfigSession() { - HttpSession session = StrutsParamUtils.getRequest().getSession(false); - if (session != null) { - HttpServletRequest request = StrutsParamUtils.getRequest(); - String inspector = request.getParameter("inspector"); - String inspectorCode = request.getParameter("inspectorCode"); - String operator = request.getParameter("operator"); - String operatorCode = request.getParameter("operatorCode"); - String reviewer = request.getParameter("reviewer"); - String reviewerCode = request.getParameter("reviewerCode"); - String sterileUserName = request.getParameter("sterileUser");// 灭菌员 - String sterileUserCode = request.getParameter("sterileCode");// 灭菌员条码 - String wrapper = request.getParameter("wrapper"); - String wrapperCode = request.getParameter("wrapperCode"); - - String packageType = request.getParameter("packageType");// 包装类型 - String sterilingType = request.getParameter("sterilingType");// 灭菌程序 - String sterilizer = request.getParameter("sterilizer");// 灭菌炉 - String frequency = request.getParameter("frequency");// 炉次 - - packingManager - .updatePackingConfigSession(session, inspector, inspectorCode, operator, operatorCode, reviewer, reviewerCode, - sterileUserName,sterileUserCode,wrapper, wrapperCode, packageType, sterilingType, sterilizer, frequency); - } - } - - /** * 装配器械包(无装配任务)(自定义装配) * * @return 消毒物品 止血带:{name:止血带[100条/扎],count:1,isDiposable:'否'},{name:胶袋,count:1,isDiposable:'是'} @@ -229,278 +200,14 @@ retObj.put("success", false); retObj.put("message", "装配失败!"); try { - HttpServletRequest request = StrutsParamUtils.getRequest(); - String inspector = request.getParameter("inspector");// 检查人 - String inspectorCode = request.getParameter("inspectorCode"); - String operator = request.getParameter("operator");// 配包者 - String operatorCode = request.getParameter("operatorCode");// 配包者 - String reviewer = request.getParameter("reviewer");// 审核者 - String reviewerCode = request.getParameter("reviewerCode");// 审核者 - String sterileUser = request.getParameter("sterileUser");// 灭菌员 - String sterileCode = request.getParameter("sterileCode");// 灭菌员条码 - String wrapper = request.getParameter("wrapper");// 配包者 - String wrapperCode = request.getParameter("wrapperCode");// 配包者 - String packageType = request.getParameter("packageType");// 包装类型 - String sterilingType = request.getParameter("sterilingType");// 灭菌程序 - String sterilizer = request.getParameter("sterilizer");// 灭菌炉名称 - String frequency = request.getParameter("frequency");// 炉次号 - String tousseName = request.getParameter("tousseName");// 器械包 - String packAmountStr = request.getParameter("packAmount");// 配包数量 - String taskGroup = request.getParameter("taskGroup");// 任务组 - String tousseType = request.getParameter("tempTousseType"); - String idCardInstanceId = request.getParameter("idCardBarcode"); - String idCardDefinitionId = request.getParameter("idCardDefinitionId"); - String disinfectionDate = request.getParameter("disinfectionDate"); - String depart = request.getParameter("depart");// 临床科室 - String departCoding = request.getParameter("departCoding");// 临床科室编码 - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - Date date = null; - try { - date = sdf.parse(disinfectionDate); - } catch (ParseException e1) { - e1.printStackTrace(); - } - - Date validUntil = null; - Date warningUntil = null; - // 失效期和预警期计算 - JSONObject expirationObj = expirationDateInfoManager - .getExpirationDate(new Date().getTime() + "", packageType); - - String packageTypeAbbreviation = TousseInstanceUtils.getPackageTypeAbbreviation(objectDao, packageType); - - boolean isDefined = expirationObj.optBoolean("isDefined"); - if (isDefined){ - validUntil = (Date)JSONObject.toBean(expirationObj.optJSONObject("validUntil"), Date.class); - warningUntil = (Date)JSONObject.toBean(expirationObj.optJSONObject("warningUntil"), Date.class); - } - - String barcodes = "";// 待打印的条码标签 - boolean isDisinfection = false;// 是否为消毒物品 - JSONArray materials = new JSONArray(); - boolean isPrint = true; - boolean isTraceable = true; - String idCardDefinitionUseAmount = ""; - - // 修改装配数量 - barcodes += tousseName + ":"; - Integer packAmount = Integer.parseInt(packAmountStr); - TousseDefinition td = tousseDefinitionManager - .getTousseDefinitionBySql(" where po.name = '" + tousseName - + "' and po.tousseType = '" + tousseType + "'"); - if(td == null){ - throw new RuntimeException(String.format("装配失败,未找到[%s]的包定义!", tousseName)); - } - if(td.isDisinfection()){ - throw new RuntimeException(String.format("装配失败,消毒物品不能自定义装配!", tousseName)); - } - - - if(TousseDefinition.STR_NO.equals(td.getIsPrint())){ - isPrint = false; - isTraceable = false; - }else{ - if(TousseDefinition.STR_NO.equals(td.getIsTraceable())){ - isTraceable = false; - } - } - - if (TousseDefinition.PACKAGE_TYPE_DISINFECTION - .equals(td.getTousseType())) { - isDisinfection = true; - JSONObject material = new JSONObject(); - // 是否为消毒物品-->打印物品明细 - List materialInstanceList = td - .getMaterialInstances(); - if (materialInstanceList != null) { - for (MaterialInstance instance : materialInstanceList) { - - String name = instance.getMaterialDefinition() - .getName(); - if (StringUtils - .isNotBlank(instance - .getMaterialDefinition() - .getSpecification())) { - name += ("[" - + instance.getMaterialDefinition() - .getSpecification() + "]"); - } - material.put("name", name); - material.put("count", instance.getCount()); - material.put("isDiposable", "否"); - materials.add(material); - } - } - - List diposableGoodsInstanceList = td - .getDiposableGoodsItems(); - if (diposableGoodsInstanceList != null) { - for (DiposableGoodsInstance instance : diposableGoodsInstanceList) { - DisposableGoods disposableGoods = instance.getDiposableGoods(); - if(disposableGoods != null){ - //如果配置为打印,才打印一次性物品 - if(disposableGoods.printInLabel()){ - String name = disposableGoods - .getName(); - if (StringUtils.isNotBlank(disposableGoods.getSpecification())) { - name += ("[" - + disposableGoods - .getSpecification() + "]"); - } - material.put("name", name); - material.put("amount", instance.getAmount()); - material.put("isDiposable", "是"); - materials.add(material); - } - } - } - } - } - - // 价格及浮动价格 - double price = td.getPrice(); - double fPrice = supplyRoomConfigManager.getTousseFluctuationPrice(price); - - // 保存装配记录 - PackingRecord packingRecord = new PackingRecord(); - packingRecord.setIsDirectPacking(true); - packingRecord.setPacker(operator); - packingRecord.setPackTime(new Date()); - packingRecord.setInspector(inspector); - packingRecord.setWrapper(wrapper); - packingRecord.setTousseName(tousseName); - packingRecord.setTousseType(td.getTousseType()); - packingRecord.setSterilizer(sterilizer); - packingRecord.setFrequency(frequency); - packingRecord.setTaskGroup((taskGroup==null||taskGroup.trim().length()==0)?td.getTaskGroup():taskGroup); - packingRecord.setOrgUnitCoding(AcegiHelper.getLoginUser() - .getOrgUnitCodingFromSupplyRoomConfig()); - packingRecord.setDepart(depart); - packingRecord.setDepartCoding(departCoding); - packingManager.saveOrUpdate(packingRecord); - - // 打印条码、保存包实例 - List tousseInstanceList = new ArrayList(); - - Date currentDate = new Date(); - String sterileStartTime = Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS.format(currentDate); - - for (int i = 0; i < packAmount; i++) { - TousseInstance tousseInstance = new TousseInstance(); - - tousseInstance.setPackingRecord_id(packingRecord.getId()); - - String barcodeStr = serialNumManager - .getSerialNumberStr(SerialNum.TYPE_BARCODE); - tousseInstance.setBarcode(barcodeStr); - tousseInstance.setType(BarcodeDevice.BARCODE_TYPE_PACKAGE); - tousseInstance.setTousseDefinition(td); - tousseInstance.setStatisticsAmount(td - .getTousseAmount()); - tousseInstance.setTousseName(tousseName); - tousseInstance.setOperator(operator); - tousseInstance.setOperatorCode(operatorCode); - tousseInstance.setReviewerCode(reviewerCode); - tousseInstance.setSterilizationUser(sterileUser); - tousseInstance.setSterilizationUserCode(sterileCode); - - tousseInstance.setOperationTime(currentDate); - // 将装配时间作为默认的灭菌开始时间 - tousseInstance.setSterileStartTime(sterileStartTime); - - tousseInstance.setPrice(price); - tousseInstance.setFluctuationPrice(fPrice); - - if (i == 0) { - barcodes += tousseInstance.getBarcode(); - } else { - barcodes += ","+tousseInstance.getBarcode() ; - } - tousseInstance.setReviewer(reviewer); - tousseInstance.setType(BarcodeDevice.BARCODE_TYPE_PACKAGE); - tousseInstance.setPackageType(packageType); - tousseInstance.setSterilingType(sterilingType); - tousseInstance.setSterilizerName(sterilizer); - tousseInstance.setSterileFrequency(frequency); - - //不审核器械包修改状态 - if(TousseDefinition.STR_NO.equals(td.getIsReview())){ - if(TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(td.getTousseType())){ - tousseInstance.setStatus(TousseInstance.STATUS_DISINFECTED); - }else{ - tousseInstance.setStatus(TousseInstance.STATUS_REVIEWED); - } - tousseInstance.setReviewTime(currentDate); - }else{ - tousseInstance.setStatus(TousseInstance.STATUS_PACKED); - } - - tousseInstance.setValidUntil(validUntil); - tousseInstance.setWarningUntil(warningUntil); - tousseInstance.setOrgUnitCoding(AcegiHelper.getLoginUser() - .getOrgUnitCodingFromSupplyRoomConfig()); - tousseInstance.setOrgUnitName(AcegiHelper.getLoginUser() - .getOrgUnitNameCodingFromSupplyRoomConfig()); - - tousseInstanceManager.saveOrUpdate(tousseInstance); - tousseInstanceList.add(tousseInstance); - - // 器械包标志牌处理 - // 如果找到对应的器械包标识牌实例,则该器械包实例与标识牌实例关联,并退出循环,因为这里是1对1的关系 - if(StringUtils.isNotBlank(idCardInstanceId)){ - if (packingManager.addTousseInstanceToIdCardInstance( - idCardDefinitionId,idCardInstanceId, null, tousseInstance)) { - Long useAmount = tousseInstance.getUseAmount(); - if (useAmount != null){ - idCardDefinitionUseAmount = useAmount.toString(); - } - - break; - } - } - - } - // 更新装配数量 - packingRecord.setAmount(tousseInstanceList.size()); - packingManager.saveOrUpdate(packingRecord); - //更新库存 - packingManager.updateGoodsStock(packingRecord.getOrgUnitCoding(), tousseInstanceList); - - - - if (StringUtils.isNotBlank(barcodes)) { - String fixedBarcode = ""; - if (!isTraceable) { - String tName = td.getName(); - fixedBarcode = tousseInstanceManager - .getTousseDefinitionFixedBarcode(td.getId()); - } - retObj.put("success", true); - retObj.put("message", "保存成功"); - retObj.put("barcode", barcodes); - retObj.put("isPrint", isPrint); - retObj.put("isTraceable", isTraceable); - retObj.put("idCardDefinitionUseAmount", idCardDefinitionUseAmount); - retObj.put("fixedBarcode", fixedBarcode); - retObj.put("isDisinfection", isDisinfection); - retObj.put("disinfectionItem", materials); - retObj.put("packageTypeAbbreviation", packageTypeAbbreviation); - } + packingManager.packingWithoutTask(retObj,StrutsParamUtils.getRequest()); + retObj.put("success", true); } catch (Exception e) { e.printStackTrace(); retObj.put("success", false); retObj.put("message", e.getMessage()); } - HttpServletResponse httpServletResponse = StrutsParamUtils - .getResponse(); - httpServletResponse.setCharacterEncoding("UTF-8"); - try { - httpServletResponse.getWriter().print(retObj.toString()); - } catch (IOException e) { - e.printStackTrace(); - } - updatePackingConfigSession(); + StrutsResponseUtils.output(retObj); return null; } Index: ssts-web/src/main/webapp/disinfectsystem/packing/directPacking.js =================================================================== diff -u -r16089 -r16196 --- ssts-web/src/main/webapp/disinfectsystem/packing/directPacking.js (.../directPacking.js) (revision 16089) +++ ssts-web/src/main/webapp/disinfectsystem/packing/directPacking.js (.../directPacking.js) (revision 16196) @@ -155,8 +155,7 @@ barcodeField.setValue(); } - function printBarcode(barcodeStr,disinfectionDate,isTraceable,fixedBarcode,idCardDefinitionUseAmount){ - + function printBarcode(barcodeStr,virtualSeqNums,disinfectionDate,isTraceable,fixedBarcode,idCardDefinitionUseAmount){ var names = getPrintNames(isPrintUserFullName, Ext.getCmp('operator').getValue(), Ext.getCmp('reviewer').getValue(), Ext.getCmp('sterileUser').getValue(), Ext.getCmp('operatorCode').getValue(), Ext.getCmp('reviewerCode').getValue(),Ext.getCmp('sterileCode').getValue()); var printNum = Ext.getCmp('tempPrintNum').getValue();//打印张数 @@ -186,11 +185,13 @@ closable:false }); var barcodeArray = barcodeStr.split(";"); + var virtualSeqNumsArray = virtualSeqNums.split(";"); for ( var i = 0; i < barcodeArray.length; i++) { var barcodeItem = barcodeArray[i].split(":"); var toussName = barcodeItem[0]; var barcode = barcodeItem[1]; var barocdeArray = barcode.split(","); + var virtualSeqNumArray = virtualSeqNumsArray[i].split(","); for ( var j = 0; j < barocdeArray.length; j++) { top.Ext.MessageBox.updateProgress((j + 1)/barocdeArray.length,'正在打印第' + (j + 1) + '个,共' + barocdeArray.length + '个'); var tempPrintNum = printNum; @@ -221,6 +222,7 @@ 'idCardDefinitionUseAmount':idCardDefinitionUseAmount,'packageTypeAbbreviation':packageTypeAbbreviation}; obj.sterilizerName = sterilizer; obj.sterileFrequency = frequency; + obj.virtualBasketSeqNum = virtualSeqNumArray[i]; obj.department = department; //自定义装配时,如果所选科室有值,则默认为要打印科室,无论包定义设置是否打印科室 if(obj.department){ @@ -625,6 +627,11 @@ name : 'departCoding', value : wrapperCode },{ + xtype : 'hidden', + id : 'continueOnVirtualBasketInsufficient', + name : 'continueOnVirtualBasketInsufficient', + value : '' + },{ columnWidth : .33, layout : 'form', cls:'edit-5char-labelwidth', @@ -1085,112 +1092,140 @@ buttons : [{ text : '装配并打印标签', handler : function() { - if (!formObj.form.isValid()) { - showResult('请正确填写表单各值'); - this.enable(); - return false; - } - - if(Ext.getCmp('isThereIdentificationCard').getValue() == '是' && Ext.getCmp('idCardBarcode').getValue() == ''){ - showResult('该器械包需要扫描标识牌条码'); - this.enable(); - return false; - } - - var packageType = Ext.getCmp("packageType").getValue(); - //灭菌程序 - var sterilingType = Ext.getCmp("sterilingType").getValue(); - //器械包 - var tousseName = Ext.getCmp("tousseName").getValue(); - //灭菌炉 -// var sterilizer = Ext.getCmp("sterilizer").getValue(); - //灭菌日期 - var disinfectionDate = Ext.getCmp("disinfectionDate").getValue(); - - - DWREngine.setAsync(false); - var bool = true; - var expirationDate = null; - ExpirationDateInfoTableManager.getExpirationDate(disinfectionDate,packageType,function(result){ - var json = JSON.parse(result); - if(!json.isDefined){ - showResult("此包装类型没有对应的物品失效期设置,请先为该包装类型增加失效期定义!"); - bool = false; - }else{ - expirationDate = json.expirationDate; - } - }); - - DWREngine.setAsync(true); - if(!bool){ - return bool; - } - - /*if('消毒物品' != Ext.getCmp('tempTousseType').getValue()){ - DWREngine.setAsync(false); - //检测灭菌炉里是否有该灭菌程序 - SterilizationRecordTableManager.testSterilizerHasSterilisationName("", sterilingType,function(isExist){ - if(!isExist){ - showResult('在灭菌炉【'+sterilizer+'】里找不到名为“'+sterilingType+'”的灭菌程序!'); - bool = false; - } - }); - DWREngine.setAsync(true); - if(!bool){ - return bool; - } - }*/ - - formObj.form.submit({ - url : WWWROOT + '/disinfectSystem/packingAction!packingWithoutTask.do', - method : 'POST', - timeout : 1800000, // 单位为毫秒,设定超时时间为30分钟 - waitMsg : '正在后台进行处理,请稍候', - waitTitle : '提交表单', - success : function(form, action) { - if(!action.result.success){ - showResult(action.result.message); - return; - } - showResult('保存成功'); - var isPrint = action.result.isPrint; - var isTraceable = action.result.isTraceable; - var fixedBarcode = action.result.fixedBarcode; - var idCardDefinitionUseAmount = action.result.idCardDefinitionUseAmount; - - //此处改为不管器械包定义是否打印,都打印标签 - /*if(isPrint){*/ - if(action.result.isDisinfection){//是否为消毒物品 - printBarcodeOfDisinfection(action.result.barcode, action.result.disinfectionItem,isTraceable,fixedBarcode,expirationDate,action.result.packageTypeAbbreviation); - }else{ - printBarcode(action.result.barcode,disinfectionDate,isTraceable,fixedBarcode,idCardDefinitionUseAmount); - } - /*}else{ - showResult("此器械包不打印标签!"); - }*/ - Ext.getCmp('tousseName').setValue(); - Ext.getCmp('tempTousseType').setValue(); - Ext.getCmp('packAmount').setValue(); - Ext.getCmp('packAmount').enable(); -// Ext.getCmp('frequency').setValue(); -// Ext.getCmp('sterilizer').setValue(); - Ext.getCmp('idCardBarcode').setValue(); - Ext.getCmp('idCardName').setValue(); - Ext.getCmp('disinfectionDate').setValue(); - recordGrid.store.reload(); - }, - failure : function(form, action) { - if(!isUndefinedOrNullOrEmpty(action.result.message)){ - showResult(action.result.message); - }else{ - MsgTip.msg('错误信息', action.failureType,true,3); - } - } - }); + submitPacking(''); } }] }); +function submitPacking(continueOnVirtualBasketInsufficient){ + + if (!formObj.form.isValid()) { + showResult('请正确填写表单各值'); + this.enable(); + return false; + } + + if(Ext.getCmp('isThereIdentificationCard').getValue() == '是' && Ext.getCmp('idCardBarcode').getValue() == ''){ + showResult('该器械包需要扫描标识牌条码'); + this.enable(); + return false; + } + + Ext.getCmp("continueOnVirtualBasketInsufficient").setValue(continueOnVirtualBasketInsufficient); + + var packageType = Ext.getCmp("packageType").getValue(); + //灭菌程序 + var sterilingType = Ext.getCmp("sterilingType").getValue(); + //器械包 + var tousseName = Ext.getCmp("tousseName").getValue(); + //灭菌炉 +// var sterilizer = Ext.getCmp("sterilizer").getValue(); + //灭菌日期 + var disinfectionDate = Ext.getCmp("disinfectionDate").getValue(); + + + DWREngine.setAsync(false); + var bool = true; + var expirationDate = null; + ExpirationDateInfoTableManager.getExpirationDate(disinfectionDate,packageType,function(result){ + var json = JSON.parse(result); + if(!json.isDefined){ + showResult("此包装类型没有对应的物品失效期设置,请先为该包装类型增加失效期定义!"); + bool = false; + }else{ + expirationDate = json.expirationDate; + } + }); + + DWREngine.setAsync(true); + if(!bool){ + return bool; + } + + /*if('消毒物品' != Ext.getCmp('tempTousseType').getValue()){ + DWREngine.setAsync(false); + //检测灭菌炉里是否有该灭菌程序 + SterilizationRecordTableManager.testSterilizerHasSterilisationName("", sterilingType,function(isExist){ + if(!isExist){ + showResult('在灭菌炉【'+sterilizer+'】里找不到名为“'+sterilingType+'”的灭菌程序!'); + bool = false; + } + }); + DWREngine.setAsync(true); + if(!bool){ + return bool; + } + }*/ + + formObj.form.submit({ + url : WWWROOT + '/disinfectSystem/packingAction!packingWithoutTask.do', + method : 'POST', + timeout : 1800000, // 单位为毫秒,设定超时时间为30分钟 + waitMsg : '正在后台进行处理,请稍候', + waitTitle : '提交表单', + success : function(form, action) { + var result = action.result; + if(!action.result.success){ + if(result.errType == '虚拟篮筐数量不足'){ + Ext4.MessageBox.confirm("请确认", result.message, + function(btn) { + if (btn == 'yes') { + submitPacking('true'); + } + }); + }else{ + showResult(action.result.message); + } + return; + } + showResult('保存成功'); + var isPrint = action.result.isPrint; + var isTraceable = action.result.isTraceable; + var fixedBarcode = action.result.fixedBarcode; + var idCardDefinitionUseAmount = action.result.idCardDefinitionUseAmount; + + //此处改为不管器械包定义是否打印,都打印标签 + /*if(isPrint){*/ + if(action.result.isDisinfection){//是否为消毒物品 + printBarcodeOfDisinfection(action.result.barcode, action.result.disinfectionItem,isTraceable,fixedBarcode,expirationDate,action.result.packageTypeAbbreviation); + }else{ + printBarcode(action.result.barcode,action.result.virtualSeqNums,disinfectionDate,isTraceable,fixedBarcode,idCardDefinitionUseAmount); + } + /*}else{ + showResult("此器械包不打印标签!"); + }*/ + Ext.getCmp('tousseName').setValue(); + Ext.getCmp('tempTousseType').setValue(); + Ext.getCmp('packAmount').setValue(); + Ext.getCmp('packAmount').enable(); +// Ext.getCmp('frequency').setValue(); +// Ext.getCmp('sterilizer').setValue(); + Ext.getCmp('idCardBarcode').setValue(); + Ext.getCmp('idCardName').setValue(); + Ext.getCmp('disinfectionDate').setValue(); + recordGrid.store.reload(); + }, + failure : function(form, action) { + var result = action.result; + if(!isUndefinedOrNullOrEmpty(result)){ + if(result.errType == '虚拟篮筐数量不足'){ + Ext4.MessageBox.confirm("请确认", result.message, + function(btn) { + if (btn == 'yes') { + submitPacking('true'); + } + }); + return; + } + } + if(!isUndefinedOrNullOrEmpty(action.result.message)){ + showResult(action.result.message); + }else{ + MsgTip.msg('错误信息', action.failureType,true,3); + } + } + }); +} var viewport = new Ext.Viewport({ id : 'viewportID', layout : 'border',