Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r36188 -r36535 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 36188) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 36535) @@ -395,4 +395,11 @@ * @return key为包定义id */ public Map getPackingTaskMap(Long sourceId, Integer taskType, Set tdids); + + /** + * 打印器械包集合码QYSRMYY-63 + * @param ids + * @return + */ + public JSONArray getTousseInstanceSetCodeByTousseInstanceIdsForPrint(String ids); } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java =================================================================== diff -u -r36405 -r36535 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 36405) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 36535) @@ -548,6 +548,21 @@ StrutsResponseUtils.output(jsonArray); } + /** + * 打印器械包实例集合码(QYSRMYY-63) + */ + public void getTousseInstanceSetCodeByTousseInstanceIdsForPrint(){ + JSONObject result = JSONUtil.buildJsonObject(false); + try { + String ids = StrutsParamUtils.getPraramValue("ids", ""); + JSONArray jsonArray = packingManager.getTousseInstanceSetCodeByTousseInstanceIdsForPrint(ids); + result = JSONUtil.buildJsonObject(true, jsonArray); + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, e.getMessage()); + } + StrutsResponseUtils.output(result); + } + public void getIdentificationCardForTousse() { String departCode = StrutsParamUtils.getPraramValue("departCode", ""); String lostIDCardInstanceBarcode = StrutsParamUtils.getPraramValue( Index: forgon-core/src/main/java/com/forgon/log/model/Log.java =================================================================== diff -u -r36015 -r36535 --- forgon-core/src/main/java/com/forgon/log/model/Log.java (.../Log.java) (revision 36015) +++ forgon-core/src/main/java/com/forgon/log/model/Log.java (.../Log.java) (revision 36535) @@ -78,6 +78,7 @@ public static final String MODEL_ROUTINEMONITORING = "定期监测"; public static final String MODEL_SYSTEMWARNING = "系统告警"; public static final String MODEL_ORGUNIT = "组织机构"; + public static final String MODEL_TOUSSEINSTANCE = "器械包信息"; public static final String TYPE_REMARK_UPDATE = "备注更改";//添加 public static final String TYPE_ADD = "A";//添加 public static final String TYPE_UPDATE = "U";//修改 @@ -87,6 +88,7 @@ public static final String TYPE_WRITE = "W";//写、推送(接口相关) public static final String TYPE_CONNECT = "C";//连接(接口相关) public static final String TYPE_PRINT_TOUSSE = "器械包打印"; + public static final String TYPE_PRINT = "打印";//打印 public static final String CLIENT_TYPE_WIN_MOBILE = "clientForWindowsMobile"; Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r36465 -r36535 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 36465) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 36535) @@ -65,6 +65,7 @@ import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.CssdHandleTousses; import com.forgon.directory.model.OrgUnit; +import com.forgon.directory.model.SetCode_Barcode; import com.forgon.directory.service.OrgUnitManager; import com.forgon.directory.service.SysUserManager; import com.forgon.directory.vo.LoginUserData; @@ -1020,8 +1021,138 @@ } return array; } + + @Override + public JSONArray getTousseInstanceSetCodeByTousseInstanceIdsForPrint(String ids) { + JSONArray jsonArray = new JSONArray(); + Collection idList = StringTools.parseToLongs(ids, ","); + if(CollectionUtils.isEmpty(idList)){ + throw new SystemException("未选中任何记录"); + } + String sql = String.format("select ti.departCoding, ti.tousseName, bd.barcode, setCode.barcode setCode " + + "from %s ti " + + "join %s bd on bd.id = ti.id " + + "left join %s scb on scb.barcodeDeviceId = ti.id " + + "left join %s setCode on setCode.id = scb.setCodeId " + + "where %s ", + TousseInstance.class.getSimpleName(), + BarcodeDevice.class.getSimpleName(), + SetCode_Barcode.class.getSimpleName(), + BarcodeDevice.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ti.id", idList)); + Set departCodeSet = new HashSet(); + //没有器械包集合码的包实例名称及条码例如:器械包名称1(01352332108) + List noSetCodeTousseNameAndBarcodeList = new ArrayList(); + //器械包集合码关联的器械包实例数量 + Map setCodeTousseInstanceAmountMap = new HashMap(); + //器械包集合码关联的器械包的来源科室编码map + Map> setCodeDepartCodeMap = new HashMap>(); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + String departCoding = rs.getString("departCoding"); + String tousseName = rs.getString("tousseName"); + String barcode = rs.getString("barcode"); + String setCode = rs.getString("setCode"); + if(StringUtils.isBlank(setCode)){ + noSetCodeTousseNameAndBarcodeList.add(tousseName + "(" + barcode + ")"); + continue; + } + departCodeSet.add(departCoding); + //器械包集合码关联的器械包实例数量 + Integer tousseInstanceAmount = setCodeTousseInstanceAmountMap.get(setCode); + if(tousseInstanceAmount == null){ + tousseInstanceAmount = 0; + } + tousseInstanceAmount = tousseInstanceAmount + 1; + setCodeTousseInstanceAmountMap.put(setCode, tousseInstanceAmount); + //器械包集合码关联的器械包的来源科室编码 + Set setCodeDepartCodeSet = setCodeDepartCodeMap.get(setCode); + if(setCodeDepartCodeSet == null){ + setCodeDepartCodeSet = new HashSet(); + } + setCodeDepartCodeSet.add(departCoding); + setCodeDepartCodeMap.put(setCode, setCodeDepartCodeSet); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + if(MapUtils.isEmpty(setCodeTousseInstanceAmountMap)){ + return jsonArray; + } + + if(CollectionUtils.isNotEmpty(noSetCodeTousseNameAndBarcodeList)){ + String tousseNameAndBarcodes = StringTools.join(noSetCodeTousseNameAndBarcodeList, "、"); + String message = "操作失败,以下器械包没有器械包集合码:“" + tousseNameAndBarcodes + "”"; + throw new SystemException(message); + } + + //获取来源科室编码和名称map + Map orgUnitCodeAndNameMap = getOrgUnitCodeAndNameMapByOrgUnitCodes(departCodeSet); + + for (Entry entry : setCodeTousseInstanceAmountMap.entrySet()) { + String setCode = entry.getKey(); + Integer tousseInstanceAmount = entry.getValue(); + Set setCodeDepartCodeSet = setCodeDepartCodeMap.get(setCode); + if(CollectionUtils.isEmpty(setCodeDepartCodeSet)){ + throw new SystemException("器械包集合码关联的器械包实例的来源科室为空!"); + } + if(setCodeDepartCodeSet.size() > 1){ + throw new SystemException("器械包集合码关联多个来源科室的器械包实例!"); + } + String setCodeDepart = ""; + for (String departCode : setCodeDepartCodeSet) { + setCodeDepart = orgUnitCodeAndNameMap.get(departCode); + break; + } + if(StringUtils.isBlank(setCodeDepart)){ + throw new SystemException("器械包集合码关联的器械包实例的来源科室为空!"); + } + JSONObject json = new JSONObject(); + json.put("setCode", setCode); + json.put("depart", setCodeDepart); + json.put("setCodeSize", tousseInstanceAmount); + jsonArray.add(json); + } + + saveTousseInstanceSetCodePrintLog(setCodeTousseInstanceAmountMap.keySet()); + + return jsonArray; + } /** + * 获取来源科室编码和名称map + */ + private Map getOrgUnitCodeAndNameMapByOrgUnitCodes( + Set departCodeSet) { + Map orgUnitCodeAndNameMap = new HashMap(); + List orgUnitList = orgUnitManager.getOrgUnitListByCodeSet(departCodeSet); + if(CollectionUtils.isEmpty(orgUnitList)){ + return orgUnitCodeAndNameMap; + } + for (OrgUnit orgUnit : orgUnitList) { + orgUnitCodeAndNameMap.put(orgUnit.getOrgUnitCoding(), orgUnit.getName()); + } + return orgUnitCodeAndNameMap; + } + + /** + * 保存器械包集合码打印日志 + * @param keySet + */ + private void saveTousseInstanceSetCodePrintLog(Set keySet) { + if(CollectionUtils.isEmpty(keySet)){ + return; + } + String description = "打印器械包集合码:" + StringTools.join(keySet, ";"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_TOUSSEINSTANCE, Log.TYPE_PRINT, description); + } + + /** * 器械包信息打印记录 * @param tousseInstance */