Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/materialinstance/MaterialInstance.java =================================================================== diff -u -r18500 -r18655 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/materialinstance/MaterialInstance.java (.../MaterialInstance.java) (revision 18500) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/materialinstance/MaterialInstance.java (.../MaterialInstance.java) (revision 18655) @@ -106,6 +106,17 @@ public void setMaterialName(String materialName) { this.materialName = materialName; } + /** + * 获取材料定义的规格 + * @return + */ + @Transient + public String getSpecification(){ + if(materialDefinition != null){ + return materialDefinition.getSpecification(); + } + return ""; + } public int getCount() { return count; Index: ssts-web/src/main/webapp/disinfectsystem/washanddisinfectmanager/washTransitionRecord/washTransitionRecordForm.js =================================================================== diff -u -r18645 -r18655 --- ssts-web/src/main/webapp/disinfectsystem/washanddisinfectmanager/washTransitionRecord/washTransitionRecordForm.js (.../washTransitionRecordForm.js) (revision 18645) +++ ssts-web/src/main/webapp/disinfectsystem/washanddisinfectmanager/washTransitionRecord/washTransitionRecordForm.js (.../washTransitionRecordForm.js) (revision 18655) @@ -26,6 +26,8 @@ if(action.result.message){ showResult(action.result.message); } + grid.reloadData(); + windowObj.close(); }, failure: function(form, action) { if(action.result.message){ @@ -83,6 +85,9 @@ if(leaf){ goodsName = itemdata.materialName; idCardBarcodeOrAmount = itemdata.amount; + //因为叶子结点不显示丢失报损信息 + hasDamages = ''; + hasErrors = ''; } var node = Ext4.create('Forgon.data.WashTransitionRecordInfoModel',{ @@ -123,11 +128,7 @@ url : WWWROOT + '/disinfectSystem/washTransitionRecordAction!loadBarcode.do?barcode=' + barcode + "&date=" + new Date(), success : function(response, options) { var result = Ext4.decode(response.responseText); - if(result.success){ - callback(result); - }else{ - showResult(result.message); - } + callback(result); }, failure : function(response, options) { var result = Ext4.decode(response.responseText); @@ -156,7 +157,7 @@ proxy: { type : 'ajax', extraParams: {id : id}, - url : WWWROOT + '/disinfectSystem/washTransitionRecordAction!loadWashTransitionRecordInfoById.do' + url : WWWROOT + '/disinfectSystem/washTransitionRecordAction!loadWashTransitionRecordItemById.do' }, listeners: { load: function(_this, node, records, successful, eOpts) { @@ -199,6 +200,11 @@ return; } loadBarcode(barcode,function(result){ + if(!result.success){ + showResult(result.message); + thisTextfield.setValue(''); + return; + } if(result.type == "IDCardInstance"){ var existNode = findIDCardWashTransitionItem(washTransitionRecordInfoTreeStore,barcode); if(existNode){ @@ -263,6 +269,8 @@ windowObj.close(); } },{ + id:'save', + name:'save', text : '保存', handler : function(){ save(washTransitionRecordInfoTreeStore); @@ -305,13 +313,19 @@ keydown : function (thisTextfield, e, eOpts) { if (e.keyCode == 13) { loadBarcode(thisTextfield.getValue(),function(result){ + if(!result.success){ + showResult(result.message); + thisTextfield.setValue(''); + return; + } if(result.type == "user"){ Ext4.getCmp('handover').setValue(result.data.fullName); Ext4.getCmp('handoverCode').setValue(result.data.name); thisTextfield.setValue(''); Ext4.getCmp('takeoverBarcode').focus(); }else{ showResult("请扫描用户条码"); + thisTextfield.setValue(''); } }); } @@ -347,13 +361,19 @@ keydown : function (thisTextfield, e, eOpts) { if (e.keyCode == 13) { loadBarcode(thisTextfield.getValue(),function(result){ + if(!result.success){ + showResult(result.message); + thisTextfield.setValue(''); + return; + } if(result.type == "user"){ Ext4.getCmp('takeover').setValue(result.data.fullName); Ext4.getCmp('takeoverCode').setValue(result.data.name); thisTextfield.setValue(''); Ext4.getCmp('scanBarcode').focus(); }else{ showResult("请扫描用户条码"); + thisTextfield.setValue(''); } }); } @@ -408,4 +428,22 @@ items : formObj }); windowObj.show(); + if(!isUndefinedOrNullOrEmpty(id)){ + //加载数据 + Ext4.Ajax.request({ + url : WWWROOT + '/disinfectSystem/washTransitionRecordAction!loadWashTransitionRecord.do?id=' + id, + success : function(response, options) { + var result = Ext4.decode(response.responseText); + if(result.success){ + Ext4.getCmp('handover').setValue(result.handover); + Ext4.getCmp('takeover').setValue(result.takeover); + Ext4.getCmp('transitionTime').setValue(result.transitionTime); + Ext4.getCmp('displayInfo').setText(result.displayInfo); + } + }, + failure : function(response, options) { + } + }); + Ext4.getCmp("save").disable(); + } } \ No newline at end of file Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/WashTransitionRecordManager.java =================================================================== diff -u -r18645 -r18655 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/WashTransitionRecordManager.java (.../WashTransitionRecordManager.java) (revision 18645) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/WashTransitionRecordManager.java (.../WashTransitionRecordManager.java) (revision 18655) @@ -51,5 +51,10 @@ * @return */ public JSONObject loadBarcode(String barcode); + /** + * 获取包和材料汇总信息 + * @return + */ + public String getItemBrief(WashTransitionRecord record); } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/action/WashTransitionRecordAction.java =================================================================== diff -u -r18645 -r18655 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/action/WashTransitionRecordAction.java (.../WashTransitionRecordAction.java) (revision 18645) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/action/WashTransitionRecordAction.java (.../WashTransitionRecordAction.java) (revision 18655) @@ -14,11 +14,13 @@ import com.forgon.disinfectsystem.entity.toussetransition.WashTransitionRecord; import com.forgon.disinfectsystem.idcardinstance.service.IDCardInstanceManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; +import com.forgon.disinfectsystem.washTransition.service.WashTransitionItemManager; import com.forgon.disinfectsystem.washTransition.service.WashTransitionRecordManager; import com.forgon.entity.ExtJsEntity; import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.json.JSONUtil; import com.forgon.tools.string.StringTools; import com.forgon.tools.util.ExtJsUtil; import com.forgon.tools.util.ForgonDateUtils; @@ -36,7 +38,13 @@ private IDCardInstanceManager idCardInstanceManager; private TousseInstanceManager tousseInstanceManager; private ExtGridUtils extGridUtils; + private WashTransitionItemManager washTransitionItemManager; + public void setWashTransitionItemManager( + WashTransitionItemManager washTransitionItemManager) { + this.washTransitionItemManager = washTransitionItemManager; + } + public void setTousseInstanceManager(TousseInstanceManager tousseInstanceManager) { this.tousseInstanceManager = tousseInstanceManager; } @@ -120,7 +128,7 @@ String takeover = StrutsParamUtils.getPraramValue("takeover", ""); String items = StrutsParamUtils.getPraramValue("items", ""); try{ - washTransitionRecordManager.save(handoverCode, handover, JSONArray.fromObject(items),takeover,takeoverCode); + washTransitionRecordManager.save(handover,handoverCode, JSONArray.fromObject(items),takeover,takeoverCode); StrutsResponseUtils.output(true, "保存成功"); }catch(Exception e){ StrutsResponseUtils.output(true, e.getMessage()); @@ -131,14 +139,14 @@ * @return * @param id id */ - public void loadWashTransitionRecordInfoById() { + public void loadWashTransitionRecordItemById() { if(DatabaseUtil.isPoIdValid(washTransitionRecord.getId())){ Integer tousseTotal = 0; Integer materialTotal = 0; JSONArray rows = new JSONArray(); List washtransitionItemList = washTransitionRecord.getWashTransitionItems(); for (WashTransitionItem washtransitionItem : washtransitionItemList) { - JSONObject jTousse = new JSONObject(); + JSONObject jTousse = washTransitionItemManager.toJson(washtransitionItem); jTousse.put("goodsName", washtransitionItem.getTousseName()); Integer tousseAmount = 0; if (StringTools.isNotBlank(washtransitionItem.getIdCardBarcode())) { @@ -166,19 +174,19 @@ } jTousse.put("children", jMaterials); rows.add(jTousse); - } - - if (rows.size() < 0) { - rows.add(new JSONObject()); - } - JSONObject firstRow = (JSONObject) rows.get(0); - firstRow.put("handover", washTransitionRecord.getHandover()); - firstRow.put("takeover", washTransitionRecord.getTakeover()); - firstRow.put("transitionTime", ForgonDateUtils.safelyFormatDate(washTransitionRecord.getTransitionTime(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "")); - firstRow.put("displayInfo", String.format("共有%s包,%s件器械", tousseTotal, materialTotal)); - StrutsResponseUtils.output(rows.toString()); + } + StrutsResponseUtils.output(rows); } } - - + /** + * 加载清洗交接记录的信息,清洗人配包人等,不包括明细项,包括汇总 + */ + public void loadWashTransitionRecord(){ + JSONObject json = JSONUtil.buildJsonObject(true); + json.put("handover", washTransitionRecord.getHandover()); + json.put("takeover", washTransitionRecord.getTakeover()); + json.put("transitionTime", ForgonDateUtils.safelyFormatDate(washTransitionRecord.getTransitionTime(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "")); + json.put("displayInfo", washTransitionRecordManager.getItemBrief(washTransitionRecord)); + StrutsResponseUtils.output(json); + } } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/WashTransitionItemManagerImpl.java =================================================================== diff -u -r18650 -r18655 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/WashTransitionItemManagerImpl.java (.../WashTransitionItemManagerImpl.java) (revision 18650) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/WashTransitionItemManagerImpl.java (.../WashTransitionItemManagerImpl.java) (revision 18655) @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -21,6 +22,7 @@ import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; import com.forgon.disinfectsystem.entity.materialerrordamage.IdCardMaterialErrorDamage; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingItem; +import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.toussetransition.WashTransitionItem; import com.forgon.disinfectsystem.entity.toussetransition.WashTransitionMaterial; import com.forgon.disinfectsystem.entity.toussetransition.WashTransitionRecord; @@ -43,16 +45,13 @@ private TousseDefinitionManager tousseDefinitionManager; private TousseInstanceManager tousseInstanceManager; private IdCardMaterialErrorDamageManager idCardMaterialErrorDamageManager; + private ClassifiedItemManager classifiedItemManager; public void setIdCardMaterialErrorDamageManager( IdCardMaterialErrorDamageManager idCardMaterialErrorDamageManager) { this.idCardMaterialErrorDamageManager = idCardMaterialErrorDamageManager; } - public WashTransitionItemManagerImpl() { - super(WashTransitionItem.class); - } - public void setWashTransitionMaterialManager( WashTransitionMaterialManager washTransitionMaterialManager) { this.washTransitionMaterialManager = washTransitionMaterialManager; @@ -64,6 +63,7 @@ } public void setClassifiedItemManager(ClassifiedItemManager classifiedItemManager) { + this.classifiedItemManager = classifiedItemManager; } public void setContainerManager(ContainerManager containerManager) { @@ -134,12 +134,11 @@ if(td == null){ return JSONUtil.buildJsonObject(false, "标识牌绑定的包定义已经被删除"); } - JSONObject jitem = doBuildWashTransitionItem(idCardInstance.getBarcode(),idCardInstance.getLastTousseInstanceId(), td); + JSONObject jitem = doBuildWashTransitionItem(idCardInstance, td); return JSONUtil.buildJsonObject(true, jitem); } - private JSONObject doBuildWashTransitionItem(String idCardBarcode,Long tousseInstanceId, - TousseDefinition td) { + private JSONObject doBuildWashTransitionItem(IDCardInstance idCardInstance,TousseDefinition td) { if(td == null){ return null; } @@ -148,34 +147,73 @@ } WashTransitionItem item = new WashTransitionItem(); - item.setIdCardBarcode(idCardBarcode); - item.setTousseInstanceId(tousseInstanceId); + item.setTousseDefinitionId(td.getId()); item.setTousseName(td.getName()); item.setAmount(1); + if(idCardInstance != null){ + item.setIdCardBarcode(idCardInstance.getBarcode()); + item.setTousseInstanceId(idCardInstance.getLastTousseInstanceId()); + item.setWasher(loadBarcodeWasher(idCardInstance)); + } + List materials = new LinkedList(); for(MaterialInstance mi : td.getMaterialInstances()){ WashTransitionMaterial material = new WashTransitionMaterial(); material.setAmount(mi.getCount()); material.setMaterialInstanceId(mi.getId()); material.setMaterialName(mi.getMaterialName()); - material.setSpecification(mi.getMaterialDefinition().getSpecification()); + material.setSpecification(mi.getSpecification()); materials.add(material); } JSONObject jitem = toJson(item); JSONArray jmaterials = washTransitionMaterialManager.toJson(materials); jitem.put("washTransitionMaterials", jmaterials); return jitem; } + /** + * 获取标识牌条码对应的清洗人。如果标识牌所在篮筐有责任人,就取责任人,否则取清洗记录操作人。要去掉重复值 + * @param idCardInstance + * @return + */ + private String loadBarcodeWasher(IDCardInstance idCardInstance) { + Collection items = classifiedItemManager.getCollection(idCardInstance.classifiedItemIds()); + if(CollectionUtils.isNotEmpty(items)){ + List baskets = items.stream().map(p->p.getClassifyBasket()).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(baskets)){ + List washer = new ArrayList<>(); + for(ClassifyBasket basket : baskets){ + String person = basket.getPersonInCharge(); + if(StringTools.isNotBlank(person)){ + //有篮筐责任人,就用篮筐责任人,没有就用清洗记录的 + if(!washer.contains(person)){ + washer.add(person); + } + }else{ + if(CollectionUtils.isNotEmpty(basket.getRecyclingRecords())){ + for(RecyclingRecord record : basket.getRecyclingRecords()){ + String operator = record.getOperator(); + if(!washer.contains(operator)){ + washer.add(operator); + } + } + } + } + } + return String.join("、", washer); + } + } + return ""; + } @Override public JSONObject buildWashTransitionItem(String tousseDefinitionId) { TousseDefinition td = tousseDefinitionManager.get(tousseDefinitionId); if(td == null){ return JSONUtil.buildJsonObject(false, "包定义(id:" + tousseDefinitionId + ")已经被删除"); } - return doBuildWashTransitionItem(null,null,td); + return doBuildWashTransitionItem(null,td); } @Override @@ -189,8 +227,7 @@ json.put("tousseDefinitionId", washTransitionItem.getTousseDefinitionId()); json.put("tousseName", washTransitionItem.getTousseName()); json.put("amount", washTransitionItem.getAmount()); - json.put("washer", "washer"); - json.put("washerCode", "washerCode"); + json.put("washer", washTransitionItem.getWasher()); formatErrorDamages(washTransitionItem.getIdCardBarcode(),washTransitionItem.getTousseInstanceId(),json); return json; } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/WashTransitionRecordManagerImpl.java =================================================================== diff -u -r18645 -r18655 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/WashTransitionRecordManagerImpl.java (.../WashTransitionRecordManagerImpl.java) (revision 18645) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/WashTransitionRecordManagerImpl.java (.../WashTransitionRecordManagerImpl.java) (revision 18655) @@ -16,10 +16,13 @@ import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; +import com.forgon.disinfectsystem.entity.toussetransition.WashTransitionItem; +import com.forgon.disinfectsystem.entity.toussetransition.WashTransitionMaterial; import com.forgon.disinfectsystem.entity.toussetransition.WashTransitionRecord; import com.forgon.security.service.UserManager; import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.string.StringTools; import com.forgon.tools.util.ForgonDateUtils; public class WashTransitionRecordManagerImpl extends @@ -153,4 +156,32 @@ } } } + + @Override + public String getItemBrief(WashTransitionRecord record) { + if(record != null){ + Integer tousseTotal = 0; + Integer materialTotal = 0; + List washtransitionItemList = record.getWashTransitionItems(); + for (WashTransitionItem washtransitionItem : washtransitionItemList) { + Integer tousseAmount = 0; + if (StringTools.isNotBlank(washtransitionItem.getIdCardBarcode())) { + ++ tousseTotal; + tousseAmount = 1; + } else { + Integer temp = washtransitionItem.getAmount() == null ? 0 : washtransitionItem.getAmount(); + tousseTotal += temp; + tousseAmount = temp; + } + List materials = washtransitionItem.getWashTransitionMaterials(); + for (WashTransitionMaterial material : materials) { + Integer temp = material.getAmount() == null ? 0 : material.getAmount(); + materialTotal = materialTotal + temp*tousseAmount; + } + + } + return String.format("共有%s包,%s件器械", tousseTotal, materialTotal); + } + return ""; + } }