Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java =================================================================== diff -u -r20846 -r20946 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 20846) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 20946) @@ -376,4 +376,21 @@ */ public void saveOrUpdateExpensiveGoodsApplication( RecyclingApplication recyclingApplication, JSONArray newItems); + /** + * 根据时间,申请科室编码 :获得Hrp申请单明细集合(已按一次性物品物质编码,名称规格过滤) + * @param startDate 开始时间 + * @param endDate 结束时间 + * @param departCoding 申请科室编码 + * @return List + */ + public List findInvoicePlanByTimeAndDepartCoding(Date startDate, Date endDate,String departCoding); + + /** + * 根据分页 :获得Hrp申请单明细集合 + * @param List hrpInvoicePlans + * @param pagesize 每页多少行 + * @param nowPage 第几页 + * @return List + */ + public List findInvoicePlanByPage(List hrpInvoicePlans, int pagesize, int nowPage); } Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/service/InventoryManagerImpl.java =================================================================== diff -u -r20775 -r20946 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/service/InventoryManagerImpl.java (.../InventoryManagerImpl.java) (revision 20775) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/service/InventoryManagerImpl.java (.../InventoryManagerImpl.java) (revision 20946) @@ -1735,15 +1735,26 @@ } @Override - public List findHrpInvoicePlanpListByappliedSerialNumbers(List serialNumbers) { - List result = Arrays.asList(invoicePlanDao.findHrpInvoicePlanpListByappliedSerialNumbers(serialNumbers)); + public List findHrpInvoicePlanpListByAppliedSerialNumbers(List serialNumbers) { + List result = Arrays.asList(invoicePlanDao.findHrpInvoicePlanpListByAppliedSerialNumbers(serialNumbers)); return result; } @Override public List findInvoicePlanByTime(List serialNumbers,Date startDate, Date endDate) { List result = Arrays.asList(invoicePlanDao.findHrpInvoicePlanByTime(startDate,endDate,serialNumbers)); return result; } + @Override + public List findInvoicePlanByTimes(Date startDate,Date endDate) { + List result = invoicePlanDao.findHrpInvoicePlanByTimes(startDate,endDate); + return result; + } + + @Override + public List findInvoicePlanByTimeAndDepartCoding(Date startDate, Date endDate, String departCoding) { + List result = invoicePlanDao.findHrpInvoicePlanByTimeAndDepartCoding(startDate,endDate,departCoding); + return result; + } /** * 同步入库一次性物品同步单时过滤,只保留追溯系统已有的一次性物品的入库单明细 Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java =================================================================== diff -u -r20903 -r20946 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 20903) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 20946) @@ -1758,11 +1758,12 @@ //若传入参数为空,则默认开始时间和结束时间为当天 String startTimeStr = StrutsParamUtils.getPraramValue("startTime", defatultTime); String endTimeStr = StrutsParamUtils.getPraramValue("endTime", defatultTime); + String departCoding = StrutsParamUtils.getPraramValue("departCoding",null); //每页行数 int pagesize = StrutsParamUtils.getPraramValue("limit", 1); int startParameter = StrutsParamUtils.getPraramValue("start", 0); //第几页 - int pageNumber = MathTools.div(startParameter, pagesize).intValue() + 1; + int nowPage = MathTools.div(startParameter, pagesize).intValue() + 1; //设定时间时分秒 Calendar startTime = Calendar.getInstance(); @@ -1780,19 +1781,25 @@ endTime.set(Calendar.SECOND, 59); //按分页,时间获得hrp同步申请单的数据(不包括数据库已有的一次性物品申请单) - Collection storageInvoicePlan = recyclingApplicationManager.findInvoicePlanByTimeAndPage(startTime.getTime(), endTime.getTime(),pagesize,pageNumber); + //Collection storageInvoicePlan = recyclingApplicationManager.findInvoicePlanByTimeAndPage(startTime.getTime(), endTime.getTime(),pagesize,nowPage); //按时间获得hrp同步申请单的总数(不包括数据库已有的一次性物品申请单) - int total = recyclingApplicationManager.findInvoicePlanTotalByTime(startTime.getTime(),endTime.getTime()); + //int total = recyclingApplicationManager.findInvoicePlanTotalByTime(startTime.getTime(),endTime.getTime()); + //按时间,部门编码获得hrp同步申请单的数据(按物质编码,名称规格过滤) + List totalInvoicePlan = recyclingApplicationManager.findInvoicePlanByTimeAndDepartCoding(startTime.getTime(), endTime.getTime(),departCoding); + //总数 + int total = totalInvoicePlan.size(); + //分页后的hrp同步申请单数据 + List InvoicePlans = recyclingApplicationManager.findInvoicePlanByPage(totalInvoicePlan, pagesize, nowPage); JSONArray rows = new JSONArray(); JSONObject row = new JSONObject(); SimpleDateFormat format=new SimpleDateFormat("yyy-MM-dd HH:mm:ss"); - for (HrpInvoicePlan InvoicePlans : storageInvoicePlan) { - row.put("departCoding", InvoicePlans.getDepartCoding()); - row.put("depart", InvoicePlans.getDepart()); - row.put("applicant", InvoicePlans.getApplicant()); - row.put("applicationTime",format.format(InvoicePlans.getApplicationTime())); - row.put("serialNumber", InvoicePlans.getSerialNumber()); - row.put("remark", InvoicePlans.getRemark()); + for (HrpInvoicePlan InvoicePlan : InvoicePlans) { + row.put("departCoding", InvoicePlan.getDepartCoding()); + row.put("depart", InvoicePlan.getDepart()); + row.put("applicant", InvoicePlan.getApplicant()); + row.put("applicationTime",format.format(InvoicePlan.getApplicationTime())); + row.put("serialNumber", InvoicePlan.getSerialNumber()); + row.put("remark", InvoicePlan.getRemark()); rows.add(row); } JSONObject result = new JSONObject(); Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/service/InventoryManager.java =================================================================== diff -u -r20705 -r20946 --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/service/InventoryManager.java (.../InventoryManager.java) (revision 20705) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/service/InventoryManager.java (.../InventoryManager.java) (revision 20946) @@ -40,6 +40,7 @@ Collection outParam_returnEntrys); +////////////HRP//////////////// /** * 根据分页,时间,已申请的一次性物品申请单号过滤获得:Hrp同步申请单集合. * @param startDate 开始时间 @@ -66,7 +67,7 @@ * @param serialNumbers 已申请的一次性物品申请单号集合 * @return List:HrpInvoicePlan同步申请单集合 */ - public List findHrpInvoicePlanpListByappliedSerialNumbers(List serialNumbers); + public List findHrpInvoicePlanpListByAppliedSerialNumbers(List serialNumbers); /** * 根据同步申请单号:获得Hrp申请单明细集合 @@ -90,5 +91,22 @@ * @return HrpInvoicePlan同步申请单集合 */ public List findInvoicePlanByTime(List serialNumbers,Date startDate, Date endDate); + + /** + * 根据时间过滤获得:Hrp同步申请单的集合. + * @param startDate 开始时间 + * @param endDate 结束时间 + * @return HrpInvoicePlan同步申请单集合 + */ + public List findInvoicePlanByTimes(Date startDate,Date endDate); + + /** + * 根据时间,申请科室编码过滤获得:Hrp同步申请单的集合. + * @param startDate 开始时间 + * @param endDate 结束时间 + * @param departCoding 申请科室编码 + * @return HrpInvoicePlan同步申请单集合 + */ + public List findInvoicePlanByTimeAndDepartCoding(Date startDate, Date endDate, String departCoding); } \ No newline at end of file Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/InvoicePlanDao.java =================================================================== diff -u -r20705 -r20946 --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/InvoicePlanDao.java (.../InvoicePlanDao.java) (revision 20705) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/InvoicePlanDao.java (.../InvoicePlanDao.java) (revision 20946) @@ -36,15 +36,6 @@ ); /** - * 按已申请一次性申请单单号查找一次性物品申请单 - * @param serialNumbers - * @return - */ - HrpInvoicePlan[] findHrpInvoicePlanpListByappliedSerialNumbers( - @Param("serialNumbers") - List serialNumbers - ); - /** * 按时间,已申请一次性申请单单号查找一次性物品申请单总数 * @param startDate * @param endDate @@ -73,7 +64,7 @@ HrpInvoicePlan findHrpInvoicePlanBySerialNumber(String serialNumber); /** - * 按时间,已申请一次性申请单单号查找一次性物品申请单 + * 按时间,已申请一次性申请单单号查找一次性物品申请单,明细 * @param startDate * @param endDate * @param serialNumbers @@ -87,9 +78,44 @@ @Param("serialNumbers") List serialNumbers ); - + /** + * 按时间查找一次性物品申请单,明细 + * @param startDate + * @param endDate + * @return + */ + List findHrpInvoicePlanByTimes( + @Param("startDate") + Date startDate, + @Param("endDate") + Date endDate + ); + + /** + * 按已申请一次性申请单单号查找一次性物品申请单 ,明细 + * @param serialNumbers + * @return + */ + HrpInvoicePlan[] findHrpInvoicePlanpListByAppliedSerialNumbers( + @Param("serialNumbers") + List serialNumbers + ); - + /** + * 时间,申请科室编码查找一次性物品申请单 ,明细 + * @param startDate + * @param endDate + * @param departCoding + * @return + */ + List findHrpInvoicePlanByTimeAndDepartCoding( + @Param("startDate") + Date startDate, + @Param("endDate") + Date endDate, + @Param("departCoding") + String departCoding + ); } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r20903 -r20946 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 20903) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 20946) @@ -5469,24 +5469,6 @@ } @Override - public Collection findInvoicePlanByTimeAndPage(Date startDate,Date endDate,int pagesize,int pagenumber) { - //获得已申请单的单号 - String hql = "select ip.serialNumber from InvoicePlan ip where ip.type= '"+InvoicePlan.TYPE_DIPOSABLE_GOODS_APPLICATION_FORM +"'"; - List serialNumbers = objectDao.findByHql(hql); - Collection InvoicePlan = inventoryManager.findInvoicePlanByTimeAndPage(startDate, endDate, pagesize, pagenumber,serialNumbers) ; - return InvoicePlan; - } - - @Override - public int findInvoicePlanTotalByTime(Date startDate, Date endDate) { - //获得已申请单的单号 - String hql = "select ip.serialNumber from InvoicePlan ip where ip.type= '"+InvoicePlan.TYPE_DIPOSABLE_GOODS_APPLICATION_FORM +"'"; - List serialNumbers = objectDao.findByHql(hql); - int total = inventoryManager.findInvoicePlanTotalByTime(startDate, endDate,serialNumbers); - return total; - } - - @Override public List findHrpTousseItemListByserialNumber(String serialNumber) { List syncitems = new ArrayList(); List ApplicationItem = inventoryManager.findHrpTousseItemBySerialNumber(serialNumber); @@ -5556,11 +5538,11 @@ //根据时间,已申请的单号过滤获得hrp申请单单号集合 List hrpInvoicePlans = inventoryManager.findInvoicePlanByTime(serialNumbers,startTime.getTime(),endTime.getTime()); //根据申请单号获得明细 - for (HrpInvoicePlan hrpInvoicePlan : hrpInvoicePlans) { - //logger.info("申请单号:"+hrpInvoicePlan.getSerialNumber()); - List HrpTousseItemList = inventoryManager.findHrpTousseItemBySerialNumber(hrpInvoicePlan.getSerialNumber()); - hrpInvoicePlan.setItems(HrpTousseItemList); - } +// for (HrpInvoicePlan hrpInvoicePlan : hrpInvoicePlans) { +// //logger.info("申请单号:"+hrpInvoicePlan.getSerialNumber()); +// List HrpTousseItemList = inventoryManager.findHrpTousseItemBySerialNumber(hrpInvoicePlan.getSerialNumber()); +// hrpInvoicePlan.setItems(HrpTousseItemList); +// } //开始同步 syncHrpDisposableGoodsInvoicePlan(hrpInvoicePlans); } catch (Exception e) { @@ -5570,8 +5552,142 @@ } }, 5, TimeUnit.SECONDS); } + + //根据时间,申请科室编码 :获得Hrp申请单明细集合(已按一次性物品物质编码,名称规格过滤) + @Override + public List findInvoicePlanByTimeAndDepartCoding(Date startDate, Date endDate,String departCoding) { + //获得已申请单的单号 + String hql = "select ip.serialNumber from InvoicePlan ip where ip.type= '"+InvoicePlan.TYPE_DIPOSABLE_GOODS_APPLICATION_FORM +"'"; + List serialNumbers = objectDao.findByHql(hql); + //按时间,申请科室编码获得hrp同步单数据 + List invoicePlanList = inventoryManager.findInvoicePlanByTimeAndDepartCoding(startDate,endDate,departCoding); + //过滤已申请的单号 + List invoicePlans = new ArrayList(); + for (HrpInvoicePlan hrpInvoicePlan : invoicePlanList) { + if(!serialNumbers.contains(hrpInvoicePlan.getSerialNumber())){ + invoicePlans.add(hrpInvoicePlan); + } + } + //根据明细单过滤获得过滤后的申请单 + List firterInvoicePlan = filterInvoicePlans(invoicePlans); + return firterInvoicePlan; + } + + //根据分页 :获得Hrp申请单明细集合 + @Override + public List findInvoicePlanByPage(List hrpInvoicePlans,int pagesize,int nowPage){ + int fromIndex = (nowPage - 1) * pagesize; + if(fromIndex >= hrpInvoicePlans.size()){ + return Collections.emptyList();//空数组 + } + if(fromIndex<0){ + return Collections.emptyList();//空数组 + } + int toIndex = nowPage * pagesize; + if (toIndex >= hrpInvoicePlans.size()) { + toIndex = hrpInvoicePlans.size(); + } + return hrpInvoicePlans.subList(fromIndex, toIndex); + } + + /** + * 优化 + * 根据Hrp申请明细的物质编码,名字规格过滤hrp申请单 + * @param invoicePlan + * @return + */ + private List filterInvoicePlans(Collection hrpInvoicePlanList){ + //获得全部一次性物品定义 + List disposablesList = diposableGoodsManager.getAll(); + List inventorySerialNumberList = new ArrayList();//一次性物品物质编号的集合 + List disposableNameList = new ArrayList();//拼接后名字的集合 + String disposableName = "";//拼接的第一次物品名字,例如:剪刀[大] + for (DisposableGoods diposableGood : disposablesList) { + if(StringUtils.isNotBlank(diposableGood.getSpecification())){//若规格不为空则拼写名字 :物品名[规格名] + disposableName =diposableGood.getName()+"["+diposableGood.getSpecification()+"]"; + }else{//若规格为空则 :物品名,例如:剪刀 + disposableName = diposableGood.getName(); + } + inventorySerialNumberList.add(diposableGood.getInventorySerialNumber()); + disposableNameList.add(disposableName); + } + //根据明细单过滤获得过滤后的申请单 + List firteredInvoicePlans = new ArrayList(); + for (HrpInvoicePlan hrpInvoicePlan : hrpInvoicePlanList) { + List syncitems = new ArrayList(); + for (HrpTousseItem item : hrpInvoicePlan.getItems()) { + //先按物资编码过滤 + if(inventorySerialNumberList.contains(item.getInventorySerialNumber())){ + syncitems.add(item); + continue; + } + String itemName = ""; + if(StringUtils.isNotBlank(item.getSpecification())){//若规格不为空则拼写名字 :物品名[规格名] + itemName =item.getName()+"["+item.getSpecification()+"]"; + }else{//若规格为空则 :物品名,例如:剪刀 + itemName = item.getName(); + } + //按名称规格过滤 + if(disposableNameList.contains(itemName)){ + syncitems.add(item); + } + } + //若过滤后明细单不为空则保留该申请单 + if(!syncitems.isEmpty()){ + firteredInvoicePlans.add(hrpInvoicePlan); + } + } + return firteredInvoicePlans; + } +//暂时没用的方法// + /** + * + * 根据Hrp申请明细的物质编码,名字规格过滤hrp申请单 + * @param invoicePlan + * @return + */ + private List FilterInvoicePlans1(Collection invoicePlan){ + long startTime = System.currentTimeMillis(); //获取开始时间 + //根据明细单过滤获得过滤后的申请单 + List firteredInvoicePlans = new ArrayList(); + for (HrpInvoicePlan hrpInvoicePlan : invoicePlan) { + String serialNumber = hrpInvoicePlan.getSerialNumber(); + //若过滤后明细单不为空则保留该申请单 + if(!findHrpTousseItemListByserialNumber(serialNumber).isEmpty()){ + firteredInvoicePlans.add(hrpInvoicePlan); + } + } + long endTime = System.currentTimeMillis(); //获取结束时间 + System.out.println("程序运行时间:" + (endTime - startTime)); + return firteredInvoicePlans; + } + @Override + public Collection findInvoicePlanByTimeAndPage(Date startDate,Date endDate,int pagesize,int pagenumber) { + //获得已申请单的单号 + String hql = "select ip.serialNumber from InvoicePlan ip where ip.type= '"+InvoicePlan.TYPE_DIPOSABLE_GOODS_APPLICATION_FORM +"'"; + List serialNumbers = objectDao.findByHql(hql); + Collection invoicePlan = inventoryManager.findInvoicePlanByTimeAndPage(startDate, endDate, pagesize, pagenumber,serialNumbers) ; + //根据明细单过滤获得过滤后的申请单 + List firterInvoicePlan = FilterInvoicePlans1(invoicePlan); + return firterInvoicePlan; + } + + @Override + public int findInvoicePlanTotalByTime(Date startDate, Date endDate) { + //获得已申请单的单号 + String hql = "select ip.serialNumber from InvoicePlan ip where ip.type= '"+InvoicePlan.TYPE_DIPOSABLE_GOODS_APPLICATION_FORM +"'"; + List serialNumbers = objectDao.findByHql(hql); + //int total = inventoryManager.findInvoicePlanTotalByTime(startDate, endDate,serialNumbers); + List invoicePlan = inventoryManager.findInvoicePlanByTime(serialNumbers,startDate,endDate); + //根据明细单过滤获得过滤后的申请单 + List firterInvoicePlan = FilterInvoicePlans1(invoicePlan); + int total = firterInvoicePlan.size(); + return total; + } +/////////////////////////////////////////// + @Override public void interfereApplicationTime(String[] ids, Date applicationTime) { if (ids != null) { for (String id : ids) { Index: ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/syncDisposableGoodsApplicationForm.js =================================================================== diff -u -r20174 -r20946 --- ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/syncDisposableGoodsApplicationForm.js (.../syncDisposableGoodsApplicationForm.js) (revision 20174) +++ ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/syncDisposableGoodsApplicationForm.js (.../syncDisposableGoodsApplicationForm.js) (revision 20946) @@ -34,7 +34,43 @@ text: '开始手动同步', iconCls: 'btn_ext_add', handler: syncApplication + }, + { + xtype : 'hidden', + id:'departCodingsyc', + name:'departCodingsyc' } + , + {text: '申请科室过滤:'}, + { + xtype : 'combo', + fieldLabel : '申请科室', + id : 'departsyc', + name : 'departsyc', + queryParam : 'spell', + minChars : 0, + valueField : 'name', + displayField : 'name', + store : appDepartJsonStoreExt2, + forceSelection : true, + lazyInit : true, + triggerAction : 'all', + hideTrigger : true, + typeAhead : false, + width : 250, + matchFieldWidth: false, + listConfig: {width: 300}, + allowBlank : true, + flex : 1, + listeners:{ + select:function(combo, records, index){ + var record = transformRecords(records); + console.log(record.data) + top.Ext.getCmp("departCodingsyc").setValue(record.data.departCode); + + } + } + } ]; @@ -51,12 +87,15 @@ ] ); + //同步申请单数据 var sycGridPanelStore = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : WWWROOT + '/disinfectSystem/recyclingApplicationAction!findStorageInvocePlanByTime.do', - method : 'POST' + method : 'POST', + timeout : 300*1000 }), - autoLoad:{params:{start:0,limit:25}},// + //autoLoad:{params:{start:0,limit:25}},// + lastOptions: {params: {start: 0, limit: 25}}, reader:jsonreader }); @@ -88,6 +127,7 @@ id : 'sycGridPanel', store : sycGridPanelStore, cm : sycGridPanelColumns, + loadMask : true, sm : sm, autoExpandColumn: 'remark', tbar : tbar, @@ -101,7 +141,7 @@ title : '一次性物品同步申请单', modal : true, border:true , - width : 800, + width : 850, height : 660, plain : true, items : [ sycGridPanel ] @@ -110,9 +150,10 @@ //////function /////// /** - * 根据时间查询 + * 根据时间,申请科室查询 */ function reloadTime(){ + var departCoding = top.Ext.getCmp("departCodingsyc").getValue(); var startDate = top.Ext.getCmp("startDate2").getValue(); var endDate = top.Ext.getCmp("endDate2").getValue(); @@ -127,15 +168,17 @@ } sycGridPanelStore.baseParams.startTime = Ext.util.Format.date(startDate, 'Y-m-d'); sycGridPanelStore.baseParams.endTime = Ext.util.Format.date(endDate, 'Y-m-d'); + sycGridPanelStore.baseParams.departCoding = departCoding; sycGridPanelStore.reload(); + top.Ext.getCmp("departCodingsyc").setValue(null); + top.Ext.getCmp("departsyc").setValue(null); } /** * 默认当天时间 */ getServerTime('yyyy-MM-dd', top.Ext,'startDate2'); getServerTime('yyyy-MM-dd',top.Ext,'endDate2'); - /** Index: ssts-web/src/main/resources/config/zsyy/mybatis/InvoicePlanFromHERP_Mapper.xml =================================================================== diff -u -r20705 -r20946 --- ssts-web/src/main/resources/config/zsyy/mybatis/InvoicePlanFromHERP_Mapper.xml (.../InvoicePlanFromHERP_Mapper.xml) (revision 20705) +++ ssts-web/src/main/resources/config/zsyy/mybatis/InvoicePlanFromHERP_Mapper.xml (.../InvoicePlanFromHERP_Mapper.xml) (revision 20946) @@ -3,9 +3,116 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - @@ -77,9 +152,9 @@ ]]> - and serialNumber not in + and serialNumber not in - #{serialNumbers} + #{serialNumbers}