Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/action/ForeignTousseApplicationAction.java =================================================================== diff -u -r29785 -r31279 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/action/ForeignTousseApplicationAction.java (.../ForeignTousseApplicationAction.java) (revision 29785) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/action/ForeignTousseApplicationAction.java (.../ForeignTousseApplicationAction.java) (revision 31279) @@ -293,6 +293,17 @@ jsonobj.put("urgentLevel", urgentLevelObj.getName()); jsonobj.put("urgentLevelId", urgentLevelObj.getId()); } + // 判断物品是否为“已使用”(包括拆分的小包部分是已使用,部分是未使用,都算已使用) + boolean used = false; + if(CollectionUtils.isNotEmpty(tiList)){ + for (TousseInstance ti : tiList) { + if(StringUtils.equals(ti.getStatus(), TousseInstance.STATUS_USED)){ + used = true; + break; + } + } + } + jsonobj.put("used", used); JSONArray children = new JSONArray(); @@ -469,13 +480,16 @@ String originalPatientInfo = StrutsParamUtils.getPraramValue("originalPatientInfo", null); //修改后病人信息 String patientInfo = StrutsParamUtils.getPraramValue("patientInfo", null); + //需要修改的TousseItem的ID + String tousseItemIds = StrutsParamUtils.getPraramValue("tousseItemIds", null); if(!DatabaseUtil.isPoIdValid(id)){ JSONUtil.addMessage(result, "参数id的值非法"); }else{ try{ - foreignTousseApplicationManager.modifyPatientInfoOfForeignTousseApplication(id, originalPatientInfo , patientInfo); + foreignTousseApplicationManager.modifyPatientInfoOfForeignTousseApplication(id, originalPatientInfo , patientInfo, tousseItemIds); JSONUtil.addSuccess(result, true); }catch(RuntimeException e){ + e.printStackTrace(); JSONUtil.addMessage(result, e.getMessage()); }catch(Exception e){ JSONUtil.addMessage(result, "后台异常,请稍后再试"); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java =================================================================== diff -u -r31075 -r31279 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 31075) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 31279) @@ -14,6 +14,7 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; @@ -1310,7 +1311,7 @@ @Override public void modifyPatientInfoOfForeignTousseApplication(Long id, - String originalPatientInfo , String patientInfo) { + String originalPatientInfo , String patientInfo, String splitTousseItemIds) { ForeignTousseApplication foreignTousseApplication = getForUpdate(id); if(foreignTousseApplication == null){ throw new RuntimeException("未找到id为"+ id +"的外来器械申请单"); @@ -1350,6 +1351,39 @@ String operationRoom = patientInfoJsonObect.optString("operationRoom"); String ascriptionDepartment = patientInfoJsonObect.optString("ascriptionDepartment"); + List applicationItems = foreignTousseApplication.getApplicationItems(); + if(StringUtils.isNotBlank(splitTousseItemIds)){ + Boolean modifyPatientName = false; + Boolean modifyHospitalNumber = false; + Boolean modifyClinicNumber = false; + + if((StringUtils.isNotBlank(originalPatientName) || StringUtils.isNotBlank(patientName)) && !StringUtils.equals(originalPatientName, patientName)){ + modifyPatientName = true; + } + if((StringUtils.isNotBlank(originalHospitalNumber) || StringUtils.isNotBlank(hospitalNumber)) && !StringUtils.equals(originalHospitalNumber, hospitalNumber)){ + modifyHospitalNumber = true; + } + if((StringUtils.isNotBlank(originalClinicNumber) || StringUtils.isNotBlank(clinicNumber)) && !StringUtils.equals(originalClinicNumber, clinicNumber)){ + modifyClinicNumber = true; + } + + if(modifyPatientName && (modifyHospitalNumber || modifyClinicNumber)){ + String[] tousseItemIdArr = splitTousseItemIds.split(";"); + List ids = new ArrayList(); + for (String temp : tousseItemIdArr) { + ids.add(temp); + } + List splitApplicationItems = objectDao.findByIds(TousseItem.class.getSimpleName(), ids); + if(CollectionUtils.isNotEmpty(applicationItems) && CollectionUtils.isNotEmpty(splitApplicationItems) + && splitApplicationItems.size() != applicationItems.size()){ + modifyPatientInfoOfForeignTousseApplication(foreignTousseApplication, splitApplicationItems, applicationItems, modifyHospitalNumber, modifyClinicNumber, + originalPatientName, originalHospitalNumber, originalClinicNumber, patientName, patientAge, patientSex, hospitalNumber, clinicNumber, patientArea, + roomNumber, bedNumber, doctor, surgery, operationTime, operationRoom, ascriptionDepartment); + return; + } + } + } + if((StringUtils.isNotBlank(originalPatientName) || StringUtils.isNotBlank(patientName)) && !StringUtils.equals(originalPatientName, patientName)){ needAppendRemark.append("病人名称由").append(originalPatientName).append("修改为").append(patientName); @@ -1463,11 +1497,154 @@ appLogManager.saveLog(userData, Log.MODEL_APPLICATION, Log.TYPE_UPDATE, userData.getUserFullName() +"于"+ DateTools.getFormatDateStr(new Date() , DateTools.COMMON_DATE_HMS) +"点击了id为"+ id +"的申请单的病人信息修改提交,但未修改内容"); } }catch(Exception e){ + e.printStackTrace(); throw new RuntimeException("参数originalPatientInfo的格式错误"); } } /** + * 如果更改了(住院号和病人姓名)或(诊疗号和病人姓名),则需要将更改后器械包从原申请单中拆分出来,生成新的外来器械申请单 + * @param foreignTousseApplication + * @param splitApplicationItems + * @param applicationItems + * @param modifyHospitalNumber + * @param modifyClinicNumber + * @param originalPatientName + * @param originalHospitalNumber + * @param originalClinicNumber + * @param patientName + * @param patientAge + * @param patientSex + * @param hospitalNumber + * @param clinicNumber + * @param patientArea + * @param roomNumber + * @param bedNumber + * @param doctor + * @param surgery + * @param operationTime + * @param operationRoom + * @param ascriptionDepartment + * @throws Exception + */ + private void modifyPatientInfoOfForeignTousseApplication(ForeignTousseApplication foreignTousseApplication, List splitApplicationItems, + List applicationItems, boolean modifyHospitalNumber, boolean modifyClinicNumber, + String originalPatientName, String originalHospitalNumber, String originalClinicNumber, + String patientName, String patientAge, String patientSex, String hospitalNumber, String clinicNumber, + String patientArea, String roomNumber, String bedNumber, String doctor, String surgery, + String operationTime, String operationRoom, String ascriptionDepartment) throws Exception { + + ForeignTousseApplication splitApplication = new ForeignTousseApplication(); + List newApplicationItems = new ArrayList(); + BeanUtils.copyProperties(splitApplication, foreignTousseApplication); + for (TousseItem tousseItem : splitApplicationItems) { + TousseItem ti = new TousseItem(); + BeanUtils.copyProperties(ti, tousseItem); + ti.setId(null); + ti.setInvoicePlan(null); + ti.setInvoicePlanID(null); + newApplicationItems.add(ti); + tousseItem.setInvoicePlan(null); + tousseItem.setInvoicePlanID(null); + applicationItems.remove(tousseItem); + } + splitApplication.setApplicationItems(newApplicationItems); + splitApplication.setId(null); + splitApplication.setInvoice(null); + splitApplication.setSerialNumber(serialNumManager.getSerialNumberStr(SerialNum.TYPE_RECYCLINGAPPLICATION)); + // 生成备注:“本申请单于2021-04-21 17:20由“原申请单流水号”中的”器械包名称“更改病人住院号后生成” + String tousseNames = ""; + String supplierNames = ""; + for (TousseItem tousseItem : newApplicationItems) { + if(StringUtils.isBlank(tousseNames)){ + tousseNames = tousseItem.getTousseName(); + }else{ + tousseNames += ";" + tousseItem.getTousseName(); + } + if(StringUtils.isBlank(supplierNames)){ + supplierNames = tousseItem.getSupplierName(); + }else{ + supplierNames += ";" + tousseItem.getSupplierName(); + } + } + // 供应商名称及供应商联系人 + String sql = " where po.supplier.companyName = '" + splitApplicationItems.get(splitApplicationItems.size() - 1).getSupplierName() + "'order by sequence asc"; + List supplierContactlist = (List)objectDao.findBySql(SupplierContact.class.getSimpleName(), sql); + if(CollectionUtils.isNotEmpty(supplierContactlist)){ + splitApplication.setSupplierName(supplierContactlist.get(0).getSupplier().getCompanyName()); + splitApplication.setSupplierContactName(supplierContactlist.get(0).getContactName()); + } + String modifyText = ""; + if(modifyHospitalNumber){ + modifyText = "住院号"; + }else if(modifyClinicNumber){ + modifyText = "诊疗号"; + } + String remark = "本申请单于" + DateTools.getFormatDateStr(new Date(), DateTools.COMMON_DATE_HM) + + "由" + foreignTousseApplication.getSerialNumber() + "中的" + tousseNames + "更改病人" + modifyText + "后生成"; + splitApplication.setRemark(remark); + splitApplication.setTousseName(tousseNames); + splitApplication.setSupplierName(supplierNames); + splitApplication.setPatient(patientName); + splitApplication.setPatientAge(patientAge); + splitApplication.setPatientSex(patientSex); + splitApplication.setHospitalNumber(hospitalNumber); + splitApplication.setClinicNumber(clinicNumber); + splitApplication.setPatientArea(patientArea); + splitApplication.setRoomNumber(roomNumber); + splitApplication.setBedNumber(bedNumber); + splitApplication.setDoctor(doctor); + splitApplication.setSurgery(surgery); + splitApplication.setOperationTime(ForgonDateUtils.safelyParseDate(operationTime)); + splitApplication.setOperationRoom(operationRoom); + splitApplication.setAscriptionDepartment(ascriptionDepartment); + objectDao.save(splitApplication); + List foreignTdIdList = new ArrayList(); + for (TousseItem tousseItem : newApplicationItems) { + tousseItem.setInvoicePlan(splitApplication); + tousseItem.setInvoicePlanID(splitApplication.getId()); + foreignTdIdList.add(tousseItem.getTousseDefinitionId()); + } + objectDao.batchSaveOrUpdate(newApplicationItems); + splitApplication.setApplicationItems(newApplicationItems); + // 修改外来器械包定义的申请单ID + String updateSql = String.format("update %s set invoicePlanID = %s where (%s) or (%s)", + TousseDefinition.class.getSimpleName(), splitApplication.getId(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", foreignTdIdList), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("parentID", foreignTdIdList)); + objectDao.excuteSQL(updateSql); + // 旧单删除物品 + objectDao.deleteAll(splitApplicationItems); + // 设置器械包名称及供应商 + String tousseNames1 = ""; + String supplierNames1 = ""; + for (TousseItem tousseItem : foreignTousseApplication.getApplicationItems()) { + if(StringUtils.isBlank(tousseNames1)){ + tousseNames1 = tousseItem.getTousseName(); + }else{ + tousseNames1 += ";" + tousseItem.getTousseName(); + } + if(StringUtils.isBlank(supplierNames1)){ + supplierNames1 = tousseItem.getSupplierName(); + }else{ + supplierNames1 += ";" + tousseItem.getSupplierName(); + } + } + // 供应商名称及供应商联系人 + List tempList = foreignTousseApplication.getApplicationItems(); + sql = " where po.supplier.companyName = '" + tempList.get(tempList.size()-1).getSupplierName() + "'order by sequence asc"; + supplierContactlist = (List)objectDao.findBySql(SupplierContact.class.getSimpleName(), sql); + if(CollectionUtils.isNotEmpty(supplierContactlist)){ + foreignTousseApplication.setSupplierName(supplierContactlist.get(0).getSupplier().getCompanyName()); + foreignTousseApplication.setSupplierContactName(supplierContactlist.get(0).getContactName()); + } + foreignTousseApplication.setTousseName(tousseNames1); + foreignTousseApplication.setSupplierName(supplierNames1); + objectDao.saveOrUpdate(foreignTousseApplication); + } + + + /** * 外来器械申请单拆分检查 * 返回该外来器械包可拆分的物品项 * 示例:{success:true,message:"",rows:[{tousseName:"包1",supplierName:"供应商1"},{tousseName:"包2",supplierName:"供应商2"}]} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManager.java =================================================================== diff -u -r30833 -r31279 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManager.java (.../ForeignTousseApplicationManager.java) (revision 30833) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManager.java (.../ForeignTousseApplicationManager.java) (revision 31279) @@ -81,12 +81,15 @@ public void comfirmReturnOrEarlyReturn(List ids, String returnType, String returneeOfSupplier, String returnMan); /** - * 更改外来器械申请单的病人信息 + * 更改外来器械申请单的病人信息; + * 如果更改了(住院号和病人姓名)或(诊疗号和病人姓名),并且没用勾选全部外来器械包, + * 则需要将更改后器械包从原申请单中拆分出来,生成新的外来器械申请单;(GDSZYY-91) * @param id 外来器械申请单id * @param originalPatientInfo 修改前病人信息 * @param patientInfo 修改后病人信息 + * @param tousseItemIds 需要修改的外来器械包 */ - public void modifyPatientInfoOfForeignTousseApplication(Long id, String originalPatientInfo , String patientInfo); + public void modifyPatientInfoOfForeignTousseApplication(Long id, String originalPatientInfo , String patientInfo, String tousseItemIds); /** * 外来器械申请单拆分检查