Index: ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/instance/service/QualityMonitoringInstanceManagerImpl.java =================================================================== diff -u -r37306 -r37470 --- ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/instance/service/QualityMonitoringInstanceManagerImpl.java (.../QualityMonitoringInstanceManagerImpl.java) (revision 37306) +++ ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/instance/service/QualityMonitoringInstanceManagerImpl.java (.../QualityMonitoringInstanceManagerImpl.java) (revision 37470) @@ -28,6 +28,7 @@ import com.forgon.directory.model.OrgUnit; import com.forgon.directory.vo.LoginUserData; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; +import com.forgon.disinfectsystem.basedata.becleanitem.service.ClassifiedItemManager; import com.forgon.disinfectsystem.basedata.becleanitem.service.ClassifyBasketManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.customform.formdefinition.service.FormDefinitionManager; @@ -111,6 +112,11 @@ private WashAndDisinfectRecordManager washAndDisinfectRecordManager; + private ClassifiedItemManager classifiedItemManager; + public void setClassifiedItemManager( + ClassifiedItemManager classifiedItemManager) { + this.classifiedItemManager = classifiedItemManager; + } public void setWashAndDisinfectRecordManager( WashAndDisinfectRecordManager washAndDisinfectRecordManager) { this.washAndDisinfectRecordManager = washAndDisinfectRecordManager; @@ -1226,12 +1232,10 @@ */ private JSONArray getWashRecordInfoByIDCardInstance(IDCardInstance idCardInstance) { JSONArray washAndDisinfectRecordArr = new JSONArray(); - String classifiedItemIds = idCardInstance.getLastClassifiedItemIds(); - if(StringUtils.isBlank(classifiedItemIds)){ + List classifiedItemList = objectDao.findByProperty(ClassifiedItem.class.getSimpleName(), "idCardBarcode", idCardInstance.getBarcode()); + if(CollectionUtils.isEmpty(classifiedItemList)){ throw new SystemException("该标识牌未录过清洗记录!"); } - - List classifiedItemList = objectDao.findByProperty(ClassifiedItem.class.getSimpleName(), "idCardBarcode", idCardInstance.getBarcode()); Set classifyBasketList = new HashSet(); if(CollectionUtils.isNotEmpty(classifiedItemList)){ for (ClassifiedItem item : classifiedItemList) { Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r37464 -r37470 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 37464) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 37470) @@ -1465,72 +1465,7 @@ } batchUpdateBasketSize(baskets, basketSizeArr); record.setClassifyBaskets(baskets); - updateIdCardInstanceItems(record); } - /** - * 根据回收记录设置标识牌绑定的清洗项id。遍历回收记录的篮筐,搜索清洗项,其中记录有标识牌的清洗项,就把id设置到标识牌实例 - * @param record - */ - private void updateIdCardInstanceItems(RecyclingRecord record){ - if(record == null){ - return; - } - List baskets = record.getClassifyBaskets(); - if(CollectionUtils.isEmpty(baskets)){ - return; - } - Map> idCardBarcodeMap = new HashMap>(); - for(ClassifyBasket basket : baskets){ - if(basket == null){ - continue; - } - Set cis = basket.getClassfiedItems(); - if(CollectionUtils.isEmpty(cis)){ - continue; - } - for (ClassifiedItem ci : cis) { - String idCardBarcode = ci.getIdCardBarcode(); - if(StringUtils.isBlank(idCardBarcode)){ - continue; - } - List ciIds = null; - if(idCardBarcodeMap.containsKey(idCardBarcode)){ - ciIds = idCardBarcodeMap.get(idCardBarcode); - }else{ - ciIds = new ArrayList(); - idCardBarcodeMap.put(idCardBarcode, ciIds); - } - ciIds.add(ci.getId()); - } - } - if(MapUtils.isEmpty(idCardBarcodeMap)){ - return; - } - List>> paraMapList = new ArrayList>>(); - for(Entry> entry : idCardBarcodeMap.entrySet()){ - Map> paraMap = new HashMap>(); - paraMap.put(entry.getKey(), entry.getValue()); - paraMapList.add(paraMap); - } - String sql = "update " + IDCardInstance.class.getSimpleName()+" set lastClassifiedItemIds=? where id=(select id from BarcodeDevice where barcode=?)"; - jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { - - @Override - public void setValues(PreparedStatement ps, int i) throws SQLException { - Map> paraMap = paraMapList.get(i); - for (Entry> entry : paraMap.entrySet()) { - ps.setString(1, StringTools.join(entry.getValue(), ";")); - ps.setString(2, entry.getKey()); - } - - } - - @Override - public int getBatchSize() { - return paraMapList.size(); - } - }); - } private ClassifiedItem getExistClassifiedItem(Long recordId, String itemType, String name, Long tousseDefinitionId, String basketGroupBarcodes, String idCardBarcode, Index: forgon-tools/src/main/java/com/forgon/Constants.java =================================================================== diff -u -r37373 -r37470 --- forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 37373) +++ forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 37470) @@ -28,7 +28,7 @@ "4.9.45","4.9.46","4.9.47","4.9.48","4.9.49","4.9.50","4.9.51","4.9.52","4.9.53","4.9.54","4.9.55","4.9.56","4.9.57","4.9.58","4.9.59","4.9.60","4.9.61","4.9.62", "4.9.63","4.9.64","4.9.65","4.9.66","4.9.67","4.9.68","4.9.69","4.9.70","4.9.71","4.9.72","4.9.73","4.9.74","4.9.75","4.9.76","4.9.77","4.9.78","4.9.79","4.9.80","4.9.81","4.9.82","4.9.83","4.9.84","4.9.85", "4.9.86","4.9.87","4.9.88","4.9.89","4.9.90","4.9.91","4.9.92","4.9.93","4.9.94","4.9.95","4.9.96","4.9.97","4.9.98","4.9.99","5.0.0","5.0.1","5.0.2","5.0.3","5.0.4","5.0.5","5.0.6","5.0.7", - "5.0.8","5.0.9","5.0.10","5.0.11","5.0.12","5.0.13","5.0.14","5.0.15","5.0.16","5.0.17","5.0.18"}; + "5.0.8","5.0.9","5.0.10","5.0.11","5.0.12","5.0.13","5.0.14","5.0.15","5.0.16","5.0.17","5.0.18","5.0.19"}; // 版本列表(4.0版本升级4.1版需要分两步:先从4.0升到4.1.0、然后从4.1.0升级4.1最新版本) /*public final static String[] SOFTWARE_VERSION_ARRAY = new String[] { Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/ClassifiedItemManagerImpl.java =================================================================== diff -u -r37178 -r37470 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/ClassifiedItemManagerImpl.java (.../ClassifiedItemManagerImpl.java) (revision 37178) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/ClassifiedItemManagerImpl.java (.../ClassifiedItemManagerImpl.java) (revision 37470) @@ -362,4 +362,19 @@ .append(" pt on pt.tousseDefinition_id=ci.tousseDefinitionID and (taskType=0 and pt.sourceId=ci.invoicePlanID or taskType=1 and pt.sourceId=ci.recyclingRecordId) where pt.id=") .append(packingTaskId).toString(); } + @Override + public List getClassifiedItemsByIdCardBarcode(String idCardBarcode) { + if(StringUtils.isBlank(idCardBarcode)){ + return new ArrayList(); + } + StringBuffer whereSql = new StringBuffer(); + whereSql.append(" po.recyclingRecordId =(select max(ci.recyclingRecordId) from "); + whereSql.append(ClassifiedItem.class.getSimpleName()); + whereSql.append(" ci where ci.idCardBarcode='"); + whereSql.append(idCardBarcode); + whereSql.append("') and po.idCardBarcode='"); + whereSql.append(idCardBarcode); + whereSql.append("' "); + return getByHql(whereSql.toString()); + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/idcardinstance/IDCardInstance.java =================================================================== diff -u -r34741 -r37470 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/idcardinstance/IDCardInstance.java (.../IDCardInstance.java) (revision 34741) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/idcardinstance/IDCardInstance.java (.../IDCardInstance.java) (revision 37470) @@ -53,10 +53,6 @@ private Long lastTousseInstanceId; /** - * 标识牌关联的清洗项的id。一个标识牌可能会关联多个清洗项,把id拼成字符串保存,以;分隔 - */ - private String lastClassifiedItemIds; - /** * 第一次回收的时间 */ private Date firstRecyclingTime; @@ -159,14 +155,6 @@ public void setLastTousseInstanceId(Long lastTousseInstanceId) { this.lastTousseInstanceId = lastTousseInstanceId; } - @Column(length=4000) - public String getLastClassifiedItemIds() { - return lastClassifiedItemIds; - } - - public void setLastClassifiedItemIds(String lastClassifiedItemIds) { - this.lastClassifiedItemIds = lastClassifiedItemIds; - } public Date getFirstRecyclingTime() { return firstRecyclingTime; @@ -200,44 +188,6 @@ public void setBindInstrumentInstanceFlag(Integer bindInstrumentInstanceFlag) { this.bindInstrumentInstanceFlag = bindInstrumentInstanceFlag; } - - /** - * 获取当前关联的清洗项的id集合 - * @return - */ - public Collection classifiedItemIds(){ - List list = new LinkedList(); - if(StringTools.isNotBlank(lastClassifiedItemIds)){ - - for(String id : lastClassifiedItemIds.split(";")){ - try{ - list.add(Long.valueOf(id)); - }catch(Exception e){ - e.printStackTrace(); - } - } - } - return list; - } - /** - * 安全设置当前关联的清洗项id - * @param items 清洗项集合,如果集合中包含null项,或者清洗项的id无效,则此项不加入到保存的字符串中,但是其他的项不爱影响. - * 如果items为空,或者只包含null的项,或者包含的item都不具有有效的id,则不修改先前保存的字符串的值 - */ - public void safelySetLastClassifiedItemIds(Collection items){ - if(CollectionUtils.isNotEmpty(items)){ - List list = new LinkedList(); - for(ClassifiedItem item : items){ - if(item != null && DatabaseUtil.isPoIdValid(item.getId())){ - list.add(item.getId()); - } - } - if(CollectionUtils.isNotEmpty(list)){ - setLastClassifiedItemIds(StringTools.join(list, ";")); - } - - } - } public void safelySetLastTousseInstanceId(Long lastTousseInstanceId) { if(this.lastTousseInstanceId == null){ this.lastTousseInstanceId = lastTousseInstanceId; Index: ssts-web/src/main/webapp/dataUpdater/sqls/5.0.18_5.0.19.sql =================================================================== diff -u --- ssts-web/src/main/webapp/dataUpdater/sqls/5.0.18_5.0.19.sql (revision 0) +++ ssts-web/src/main/webapp/dataUpdater/sqls/5.0.18_5.0.19.sql (revision 37470) @@ -0,0 +1 @@ +ALTER TABLE IDCardInstance DROP COLUMN lastClassifiedItemIds; \ No newline at end of file Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/ClassifiedItemManager.java =================================================================== diff -u -r26965 -r37470 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/ClassifiedItemManager.java (.../ClassifiedItemManager.java) (revision 26965) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/ClassifiedItemManager.java (.../ClassifiedItemManager.java) (revision 37470) @@ -49,4 +49,10 @@ * @param packingTask */ public void updateNumOfUnwashedStopsByPackingTask(PackingTask packingTask); + /** + * 获取标识牌最后一次的清洗项 + * @param idCardBarcode + * @return + */ + public List getClassifiedItemsByIdCardBarcode(String idCardBarcode); } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/WashTransitionItemManagerImpl.java =================================================================== diff -u -r23825 -r37470 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/WashTransitionItemManagerImpl.java (.../WashTransitionItemManagerImpl.java) (revision 23825) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/WashTransitionItemManagerImpl.java (.../WashTransitionItemManagerImpl.java) (revision 37470) @@ -107,14 +107,17 @@ if(tousseInstance != null && !tousseInstance.isRecycled()){ return JSONUtil.buildJsonObject(false, "此标识牌未回收,请先使用此标识牌进行回收操作"); } - Collection classifiedItemIds = idCardInstance.classifiedItemIds(); - if(CollectionUtils.isEmpty(classifiedItemIds)){ + List classifiedItems = classifiedItemManager.getClassifiedItemsByIdCardBarcode(idCardInstance.getBarcode()); + if(CollectionUtils.isEmpty(classifiedItems)){ return JSONUtil.buildJsonObject(false, "此标识牌未关联清洗篮筐,请先回收标识牌"); } - + List classifiedItemIds = new ArrayList(); + for (ClassifiedItem ci : classifiedItems) { + classifiedItemIds.add(ci.getId()); + } String where = "barcode in (select containerBarcode from " + ClassifyBasket.class.getSimpleName() + " where id in (select classifyBasket.id from "+ClassifiedItem.class.getSimpleName() - + " where "+SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", classifiedItemIds)+"))"; + + " where 1=1 "+SqlUtils.getInLongListSql("id", classifiedItemIds)+"))"; List containers = containerManager.getByHql(where); if(CollectionUtils.isEmpty(containers)){ return JSONUtil.buildJsonObject(false, "未找到标识牌关联的清洗篮筐"); @@ -178,7 +181,7 @@ * @return */ private String loadBarcodeWasher(IDCardInstance idCardInstance) { - Collection items = classifiedItemManager.getCollection(idCardInstance.classifiedItemIds()); + List items = classifiedItemManager.getClassifiedItemsByIdCardBarcode(idCardInstance.getBarcode()); if(CollectionUtils.isNotEmpty(items)){ List baskets = items.stream().map(p->p.getClassifyBasket()).collect(Collectors.toList()); if(CollectionUtils.isNotEmpty(baskets)){ Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/becleanitem/ClassifiedItem.java =================================================================== diff -u -r37373 -r37470 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/becleanitem/ClassifiedItem.java (.../ClassifiedItem.java) (revision 37373) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/becleanitem/ClassifiedItem.java (.../ClassifiedItem.java) (revision 37470) @@ -35,6 +35,7 @@ ,@Index(columnList = "recyclingRecordId", name = "recyclingRecordId_index") ,@Index(columnList = "invoicePlanID", name = "invoicePlanID_index") ,@Index(columnList = "lastTousseInstanceId", name = "ci_lastTousseInstanceId_index") +,@Index(columnList = "idCardBarcode", name = "ci_idCardBarcode_index") ,@Index(columnList = "tousseDefinitionID,itemType,classifybasket_id,toussedefinition_id,amount,numOfUnwashedStops,materialAmount", name = "ci_td_itemtype_cb_tdi_anm") }) @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)