Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java =================================================================== diff -u -r14407 -r14423 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 14407) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 14423) @@ -141,4 +141,14 @@ public TousseDefinition newDisinfectGoodsDefinition(Long sourceDefinitionId, JSONArray materialItemsJson, Long invoicePlanId); + /** + * 质量监测不合格器械包回收 + * @param tousseInstanceId 器械包id + */ + public void recycleTousseInstance(String tousseInstanceId); + /** + * 创建质量监测回收申请单 + * @return + */ + public RecyclingApplication createQualityMonitorRecyclingApplication(Collection srcTousseItemVoList); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/PackingTask.java =================================================================== diff -u -r14296 -r14423 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/PackingTask.java (.../PackingTask.java) (revision 14296) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/PackingTask.java (.../PackingTask.java) (revision 14423) @@ -69,6 +69,7 @@ public static final Integer TASK_APPLICATION = 0;// 申请单 public static final Integer TASK_RECYCLINGRECORD = 1;// 回收记录 public static final Integer TASK_RETURNGOODS = 2;// 退货重装 + public static final Integer TASK_QUALITY_MONITOR = 3; //质量监测重新装配 @Id @GeneratedValue(strategy = GenerationType.AUTO) Index: ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoringmanager/qualitymonitoring/service/QualityMonitoringManagerImpl.java =================================================================== diff -u -r14273 -r14423 --- ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoringmanager/qualitymonitoring/service/QualityMonitoringManagerImpl.java (.../QualityMonitoringManagerImpl.java) (revision 14273) +++ ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoringmanager/qualitymonitoring/service/QualityMonitoringManagerImpl.java (.../QualityMonitoringManagerImpl.java) (revision 14423) @@ -5,19 +5,22 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.List; +import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; +import com.forgon.Constants; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.vo.LoginUserData; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedata.becleanitem.service.BeCleanItemManager; import com.forgon.disinfectsystem.basedatamanager.container.service.ContainerManager; +import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; import com.forgon.disinfectsystem.entity.basedatamanager.imagefilemanager.ImageFile; @@ -29,11 +32,15 @@ import com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoringconfig.QualityMonitoringConfig; import com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoringconfig.QualityMonitoringItem; import com.forgon.disinfectsystem.qualitymonitoringmanager.qualitymonitoringconfig.service.QualityMonitoringConfigManager; +import com.forgon.disinfectsystem.recyclingapplication.service.RecyclingApplicationManager; +import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service.SterilizationRecordManager; import com.forgon.disinfectsystem.tousse.imagefilemanager.service.ImageFileManager; import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; +import com.forgon.disinfectsystem.idcardinstance.service.IDCardInstanceManager; import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.string.StringTools; /** * @author WangYi 2012-3-16 @@ -57,6 +64,13 @@ private TousseInstanceManager tousseInstanceManager; + private SterilizationRecordManager sterilizationRecordManager; + + public void setSterilizationRecordManager( + SterilizationRecordManager sterilizationRecordManager) { + this.sterilizationRecordManager = sterilizationRecordManager; + } + public void setTousseInstanceManager(TousseInstanceManager tousseInstanceManager) { this.tousseInstanceManager = tousseInstanceManager; } @@ -171,16 +185,22 @@ } @Override - public void saveQualityMonitoring(QualityMonitoring qualityMonitoring, - String sterilizationRecordId,String srInfo, String tousseInstanceId, - String materialInfo,String qualityMonitoringId, String uploadImgIds, - String qualityMonitoringItems) { + public void saveQualityMonitoring(QualityMonitoring qualityMonitoring,Map requestParams) { + String materialInfo = requestParams.get("materialInfo"); + String tousseInstanceId = requestParams.get("tousseInstanceId"); + String qualityMonitoringId = requestParams.get("qualityMonitoringId"); + String sterilizationID = requestParams.get("qualityMonitoringSterilizationID"); + String uploadImgIds = requestParams.get("uploadImgIds"); + String qualityMonitoringItems = requestParams.get("qualityMonitoringItems"); + String srInfo = sterilizationRecordManager.getSterilizationRecordInfo(sterilizationID); + + if (StringUtils.isNotBlank(srInfo)) { qualityMonitoring.setSterilizationRecordInfo(srInfo); } - if(StringUtils.isNotBlank(sterilizationRecordId)){ - qualityMonitoring.setSterilizationRecordId(sterilizationRecordId); + if(StringUtils.isNotBlank(sterilizationID)){ + qualityMonitoring.setSterilizationRecordId(sterilizationID); } if (StringUtils.isNotBlank(tousseInstanceId)) { qualityMonitoring.setTousseInstance(tousseInstanceManager @@ -213,14 +233,14 @@ } } - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + //SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); List needToRemove = createQualityMonitoringsForRoutine( - qualityMonitoring, dateFormat, qualityMonitoringItems); + qualityMonitoring,Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, qualityMonitoringItems); if (qualityMonitoring != null) { try { - qualityMonitoring.setDateTime(dateFormat.parse(StrutsParamUtils - .getPraramValue("dateTime", dateFormat.format(Calendar + qualityMonitoring.setDateTime(Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM.parse(StrutsParamUtils + .getPraramValue("dateTime", Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM.format(Calendar .getInstance().getTime())))); } catch (ParseException e1) { e1.printStackTrace(); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r14407 -r14423 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 14407) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 14423) @@ -91,8 +91,10 @@ import com.forgon.tools.GB2WB; import com.forgon.tools.MathTools; import com.forgon.tools.SqlBuilder; +import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.json.JSONUtil; import com.forgon.tools.string.StringTools; import com.forgon.treenode.model.THTreeNode; import com.google.common.collect.Maps; @@ -4202,4 +4204,84 @@ } return vos; } + + @Override + public void recycleTousseInstance(String tousseInstanceId) { + if(!DatabaseUtil.isPoIdValid(tousseInstanceId)){ + return; + } + TousseInstance tousseInstance = tousseInstanceManager.getTousseInstanceById(tousseInstanceId); + if(tousseInstance == null){ + return; + } + //已装配、已审核、已灭菌、灭菌中才能处理 + if(tousseInstance.isPacked() || tousseInstance.isReviewed() || tousseInstance.isSteriling() + || tousseInstance.isSteriled()){ + TousseItem tousseItem = tousseItemManager.createTousseItem(tousseInstance); + + List itemvos = new ArrayList(); + TousseItemVo itemVo = new TousseItemVo(); + itemVo.setAmount(1); + itemVo.setDiposable(com.forgon.Constants.STR_NO); + itemVo.setTousseDefinitionId(tousseInstance.getTousseDefinition().getAncestorID()); + itemVo.setTousseDefinitionID(tousseInstance.getTousseDefinition().getAncestorID()); + itemVo.setTousseName(tousseInstance.getTousseName()); + itemVo.setTousseType(tousseInstance.getTousseDefinition().getTousseType()); + itemVo.setUrgent(com.forgon.Constants.STR_NO); + itemVo.setUrgentAmount(0); + + itemvos.add(itemVo); + + createQualityMonitorRecyclingApplication(itemvos); + + }else{ + throw new RuntimeException("器械包状态只能是" + TousseInstance.STATUS_PACKED + "或者" + TousseInstance.STATUS_REVIEWED + + "或者" + TousseInstance.STATUS_STERILING + "或者" + TousseInstance.STATUS_STERILED + ".当前包状态为:" + tousseInstance.getStatus()); + } + } + + @Override + public RecyclingApplication createQualityMonitorRecyclingApplication(Collection tousseItemVoList) { + //遍历提交的数据,如果加急数量大于申请数量则提示失败 + for (TousseItemVo tousseItemVo : tousseItemVoList) { + JSONObject jsonObject = tousseDefinitionManager.handleUrgentAmountAndAmount(tousseItemVo); + if (jsonObject != null){ + throw new RuntimeException(jsonObject.getString(JSONUtil.JSON_KEY_MESSAGE)); + } + } + + // 添加备注 + RecyclingApplication recyclingApplication = new RecyclingApplication(); + recyclingApplication.setId(null); + recyclingApplication.setSerialNumber(serialNumManager.getSerialNumberStr(SerialNum.TYPE_RECYCLINGAPPLICATION)); + recyclingApplication.setApplicationItems(null); + recyclingApplication.setHandleDepart(AcegiHelper.getCurrentOrgUnitName()); + recyclingApplication.setHandleDepartCoding(AcegiHelper.getCurrentOrgUnitCode()); + recyclingApplication.setInvoice(null); + recyclingApplication.setRecyclingApplications(null); + recyclingApplication.setDepart(AcegiHelper.getCurrentOrgUnitName()); + recyclingApplication.setDepartCoding(AcegiHelper.getCurrentOrgUnitCode()); + recyclingApplication.setApplicant(AcegiHelper.getLoginUserFullName()); + recyclingApplication.setSettleAccountsDepartCoding(AcegiHelper.getCurrentOrgUnitCode()); + recyclingApplication.setSettleAccountsDepart(AcegiHelper.getCurrentOrgUnitName()); + + //验证该申请单的处理科室能否服务该单的申请物品 + JSONObject resultObj = tousseDefinitionManager + .validateRecyclingApplicationCssdPrivilege( + recyclingApplication, tousseItemVoList); + if (!resultObj.optBoolean("success")) { + throw new RuntimeException( + resultObj.optString("message")); + } + // 提交申请单 + saveRecyclingApplication(recyclingApplication, tousseItemVoList,true); + + recyclingApplication.setType(InvoicePlan.TYPE_QUALITY_MONITOR_RECYCLE_APPLICATION); + //此申请单的发货状态为空,不发货 + recyclingApplication.setDeliverStatus(""); + recyclingApplication.setRemark("质量监测生成申请单"); + saveOrUpdate(recyclingApplication); + + return recyclingApplication; + } } Index: ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoringmanager/qualitymonitoring/service/QualityMonitoringManager.java =================================================================== diff -u -r14273 -r14423 --- ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoringmanager/qualitymonitoring/service/QualityMonitoringManager.java (.../QualityMonitoringManager.java) (revision 14273) +++ ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoringmanager/qualitymonitoring/service/QualityMonitoringManager.java (.../QualityMonitoringManager.java) (revision 14423) @@ -1,6 +1,7 @@ package com.forgon.disinfectsystem.qualitymonitoringmanager.qualitymonitoring.service; import java.util.List; +import java.util.Map; import com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoring.QualityMonitoring; @@ -23,9 +24,10 @@ String barcode, String inspectItem); public List findQualityMonitoringBySql(String sql); - - public void saveQualityMonitoring(QualityMonitoring qualityMonitoring, - String sterilizationRecordId,String srInfo, String tousseInstanceId, - String materialInfo,String qualityMonitoringId, String uploadImgIds, - String qualityMonitoringItems); + /** + * 保存质量测试记录 + * @param qualityMonitoring + * @param requestParams 请求参数 + */ + public void saveQualityMonitoring(QualityMonitoring qualityMonitoring,Map requestParams); } Index: ssts-web/src/main/webapp/disinfectsystem/qualitymonitoring/qualitymonitoringForm.js =================================================================== diff -u -r14306 -r14423 --- ssts-web/src/main/webapp/disinfectsystem/qualitymonitoring/qualitymonitoringForm.js (.../qualitymonitoringForm.js) (revision 14306) +++ ssts-web/src/main/webapp/disinfectsystem/qualitymonitoring/qualitymonitoringForm.js (.../qualitymonitoringForm.js) (revision 14423) @@ -239,7 +239,12 @@ }, failure : function(form, action) { - alert('failure = ' + action.failureType); + if(action.response.responseText){ + var result = top.Ext.decode(action.response.responseText); + showResult(result.message); + }else{ + alert('failure = ' + action.failureType); + } } }); } @@ -502,6 +507,14 @@ name : 'containerBarcode', id : 'containerBarcode' },{ + xtype:'hidden', + name:'isRecycle', + id:'isRecycle' + },{ + xtype:'hidden', + name:'isRepacking', + id:'isRepacking' + },{ layout : 'form', columnWidth : .5, labelWidth : 90, @@ -738,6 +751,22 @@ }, anchor : '95%' },{ + id : 'recycle', + name : 'recycle', + fieldLabel : '重新回收', + xtype : 'checkbox', + inputValue : '重新回收', + listeners:{ + check:function( thiz, checked ){ + if(checked){ + top.Ext.getCmp('isRecycle').setValue('是'); + top.Ext.getCmp('repacking').setValue(false); + }else{ + top.Ext.getCmp('isRecycle').setValue('否'); + } + } + } + },{ xtype : 'combo', id : 'material', name : 'material', @@ -796,6 +825,22 @@ } } },{ + id : 'repacking', + name : 'repacking', + fieldLabel : '重新装配', + xtype : 'checkbox', + inputValue : '重新装配', + listeners:{ + check:function( thiz, checked ){ + if(checked){ + top.Ext.getCmp('isRepacking').setValue('是'); + top.Ext.getCmp('recycle').setValue(false); + }else{ + top.Ext.getCmp('isRepacking').setValue('否'); + } + } + } + },{ xtype : 'numberfield', allowDecimals : false, name : 'amount', @@ -962,7 +1007,7 @@ } } var materialInfo = ""; - var materialLength = top.Ext.getCmp('setLeft').items.length-2; + var materialLength = top.Ext.getCmp('setLeft').items.length-3; for(var i=1;i<=materialLength;i++){ var material = top.Ext.getCmp("material"+i).getValue(); var amount = top.Ext.getCmp("amount"+i).getValue(); Index: ssts-web/src/main/java/com/forgon/disinfectsystem/qualitymonitoringmanager/qualitymonitoring/action/QualityMonitoringAction.java =================================================================== diff -u --- ssts-web/src/main/java/com/forgon/disinfectsystem/qualitymonitoringmanager/qualitymonitoring/action/QualityMonitoringAction.java (revision 0) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/qualitymonitoringmanager/qualitymonitoring/action/QualityMonitoringAction.java (revision 14423) @@ -0,0 +1,355 @@ +package com.forgon.disinfectsystem.qualitymonitoringmanager.qualitymonitoring.action; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletResponse; + +import net.sf.json.JSONNull; +import net.sf.json.JSONObject; +import net.sf.json.JsonConfig; +import net.sf.json.processors.DefaultValueProcessor; +import net.sf.json.util.CycleDetectionStrategy; + +import org.apache.commons.lang.StringUtils; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; +import org.apache.struts2.convention.annotation.ParentPackage; + +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.entity.basedatamanager.imagefilemanager.ImageFile; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoring.QualityMonitoring; +import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; +import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.packing.service.PackingManager; +import com.forgon.disinfectsystem.qualitymonitoringmanager.qualitymonitoring.service.QualityMonitoringManager; +import com.forgon.disinfectsystem.recyclingapplication.service.RecyclingApplicationManager; +import com.forgon.disinfectsystem.recyclingrecord.service.RecyclingRecordManager; +import com.forgon.disinfectsystem.tousse.imagefilemanager.service.ImageFileManager; +import com.forgon.tools.ImageUtils; +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.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.Preparable; + +/** + * @author WangYi 2012-3-19 + */ + +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem") +@Action(value = "qualityMonitoringAction") +public class QualityMonitoringAction implements ModelDriven, + Preparable { + + private QualityMonitoring qualityMonitoring; + + private QualityMonitoringManager qualityMonitoringManager; + + private ImageFileManager imageFileManager; + + private SupplyRoomConfigManager supplyRoomConfigManager; + + private RecyclingApplicationManager recyclingApplicationManager; + + private PackingManager packingManager; + + public void setPackingManager(PackingManager packingManager) { + this.packingManager = packingManager; + } + + public void setRecyclingApplicationManager( + RecyclingApplicationManager recyclingApplicationManager) { + this.recyclingApplicationManager = recyclingApplicationManager; + } + + public SupplyRoomConfigManager getSupplyRoomConfigManager() { + return supplyRoomConfigManager; + } + + public void setSupplyRoomConfigManager( + SupplyRoomConfigManager supplyRoomConfigManager) { + this.supplyRoomConfigManager = supplyRoomConfigManager; + } + + public void setImageFileManager(ImageFileManager imageFileManager) { + this.imageFileManager = imageFileManager; + } + + public void setQualityMonitoringManager( + QualityMonitoringManager qualityMonitoringManager) { + this.qualityMonitoringManager = qualityMonitoringManager; + } + + /** + * 保存质量监测记录 + */ + public void saveQualityMonitoring() { + Map map = StrutsParamUtils.getParameters(); + boolean success = true; + String msg = "保存成功!"; + boolean isRecycle = StringTools.equals("是", map.get("isRecycle")); + boolean isRepacking = StringTools.equals("是", map.get("isRepacking")); + String tousseInstanceId = map.get("tousseInstanceId"); + try { + qualityMonitoringManager.saveQualityMonitoring(qualityMonitoring,map); + if(isRecycle){ + recyclingApplicationManager.recycleTousseInstance(tousseInstanceId); + }else if(isRepacking){ + packingManager.createPackingTaskForRepacking(tousseInstanceId); + } + + }catch(RuntimeException e){ + success = false; + msg = e.getMessage(); + } catch (Exception e) { + success = false; + msg = "保存失败!"; + } + StrutsResponseUtils.output(JSONUtil.buildJsonObject(success, msg)); + } + + /** + * 加载上传图片 + */ + public void getUploadImageCount() { + String imageType = StrutsParamUtils.getPraramValue("imageType", ""); + String objectId = StrutsParamUtils.getPraramValue("objectId", ""); + int imageCount = 0; + if (StringUtils.isNotBlank(objectId)) { + if (ImageFile.IMAGE_TYPE_QUALITYMONITORING.equals(imageType)) { + QualityMonitoring qualityMonitoring = qualityMonitoringManager + .getQualityMonitoringById(objectId); + if (qualityMonitoring != null) { + List images = qualityMonitoring.getImages(); + if (images != null && images.size() > 0) { + imageCount = images.size(); + } + } + } + } + HttpServletResponse httpServletResponse = StrutsParamUtils + .getResponse(); + httpServletResponse.setCharacterEncoding("UTF-8"); + try { + httpServletResponse.getWriter().print(imageCount); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 删除上传的图片 + */ + public void deleteUploadImage() { + String page = StrutsParamUtils.getPraramValue("pageNum", "1"); + String objectId = StrutsParamUtils.getPraramValue("id", ""); + if (StringUtils.isNotBlank(objectId)) { + QualityMonitoring qualityMonitoring = qualityMonitoringManager + .getQualityMonitoringById(objectId); + if (qualityMonitoring != null) { + String sql = " where po.objectId = '" + + qualityMonitoring.getId() + "' and po.imageType = '" + + ImageFile.IMAGE_TYPE_QUALITYMONITORING + + "' order by po.serialNum asc"; + List imagesList = imageFileManager + .getImageFileBySql(sql); + if (Integer.parseInt(page) <= imagesList.size()) { + ImageFile imageFile = imagesList + .get(Integer.parseInt(page) - 1); + imageFileManager.deleteImageFile(imageFile); + } + } + } + HttpServletResponse httpServletResponse = StrutsParamUtils + .getResponse(); + httpServletResponse.setCharacterEncoding("UTF-8"); + String result = "{success:true}"; + try { + httpServletResponse.getWriter().print(result); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 加载上传图片 + */ + public void getImage() { + String page = StrutsParamUtils.getPraramValue("page", "1"); + String imageType = StrutsParamUtils.getPraramValue("imageType", ""); + String objectId = StrutsParamUtils.getPraramValue("objectId", ""); + byte[] img = null; + if (StringUtils.isNotBlank(objectId)) { + if (ImageFile.IMAGE_TYPE_QUALITYMONITORING.equals(imageType)) { + QualityMonitoring qualityMonitoring = qualityMonitoringManager + .getQualityMonitoringById(objectId); + img = imageFileManager.getImageByIdAndType( + qualityMonitoring.getId(), + ImageFile.IMAGE_TYPE_QUALITYMONITORING, page); + } + } + img = ImageUtils.defaultIfEmpty(img); + OutputStream outputStream = null; + try { + HttpServletResponse response = StrutsParamUtils.getResponse(); + response.setContentType("image/jpeg"); + outputStream = response.getOutputStream(); + outputStream.write(img, 0, img.length); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + public void deleteQualityMonitoring() { + String idStr = StrutsParamUtils.getPraramValue("ids", ""); + String message = ""; + try { + if (StringUtils.isNotBlank(idStr)) { + String[] str = idStr.split(";"); + for (String id : str) { + qualityMonitoringManager.deleteQualityMonitoringById(id); + } + message = "{success:true}"; + } + } catch (Exception e) { + message = "{success:false}"; + e.printStackTrace(); + } + HttpServletResponse httpServletResponse = StrutsParamUtils + .getResponse(); + httpServletResponse.setCharacterEncoding("UTF-8"); + try { + httpServletResponse.getWriter().print(message); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void reviewQualityMonitoring() { + String idStr = StrutsParamUtils.getPraramValue("ids", ""); + String message = ""; + try { + if (StringUtils.isNotBlank(idStr)) { + QualityMonitoring qualityMonitoringForReview = qualityMonitoringManager + .getQualityMonitoringById(idStr); + qualityMonitoringForReview.setReviewer(AcegiHelper + .getLoginUser().getUserFullName()); + qualityMonitoringForReview.setReviewTime(new Date()); + qualityMonitoringForReview.setStatus("已审核"); + qualityMonitoringManager + .saveOrUpdate(qualityMonitoringForReview); + message = "{success:true}"; + } + } catch (Exception e) { + message = "{success:false}"; + e.printStackTrace(); + } + HttpServletResponse httpServletResponse = StrutsParamUtils + .getResponse(); + httpServletResponse.setCharacterEncoding("UTF-8"); + try { + httpServletResponse.getWriter().print(message); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void loadQualityMonitoring() { + StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + JsonConfig config = new JsonConfig(); + config.setExcludes(new String[] { "handler", + "hibernateLazyInitializer", "washAndDisinfectRecords", + "classifyBasket", "sterilizationRecords", + "successSterilizationRecord", "foreignTousseApplication", + "useRecord", "foreignProxyItem", "proxyDisinfection", + "fieldHandler", "image", "materialInstances", + "diposableGoodsItems", "images", "packingRecord", + "idCardDefinitions","departmentStock" }); + config.registerDefaultValueProcessor(Integer.class, + new DefaultValueProcessor() { + @Override + public Object getDefaultValue( + @SuppressWarnings("rawtypes") Class type) { + return JSONNull.getInstance(); + } + }); + config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); + try { + Collections.sort(qualityMonitoring.getAnswers()); + Map map = new HashMap(); + map.put("success", true); + map.put("data", qualityMonitoring); + JSONObject jsonObject = JSONObject.fromObject(map, config); + String jsonStr = jsonObject.toString(); + + StrutsParamUtils.getResponse().getWriter().println(jsonStr); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public String checkIsUniqueWithBarcodeAndInspectItem() { + String id = StrutsParamUtils.getPraramValue("id", ""); + String barcode = StrutsParamUtils.getPraramValue("barcode", ""); + String inspectItem = StrutsParamUtils.getPraramValue("inspectItem", ""); + boolean isUnique = true;// 是否唯一 + if (StringUtils.isNotBlank(barcode) + && StringUtils.isNotBlank(inspectItem)) { + isUnique = qualityMonitoringManager + .checkIsUniqueWithBarcodeAndInspectItem(id, barcode, + inspectItem); + } + JSONObject json = JSONUtil.buildJsonObject(true); + JSONUtil.addProperty(json, "isUnique", isUnique); + StrutsResponseUtils.output(json); + return null; + } + + public void iniInfo() { + + String id = StrutsParamUtils.getPraramValue("id", ""); + if (StringUtils.isNotBlank(id) && !id.equals("0")) { + qualityMonitoring = qualityMonitoringManager + .getQualityMonitoringById(id); + } else { + qualityMonitoring = new QualityMonitoring(); + } + } + + public QualityMonitoring getQualityMonitoring() { + return qualityMonitoring; + } + + public void setQualityMonitoring(QualityMonitoring qualityMonitoring) { + this.qualityMonitoring = qualityMonitoring; + } + + public QualityMonitoring getModel() { + return qualityMonitoring; + } + + public void prepare() throws Exception { + iniInfo(); + } +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java =================================================================== diff -u -r14407 -r14423 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 14407) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 14423) @@ -217,6 +217,7 @@ public final static String TYPE_TOUSSE_EXPANSION_FORM = "普通器械包扩充申请单";// 科室基数增大后器械包扩充申请单,申请后直接发货(不回收装配) public final static String TYPE_SECOND_SUPPLY_ROOM = "二级供应室申请单"; public final static String TYPE_RECYCLINGCREATE_APPLICATION = "回收申请单";//添加回收记录生成的申请单 + public final static String TYPE_QUALITY_MONITOR_RECYCLE_APPLICATION = "质量监测回收申请单";//质量监测业务创建的申请单,不用发货 @Id @GeneratedValue(strategy = GenerationType.AUTO) Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r14356 -r14423 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 14356) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 14423) @@ -117,4 +117,10 @@ TousseInstance tousseInstance); public void updateGoodsStock(String orgUnitCoding,List tousseList); + + /** + * 创建质量监测退货重装的装配任务 + * @param tousseInstanceId 器械包id + */ + public void createPackingTaskForRepacking(String tousseInstanceId); } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r14386 -r14423 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 14386) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 14423) @@ -86,6 +86,7 @@ import com.forgon.disinfectsystem.entity.recyclingdamagerecord.RecyclingDamageItem; import com.forgon.disinfectsystem.entity.recyclingerror.RecyclingError; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; +import com.forgon.disinfectsystem.entity.returngoodsrecord.ReturnGoodsItem; import com.forgon.disinfectsystem.entity.returngoodsrecord.ReturnGoodsRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.foreignproxydisinfection.ForeignProxyDisinfection; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; @@ -3976,4 +3977,85 @@ } return null; } + + /** + * 更新或生成待装配任务 + * + * @param returnGoodsRecord + * @param returnGoodsItem + * @param updateAmount + * @throws Exception + */ + @Override + public void createPackingTaskForRepacking(String tousseInstanceId) { + TousseInstance tousseInstance = tousseInstanceManager.getTousseInstanceById(tousseInstanceId); + if(tousseInstance == null){ + return; + } + String tousseName = tousseInstance.getTousseName(); + int amount = 1; + if (amount <= 0) { + throw new RuntimeException(String.format("%s 退货数量必须大于0!", + tousseName)); + } + TousseDefinition tousseDefinition = tousseDefinitionManager + .getTousseDefinitionByName(tousseInstance.getTousseName()); + if (tousseDefinition == null) { + throw new RuntimeException(String.format("未找到%s的包定义!", + tousseInstance.getTousseName())); + } + List tousseInstanceList = new ArrayList(); + tousseInstanceList.add(tousseInstance); + + boolean isThereIDCard = tousseDefinitionManager + .isThereIDCard(tousseDefinition); + + if (isThereIDCard) { + if (tousseInstanceList == null + || tousseInstanceList.size() < amount) { + throw new RuntimeException(String.format( + "%s 启用了标识牌,必须全部扫描条码才能退货!", tousseName)); + } + } + PackingTask packingTask = new PackingTask(); + packingTask.setStartTime(new Date()); + packingTask.setStatus(PackingTask.STATUS_AWAIT_PACKING); + packingTask.setAmount(amount); + packingTask.setUnPackAmount(amount); + packingTask.setUncofirmedAmount(0); + packingTask.setTousseDefinition(tousseDefinition); + /*packingTask.setOrgUnitCoding(tousseDefinition.getHandlerDepartCode());*/ + //装配任务的处理科室为当前用户所在科室 + packingTask.setOrgUnitCoding(AcegiHelper.getCurrentOrgUnitCode()); + packingTask.setSourceId(null); + packingTask.setTaskType(PackingTask.TASK_QUALITY_MONITOR); + packingTask.setDepartment(AcegiHelper.getCurrentOrgUnitName()); + saveOrUpdate(packingTask); + + // 保存相关的IDCardInfoForPackingTask + if (isThereIDCard) { + for (TousseInstance ti : tousseInstanceList) { + Long idCardInstanceID = ti.getIdCardInstanceID(); + if (!DatabaseUtil.isPoIdValid(idCardInstanceID)) { + throw new RuntimeException(String.format( + "%s 启用了标识牌,但是条码为%s的包未关联标识牌ID!", tousseName, + ti.getBarcode())); + } + IDCardInfoForPackingTask idCardInfoForPackingTask = new IDCardInfoForPackingTask(); + IDCardInstance idCardInstance = idCardInstanceManager + .getIDCardInstanceByID(idCardInstanceID.toString()); + if (idCardInstance == null) { + throw new RuntimeException(String.format( + "%s 启用了标识牌,但是条码为%s的包未找到对应的标识牌!", tousseName, + ti.getBarcode())); + } + idCardInfoForPackingTask.setIdCardInstanceID(idCardInstanceID); + idCardInfoForPackingTask.setPackingTaskID(packingTask.getId()); + idCardInfoForPackingTask + .setType(IDCardInfoForPackingTask.TYPE_RETURN_REPACKING); + idCardInfoForPackingTask.validateAssociatedInfo(); + saveOrUpdate(idCardInfoForPackingTask); + } + } + } } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/dwr/table/RecyclingApplicationTableManager.java =================================================================== diff -u -r14407 -r14423 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/dwr/table/RecyclingApplicationTableManager.java (.../RecyclingApplicationTableManager.java) (revision 14407) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/dwr/table/RecyclingApplicationTableManager.java (.../RecyclingApplicationTableManager.java) (revision 14423) @@ -154,6 +154,7 @@ // excludeTypelist.add(InvoicePlan.TYPE_FOREIGNPROXYDISINFECTION); // excludeTypelist.add(InvoicePlan.TYPE_SECOND_SUPPLY_ROOM); excludeTypelist.add(InvoicePlan.TYPE_APPLYING_FOR_RETURN_FORM); + excludeTypelist.add(InvoicePlan.TYPE_QUALITY_MONITOR_RECYCLE_APPLICATION); //是否显示外来器械包申请单 boolean showForeignTousseApplication = showForeignTousseApplication(); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/InvoicePlanAction.java =================================================================== diff -u -r13935 -r14423 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/InvoicePlanAction.java (.../InvoicePlanAction.java) (revision 13935) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/InvoicePlanAction.java (.../InvoicePlanAction.java) (revision 14423) @@ -55,6 +55,7 @@ import com.forgon.systemsetting.model.HttpOption; import com.forgon.systemsetting.service.HttpOptionManager; import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JsonPropertyFilter; @@ -364,14 +365,7 @@ Collection vos = invoicePlanManager .getDepartInvoicePlan(Arrays.asList(departCodes),applyDate ,tousseType , TimeQuantum.All); - JSONArray jsonArray = JSONArray.fromObject(vos); - try { - HttpServletResponse response = StrutsParamUtils.getResponse(); - response.setCharacterEncoding("UTF-8"); - response.getWriter().println(jsonArray.toString()); - } catch (IOException e) { - e.printStackTrace(); - } + StrutsResponseUtils.output(JSONArray.fromObject(vos)); } /** Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java =================================================================== diff -u -r14327 -r14423 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 14327) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 14423) @@ -296,17 +296,7 @@ public void saveRecyclingApplication() { JSONObject jsonObject = createReturnApplicationOrRecyclingApplication(); - if(jsonObject != null){ - try { - HttpServletResponse response = StrutsParamUtils.getResponse(); - response.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.print(jsonObject); - out.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } + StrutsResponseUtils.output(jsonObject); } /** Fisheye: Tag 14423 refers to a dead (removed) revision in file `ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoringmanager/qualitymonitoring/action/QualityMonitoringAction.java'. Fisheye: No comparison available. Pass `N' to diff?