Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java =================================================================== diff -u -r33440 -r33693 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 33440) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 33693) @@ -143,6 +143,8 @@ JSONArray invoiceItems = params.optJSONArray("invoiceItems"); //日期,格式为开始日期;结束日期。开始日期和结果的格式为yyyy-MM-dd String applyDate = JSONUtil.optString(params, "applyDate", ""); + //申请单类型 + String appFormType = JSONUtil.optString(params, "appFormType", ""); if(CollectionUtils.isEmpty(invoiceItems)){ throw new SystemException("发货物品为空"); } @@ -675,7 +677,7 @@ if(comboTousseSendByWrapperTousse){ List comboTousseInstanceList = idToComboTousseInstanceMap.values().stream().collect(Collectors.toList()); validateUniqueTousseInstanceAndSort(comboTousseInstanceList, barcodeToSendAmountMap, params, warningTousseWhetherDelivery, validUtilTodayCanInvoice, currentDateTime); - List comboTousseWrapperInvoiceList = invoiceWrapperComboTousse(idToComboTousseInstanceMap, invoicePlanId, departCoding, applyDate, invoiceGroupByConfig, + List comboTousseWrapperInvoiceList = invoiceWrapperComboTousse(idToComboTousseInstanceMap, invoicePlanId, departCoding, applyDate,appFormType, invoiceGroupByConfig, invoiceOrigin, tousseDeliverOccasion,params,currentDateTime); if(CollectionUtils.isNotEmpty(comboTousseWrapperInvoiceList)){ invoiceList.addAll(comboTousseWrapperInvoiceList); @@ -809,7 +811,7 @@ if(CollectionUtils.isNotEmpty(traceNotDisinfectTousseList)){ Map> tousseItemToTousesListMap7 = findTousseItemAndMatchTraceNormalTousseInstanceList(traceNotDisinfectTousseList, - invoicePlanId, departCoding, applyDate, invoiceGroupByConfig, + invoicePlanId, departCoding, applyDate,appFormType, invoiceGroupByConfig, invoiceOrigin, tousseDeliverOccasion); if(MapUtils.isNotEmpty(tousseItemToTousesListMap7)){ if(allTousseItemToTiListMap == null) allTousseItemToTiListMap = new HashMap>(); @@ -821,7 +823,7 @@ if(CollectionUtils.isNotEmpty(traceDisinfectTousseList)){ Map> tousseItemToTousesListMap8 = findTousseItemAndMatchTraceNotLimitDisinfectTousseInstanceList(traceDisinfectTousseList, - idToTdMapForAncestorDisinfectTd, invoicePlanId, departCoding, applyDate, invoiceGroupByConfig, + idToTdMapForAncestorDisinfectTd, invoicePlanId, departCoding, applyDate , appFormType, invoiceGroupByConfig, invoiceOrigin, tousseDeliverOccasion); if(MapUtils.isNotEmpty(tousseItemToTousesListMap8)){ if(allTousseItemToTiListMap == null) allTousseItemToTiListMap = new HashMap>(); @@ -833,7 +835,7 @@ if(CollectionUtils.isNotEmpty(unTraceLimitNotDisinfectTousseList)){ Map> tousseItemToTousesListMap9 = findTousseItemAndMatchUnTraceNormalTousseInstanceList(unTraceLimitNotDisinfectTousseList, - barcodeToSendAmountMap, invoicePlanId, departCoding, applyDate, invoiceGroupByConfig, invoiceOrigin, + barcodeToSendAmountMap, invoicePlanId, departCoding, applyDate , appFormType, invoiceGroupByConfig, invoiceOrigin, tousseDeliverOccasion, true, warningTousseWhetherDelivery, validUtilTodayCanInvoice, currentDateTime); if(MapUtils.isNotEmpty(tousseItemToTousesListMap9)){ @@ -846,7 +848,7 @@ if(CollectionUtils.isNotEmpty(unTraceLimitDisinfectTousseList)){ Map> tousseItemToTousesListMap10 = findTousseItemAndMatchUnTraceDisinfectTousseInstanceList(unTraceLimitDisinfectTousseList, - barcodeToSendAmountMap, invoicePlanId, departCoding, applyDate, invoiceGroupByConfig, invoiceOrigin, + barcodeToSendAmountMap, invoicePlanId, departCoding, applyDate , appFormType, invoiceGroupByConfig, invoiceOrigin, tousseDeliverOccasion, true, warningTousseWhetherDelivery, validUtilTodayCanInvoice, currentDateTime); if(MapUtils.isNotEmpty(tousseItemToTousesListMap10)){ @@ -859,7 +861,7 @@ if(CollectionUtils.isNotEmpty(unTraceNotLimitNotDisinfectTousseList)){ Map> tousseItemToTousesListMap11 = findTousseItemAndMatchUnTraceNormalTousseInstanceList(unTraceNotLimitNotDisinfectTousseList, - barcodeToSendAmountMap, invoicePlanId, departCoding, applyDate, invoiceGroupByConfig, invoiceOrigin, + barcodeToSendAmountMap, invoicePlanId, departCoding, applyDate , appFormType, invoiceGroupByConfig, invoiceOrigin, tousseDeliverOccasion, false, warningTousseWhetherDelivery, validUtilTodayCanInvoice, currentDateTime); if(MapUtils.isNotEmpty(tousseItemToTousesListMap11)){ @@ -872,7 +874,7 @@ if(CollectionUtils.isNotEmpty(unTraceNotLimitDisinfectTousseList)){ Map> tousseItemToTousesListMap12 = findTousseItemAndMatchUnTraceDisinfectTousseInstanceList(unTraceNotLimitDisinfectTousseList, - barcodeToSendAmountMap, invoicePlanId, departCoding, applyDate, invoiceGroupByConfig, invoiceOrigin, + barcodeToSendAmountMap, invoicePlanId, departCoding, applyDate , appFormType, invoiceGroupByConfig, invoiceOrigin, tousseDeliverOccasion, false, warningTousseWhetherDelivery, validUtilTodayCanInvoice, currentDateTime); if(MapUtils.isNotEmpty(tousseItemToTousesListMap12)){ @@ -2637,25 +2639,52 @@ /** * 7.根据要发货的物品(追溯的唯一条码的的器械包(及敷料包)+聚合包子包实例集合)查询待发货物品的申请项及匹配 * @param tousseInstanceList 追溯的唯一条码的不限制发货科室的器械包包实例集合 + * @param invoicePlanId 申请单id + * @param departCoding 科室编码 + * @param applyDate 申请日期 + * @param appFormType 申请单类型 + * @param invoiceGroupByConfig 结算科室还是申请科室 + * @param invoiceOrigin 发货依据:申请单或回收单 + * @param tousseDeliverOccasion 器械包发货时间(回收前发货、预回收后发货、回收后发货) * @return 申请项对应的发货数量的map:key为申请项,value为要发的包实例集合 */ private Map> findTousseItemAndMatchTraceNormalTousseInstanceList( List tousseInstanceList, - Long invoicePlanId,String departCoding,String applyDate,String invoiceGroupByConfig, + Long invoicePlanId,String departCoding,String applyDate,String appFormType,String invoiceGroupByConfig, String invoiceOrigin,String tousseDeliverOccasion){ if(CollectionUtils.isNotEmpty(tousseInstanceList)){ //按包定义拆分成需回收与不需要回收两种(因为二者取的申请单的条件不一样) Map> tousseItemMatchTousseInstanceList = new LinkedHashMap>(); + List invoicePlanTypeList = null; //过滤的单类型有通用申请单、器械包申请单、借物单(借物单状态不为未审核时才查出来,借物单的包都不需要回收) - List invoicePlanTypeList = - Arrays.asList(new String[]{ - InvoicePlan.TYPE_COMBO_FORM, - InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, - InvoicePlan.TYPE_BORROWINGSINGLE, - InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION, - InvoicePlan.TYPE_GOODS_RESERVATION_FORM - }); + //如果申请单类型有传值时,则只查询对应申请单类型的申请单 + if(StringUtils.isNotBlank(appFormType)){ + invoicePlanTypeList = + Arrays.asList(new String[]{ + appFormType + }); + }else{ + if(CssdUtils.getSystemSetConfigByNameBool("enableBorrowInvoicePlanSeperateSend")){ + //如果启用借物单单独发货功能,且申请单类型为空时,则不查找借物单(详见NFYY-62) + invoicePlanTypeList = + Arrays.asList(new String[]{ + InvoicePlan.TYPE_COMBO_FORM, + InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, + InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION, + InvoicePlan.TYPE_GOODS_RESERVATION_FORM + }); + }else{ + invoicePlanTypeList = + Arrays.asList(new String[]{ + InvoicePlan.TYPE_COMBO_FORM, + InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, + InvoicePlan.TYPE_BORROWINGSINGLE, + InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION, + InvoicePlan.TYPE_GOODS_RESERVATION_FORM + }); + } + } //对器械包按是否回收进行分组(先不按是否回收来分组了,统一查询),申请单查询条件也暂时不按回收状态过滤了 /*Map> isRecyclingToTousseInstanceList = @@ -2885,26 +2914,55 @@ * 8.根据要发货的物品(追溯的唯一条码的消毒物品)查询待发货物品的申请项及匹配 * @param tousseInstanceList 代理灭菌单对应代理灭菌的包实例集合 * @param idToTdMapForAncestorDisinfectTd 消毒物品祖先包定义map(key为包定义id,value为包定义) + * @param @param invoicePlanId 申请单id + * @param departCoding 科室编码 + * @param applyDate 申请日期 + * @param appFormType 申请单类型 + * @param invoiceGroupByConfig 结算科室还是申请科室 + * @param invoiceOrigin 发货依据:申请单或回收单 + * @param tousseDeliverOccasion 器械包发货时间(回收前发货、预回收后发货、回收后发货) * @return 申请项对应的发货数量的map:key为申请项,value为要发的包实例集合 */ private Map> findTousseItemAndMatchTraceNotLimitDisinfectTousseInstanceList( List tousseInstanceList, Map idToTdMapForAncestorDisinfectTd, - Long invoicePlanId,String departCoding,String applyDate,String invoiceGroupByConfig, + Long invoicePlanId,String departCoding,String applyDate,String appFormType,String invoiceGroupByConfig, String invoiceOrigin,String tousseDeliverOccasion){ if(CollectionUtils.isNotEmpty(tousseInstanceList)){ //按包定义拆分成需回收与不需要回收两种(因为二者取的申请单的条件不一样) Map> tousseItemMatchTousseInstanceListMap = new LinkedHashMap>(); - List invoicePlanTypeList = - Arrays.asList(new String[]{ - InvoicePlan.TYPE_COMBO_FORM, - InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, - InvoicePlan.TYPE_DISINFECT_GOODS_APPLICATION_FORM, - InvoicePlan.TYPE_BORROWINGSINGLE, - InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION, - InvoicePlan.TYPE_GOODS_RESERVATION_FORM - }); + List invoicePlanTypeList = null; + + //如果申请单类型有传值时,则只查询对应申请单类型的申请单 + if(StringUtils.isNotBlank(appFormType)){ + invoicePlanTypeList = + Arrays.asList(new String[]{ + appFormType + }); + }else{ + if(CssdUtils.getSystemSetConfigByNameBool("enableBorrowInvoicePlanSeperateSend")){ + //如果启用借物单单独发货功能,且申请单类型为空时,则不查找借物单(详见NFYY-62) + invoicePlanTypeList = + Arrays.asList(new String[]{ + InvoicePlan.TYPE_COMBO_FORM, + InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, + InvoicePlan.TYPE_DISINFECT_GOODS_APPLICATION_FORM, + InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION, + InvoicePlan.TYPE_GOODS_RESERVATION_FORM + }); + }else{ + invoicePlanTypeList = + Arrays.asList(new String[]{ + InvoicePlan.TYPE_COMBO_FORM, + InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, + InvoicePlan.TYPE_DISINFECT_GOODS_APPLICATION_FORM, + InvoicePlan.TYPE_BORROWINGSINGLE, + InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION, + InvoicePlan.TYPE_GOODS_RESERVATION_FORM + }); + } + } /* * 根据消毒物品包实例查出祖先包定义 * 对器械包按包定义祖先id(即第一层map的key)对应包定义材料md5(即第二层key)对应的包实例集合(即内层map的value)) @@ -3117,6 +3175,8 @@ * @param barcodeToSendAmountMap 各发货条码及对应的发货数量 * @param invoicePlanId 申请单id * @param departCoding 科室编码 + * @param applyDate 申请日期 + * @param appFormType 申请单类型 * @param invoiceGroupByConfig 科室编码配置的字段名(即申请科室编码或结算科室编码) * @param invoiceOrigin 发货数量依据 * @param afterRecyclingTousseDeliver 是否回收后发货 @@ -3128,7 +3188,7 @@ */ private Map> findTousseItemAndMatchUnTraceNormalTousseInstanceList( List unTraceTousseInstanceList,Map barcodeToSendAmountMap, - Long invoicePlanId,String departCoding,String applyDate,String invoiceGroupByConfig, + Long invoicePlanId,String departCoding,String applyDate,String appFormType,String invoiceGroupByConfig, String invoiceOrigin,String tousseDeliverOccasion,boolean limitInvoice, boolean warningTousseWhetherDelivery,boolean validUtilTodayCanInvoice,Date currentDateTime){ if(CollectionUtils.isNotEmpty(unTraceTousseInstanceList)){ @@ -3148,14 +3208,34 @@ tdIdToTousseDefinitionMap.put(td.getId(), td); }); - List invoicePlanTypeList = - Arrays.asList(new String[]{ - InvoicePlan.TYPE_COMBO_FORM, - InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, - InvoicePlan.TYPE_BORROWINGSINGLE, - InvoicePlan.TYPE_GOODS_RESERVATION_FORM, - InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION - }); + List invoicePlanTypeList = null; + //如果申请单类型有传值时,则只查询对应申请单类型的申请单 + if(StringUtils.isNotBlank(appFormType)){ + invoicePlanTypeList = + Arrays.asList(new String[]{ + appFormType + }); + }else{ + if(CssdUtils.getSystemSetConfigByNameBool("enableBorrowInvoicePlanSeperateSend")){ + //如果启用借物单单独发货功能,且申请单类型为空时,则不查找借物单(详见NFYY-62) + invoicePlanTypeList = + Arrays.asList(new String[]{ + InvoicePlan.TYPE_COMBO_FORM, + InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, + InvoicePlan.TYPE_GOODS_RESERVATION_FORM, + InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION + }); + }else{ + invoicePlanTypeList = + Arrays.asList(new String[]{ + InvoicePlan.TYPE_COMBO_FORM, + InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, + InvoicePlan.TYPE_BORROWINGSINGLE, + InvoicePlan.TYPE_GOODS_RESERVATION_FORM, + InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION + }); + } + } String invoicePlanCondition = buildInvoicePlanCondition(invoicePlanId, departCoding, invoiceGroupByConfig, invoicePlanTypeList, applyDate, invoiceOrigin, tousseDeliverOccasion, false, false); @@ -3407,6 +3487,8 @@ * @param barcodeToSendAmountMap 各发货条码及对应的发货数量 * @param invoicePlanId 申请单id * @param departCoding 科室编码 + * @param applyDate 申请日期 + * @param appFormType 申请单类型 * @param invoiceGroupByConfig 科室编码配置的字段名(即申请科室编码或结算科室编码) * @param invoiceOrigin 发货数量依据 * @param afterRecyclingTousseDeliver 是否回收后发货 @@ -3418,22 +3500,43 @@ */ private Map> findTousseItemAndMatchUnTraceDisinfectTousseInstanceList( List unTraceDisinfectTousseInstanceList,Map barcodeToSendAmountMap, - Long invoicePlanId,String departCoding,String applyDate,String invoiceGroupByConfig, + Long invoicePlanId,String departCoding,String applyDate,String appFormType,String invoiceGroupByConfig, String invoiceOrigin,String tousseDeliverOccasion,boolean limitInvoice, boolean warningTousseWhetherDelivery,boolean validUtilTodayCanInvoice,Date currentDateTime){ if(CollectionUtils.isNotEmpty(unTraceDisinfectTousseInstanceList)){ //按包定义拆分成需回收与不需要回收两种(因为二者取的申请单的条件不一样) Map> tousseItemMatchTousseInstanceList = new LinkedHashMap>(); - List invoicePlanTypeList = - Arrays.asList(new String[]{ - InvoicePlan.TYPE_COMBO_FORM, - InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, - InvoicePlan.TYPE_DISINFECT_GOODS_APPLICATION_FORM, - InvoicePlan.TYPE_BORROWINGSINGLE, - InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION, - InvoicePlan.TYPE_GOODS_RESERVATION_FORM - }); + //如果申请单类型有传值时,则只查询对应申请单类型的申请单 + List invoicePlanTypeList = null; + if(StringUtils.isNotBlank(appFormType)){ + invoicePlanTypeList = + Arrays.asList(new String[]{ + appFormType + }); + }else{ + if(CssdUtils.getSystemSetConfigByNameBool("enableBorrowInvoicePlanSeperateSend")){ + //如果启用借物单单独发货功能,且申请单类型为空时,则不查找借物单(详见NFYY-62) + invoicePlanTypeList = + Arrays.asList(new String[]{ + InvoicePlan.TYPE_COMBO_FORM, + InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, + InvoicePlan.TYPE_DISINFECT_GOODS_APPLICATION_FORM, + InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION, + InvoicePlan.TYPE_GOODS_RESERVATION_FORM + }); + }else{ + invoicePlanTypeList = + Arrays.asList(new String[]{ + InvoicePlan.TYPE_COMBO_FORM, + InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, + InvoicePlan.TYPE_DISINFECT_GOODS_APPLICATION_FORM, + InvoicePlan.TYPE_BORROWINGSINGLE, + InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION, + InvoicePlan.TYPE_GOODS_RESERVATION_FORM + }); + } + } /* * 遍历不追溯的消毒物品条码集合,生成map.key为包定义id(此包定义通常是最顶层的祖先包定义),value为器械包定义对象 @@ -8269,6 +8372,7 @@ * @param invoicePlanId 申请单id * @param departCoding 申请科室编码 * @param applyDate 日期过滤条件 + * @param appFormType 申请单类型 * @param invoiceGroupByConfig 申请的科室编码字段,即申请科室编码或结算科室编码 * @param invoiceOrigin 发货数量依据 * @param tousseDeliverOccasion 器械包发货时间 @@ -8277,7 +8381,7 @@ */ @SuppressWarnings("unchecked") private List invoiceWrapperComboTousse(Map idToComboTousseInstanceMap,Long invoicePlanId, - String departCoding, String applyDate,String invoiceGroupByConfig, + String departCoding, String applyDate, String appFormType,String invoiceGroupByConfig, String invoiceOrigin,String tousseDeliverOccasion,JSONObject params , Date currentDateTime){ if(MapUtils.isEmpty(idToComboTousseInstanceMap)){ return null; @@ -8315,7 +8419,7 @@ return summaryList; }).orElse(new ArrayList()).stream().sorted(Comparator.comparing(TousseInstance::getComboTousseInstanceId)).collect(Collectors.toList()); //将要发的各聚合包的子包实例对应到待发的申请项 - findTousseItemBySubComboTousseInstanceMapAndMapping(allSubTiList, invoicePlanId, departCoding, applyDate, invoiceGroupByConfig, + findTousseItemBySubComboTousseInstanceMapAndMapping(allSubTiList, invoicePlanId, departCoding, applyDate,appFormType, invoiceGroupByConfig, invoiceOrigin, tousseDeliverOccasion, params,tousseItemToSubTousseInstanceListMap); @@ -8710,17 +8814,19 @@ * @param allSubTiList * @param invoicePlanId * @param departCoding + * @param applyDate + * @param appFormType 申请单类型 * @param invoiceGroupByConfig * @param invoiceOrigin * @param tousseDeliverOccasion * @param params * @param tousseItemToSubTousseInstanceListMap */ private void findTousseItemBySubComboTousseInstanceMapAndMapping(List allSubTiList, - Long invoicePlanId,String departCoding, String applyDate,String invoiceGroupByConfig,String invoiceOrigin,String tousseDeliverOccasion,JSONObject params, + Long invoicePlanId,String departCoding, String applyDate,String appFormType,String invoiceGroupByConfig,String invoiceOrigin,String tousseDeliverOccasion,JSONObject params, Map> tousseItemToSubTousseInstanceListMap){ tousseItemToSubTousseInstanceListMap.putAll(findTousseItemAndMatchTraceNormalTousseInstanceList(allSubTiList,invoicePlanId, - departCoding, applyDate, invoiceGroupByConfig, invoiceOrigin, tousseDeliverOccasion)); + departCoding, applyDate,appFormType, invoiceGroupByConfig, invoiceOrigin, tousseDeliverOccasion)); } } \ No newline at end of file Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanOptimizeManagerImpl.java =================================================================== diff -u -r33662 -r33693 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanOptimizeManagerImpl.java (.../InvoicePlanOptimizeManagerImpl.java) (revision 33662) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanOptimizeManagerImpl.java (.../InvoicePlanOptimizeManagerImpl.java) (revision 33693) @@ -146,7 +146,7 @@ String invoicePlanTableAlias = "ip";//表1的字段的前缀 //根据条件参与构造查询需要条件语句 String sqlCondition = - buildWaitSendInvoicePlanSqlContion(departCodes, applyDate, + buildWaitSendInvoicePlanSqlCondition(departCodes, applyDate, tousseTypes,disposableGoodsType, sterilingMethods, tousseGroupIds, appFormType, invoicePlanTableAlias, @@ -346,7 +346,7 @@ if(InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION.equals(appFormType)){ invoicePlanForeignTousseCondition = String.format("%s and %s", invoicePlanCommonCondition, - buildWaitSendInvoicePlanSqlContionOnlyForeignTousseApplication(null, + buildWaitSendInvoicePlanSqlConditionOnlyForeignTousseApplication(null, applyDate, invoicePlanTableAlias , invoiceOrigin , tousseDeliverOccasion)); }else if(InvoicePlan.TYPE_PROXYDISINFECTION.equals(appFormType) || InvoicePlan.TYPE_FOREIGNPROXYDISINFECTION.equals(appFormType) @@ -362,13 +362,13 @@ }else{ invoicePlanCommonGoodsCondition = String.format("%s and %s", invoicePlanCommonCondition, - buildWaitSendInvoicePlanSqlContionOnlyInvoicePlan(orgUnitCoding, applyDate, + buildWaitSendInvoicePlanSqlConditionOnlyInvoicePlan(orgUnitCoding, applyDate, appFormType , excludeInvoicePlanTypeList , invoicePlanTableAlias , invoiceOrigin , tousseDeliverOccasion)); } }else{ invoicePlanForeignTousseCondition = String.format("%s and %s", invoicePlanCommonCondition, - buildWaitSendInvoicePlanSqlContionOnlyForeignTousseApplication(null, + buildWaitSendInvoicePlanSqlConditionOnlyForeignTousseApplication(null, applyDate, invoicePlanTableAlias , invoiceOrigin , tousseDeliverOccasion)); invoicePlanNeedReturnApplicationIdConditionForForeignProxyAndCustomeTousseAppliaction = String.format("%s and %s", invoicePlanCommonCondition, @@ -380,7 +380,7 @@ invoicePlanTableAlias, invoiceOrigin, tousseDeliverOccasion)); invoicePlanCommonGoodsCondition = String.format("%s and %s", invoicePlanCommonCondition, - buildWaitSendInvoicePlanSqlContionOnlyInvoicePlan(orgUnitCoding, applyDate, + buildWaitSendInvoicePlanSqlConditionOnlyInvoicePlan(orgUnitCoding, applyDate, appFormType , excludeInvoicePlanTypeList , invoicePlanTableAlias , invoiceOrigin , tousseDeliverOccasion)); } @@ -398,7 +398,7 @@ //申请项表的别名 String tousseItemTableAlias = "ti"; String tousseItemCondition = - buildWaitSendInvoicePlanSqlContionOnlyTousseItem(TousseDefinition.PACKAGE_TYPE_FOREIGN, null, + buildWaitSendInvoicePlanSqlConditionOnlyTousseItem(TousseDefinition.PACKAGE_TYPE_FOREIGN, null, sterilingMethods, tousseGroupIds , tousseItemTableAlias , invoicePlanTableAlias, invoiceOrigin,tousseDeliverOccasion); @@ -470,7 +470,7 @@ //申请项表的别名 String tousseItemTableAlias = "ti"; String tousseItemCondition = - buildWaitSendInvoicePlanSqlContionOnlyTousseItem(tousseTypes, null, + buildWaitSendInvoicePlanSqlConditionOnlyTousseItem(tousseTypes, null, sterilingMethods, tousseGroupIds , tousseItemTableAlias , invoicePlanTableAlias, invoiceOrigin,tousseDeliverOccasion); @@ -509,7 +509,7 @@ //申请项表的别名 String tousseItemTableAlias = "ti"; String tousseItemCondition = - buildWaitSendInvoicePlanSqlContionOnlyTousseItem(tousseTypes, null, + buildWaitSendInvoicePlanSqlConditionOnlyTousseItem(tousseTypes, null, sterilingMethods, tousseGroupIds , tousseItemTableAlias , invoicePlanTableAlias, invoiceOrigin,tousseDeliverOccasion); @@ -578,7 +578,7 @@ } //通用物品类型,即器械包、敷料包、一次性物品(排除消毒物品) String tousseItemCommonGoodsExcludeDisinfectGoodsCondition = - buildWaitSendInvoicePlanSqlContionOnlyTousseItem( + buildWaitSendInvoicePlanSqlConditionOnlyTousseItem( StringUtils.join(queryTousseTypeList, ","), disposableGoodsType, sterilingMethods, tousseGroupIds , tousseItemTableAlias , invoicePlanTableAlias,invoiceOrigin, @@ -668,7 +668,7 @@ if(CollectionUtils.isEmpty(tousseTypeList) || tousseTypeList.contains(TousseDefinition.PACKAGE_TYPE_DISINFECTION)){ String tousseItemDisinfectGoodsCondition = - buildWaitSendInvoicePlanSqlContionOnlyTousseItem(TousseDefinition.PACKAGE_TYPE_DISINFECTION, null, sterilingMethods, tousseGroupIds , tousseItemTableAlias , invoicePlanTableAlias,invoiceOrigin,tousseDeliverOccasion); + buildWaitSendInvoicePlanSqlConditionOnlyTousseItem(TousseDefinition.PACKAGE_TYPE_DISINFECTION, null, sterilingMethods, tousseGroupIds , tousseItemTableAlias , invoicePlanTableAlias,invoiceOrigin,tousseDeliverOccasion); String queryDisinfectTousseItemSql = String.format("select "+ tousseItemTableAlias +".tousseName," + tousseItemTableAlias +".tousseType,'%s' diposable," + invoicePlanTableAlias +".departCoding," @@ -869,19 +869,19 @@ * @param invoicePlanTableAlias 申请单表的别名(防止多个表是同名字段时语句报错) * @return String 示例如下:where 条件1 and 条件2 。。。 */ - private String buildWaitSendInvoicePlanSqlContion( + private String buildWaitSendInvoicePlanSqlCondition( String departCodes, String applyDate, String tousseTypes,String disposableGoodsType, String sterilingMethods, String tousseGroupIds, String appFormType, String invoicePlanTableAlias, String invoiceOrigin,String tousseDeliverOccasion){ String where1 = - buildWaitSendInvoicePlanSqlContionOnlyInvoicePlan(departCodes, applyDate, appFormType, null , + buildWaitSendInvoicePlanSqlConditionOnlyInvoicePlan(departCodes, applyDate, appFormType, null , invoicePlanTableAlias,invoiceOrigin,tousseDeliverOccasion); //表1的字段的前缀 String invoicePlanTableColumnAliasPre1 = (StringUtils.isNotBlank(invoicePlanTableAlias)) ? invoicePlanTableAlias + "." : ""; String tousseItemTableAlias = "ti"; - String where2 = buildWaitSendInvoicePlanSqlContionOnlyTousseItem(tousseTypes, disposableGoodsType, sterilingMethods, tousseGroupIds,tousseItemTableAlias,invoicePlanTableAlias,invoiceOrigin,tousseDeliverOccasion); + String where2 = buildWaitSendInvoicePlanSqlConditionOnlyTousseItem(tousseTypes, disposableGoodsType, sterilingMethods, tousseGroupIds,tousseItemTableAlias,invoicePlanTableAlias,invoiceOrigin,tousseDeliverOccasion); String condition = String .format(" where %s and ("+ invoicePlanTableColumnAliasPre1 +"id in (select recyclingApplication_ID from %s "+ tousseItemTableAlias +" where %s))", where1,TousseItem.class.getSimpleName() , where2); @@ -897,7 +897,7 @@ * @param alias 表的别名(防止多个表是同名字段时语句报错) * @return String 示例如下: 条件1 and 条件2 。。。 */ - private String buildWaitSendInvoicePlanSqlContionOnlyInvoicePlan(String departCodes, + private String buildWaitSendInvoicePlanSqlConditionOnlyInvoicePlan(String departCodes, String applyDate,String appFormType,List excludeInvoicePlanTypeList, String alias,String invoiceOrigin , String tousseDeliverOccasion){ //表2的字段的前缀 @@ -1004,6 +1004,10 @@ } String where8 = "1=1"; if(StringUtils.isBlank(appFormType)){ + //如果单类型的值为空(未传),且启用了借物单单独发货功能时,则需要排除掉借物单的这种类型(@see 业务详见:NFYY-62) + if(CssdUtils.getSystemSetConfigByNameBool("enableBorrowInvoicePlanSeperateSend")){ + excludeTypelist.add(InvoicePlan.TYPE_BORROWINGSINGLE); + } where8 = SqlUtils.getStringFieldNotInCollectionsPredicate(tableColumnAliasPre +"type", excludeTypelist); } @@ -1022,7 +1026,7 @@ * @param alias 表的别名(防止多个表是同名字段时语句报错) * @return String 示例如下: 条件1 and 条件2 。。。 */ - private String buildWaitSendInvoicePlanCommonSqlContion( + private String buildWaitSendInvoicePlanCommonSqlCondition( String departCodes, String applyDate,String alias, String invoiceOrigin , String tousseDeliverOccasion){ //表名的字段的前缀 @@ -1076,10 +1080,10 @@ * @param alias 表的别名(防止多个表是同名字段时语句报错) * @return String 示例如下: 条件1 and 条件2 。。。 */ - private String buildWaitSendInvoicePlanSqlContionOnlyForeignTousseApplication( + private String buildWaitSendInvoicePlanSqlConditionOnlyForeignTousseApplication( String departCodes, String applyDate,String alias, String invoiceOrigin , String tousseDeliverOccasion){ - String commonCondition = buildWaitSendInvoicePlanCommonSqlContion( + String commonCondition = buildWaitSendInvoicePlanCommonSqlCondition( departCodes, applyDate, alias, invoiceOrigin , tousseDeliverOccasion); String tableColumnAliasPre = (StringUtils.isNotBlank(alias)) ? alias + "." : ""; //过滤相关的单类型 @@ -1098,7 +1102,7 @@ private String buildWaitSendInvoicePlanSqlConditionForForeignProxyAndCustomeTousseAppliaction( String departCodes, String applyDate,String alias, String invoiceOrigin , String tousseDeliverOccasion){ - String commonCondition = buildWaitSendInvoicePlanCommonSqlContion( + String commonCondition = buildWaitSendInvoicePlanCommonSqlCondition( departCodes, applyDate, alias, invoiceOrigin , tousseDeliverOccasion); String tableColumnAliasPre = (StringUtils.isNotBlank(alias)) ? alias + "." : ""; //条件8.过滤相关的单类型 @@ -1118,7 +1122,7 @@ private String buildWaitSendInvoicePlanSqlConditionForProxyDisinfection( String departCodes, String applyDate,String alias, String invoiceOrigin , String tousseDeliverOccasion){ - String commonCondition = buildWaitSendInvoicePlanCommonSqlContion( + String commonCondition = buildWaitSendInvoicePlanCommonSqlCondition( departCodes, applyDate, alias, invoiceOrigin , tousseDeliverOccasion); String tableColumnAliasPre = (StringUtils.isNotBlank(alias)) ? alias + "." : ""; //条件8.过滤相关的单类型 @@ -1136,7 +1140,7 @@ * @param invoicePlanTableAlias 申请单表的别名,如果不存在此参数则忽略 * @return String 示例如下: 条件1 and 条件2 。。。 */ - private String buildWaitSendInvoicePlanSqlContionOnlyTousseItem( + private String buildWaitSendInvoicePlanSqlConditionOnlyTousseItem( String tousseTypes,String disposableGoodsType, String sterilingMethods, String tousseGroupIds, String tousseItemTableAlias , String invoicePlanTableAlias, @@ -1435,7 +1439,7 @@ String tousseDeliverOccasion = config.getTousseDeliverOccasion(); //申请单表的别名 String invoicePlanTableAlias = "po"; - String condition = buildWaitSendInvoicePlanSqlContion(departCodes, applyDate, + String condition = buildWaitSendInvoicePlanSqlCondition(departCodes, applyDate, tousseTypes, disposableGoodsType, sterilingMethods, tousseGroupIds, appFormType, invoicePlanTableAlias,invoiceOrigin, tousseDeliverOccasion); String querySql = String.format("select id,type,serialNumber,remark from %s "+ invoicePlanTableAlias +" %s order by applicationTime", InvoicePlan.class.getSimpleName() , condition); @@ -1591,7 +1595,7 @@ if(InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION.equals(appFormType)){ invoicePlanForeignTousseCondition = String.format("%s and %s", invoicePlanCommonCondition, - buildWaitSendInvoicePlanSqlContionOnlyForeignTousseApplication(null, + buildWaitSendInvoicePlanSqlConditionOnlyForeignTousseApplication(null, applyDate, invoicePlanTableAlias , invoiceOrigin , tousseDeliverOccasion)); }else if(InvoicePlan.TYPE_FOREIGNPROXYDISINFECTION.equals(appFormType) || InvoicePlan.TYPE_CUSTOM_TOUSSE_APPLIACTION_FORM.equals(appFormType)){ @@ -1607,13 +1611,13 @@ }else{ invoicePlanCommonGoodsCondition = String.format("%s and %s", invoicePlanCommonCondition, - buildWaitSendInvoicePlanSqlContionOnlyInvoicePlan(orgUnitCoding, applyDate, + buildWaitSendInvoicePlanSqlConditionOnlyInvoicePlan(orgUnitCoding, applyDate, appFormType , excludeInvoicePlanTypeList , invoicePlanTableAlias , invoiceOrigin , tousseDeliverOccasion)); } }else{ invoicePlanForeignTousseCondition = String.format("%s and %s", invoicePlanCommonCondition, - buildWaitSendInvoicePlanSqlContionOnlyForeignTousseApplication(null, + buildWaitSendInvoicePlanSqlConditionOnlyForeignTousseApplication(null, applyDate, invoicePlanTableAlias , invoiceOrigin , tousseDeliverOccasion)); invoicePlanNeedReturnApplicationIdConditionForForeignProxyAndCustomeTousseAppliaction = String.format("%s and %s", invoicePlanCommonCondition, @@ -1625,7 +1629,7 @@ invoicePlanTableAlias, invoiceOrigin, tousseDeliverOccasion)); invoicePlanCommonGoodsCondition = String.format("%s and %s", invoicePlanCommonCondition, - buildWaitSendInvoicePlanSqlContionOnlyInvoicePlan(orgUnitCoding, applyDate, + buildWaitSendInvoicePlanSqlConditionOnlyInvoicePlan(orgUnitCoding, applyDate, appFormType , excludeInvoicePlanTypeList , invoicePlanTableAlias , invoiceOrigin , tousseDeliverOccasion)); } @@ -1643,7 +1647,7 @@ //申请项表的别名 String tousseItemTableAlias = "ti"; String tousseItemCondition = - buildWaitSendInvoicePlanSqlContionOnlyTousseItem(TousseDefinition.PACKAGE_TYPE_FOREIGN, null, + buildWaitSendInvoicePlanSqlConditionOnlyTousseItem(TousseDefinition.PACKAGE_TYPE_FOREIGN, null, sterilingMethods, tousseGroupIds , tousseItemTableAlias , invoicePlanTableAlias, invoiceOrigin,tousseDeliverOccasion); @@ -1720,7 +1724,7 @@ //申请项表的别名 String tousseItemTableAlias = "ti"; String tousseItemCondition = - buildWaitSendInvoicePlanSqlContionOnlyTousseItem(tousseTypes, null, + buildWaitSendInvoicePlanSqlConditionOnlyTousseItem(tousseTypes, null, sterilingMethods, tousseGroupIds , tousseItemTableAlias , invoicePlanTableAlias, invoiceOrigin,tousseDeliverOccasion); @@ -1790,7 +1794,7 @@ //申请项表的别名 String tousseItemTableAlias = "ti"; String tousseItemCondition = - buildWaitSendInvoicePlanSqlContionOnlyTousseItem(tousseTypes, null, + buildWaitSendInvoicePlanSqlConditionOnlyTousseItem(tousseTypes, null, sterilingMethods, tousseGroupIds , tousseItemTableAlias , invoicePlanTableAlias, invoiceOrigin,tousseDeliverOccasion); @@ -1893,7 +1897,7 @@ } //通用物品类型,即器械包、敷料包、一次性物品(排除消毒物品) String tousseItemCommonGoodsExcludeDisinfectGoodsCondition = - buildWaitSendInvoicePlanSqlContionOnlyTousseItem( + buildWaitSendInvoicePlanSqlConditionOnlyTousseItem( StringUtils.join(queryTousseTypeList, ","), disposableGoodsType, sterilingMethods, tousseGroupIds , tousseItemTableAlias , invoicePlanTableAlias,invoiceOrigin, @@ -2006,7 +2010,7 @@ if(CollectionUtils.isEmpty(tousseTypeList) || tousseTypeList.contains(TousseDefinition.PACKAGE_TYPE_DISINFECTION)){ String tousseItemDisinfectGoodsCondition = - buildWaitSendInvoicePlanSqlContionOnlyTousseItem(TousseDefinition.PACKAGE_TYPE_DISINFECTION, null, sterilingMethods, tousseGroupIds , tousseItemTableAlias , invoicePlanTableAlias,invoiceOrigin,tousseDeliverOccasion); + buildWaitSendInvoicePlanSqlConditionOnlyTousseItem(TousseDefinition.PACKAGE_TYPE_DISINFECTION, null, sterilingMethods, tousseGroupIds , tousseItemTableAlias , invoicePlanTableAlias,invoiceOrigin,tousseDeliverOccasion); String queryDisinfectTousseItemSql = String.format("select "+ tousseItemTableAlias +".tousseName," + tousseItemTableAlias +".tousseType,'%s' diposable,max(ul.grade) grade," + "td.id tdId,td.materialsMD5,td.materialAmount,td.isApplyEntireTousse," @@ -2280,7 +2284,7 @@ }*/ //最后将未阅读的申请单更新为已读状态 invoicePlanCommonCondition = - buildWaitSendInvoicePlanSqlContionOnlyInvoicePlan(orgUnitCoding, applyDate, appFormType ,null , null , invoiceOrigin , tousseDeliverOccasion); + buildWaitSendInvoicePlanSqlConditionOnlyInvoicePlan(orgUnitCoding, applyDate, appFormType ,null , null , invoiceOrigin , tousseDeliverOccasion); invoicePlanCommonCondition = String.format("%s and readed = %s", invoicePlanCommonCondition , InvoicePlan.UNREAD); String sql = String.format("update %s set readed = %s where %s", InvoicePlan.class.getSimpleName(), InvoicePlan.READED, invoicePlanCommonCondition); Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java =================================================================== diff -u -r33487 -r33693 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 33487) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 33693) @@ -2504,6 +2504,7 @@ String personInChargeCode = StrutsParamUtils.getPraramValue("personInChargeCode", ""); String sourceWarehouseId = StrutsParamUtils.getPraramValue("sourceWarehouseId", ""); String sourceWarehouseName = StrutsParamUtils.getPraramValue("sourceWarehouseName", ""); + String appFormType = StrutsParamUtils.getPraramValue("appFormType", ""); //是否辅助发货,如果从辅助发货页面发货成功后,则该参数为true.其它页面不传递此参数 boolean auxiliaryInvoice = StrutsParamUtils.getBoolPraramValue("auxiliaryInvoice", false); params.put("tousseGroupIds", tousseGroupIds); @@ -2517,6 +2518,7 @@ params.put("personInChargeCode", personInChargeCode); params.put("sourceWarehouseId", sourceWarehouseId); params.put("sourceWarehouseName", sourceWarehouseName); + params.put("appFormType", appFormType); //发货的备注(用户可以输入的内容) params.put("invoiceRemark", StrutsParamUtils.getPraramValue("invoiceRemark", "")); JSONArray sendOutGoodsItems = JSONArray.fromObject(sendOutGoodsStoreData); Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java =================================================================== diff -u -r33573 -r33693 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 33573) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 33693) @@ -4895,12 +4895,25 @@ /** - * 获取全部申请单类型 + * 获取申请单类型 * @param params * @return */ public String getInvoicePlanType(JSONObject params){ - List list = invoicePlanManager.getAllApplyType(false,false); + List list = null; + //发货类型(有申领发货和借物单发货) + String invoiceType = params.optString("invoiceType",Invoice.TYPE_APPLICATION); + if(StringUtils.equals(invoiceType, Invoice.TYPE_BORROWINGSINGLE)){ + list = new ArrayList(); + list.add(InvoicePlan.TYPE_BORROWINGSINGLE); + }else{ + list = invoicePlanManager.getAllApplyType(false,false); + //启用借物单单独发货功能 + boolean enableBorrowInvoicePlanSeperateSend = CssdUtils.getSystemSetConfigByNameBool("enableBorrowInvoicePlanSeperateSend"); + if(enableBorrowInvoicePlanSeperateSend && (StringUtils.isBlank(invoiceType) || StringUtils.equals(invoiceType, Invoice.TYPE_APPLICATION))){ + list.remove(InvoicePlan.TYPE_BORROWINGSINGLE); + } + } JSONArray jSONArray = JSONArray.fromObject(list); JSONObject ret = JSONUtil.buildJsonObject(true, jSONArray); return ret.toString();