Index: ssts-web/src/main/webapp/disinfectsystem/config/szszyy/spring/webservice-cxf.xml =================================================================== diff -u -r31630 -r37943 --- ssts-web/src/main/webapp/disinfectsystem/config/szszyy/spring/webservice-cxf.xml (.../webservice-cxf.xml) (revision 31630) +++ ssts-web/src/main/webapp/disinfectsystem/config/szszyy/spring/webservice-cxf.xml (.../webservice-cxf.xml) (revision 37943) @@ -32,4 +32,12 @@ implementor="#HIPMessageServiceV3" /> + + + + + + \ No newline at end of file Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/foreignTousse/service/ForeignTousseSupplierWebService.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/foreignTousse/service/ForeignTousseSupplierWebService.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/foreignTousse/service/ForeignTousseSupplierWebService.java (revision 37943) @@ -0,0 +1,18 @@ +package com.forgon.disinfectsystem.webservice.foreignTousse.service; + +import javax.jws.WebService; + +/** + * 外来器械供应商申请单 + */ +@WebService +public interface ForeignTousseSupplierWebService { + + /** + * 提交外来器械供应商申请单 + * @param param + * @return + */ + public String submitForeignTousseApplication(String param); + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java =================================================================== diff -u -r37937 -r37943 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 37937) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 37943) @@ -63,6 +63,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.videomanager.VideoFile; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.StorageRecord; +import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseSupplierItem; import com.forgon.disinfectsystem.entity.foreigntousseapplication.InvoicePlanPreBindBasket; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; import com.forgon.disinfectsystem.entity.foreigntoussecharge.ForeignTousseChargeMode; @@ -377,13 +378,40 @@ AclTools.addStartAndEndToken(foreignTousseApplication); // 设置五笔码和拼音码 String depart = foreignTousseApplication.getDepart(); - + validateForeignTousseApplication(foreignTousseApplication); foreignTousseApplication.setSpelling(GB2Alpha.string2Alpha(depart)); foreignTousseApplication.setWbCode(GB2WB.getWBCode(depart)); logger.debug("saveOrUpdate方法的参数foreignTousseApplication=" + JSONUtil.toJsonObjecttWithSimpleProperty(foreignTousseApplication)); objectDao.saveOrUpdate(foreignTousseApplication); } + private void validateForeignTousseApplication(ForeignTousseApplication foreignTousseApplication) { + if(foreignTousseApplication == null){ + return; + } + if(StringUtils.isBlank(foreignTousseApplication.getDepart())){ + throw new SystemException("申请科室不能为空!"); + } + if(StringUtils.isBlank(foreignTousseApplication.getDepartCoding())){ + throw new SystemException("申请科室编码不能为空!"); + } + if(StringUtils.isBlank(foreignTousseApplication.getSettleAccountsDepart())){ + throw new SystemException("结算科室不能为空!"); + } + if(StringUtils.isBlank(foreignTousseApplication.getSettleAccountsDepartCoding())){ + throw new SystemException("结算科室编码不能为空!"); + } + if(StringUtils.isBlank(foreignTousseApplication.getHandleDepart())){ + throw new SystemException("处理科室不能为空!"); + } + if(StringUtils.isBlank(foreignTousseApplication.getHandleDepartCoding())){ + throw new SystemException("处理科室编码不能为空!"); + } + if(StringUtils.isBlank(foreignTousseApplication.getApplicant())){ + throw new SystemException("申请人不能为空!"); + } + } + @Override public void saveOrUpdate(ForeignTousseApplication origineFta, ForeignTousseApplication application, @@ -468,7 +496,16 @@ if (ForeignTousseApplication.ACTION_TYPE_CONFIRM_RETURN.equals(actionType)) { foreignTousseReturn(application); } else { //干预或者新增外来器械包申请单 - setForeignTousseDefinition(application,jsonArray, systemParams, actionType); + //判断是否是只申请外来器械供应室的申请单 + boolean isForeignTousseSupplierApplication = isForeignTousseSupplierApplication(application, jsonArray); + if(isForeignTousseSupplierApplication){ + //设置外来器械供应商 + setForeignTousseSupplier(application,jsonArray, systemParams, actionType); + }else{ + //设置外来器械包(如果是外来申请单申请的器械包,修改过名称或者供应商,会创建一个祖先包定义,再创建一个包定义,没修改过则值创建一个包定义). + setForeignTousseDefinition(application,jsonArray, systemParams, actionType); + } + //为外来器械申请单设置外来器械包、权限。若是修改,则删除旧的外来器械包【TousseItem】. saveOrUpdateForeignTousseApplication(application, jsonArray, actionType); } @@ -693,258 +730,250 @@ private void saveOrUpdateForeignTousseApplication( ForeignTousseApplication foreignTousseApplication, JSONArray jsonArray,String actionType) { - List foreignTousseItems = new ArrayList(); - SupplyRoomConfig cfg = supplyRoomConfigManager.getSystemParamsObj(); - String cleanedEntirely = ""; - Double price = 0.0; - if(cfg != null){ - price = cfg.getForeignToussePrice(); - cleanedEntirely = cfg.getForeignTousseCleanedEntirely(); - } - if(StringUtils.isBlank(cleanedEntirely)){ - cleanedEntirely = TousseDefinition.STR_YES; - } - - //如果是干预功能的话,先把之前的“器械包名称”和“供应商名称”置空,下面重新赋值 - if (ForeignTousseApplication.ACTION_TYPE_INTERFERE.equals(actionType) - || ForeignTousseApplication.ACTION_TYPE_UPDATE.equals(actionType)) { - foreignTousseApplication.setTousseName(null); - foreignTousseApplication.setSupplierName(null); - } - int foreignTousseSplitPriceType = ConfigUtils.getSystemSetConfigByNameInt("foreignTousseSplitPriceType", TousseDefinition.FOREIGNTOUSSE_SPLIT_PRICE_TYPE_TD); - Set tousseItemIdType0 = new HashSet();//配置0时tousseItemSet,用来更新发货单总价 - Set invoiceIdType1 = new HashSet();//配置1时invoiceIdSet,用来更新发货单总价 - Set names = new HashSet();//计算最高加急级别 - UrgentLevel onlyUrgentLevel = null;//唯一加急等级 - int urgentTotalAmount = 0;//加急总数 - // 原来单上的物品,用于比较是否需要删除物品 - List originalItems = foreignTousseApplication.getApplicationItems(); - Set tousseItemIdSet = new HashSet(); - for(int i = 0;i < jsonArray.size();i++){ - JSONObject obj = jsonArray.optJSONObject(i); - if(obj != null){ - String tousseItemId = obj.optString("tousseItemId"); - Long tousseDefinitionId = obj.optLong("tousseDefinitionId"); - TousseDefinition td = tousseDefinitionManager.get(tousseDefinitionId); - TousseItem tousseItem = null; - if(DatabaseUtil.isPoIdValid(tousseItemId)){ - tousseItemIdSet.add(Long.parseLong(tousseItemId)); - tousseItem = tousseItemManager.get(tousseItemId); - if(tousseItem.getRecyclingAmount() != null && tousseItem.getRecyclingAmount() > 0 && ForeignTousseApplication.ACTION_TYPE_UPDATE.equals(actionType)){ - // 已经回收的外来器械包不允许改材料GDSZYY-106(干预支持) + //只有供应商的申请单 + boolean isForeignTousseSupplierApplication = isForeignTousseSupplierApplication(foreignTousseApplication, jsonArray); + if(!isForeignTousseSupplierApplication){ + List foreignTousseItems = new ArrayList(); + SupplyRoomConfig cfg = supplyRoomConfigManager.getSystemParamsObj(); + String cleanedEntirely = ""; + Double price = 0.0; + if(cfg != null){ + price = cfg.getForeignToussePrice(); + cleanedEntirely = cfg.getForeignTousseCleanedEntirely(); + } + if(StringUtils.isBlank(cleanedEntirely)){ + cleanedEntirely = TousseDefinition.STR_YES; + } + + //如果是干预功能的话,先把之前的“器械包名称”和“供应商名称”置空,下面重新赋值 + if (ForeignTousseApplication.ACTION_TYPE_INTERFERE.equals(actionType) + || ForeignTousseApplication.ACTION_TYPE_UPDATE.equals(actionType)) { + foreignTousseApplication.setTousseName(null); + foreignTousseApplication.setSupplierName(null); + } + int foreignTousseSplitPriceType = ConfigUtils.getSystemSetConfigByNameInt("foreignTousseSplitPriceType", TousseDefinition.FOREIGNTOUSSE_SPLIT_PRICE_TYPE_TD); + Set tousseItemIdType0 = new HashSet();//配置0时tousseItemSet,用来更新发货单总价 + Set invoiceIdType1 = new HashSet();//配置1时invoiceIdSet,用来更新发货单总价 + Set names = new HashSet();//计算最高加急级别 + UrgentLevel onlyUrgentLevel = null;//唯一加急等级 + int urgentTotalAmount = 0;//加急总数 + // 原来单上的物品,用于比较是否需要删除物品 + List originalItems = foreignTousseApplication.getApplicationItems(); + Set tousseItemIdSet = new HashSet(); + for(int i = 0;i < jsonArray.size();i++){ + JSONObject obj = jsonArray.optJSONObject(i); + if(obj != null){ + String tousseItemId = obj.optString("tousseItemId"); + Long tousseDefinitionId = obj.optLong("tousseDefinitionId"); + TousseDefinition td = tousseDefinitionManager.get(tousseDefinitionId); + TousseItem tousseItem = null; + if(DatabaseUtil.isPoIdValid(tousseItemId)){ tousseItemIdSet.add(Long.parseLong(tousseItemId)); - foreignTousseItems.add(tousseItem); - // 外来器械包申请单设置外来器械包名称、供应商名称 - setTousseNameAndSupplierName(foreignTousseApplication, tousseItem); - continue; - } - if(ForeignTousseApplication.ACTION_TYPE_INTERFERE.equals(actionType)){ - Double objPrice = obj.optDouble("price"); - if(objPrice != null && tousseItem.getPrice() != null && objPrice.doubleValue() != tousseItem.getPrice().doubleValue()){ - price = objPrice; - if(foreignTousseSplitPriceType == TousseDefinition.FOREIGNTOUSSE_SPLIT_PRICE_TYPE_AVG){//拆分算,拆分单价为n个包份 - String findHql = "where po.invoicePlanID = ( select invoicePlan.id from " - +TousseItem.class.getSimpleName() - +" where id="+ tousseItem.getId() - +") and (po.tousseDefinition.id=" - + tousseDefinitionId - + " or po.tousseDefinition.parentID="+ tousseDefinitionId +")"; - //申请项对应的包实例 - List tis = objectDao.findBySql(TousseInstance.class.getSimpleName(),findHql); - if(CollectionUtils.isNotEmpty(tis)){ - double[] prices = ForgonNumberUtils.splitPrice(price, tis.size());//价格可能会不一致 - int index = 0; - for (TousseInstance ti : tis) { - Double itemPrice = prices[1]; - if(index == 0){ - itemPrice = prices[0]; + tousseItem = tousseItemManager.get(tousseItemId); + if(tousseItem.getRecyclingAmount() != null && tousseItem.getRecyclingAmount() > 0 && ForeignTousseApplication.ACTION_TYPE_UPDATE.equals(actionType)){ + // 已经回收的外来器械包不允许改材料GDSZYY-106(干预支持) + tousseItemIdSet.add(Long.parseLong(tousseItemId)); + foreignTousseItems.add(tousseItem); + // 外来器械包申请单设置外来器械包名称、供应商名称 + setTousseNameAndSupplierName(foreignTousseApplication, tousseItem); + continue; + } + if(ForeignTousseApplication.ACTION_TYPE_INTERFERE.equals(actionType)){ + Double objPrice = obj.optDouble("price"); + if(objPrice != null && tousseItem.getPrice() != null && objPrice.doubleValue() != tousseItem.getPrice().doubleValue()){ + price = objPrice; + if(foreignTousseSplitPriceType == TousseDefinition.FOREIGNTOUSSE_SPLIT_PRICE_TYPE_AVG){//拆分算,拆分单价为n个包份 + String findHql = "where po.invoicePlanID = ( select invoicePlan.id from " + +TousseItem.class.getSimpleName() + +" where id="+ tousseItem.getId() + +") and (po.tousseDefinition.id=" + + tousseDefinitionId + + " or po.tousseDefinition.parentID="+ tousseDefinitionId +")"; + //申请项对应的包实例 + List tis = objectDao.findBySql(TousseInstance.class.getSimpleName(),findHql); + if(CollectionUtils.isNotEmpty(tis)){ + double[] prices = ForgonNumberUtils.splitPrice(price, tis.size());//价格可能会不一致 + int index = 0; + for (TousseInstance ti : tis) { + Double itemPrice = prices[1]; + if(index == 0){ + itemPrice = prices[0]; + } + index++; + ti.setPrice(itemPrice); + ti.setFluctuationPrice(itemPrice); + ti.setDiscountPrice(itemPrice); + invoiceIdType1.add(ti.getInvoice_id()); + //包实例对应的发货项价格要一致 + objectDao.excuteSQL("update "+ InvoiceItem.class.getSimpleName() + +" set settlementPrice="+ itemPrice + +",settlementDiscountPrice=" + + itemPrice + +" where invoice_id =(select ti.invoice_id from TousseInstance ti where id=" + + ti.getId() + +") and tousseDefinitionId=(select ti.tousseDefinition_id from TousseInstance ti where id=" + + ti.getId() + +")"); } - index++; - ti.setPrice(itemPrice); - ti.setFluctuationPrice(itemPrice); - ti.setDiscountPrice(itemPrice); - invoiceIdType1.add(ti.getInvoice_id()); - //包实例对应的发货项价格要一致 - objectDao.excuteSQL("update "+ InvoiceItem.class.getSimpleName() - +" set settlementPrice="+ itemPrice - +",settlementDiscountPrice=" - + itemPrice - +" where invoice_id =(select ti.invoice_id from TousseInstance ti where id=" - + ti.getId() - +") and tousseDefinitionId=(select ti.tousseDefinition_id from TousseInstance ti where id=" - + ti.getId() - +")"); } + }else if(foreignTousseSplitPriceType == TousseDefinition.FOREIGNTOUSSE_SPLIT_PRICE_TYPE_TD){//不按拆分算,每个包的单价都等于未拆分的价格 + //修改发货项价格 + String sql1 = new StringBuffer(500) + .append("update ") + .append(InvoiceItem.class.getSimpleName()) + .append(" set settlementPrice=") + .append(price) + .append(",settlementDiscountPrice=") + .append(price) + .append(" where id in (") + .append("select ii.id from ") + .append(Invoice.class.getSimpleName()) + .append(" i inner join ") + .append(InvoiceItem.class.getSimpleName()) + .append(" ii on ii.invoice_id=i.id inner join ") + .append(TousseItem.class.getSimpleName()) + .append(" ti on ti.recyclingApplication_ID=i.invoicePlan_ID inner join ") + .append(TousseDefinition.class.getSimpleName()) + .append(" td on td.id=ii.tousseDefinitionId ") + .append(" where ti.id=") + .append(tousseItem.getId()) + .append(" and (ti.tousseDefinitionId=ii.tousseDefinitionId or ti.tousseDefinitionId=td.parentID))").toString(); + objectDao.excuteSQL(sql1); + String sql2 = new StringBuffer(500) + .append("update ") + .append(TousseInstance.class.getSimpleName()) + .append(" set price=") + .append(price) + .append(",fluctuationPrice=") + .append(price) + .append(",discountPrice=") + .append(price) + .append(" where id in (") + .append("select ti.id from ") + .append(TousseInstance.class.getSimpleName()) + .append(" ti inner join ") + .append(TousseItem.class.getSimpleName()) + .append(" tim on ti.invoicePlanID=tim.recyclingApplication_ID ") + .append(" inner join ") + .append(TousseDefinition.class.getSimpleName()) + .append(" td on td.id=ti.tousseDefinition_id ") + .append(" where tim.id=") + .append(tousseItem.getId()) + .append(" and (ti.tousseDefinition_id=tim.tousseDefinitionId or td.parentID=tim.tousseDefinitionId))").toString(); + //修改包实例价格 + objectDao.excuteSQL(sql2); + tousseItemIdType0.add(tousseItem.getId()); } - }else if(foreignTousseSplitPriceType == TousseDefinition.FOREIGNTOUSSE_SPLIT_PRICE_TYPE_TD){//不按拆分算,每个包的单价都等于未拆分的价格 - //修改发货项价格 - String sql1 = new StringBuffer(500) - .append("update ") - .append(InvoiceItem.class.getSimpleName()) - .append(" set settlementPrice=") - .append(price) - .append(",settlementDiscountPrice=") - .append(price) - .append(" where id in (") - .append("select ii.id from ") - .append(Invoice.class.getSimpleName()) - .append(" i inner join ") - .append(InvoiceItem.class.getSimpleName()) - .append(" ii on ii.invoice_id=i.id inner join ") - .append(TousseItem.class.getSimpleName()) - .append(" ti on ti.recyclingApplication_ID=i.invoicePlan_ID inner join ") - .append(TousseDefinition.class.getSimpleName()) - .append(" td on td.id=ii.tousseDefinitionId ") - .append(" where ti.id=") - .append(tousseItem.getId()) - .append(" and (ti.tousseDefinitionId=ii.tousseDefinitionId or ti.tousseDefinitionId=td.parentID))").toString(); - objectDao.excuteSQL(sql1); - String sql2 = new StringBuffer(500) - .append("update ") - .append(TousseInstance.class.getSimpleName()) - .append(" set price=") - .append(price) - .append(",fluctuationPrice=") - .append(price) - .append(",discountPrice=") - .append(price) - .append(" where id in (") - .append("select ti.id from ") - .append(TousseInstance.class.getSimpleName()) - .append(" ti inner join ") - .append(TousseItem.class.getSimpleName()) - .append(" tim on ti.invoicePlanID=tim.recyclingApplication_ID ") - .append(" inner join ") - .append(TousseDefinition.class.getSimpleName()) - .append(" td on td.id=ti.tousseDefinition_id ") - .append(" where tim.id=") - .append(tousseItem.getId()) - .append(" and (ti.tousseDefinition_id=tim.tousseDefinitionId or td.parentID=tim.tousseDefinitionId))").toString(); - //修改包实例价格 - objectDao.excuteSQL(sql2); - tousseItemIdType0.add(tousseItem.getId()); } } + }else{ + tousseItem = new TousseItem(); + //外来器械包初始回收状态为“待接收”; + tousseItem.setPackageStatus(ForeignTousseApplication.RECYCLINGSTATUS_AWAITRECEIVE); } - }else{ - tousseItem = new TousseItem(); - //外来器械包初始回收状态为“待接收”; - tousseItem.setPackageStatus(ForeignTousseApplication.RECYCLINGSTATUS_AWAITRECEIVE); - } - if(obj.optInt("amount") <= 0){ - throw new RuntimeException("外来器械数量错误!"); - } - tousseItem.setTousseName(obj.optString("tousseName")); - tousseItem.setSupplierName(obj.optString("supplierName")); - Integer amount = obj.optInt("amount"); - tousseItem.setAmount(amount); - tousseItem.setPrice(price); - tousseItem.setRowPrice(price * tousseItem.getAmount()); - tousseItem.setDiposable(TousseItem.DIPOSABLE_NO); - tousseItem.setTousseType(TousseDefinition.PACKAGE_TYPE_FOREIGN); - tousseItem.setInvoicePlan(foreignTousseApplication); - tousseItem.setTousseDefinitionId(tousseDefinitionId); - tousseItem.setMaterialAmount(td!=null?td.getMaterialAmount():null); - tousseItem.setAncestorID(td!=null?td.getAncestorID():null); - tousseItem.setInvoicePlanID(foreignTousseApplication.getId()); - tousseItem.setIsCleanedEntirely(cleanedEntirely); - tousseItem.setIsRecycling("是"); - Long urgentLevelId = obj.optLong("urgentLevelId"); - if(DatabaseUtil.isPoIdValid(urgentLevelId)){ - tousseItem.setUrgent(Constants.STR_YES); - String urgentLevelName = obj.optString("urgentLevel"); - tousseItem.setUrgentLevel(urgentLevelName); - tousseItem.setUrgentAmount(amount); - UrgentLevel urgentLevelObj = new UrgentLevel(); - urgentLevelObj.setId(urgentLevelId); - urgentLevelObj.setName(urgentLevelName); - if(names.size() == 0){//判断是否只有一个加急等级,如果只有一个,就不用去数据库查询 - onlyUrgentLevel = urgentLevelObj; - }else if(!names.contains(urgentLevelName)){ - onlyUrgentLevel = null; + if(obj.optInt("amount") <= 0){ + throw new RuntimeException("外来器械数量错误!"); } - urgentTotalAmount += amount; - names.add(urgentLevelName); - tousseItem.setUrgentLevelObj(urgentLevelObj); + tousseItem.setTousseName(obj.optString("tousseName")); + tousseItem.setSupplierName(obj.optString("supplierName")); + Integer amount = obj.optInt("amount"); + tousseItem.setAmount(amount); + tousseItem.setPrice(price); + tousseItem.setRowPrice(price * tousseItem.getAmount()); + tousseItem.setDiposable(TousseItem.DIPOSABLE_NO); + tousseItem.setTousseType(TousseDefinition.PACKAGE_TYPE_FOREIGN); + tousseItem.setInvoicePlan(foreignTousseApplication); + tousseItem.setTousseDefinitionId(tousseDefinitionId); + tousseItem.setMaterialAmount(td!=null?td.getMaterialAmount():null); + tousseItem.setAncestorID(td!=null?td.getAncestorID():null); + tousseItem.setInvoicePlanID(foreignTousseApplication.getId()); + tousseItem.setIsCleanedEntirely(cleanedEntirely); + tousseItem.setIsRecycling("是"); + Long urgentLevelId = obj.optLong("urgentLevelId"); + if(DatabaseUtil.isPoIdValid(urgentLevelId)){ + tousseItem.setUrgent(Constants.STR_YES); + String urgentLevelName = obj.optString("urgentLevel"); + tousseItem.setUrgentLevel(urgentLevelName); + tousseItem.setUrgentAmount(amount); + UrgentLevel urgentLevelObj = new UrgentLevel(); + urgentLevelObj.setId(urgentLevelId); + urgentLevelObj.setName(urgentLevelName); + if(names.size() == 0){//判断是否只有一个加急等级,如果只有一个,就不用去数据库查询 + onlyUrgentLevel = urgentLevelObj; + }else if(!names.contains(urgentLevelName)){ + onlyUrgentLevel = null; + } + urgentTotalAmount += amount; + names.add(urgentLevelName); + tousseItem.setUrgentLevelObj(urgentLevelObj); + } + foreignTousseItems.add(tousseItem); + // 外来器械包申请单设置外来器械包名称、供应商名称 + setTousseNameAndSupplierName(foreignTousseApplication, tousseItem); } - foreignTousseItems.add(tousseItem); - // 外来器械包申请单设置外来器械包名称、供应商名称 - setTousseNameAndSupplierName(foreignTousseApplication, tousseItem); } - } - UrgentLevel maxUrgentLevel = null;//最大加急等级 - //如果只有一个加急就不用查询最大加急等级 - if(onlyUrgentLevel != null){ - maxUrgentLevel = onlyUrgentLevel; - }else if(CollectionUtils.isNotEmpty(names)){ - maxUrgentLevel = urgentLevelManager.getByNameSet(names); - } - if(maxUrgentLevel != null){ - foreignTousseApplication.setUrgent(Constants.STR_YES); - foreignTousseApplication.setUrgentAmount(urgentTotalAmount); - foreignTousseApplication.setUrgentLevel(maxUrgentLevel); - } - //修改发货单总价 - if(CollectionUtils.isNotEmpty(invoiceIdType1)){ - objectDao.excuteSQL("update " - +Invoice.class.getSimpleName() - +" set totalPrice=(select sum(settlementPrice) from " - + InvoiceItem.class.getSimpleName() - +" where Invoice.id=invoice_id) where " - + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", invoiceIdType1)); - }else if(CollectionUtils.isNotEmpty(tousseItemIdType0)){ - String totalSql = "update " - +Invoice.class.getSimpleName() - +" set totalPrice=(select sum(settlementPrice) from " - + InvoiceItem.class.getSimpleName() - +" where Invoice.id=invoice_id) where id in(" - + " select distinct tic.invoice_id from " - + TousseItem.class.getSimpleName() - +" ti inner join invoicePlan ip on ip.id=ti.recyclingApplication_ID " - + " inner join " - + TousseInstance.class.getSimpleName() - + " tic on tic.invoicePlanID=ip.id " - + " inner join " - + TousseDefinition.class.getSimpleName() - +" td on td.id=tic.tousseDefinition_id where " - +SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ti.id", tousseItemIdType0) - +" and (ti.tousseDefinitionId=tic.tousseDefinition_id or ti.tousseDefinitionId=td.parentID));"; - objectDao.excuteSQL(totalSql); - } - //为外来器械申请单设置科室查看权限 - setReaders(foreignTousseApplication); - //提交时增加备注 - if(ForeignTousseApplication.ACTION_TYPE_ADD.equals(actionType)){ - String remark = foreignTousseApplication.getRemark(); - if(StringUtils.isBlank(remark)){ - remark = ""; + UrgentLevel maxUrgentLevel = null;//最大加急等级 + //如果只有一个加急就不用查询最大加急等级 + if(onlyUrgentLevel != null){ + maxUrgentLevel = onlyUrgentLevel; + }else if(CollectionUtils.isNotEmpty(names)){ + maxUrgentLevel = urgentLevelManager.getByNameSet(names); } - if(StringUtils.isNotBlank(foreignTousseApplication.getPatient())){ - remark += (",病人:"+foreignTousseApplication.getPatient()); + if(maxUrgentLevel != null){ + foreignTousseApplication.setUrgent(Constants.STR_YES); + foreignTousseApplication.setUrgentAmount(urgentTotalAmount); + foreignTousseApplication.setUrgentLevel(maxUrgentLevel); } - if(StringUtils.isNotBlank(foreignTousseApplication.getHospitalNumber())){ - remark += (",住院号:"+foreignTousseApplication.getHospitalNumber()); + //修改发货单总价 + if(CollectionUtils.isNotEmpty(invoiceIdType1)){ + objectDao.excuteSQL("update " + +Invoice.class.getSimpleName() + +" set totalPrice=(select sum(settlementPrice) from " + + InvoiceItem.class.getSimpleName() + +" where Invoice.id=invoice_id) where " + + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", invoiceIdType1)); + }else if(CollectionUtils.isNotEmpty(tousseItemIdType0)){ + String totalSql = "update " + +Invoice.class.getSimpleName() + +" set totalPrice=(select sum(settlementPrice) from " + + InvoiceItem.class.getSimpleName() + +" where Invoice.id=invoice_id) where id in(" + + " select distinct tic.invoice_id from " + + TousseItem.class.getSimpleName() + +" ti inner join invoicePlan ip on ip.id=ti.recyclingApplication_ID " + + " inner join " + + TousseInstance.class.getSimpleName() + + " tic on tic.invoicePlanID=ip.id " + + " inner join " + + TousseDefinition.class.getSimpleName() + +" td on td.id=tic.tousseDefinition_id where " + +SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ti.id", tousseItemIdType0) + +" and (ti.tousseDefinitionId=tic.tousseDefinition_id or ti.tousseDefinitionId=td.parentID));"; + objectDao.excuteSQL(totalSql); } - foreignTousseApplication.setRemark(remark); - } - // 支持删除外来器械包申请单上的物品(GDSZYY-82 修改外来器械申请单时支持删除单上的外来器械包) - List deleteItems = new ArrayList(); - if(CollectionUtils.isNotEmpty(originalItems)){ - for (TousseItem item : originalItems) { - if(!tousseItemIdSet.contains(item.getId())){ - /*//已终止的物品不能删除! - if(item.terminated() && ForeignTousseApplication.ACTION_TYPE_UPDATE.equals(actionType)){ - throw new RuntimeException("物品已经终止,不能删除!"); - }*/ - deleteItems.add(item); + // 支持删除外来器械包申请单上的物品(GDSZYY-82 修改外来器械申请单时支持删除单上的外来器械包) + List deleteItems = new ArrayList(); + if(CollectionUtils.isNotEmpty(originalItems)){ + for (TousseItem item : originalItems) { + if(!tousseItemIdSet.contains(item.getId())){ + /*//已终止的物品不能删除! + if(item.terminated() && ForeignTousseApplication.ACTION_TYPE_UPDATE.equals(actionType)){ + throw new RuntimeException("物品已经终止,不能删除!"); + }*/ + deleteItems.add(item); + } } + foreignTousseApplication.getApplicationItems().removeAll(deleteItems); + objectDao.deleteAll(deleteItems); } - foreignTousseApplication.getApplicationItems().removeAll(deleteItems); - objectDao.deleteAll(deleteItems); + foreignTousseApplication.setApplicationItems(foreignTousseItems); + // 重新统计包状态、回收状态、发货状态、加急状态 + invoicePlanManager.computeAndSetStatus(foreignTousseApplication); } - foreignTousseApplication.setApplicationItems(foreignTousseItems); - // 重新统计包状态、回收状态、发货状态、加急状态 - invoicePlanManager.computeAndSetStatus(foreignTousseApplication); + //为外来器械申请单设置科室查看权限 + setReaders(foreignTousseApplication); + //提交时增加备注 + setForeignTousseApplicationRemark(foreignTousseApplication, actionType); } /** @@ -3788,5 +3817,150 @@ } return preBindCleanBasketBarcodes; } + + /** + * 申请时只提交外来器械包供应商 + * @param application + * @param jsonArray + * @param systemParams + * @param actionType + */ + @SuppressWarnings("unchecked") + private void setForeignTousseSupplier(ForeignTousseApplication application, JSONArray jsonArray, SupplyRoomConfig systemParams, + String actionType) { + + List ids = new ArrayList(); + for(int i = 0;i < jsonArray.size();i++){ + JSONObject obj = jsonArray.optJSONObject(i); + Long amount = obj.optLong("amount"); + Long supplierId = obj.optLong("supplierId"); + if(!DatabaseUtil.isPoIdValid(supplierId)){ + throw new SystemException("供应商ID无效"); + } + if(!DatabaseUtil.isPoIdValid(amount)){ + throw new SystemException("申请数量无效"); + } + ids.add(supplierId); + } + List supplierList = objectDao.findByIds(Supplier.class.getSimpleName(), ids); + if(CollectionUtils.isEmpty(supplierList)){ + throw new SystemException("供应商无效"); + } + + if(CollectionUtils.isNotEmpty(application.getApplicationItems())){ + throw new SystemException("申请单已经添加了外来器械包,不允许修改供应商"); + } + + String deleteSql = String.format("delete from %s where InvoicePlanId = %s ", ForeignTousseSupplierItem.class.getSimpleName(), application.getId()); + objectDao.excuteSQL(deleteSql); + + Map supplierMap = new HashMap(); + for (Supplier supplier : supplierList) { + supplierMap.put(supplier.getId(), supplier); + } + String supplierName = application.getTousseName(); + for(int i = 0;i < jsonArray.size();i++){ + JSONObject obj = jsonArray.optJSONObject(i); + Long amount = obj.optLong("amount"); + Long supplierId = obj.optLong("supplierId"); + if(!DatabaseUtil.isPoIdValid(supplierId)){ + throw new SystemException("供应商ID无效"); + } + if(!DatabaseUtil.isPoIdValid(amount)){ + throw new SystemException("申请数量无效"); + } + Supplier supplier = supplierMap.get(supplierId); + if(supplier == null){ + throw new SystemException("供应商不存在"); + } + ForeignTousseSupplierItem item = new ForeignTousseSupplierItem(); + item.setInvoicePlanId(application.getId()); + item.setAmount(amount); + item.setSupplierId(supplierId); + objectDao.save(item); + + supplierName = StringTools.isNotBlank(supplierName) ? + String.format("%s;%s", supplierName, supplier.getCompanyName()) : + supplier.getCompanyName(); + } + //外来器械包申请单设置外来器械包名称、供应商名称 + application.setSupplierName(supplierName); + } + /** + * 判断是否只有供应商的外来器械包申请单 + * @param application + * @param jsonArray + * @return + */ + private boolean isForeignTousseSupplierApplication(ForeignTousseApplication application, JSONArray jsonArray) { + boolean enableThirdPartySystemApplyUnnamedForeignTousse = ConfigUtils.getSystemSetConfigByNameBool("enableThirdPartySystemApplyUnnamedForeignTousse"); + if(!enableThirdPartySystemApplyUnnamedForeignTousse){ + return false; + } + List applicationItems = application.getApplicationItems(); + if(CollectionUtils.isNotEmpty(applicationItems)){ + return false; + } + List supplierIdList = new ArrayList(); + List tousseNameList = new ArrayList(); + for(int i = 0;i < jsonArray.size();i++){ + JSONObject obj = jsonArray.optJSONObject(i); + String tousseName = obj.optString("tousseName"); + Long supplierId = obj.optLong("supplierId"); + if(DatabaseUtil.isPoIdValid(supplierId)){ + supplierIdList.add(supplierId); + } + if(StringUtils.isNotBlank(tousseName)){ + tousseNameList.add(tousseName); + } + } + //申请项只有供应商 + if(CollectionUtils.isEmpty(tousseNameList) && CollectionUtils.isNotEmpty(supplierIdList)){ + return true; + } + + return false; + } + + /** + * 提交时增加备注 + * @param foreignTousseApplication + * @param actionType + */ + private void setForeignTousseApplicationRemark(ForeignTousseApplication foreignTousseApplication, String actionType) { + if(ForeignTousseApplication.ACTION_TYPE_ADD.equals(actionType)){ + String remark = foreignTousseApplication.getRemark(); + if(StringUtils.isBlank(remark)){ + remark = ""; + } + if(StringUtils.isNotBlank(foreignTousseApplication.getPatient())){ + remark += (",病人:"+foreignTousseApplication.getPatient()); + } + if(StringUtils.isNotBlank(foreignTousseApplication.getHospitalNumber())){ + remark += (",住院号:"+foreignTousseApplication.getHospitalNumber()); + } + foreignTousseApplication.setRemark(remark); + } + } + + @Override + public void deleteForeignTousseApplication(String ids) { + String[] idsArr = ids.split(";"); + for (String id : idsArr) { + if (StringUtils.isNotBlank(id)) { + ForeignTousseApplication foreignTousseApplication = this.get(id); + this.delete(foreignTousseApplication); + } + } + String invoicePlanPreBindBasketSql = String.format("delete from %s where %s", + InvoicePlanPreBindBasket.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("invoicePlanId", StringTools.toCollectionIgnoreNullAndBlank(ids, ";"))); + objectDao.excuteSQL(invoicePlanPreBindBasketSql); + String foreignTousseSupplierItemSql = String.format("delete from %s where %s", + ForeignTousseSupplierItem.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("invoicePlanId", StringTools.toCollectionIgnoreNullAndBlank(ids, ";"))); + objectDao.excuteSQL(foreignTousseSupplierItemSql); + } + } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntousseapplication/ForeignTousseSupplierItem.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntousseapplication/ForeignTousseSupplierItem.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntousseapplication/ForeignTousseSupplierItem.java (revision 37943) @@ -0,0 +1,65 @@ +package com.forgon.disinfectsystem.entity.foreigntousseapplication; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +/** + * 外来器械供应商申请单申请单的供应商明细表SZSZYY-34 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Table(name = "ForeignTousseSupplierItem") +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class ForeignTousseSupplierItem { + + private Long id; + /** + * 外来器械包申请单ID + */ + private Long invoicePlanId; + /** + * 供应商ID + */ + private Long supplierId; + /** + * 申请数量 + */ + private Long amount; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + public Long getInvoicePlanId() { + return invoicePlanId; + } + public void setInvoicePlanId(Long invoicePlanId) { + this.invoicePlanId = invoicePlanId; + } + public Long getSupplierId() { + return supplierId; + } + public void setSupplierId(Long supplierId) { + this.supplierId = supplierId; + } + public Long getAmount() { + return amount; + } + public void setAmount(Long amount) { + this.amount = amount; + } + +} Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/foreignTousse/service/ForeignTousseSupplierWebServiceImpl.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/foreignTousse/service/ForeignTousseSupplierWebServiceImpl.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/foreignTousse/service/ForeignTousseSupplierWebServiceImpl.java (revision 37943) @@ -0,0 +1,333 @@ +package com.forgon.disinfectsystem.webservice.foreignTousse.service; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.jws.WebService; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import net.sf.json.xml.XMLSerializer; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Node; +import org.dom4j.XPath; +import org.springframework.beans.factory.annotation.Autowired; + +import com.forgon.Constants; +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.OrgUnit; +import com.forgon.disinfectsystem.basedatamanager.supplier.service.SupplierManager; +import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; +import com.forgon.disinfectsystem.entity.basedatamanager.supplier.Supplier; +import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.foreigntousseapplication.service.ForeignTousseApplicationManager; +import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; +import com.forgon.exception.SystemException; +import com.forgon.log.model.Log; +import com.forgon.log.service.LogManager; +import com.forgon.tools.GB2Alpha; +import com.forgon.tools.GB2WB; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.ConfigUtils; +import com.forgon.tools.util.ForgonDateUtils; +import com.forgon.tools.util.SqlUtils; + +import jxl.common.Logger; + +@WebService(endpointInterface = "com.forgon.disinfectsystem.webservice.foreignTousse.service.ForeignTousseSupplierWebService", serviceName = "foreignTousseSupplierWebService") +public class ForeignTousseSupplierWebServiceImpl implements + ForeignTousseSupplierWebService { + + private Logger logger = Logger.getLogger(this.getClass()); + @Autowired + private LogManager appLogManager; + @Autowired + private ObjectDao objectDao; + @Autowired + private SupplyRoomConfigManager supplyRoomConfigManager; + @Autowired + private DataSynchronizationManager dataSynchronizationManager; + @Autowired + private SupplierManager supplierManager; + @Autowired + private ForeignTousseApplicationManager foreignTousseApplicationManager; + @Autowired + private TousseDefinitionManager tousseDefinitionManager; + + //单号前缀 + final static String SERIALNUMBER_PREFIX = "SYNC_"; + + @Override + public String submitForeignTousseApplication(String param) { + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,参数param=" + param); + logger.debug("调用外来器械包接口的submitForeignTousseApplication方法,参数param=" + param); + JSONObject returnJSONObject = new JSONObject(); + returnJSONObject.put("result", "0"); + returnJSONObject.put("message", ""); + XMLSerializer xmlSerializer = new XMLSerializer(); + xmlSerializer.setRootName("return"); + //保留元素类型标识,默认true + xmlSerializer.setTypeHintsEnabled(false); + if(StringUtils.isBlank(param)){ + returnJSONObject.put("message","请求信息为空!"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return xmlSerializer.write(returnJSONObject); + } + + Document document; + try { + document = DocumentHelper.parseText(param); + if(document != null){ + String serialNumXpath = "/param/SERIALNUMBER"; + String hospitalNumXpath = "/param/HOSPITAL_NUMBER"; + String applicantXpath = "/param/APPLICANT"; + + String departCodeXpath = "/param/DEPART_CODE"; + String departXpath = "/param/DEPART_NAME"; + String settlementDepartCodeXpath = "/param/SETTLEMENT_DEPART_CODE"; + String settlementDepartNameXpath = "/param/SETTLEMENT_DEPART_NAME"; + String appTimeXpath = "/param/APPLICATION_TIME"; + + String serialNumber = processDataByXpath(document, serialNumXpath); + if(StringUtils.isBlank(serialNumber)){ + throw new SystemException("SERIALNUMBER节点不能为空"); + } + serialNumber = SERIALNUMBER_PREFIX + serialNumber; + String hospitalNumber = processDataByXpath(document, hospitalNumXpath); + String applicant = processDataByXpath(document, applicantXpath); + + String departCode = processDataByXpath(document, departCodeXpath); + String departName = processDataByXpath(document, departXpath); + String settlementDepartCode = processDataByXpath(document, settlementDepartCodeXpath); + String settlementDepartName = processDataByXpath(document, settlementDepartNameXpath); + + String applicationTime = processDataByXpath(document, appTimeXpath); + String itemXpath = "/param/items/item"; + XPath xpath = document.createXPath(itemXpath); + @SuppressWarnings("unchecked") + List nodeList = xpath.selectNodes(document, xpath); + + JSONArray jsonArray = new JSONArray(); + if(CollectionUtils.isNotEmpty(nodeList)){ + for (int i=1; i<=nodeList.size(); i++) { + itemXpath = "/param/items/item[" + i + "]"; + String supplierNameXPath = itemXpath + "/SUPPLIER_NAME"; + String supplierName = processDataByXpath(document, supplierNameXPath); + if(StringUtils.isBlank(supplierName)){ + throw new SystemException("供应商不能为空!"); + } + JSONObject foreignTousseInfoJsonObject = new JSONObject(); + foreignTousseInfoJsonObject.put("amount", 1); + foreignTousseInfoJsonObject.put("supplierName", supplierName); + jsonArray.add(foreignTousseInfoJsonObject); + } + }else{ + throw new SystemException("未找到item节点!"); + } + //设置供应商ID + jsonArray = setSupplierId(jsonArray); + + //供应商联系人、供应商联系电话 + String supplierContactUser = null, supplierContactPhone = null; + //查询第一个外来器械包的供应商作为外来器械申请单的联系人与联系电话 + if(jsonArray != null && jsonArray.size() > 0){ + JSONObject firstSupplierJsonObject = jsonArray.optJSONObject(0); + String supplierName = firstSupplierJsonObject.optString("supplierName"); + //根据供应商名称及厂商类型查询供应商 + if(StringUtils.isNotBlank(supplierName)){ + Supplier supplier = supplierManager.getFirst(" companyName = '"+ supplierName +"' and rentTousse = '"+ Supplier.SUPPLIER_TYPE_RENTTOUSSE +"'"); + if(supplier != null){ + supplierContactUser = supplier.getContact(); + supplierContactPhone = supplier.getCellPhone(); + } + } + } + + //住院号 + if(StringUtils.isBlank(hospitalNumber)){ + throw new SystemException("HOSPITAL_NUMBER节点不能为空"); + } + if(StringUtils.isBlank(applicant)){ + throw new SystemException("APPLICANT节点不能为空"); + } + if(StringUtils.isBlank(departName)){ + throw new SystemException("DEPART_NAME节点不能为空"); + } + if(StringUtils.isBlank(departCode)){ + throw new SystemException("DEPART_CODE节点不能为空"); + } + + boolean allowApplyMultipleForeignTousse = ConfigUtils.getSystemSetConfigByNameBool("allowApplyMultipleForeignTousse"); + if(!allowApplyMultipleForeignTousse){ + if(jsonArray.size() > 1){ + throw new SystemException("外来器械申请单不允许申请多套外来器械包"); + } + } + + //申请单的外来器械供应商 + String foreignTousseInfo = jsonArray.toString(); + //保存过的申请单 + ForeignTousseApplication orginalForeignTousseApplication = foreignTousseApplicationManager.getFirst("serialNumber='"+ serialNumber +"'"); + //调用外来器械申请单业务方法 + ForeignTousseApplication foreignTousseApplication = null; + //如果根据单号能找到外来器械申请单,那就进行干预修改的操作 + if(orginalForeignTousseApplication == null){ + foreignTousseApplication = new ForeignTousseApplication(); + foreignTousseApplication.setIsInterfacePush(Constants.STR_YES); + foreignTousseApplication.setType(InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION); + foreignTousseApplication.setSerialNumber(serialNumber); + foreignTousseApplication.setApplicant(applicant); + foreignTousseApplication.setDepart(departName); + foreignTousseApplication.setDepartCoding(departCode); + foreignTousseApplication.setSettleAccountsDepart(settlementDepartName); + if(StringUtils.isBlank(foreignTousseApplication.getSettleAccountsDepart())){ + foreignTousseApplication.setSettleAccountsDepart(foreignTousseApplication.getDepart()); + } + foreignTousseApplication.setSettleAccountsDepartCoding(settlementDepartCode); + if(StringUtils.isBlank(foreignTousseApplication.getSettleAccountsDepartCoding())){ + foreignTousseApplication.setSettleAccountsDepartCoding(foreignTousseApplication.getDepartCoding()); + } + foreignTousseApplication.setApplicationTime(ForgonDateUtils.safelyParseDate(applicationTime)); + foreignTousseApplication.setHospitalNumber(hospitalNumber); + //设置患者信息 + setPatientInfo(foreignTousseApplication); + foreignTousseApplication.setPackageStatus(InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVE); + foreignTousseApplication.setOrderByFiled(InvoicePlan.DELIVER_AWAITDELIVER); + // 设置五笔码和拼音码 + foreignTousseApplication.setSpelling(GB2Alpha.string2Alpha(departName)); + foreignTousseApplication.setWbCode(GB2WB.getWBCode(departName)); + //设置外来器械申请单的供应商联系人与联系电话 + foreignTousseApplication.setSupplierContactName(supplierContactUser); + foreignTousseApplication.setSupplierPhoneNumber(supplierContactPhone); + foreignTousseApplicationManager.saveOrUpdate(null, foreignTousseApplication, foreignTousseInfo, ForeignTousseApplication.ACTION_TYPE_ADD); + }else{ + if(!StringUtils.equals(orginalForeignTousseApplication.getApplicant(), applicant)){ + orginalForeignTousseApplication.setApplicant(applicant); + } + if(!StringUtils.equals(orginalForeignTousseApplication.getDepart(), departName)){ + orginalForeignTousseApplication.setDepart(departName); + } + if(!StringUtils.equals(orginalForeignTousseApplication.getDepartCoding(), departCode)){ + orginalForeignTousseApplication.setDepartCoding(departCode); + } + if(StringUtils.isBlank(settlementDepartName)){ + orginalForeignTousseApplication.setSettleAccountsDepart(departName); + }else if(!StringUtils.equals(orginalForeignTousseApplication.getSettleAccountsDepart(), settlementDepartName)){ + orginalForeignTousseApplication.setSettleAccountsDepart(settlementDepartName); + } + if(StringUtils.isBlank(settlementDepartCode)){ + orginalForeignTousseApplication.setSettleAccountsDepartCoding(departCode); + }else if(!StringUtils.equals(orginalForeignTousseApplication.getSettleAccountsDepartCoding(), settlementDepartCode)){ + orginalForeignTousseApplication.setSettleAccountsDepartCoding(settlementDepartCode); + } + orginalForeignTousseApplication.setApplicationTime(ForgonDateUtils.safelyParseDate(applicationTime)); + if(!StringUtils.equals(orginalForeignTousseApplication.getHospitalNumber(), hospitalNumber)){ + orginalForeignTousseApplication.setHospitalNumber(hospitalNumber); + //设置患者信息 + setPatientInfo(orginalForeignTousseApplication); + } + //设置外来器械申请单的供应商联系人与联系电话 + orginalForeignTousseApplication.setSupplierContactName(supplierContactUser); + orginalForeignTousseApplication.setSupplierPhoneNumber(supplierContactPhone); + foreignTousseApplicationManager.saveOrUpdate(orginalForeignTousseApplication, orginalForeignTousseApplication, foreignTousseInfo, ForeignTousseApplication.ACTION_TYPE_UPDATE); + } + } + + returnJSONObject.put("result" , "1"); + } catch (Exception e) { + e.printStackTrace(); + String exception = e.getMessage(); + returnJSONObject.put("message", exception); + } + logger.info("调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return xmlSerializer.write(returnJSONObject); + } + + /** + * 根据住院号查询患者信息 + * @param foreignTousseApplication + */ + private void setPatientInfo(ForeignTousseApplication foreignTousseApplication) { + String hospitalNumber = foreignTousseApplication.getHospitalNumber(); + if(StringUtils.isNotBlank(hospitalNumber)){ + /*PatientInfoVO[] patientInfoVOs = dataSynchronizationManager.findPatientInfoByHospitalNum(hospitalNumber ); + if(patientInfoVOs != null && patientInfoVOs.length > 0){ + foreignTousseApplication.setPatient(patientInfoVOs[0].getPatientName()); + foreignTousseApplication.setPatientAge(patientInfoVOs[0].getPatientAge()); + foreignTousseApplication.setPatientArea(patientInfoVOs[0].getPatientArea()); + foreignTousseApplication.setPatientSex(patientInfoVOs[0].getPatientSex()); + foreignTousseApplication.setDoctor(patientInfoVOs[0].getDoctorName()); + foreignTousseApplication.setOperationRoom(patientInfoVOs[0].getOpRoomId()); + foreignTousseApplication.setAscriptionDepartment(patientInfoVOs[0].getAscriptionDepartment()); + foreignTousseApplication.setBedNumber(patientInfoVOs[0].getBedNumber()); + if(StringUtils.isNotBlank(patientInfoVOs[0].getOperationTime())){ + foreignTousseApplication.setOperationTime(ForgonDateUtils.safelyParseDate(patientInfoVOs[0].getOperationTime())); + } + foreignTousseApplication.setRoomNumber(patientInfoVOs[0].getRoomNumber()); + foreignTousseApplication.setSurgery(patientInfoVOs[0].getOperation()); + foreignTousseApplication.setOperationPart(patientInfoVOs[0].getOperationPart()); + }*/ + } + } + + /** + * 根据供应商名称查询外来器械供应商 + * @param jsonArray + * @return + */ + @SuppressWarnings("unchecked") + private JSONArray setSupplierId(JSONArray jsonArray) { + Set supplierNameSet = new HashSet(); + Map supplierMap = new HashMap(); + for(int i = 0;i < jsonArray.size();i++){ + JSONObject obj = jsonArray.optJSONObject(i); + String supplierName = obj.optString("supplierName"); + supplierNameSet.add(supplierName); + } + String sql = String.format("select po from %s po where rentTousse = '%s' and %s " + , Supplier.class.getSimpleName() + , Supplier.SUPPLIER_TYPE_RENTTOUSSE + , SqlUtils.getStringFieldInLargeCollectionsPredicate("po.companyName", supplierNameSet)); + List supplierList = objectDao.findByHql(sql); + if(CollectionUtils.isEmpty(supplierList)){ + + } + for (Supplier supplier : supplierList) { + supplierMap.put(supplier.getCompanyName(), supplier); + } + for(int i = 0;i < jsonArray.size();i++){ + JSONObject obj = jsonArray.optJSONObject(i); + String supplierName = obj.optString("supplierName"); + Supplier supplier = supplierMap.get(supplierName); + if(supplier == null){ + throw new SystemException("供应商【" + supplierName + "】不存在!"); + } + obj.put("supplierId", supplier.getId()); + } + return jsonArray; + } + + private String processDataByXpath(Document document, String xpathExp) { + if ((StringUtils.isNotBlank(xpathExp)) && (document != null)) { + XPath xpath = document.createXPath(xpathExp); + Node node = xpath.selectSingleNode(document); + if (node != null) { + return node.getStringValue(); + } + } + return null; + } + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManager.java =================================================================== diff -u -r37041 -r37943 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManager.java (.../ForeignTousseApplicationManager.java) (revision 37041) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManager.java (.../ForeignTousseApplicationManager.java) (revision 37943) @@ -185,4 +185,10 @@ */ public List loadPreBindCleanBasketBarcodes(Long id); + /** + * 删除外来器械申请单 + * @param ids + */ + public void deleteForeignTousseApplication(String ids); + } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r37941 -r37943 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 37941) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 37943) @@ -70,13 +70,15 @@ import com.forgon.disinfectsystem.entity.basedatamanager.operationRoom.OperationRoom; import com.forgon.disinfectsystem.entity.basedatamanager.supplier.ExpensiveGoodsSupplier; import com.forgon.disinfectsystem.entity.basedatamanager.supplier.RegistrationCertification; +import com.forgon.disinfectsystem.entity.basedatamanager.supplier.Supplier; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.InstrumentSetType; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.InstrumentSetType_TD; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.expensivegoodsapplication.ExpensiveGoodsApplication; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; +import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseSupplierItem; import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; @@ -4398,9 +4400,51 @@ vo.setPackageStatus(item.getPackageStatus()); itemVOs.add(vo); } + }else{ + if(re.isForeignTousseAppliaction()){ + boolean enableThirdPartySystemApplyUnnamedForeignTousse = ConfigUtils.getSystemSetConfigByNameBool("enableThirdPartySystemApplyUnnamedForeignTousse"); + if(enableThirdPartySystemApplyUnnamedForeignTousse){ + List tempItemVOs = loadForeignTousseSupplierItemVO((ForeignTousseApplication) re); + if(CollectionUtils.isNotEmpty(tempItemVOs)){ + itemVOs.addAll(tempItemVOs); + } + } + } } } + private List loadForeignTousseSupplierItemVO(ForeignTousseApplication re) { + List itemVOs = new ArrayList(); + StringBuffer sql = new StringBuffer("select s.companyName, ftsi.amount from ") + .append(Supplier.class.getSimpleName()) + .append(" s join ") + .append(ForeignTousseSupplierItem.class.getSimpleName()) + .append(" ftsi on ftsi.supplierId = s.id ") + .append(" where ftsi.invoicePlanId = ") + .append(re.getId()); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql.toString()); + while(rs.next()){ + String supplierName = rs.getString("companyName"); + Integer amount = rs.getInt("amount"); + ApplicationItemVO vo = new ApplicationItemVO(); + vo.setAmount(amount); + vo.setSupplierName(supplierName); + vo.setName(supplierName + "通用包"); + vo.setDoctor(StringTools.defaultIfBlank(re.getDoctor(), "")); + vo.setAmountDisplay(String.valueOf(vo.getAmount())); + vo.setTousseType("外来器械通用包"); + itemVOs.add(vo); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return itemVOs; + } + @Override public boolean validateInvoice(InvoicePlan invoicePlan, Invoice newInvoice) { boolean pass = true; @@ -5925,8 +5969,15 @@ CssdUtils.appendRemarkOfInvoicePlan(invoicePlan, remark); List applicationItems = invoicePlan.getApplicationItems(); - terminateTousseItems(applicationItems); - setInvoicePlanToTerminateStatus(invoicePlan, endCause);// 某些情况下,计算状态的方法有问题 + if(CollectionUtils.isNotEmpty(applicationItems)){ + terminateTousseItems(applicationItems); + setInvoicePlanToTerminateStatus(invoicePlan, endCause);// 某些情况下,计算状态的方法有问题 + }else{ + invoicePlan.setRecyclingStatus(InvoicePlan.STATUS_END); + invoicePlan.setDeliverStatus(InvoicePlan.STATUS_END); + invoicePlan.setReturnStatus(InvoicePlan.STATUS_END); + invoicePlan.setEndStatus(InvoicePlan.STATUS_END); + } objectDao.saveOrUpdate(invoicePlan); applicationLogManager.saveApplicationLog(invoicePlan, "申请单被终止,原因如下:" + endCause, ApplicationLogStatusEnum.TERMINATE); // 单上的物品被全部终止或者部分终止:将被终止的物品的总金额,写入负数到中间表(GDSZYY-57 科研项目耗材申领(一次性物品申领)功能开发) Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/action/ForeignTousseApplicationAction.java =================================================================== diff -u -r37041 -r37943 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/action/ForeignTousseApplicationAction.java (.../ForeignTousseApplicationAction.java) (revision 37041) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/action/ForeignTousseApplicationAction.java (.../ForeignTousseApplicationAction.java) (revision 37943) @@ -35,10 +35,12 @@ import com.forgon.disinfectsystem.entity.basedatamanager.foreigntoussedefinition.ForeignTousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.supplier.Supplier; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; +import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseSupplierItem; import com.forgon.disinfectsystem.entity.foreigntousseapplication.InvoicePlanPreBindBasket; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; @@ -138,17 +140,7 @@ public String deleteForeignTousseApplication() { String ids = StrutsParamUtils.getPraramValue("ids", ""); if (StringUtils.isNotBlank(ids)) { - String[] idsArr = ids.split(";"); - for (String id : idsArr) { - if (StringUtils.isNotBlank(id)) { - ForeignTousseApplication foreignTousseApplication = foreignTousseApplicationManager.get(id); - foreignTousseApplicationManager.delete(foreignTousseApplication); - } - } - String sql = String.format("delete from %s where %s", - InvoicePlanPreBindBasket.class.getSimpleName(), - SqlUtils.getNonStringFieldInLargeCollectionsPredicate("invoicePlanId", StringTools.toCollectionIgnoreNullAndBlank(ids, ";"))); - objectDao.excuteSQL(sql); + foreignTousseApplicationManager.deleteForeignTousseApplication(ids); } HttpServletResponse res = StrutsParamUtils.getResponse(); res.setCharacterEncoding("UTF-8"); @@ -176,13 +168,78 @@ if(InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE.equals(app.getRecyclingStatus())){ confirmRecycle = true; } - jsonArray = foreignTousseApplicationManager.buildTousseItemsJson(app.getApplicationItems(),confirmRecycle,jsonArray); + if(CollectionUtils.isEmpty(app.getApplicationItems())){ + jsonArray = buildSupplierItemsJson(app,confirmRecycle,jsonArray); + }else{ + jsonArray = foreignTousseApplicationManager.buildTousseItemsJson(app.getApplicationItems(),confirmRecycle,jsonArray); + } } } StrutsResponseUtils.output(jsonArray.toString()); } /** + * 返回外来器械包申请单的供应商 + * @param app + * @param confirmRecycle + * @param jsonArray + * @return + */ + private JSONArray buildSupplierItemsJson(ForeignTousseApplication app, boolean confirmRecycle, JSONArray jsonArray) { + boolean enableThirdPartySystemApplyUnnamedForeignTousse = + ConfigUtils.getSystemSetConfigByNameBool("enableThirdPartySystemApplyUnnamedForeignTousse"); + if(!enableThirdPartySystemApplyUnnamedForeignTousse){ + return jsonArray; + } + StringBuffer sql = new StringBuffer("select ftsi.id, s.id supplierId, s.companyName supplierName, ftsi.amount from ") + .append(Supplier.class.getSimpleName()) + .append(" s join ") + .append(ForeignTousseSupplierItem.class.getSimpleName()) + .append(" ftsi on ftsi.supplierId = s.id ") + .append(" where ftsi.invoicePlanId = ") + .append(app.getId()); + + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql.toString()); + while(rs.next()){ + Long id = rs.getLong("id"); + Long supplierId = rs.getLong("supplierId"); + String supplierName = rs.getString("supplierName"); + Integer amount = rs.getInt("amount"); + + JSONObject jsonobj = new JSONObject(); + //jsonobj.put("id", id); + jsonobj.put("oldTousseName", supplierName+"通用包"); + jsonobj.put("tousseName", supplierName+"通用包"); + jsonobj.put("checked", false); + jsonobj.put("supplierId", supplierId); + jsonobj.put("supplierName", supplierName); + jsonobj.put("oldSupplierName", supplierName); + jsonobj.put("amount", amount); + jsonobj.put("includeImplant", ""); + //是否外来器械供应商通用包 + jsonobj.put("foreignComTousse", true); + jsonobj.put("type", "tousse"); + jsonobj.put("uiProvider", "col"); + jsonobj.put("cls", "master-task"); + jsonobj.put("iconCls", "task-folder"); + jsonobj.put("expanded", true); + + jsonobj.put("children", new JSONArray()); + + jsonArray.add(jsonobj); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + return jsonArray; + } + + /** * 使用记录打开外来器械包修改其植入物数量的页面时加载外来器械包的使用数量等信息 * request请求参数为tousseBarcode:即外来器械包条码 * response响应数据格式同上一个方法loadForeignTousseItems一致