Index: ssts-web/src/main/webapp/disinfectsystem/invoice/signRecord.jsp =================================================================== diff -u -r21537 -r22254 --- ssts-web/src/main/webapp/disinfectsystem/invoice/signRecord.jsp (.../signRecord.jsp) (revision 21537) +++ ssts-web/src/main/webapp/disinfectsystem/invoice/signRecord.jsp (.../signRecord.jsp) (revision 22254) @@ -32,6 +32,8 @@ + + @@ -50,15 +52,22 @@ src="${ctx}/bootstrap-table/js/bootstrap-table-export.js"> + + + + + + + + - - - - + + +
Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManagerImpl.java =================================================================== diff -u -r22240 -r22254 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManagerImpl.java (.../SignRecordManagerImpl.java) (revision 22240) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManagerImpl.java (.../SignRecordManagerImpl.java) (revision 22254) @@ -12,6 +12,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import net.sf.json.JSONObject; @@ -27,6 +28,8 @@ import com.forgon.disinfectsystem.entity.basedatamanager.signRecord.SignRecord; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.sterilizationTransition.SterilizationTransitionItem; +import com.forgon.disinfectsystem.signRecord.vo.SignRecordPrintTousseVo; import com.forgon.disinfectsystem.signRecord.vo.SignRecordVo; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.exception.SystemException; @@ -372,4 +375,45 @@ } return ""; } + + @Override + public List getSignRecordPrintItem( + Long signRecordId) { + if(DatabaseUtil.isPoIdValid(signRecordId)){ + List tis = tousseInstanceManager.getByProperty("signRecordId", signRecordId, "tousseName"); + if(CollectionUtils.isEmpty(tis)){ + throw new SystemException("未获取到签收记录对应的包实例"); + } + List tiIds = tis.stream().map(ti->ti.getId()).collect(Collectors.toList()); + List transitionItems = objectDao.getCollection(SterilizationTransitionItem.class.getSimpleName(), "tousseInstanceId", tiIds); + List vos = new ArrayList<>(); + for(TousseInstance ti : tis){ + SignRecordPrintTousseVo vo = new SignRecordPrintTousseVo(); + vo.setBarcode(ti.getBarcode()); + vo.setInvoiceSender(ti.getInvoiceSender()); + vo.setInvoiceSendTime(ti.getInvoiceSendTime()); + vo.setOperationTime(ti.getOperationTime()); + vo.setOperator(ti.getOperator()); + vo.setSterileEndTime(ti.getSterileEndTime()); + vo.setSterileFrequency(ti.getSterileFrequency()); + vo.setSterilizationUser(ti.getSterilizationUser()); + vo.setSterilizerName(ti.getSterilizerName()); + vo.setTousseName(ti.getTousseName()); + + SterilizationTransitionItem tItem = CollectionUtils.find(transitionItems, new Predicate(){ + @Override + public boolean evaluate(SterilizationTransitionItem object) { + return object != null && MathTools.valueEquals(object.getTousseInstanceId(), ti.getId()); + }}); + if(tItem != null && tItem.getSterilizationTransition() != null){ + vo.setTakeover(tItem.getSterilizationTransition().getTakeover()); + vo.setTransitionTime(tItem.getSterilizationTransition().getTransitionTime()); + } + vos.add(vo); + } + return vos; + }else{ + throw new SystemException("签收记录id非法"); + } + } } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/action/signRecordAction.java =================================================================== diff -u -r22229 -r22254 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/action/signRecordAction.java (.../signRecordAction.java) (revision 22229) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/action/signRecordAction.java (.../signRecordAction.java) (revision 22254) @@ -8,6 +8,8 @@ import javax.servlet.http.HttpServletResponse; +import net.sf.json.JSONObject; + import org.apache.log4j.Logger; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; @@ -16,7 +18,12 @@ import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.disinfectsystem.entity.basedatamanager.signRecord.SignRecord; import com.forgon.disinfectsystem.signRecord.service.SignRecordManager; +import com.forgon.disinfectsystem.signRecord.vo.SignRecordPrintTousseVo; +import com.forgon.exception.SystemException; +import com.forgon.exception.service.ExceptionHandler; import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.json.JSONUtil; import com.forgon.tools.util.PageUtil; @ParentPackage(value = "default") @@ -29,7 +36,13 @@ private SignRecordManager signRecordManager; - public SignRecordManager getSignRecordManager() { + private ExceptionHandler exceptionHandler; + + public void setExceptionHandler(ExceptionHandler exceptionHandler) { + this.exceptionHandler = exceptionHandler; + } + + public SignRecordManager getSignRecordManager() { return signRecordManager; } @@ -97,4 +110,21 @@ } } + public void loadPrintData(){ + try{ + Long signRecordId = StrutsParamUtils.getPraramLongValue("signRecordId", 0L); + SignRecord signRecord = signRecordManager.get(signRecordId); + if(signRecord == null){ + throw new SystemException("未获取到对应的签收记录"); + } + List vos = signRecordManager.getSignRecordPrintItem(signRecordId); + JSONObject json = JSONUtil.toJsonObjectWithJsonlib(signRecord, null); + JSONUtil.addSuccess(json, true); + json.put("goods", JSONUtil.toJsonArrayWithJsonlib(vos, null)); + StrutsResponseUtils.output(json); + }catch(Exception e){ + exceptionHandler.handleException(StrutsParamUtils.getResponse(), e); + } + } + } Index: forgon-tools/src/main/java/com/forgon/tools/hibernate/ObjectDao.java =================================================================== diff -u -r22164 -r22254 --- forgon-tools/src/main/java/com/forgon/tools/hibernate/ObjectDao.java (.../ObjectDao.java) (revision 22164) +++ forgon-tools/src/main/java/com/forgon/tools/hibernate/ObjectDao.java (.../ObjectDao.java) (revision 22254) @@ -53,6 +53,19 @@ public List findByProperty(String objectPOName,String propertyName,String propertyValue); public List findByProperty_ForUpdate(String objectPOName,String propertyName,Object propertyValue); + /** + * 根据属性查找对象并排序 + * @param objectPOName PO名称 + * @param propertyName po属性名 + * @param propertyValue po属性的值,如果为null,则查找属性值为null的对象 + * @param update 是否加锁 + * @param firstIndex 分页的第一个数据 + * @param maxResults 分布的记录条数,如果为0则不分页 + * @param orderField 排序子句 + * @return + */ + public List findByProperty(String objectPOName,String propertyName,Object propertyValue,boolean update, + int firstIndex,int maxResults,final String orderField); /** * 根据hql的where子句获取对象集合(如果查不到返回一个空的List). Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/signRecord/SignRecord.java =================================================================== diff -u -r22240 -r22254 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/signRecord/SignRecord.java (.../SignRecord.java) (revision 22240) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/signRecord/SignRecord.java (.../SignRecord.java) (revision 22254) @@ -102,12 +102,4 @@ public void setSignAmount(int signAmount) { this.signAmount = signAmount; } - - - - - - - - } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/vo/SignRecordPrintTousseVo.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/vo/SignRecordPrintTousseVo.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/vo/SignRecordPrintTousseVo.java (revision 22254) @@ -0,0 +1,131 @@ +package com.forgon.disinfectsystem.signRecord.vo; + +import java.util.Date; + +/** + * 签收记录打印的包实例vo + * @author kzh + * + */ +public class SignRecordPrintTousseVo { + /** + * 器械包名称 + */ + private String tousseName; + /** + * 器械包条码 + */ + private String barcode; + /** + * 装配时间 + */ + private Date operationTime; + /** + * 配包人 + */ + private String operator; + /** + * 灭菌交接时间 + */ + private Date transitionTime; + /** + * 接收人名称 + */ + private String takeover; + /** + * 灭菌结束时间 + */ + private String sterileEndTime = ""; + /** + * 灭菌员 + */ + private String sterilizationUser = ""; + /** + * 灭菌炉名称 + */ + private String sterilizerName = ""; + /** + * 灭菌炉次 + */ + private String sterileFrequency = ""; + /** + * 发货时间 + */ + private Date invoiceSendTime; + /** + * 发货员 + */ + private String invoiceSender = ""; + public String getTousseName() { + return tousseName; + } + public String getBarcode() { + return barcode; + } + public Date getOperationTime() { + return operationTime; + } + public String getOperator() { + return operator; + } + public Date getTransitionTime() { + return transitionTime; + } + public String getTakeover() { + return takeover; + } + public String getSterileEndTime() { + return sterileEndTime; + } + public String getSterilizationUser() { + return sterilizationUser; + } + public String getSterilizerName() { + return sterilizerName; + } + public String getSterileFrequency() { + return sterileFrequency; + } + public Date getInvoiceSendTime() { + return invoiceSendTime; + } + public String getInvoiceSender() { + return invoiceSender; + } + public void setTousseName(String tousseName) { + this.tousseName = tousseName; + } + public void setBarcode(String barcode) { + this.barcode = barcode; + } + public void setOperationTime(Date operationTime) { + this.operationTime = operationTime; + } + public void setOperator(String operator) { + this.operator = operator; + } + public void setTransitionTime(Date transitionTime) { + this.transitionTime = transitionTime; + } + public void setTakeover(String takeover) { + this.takeover = takeover; + } + public void setSterileEndTime(String sterileEndTime) { + this.sterileEndTime = sterileEndTime; + } + public void setSterilizationUser(String sterilizationUser) { + this.sterilizationUser = sterilizationUser; + } + public void setSterilizerName(String sterilizerName) { + this.sterilizerName = sterilizerName; + } + public void setSterileFrequency(String sterileFrequency) { + this.sterileFrequency = sterileFrequency; + } + public void setInvoiceSendTime(Date invoiceSendTime) { + this.invoiceSendTime = invoiceSendTime; + } + public void setInvoiceSender(String invoiceSender) { + this.invoiceSender = invoiceSender; + } +} Index: ssts-web/src/main/webapp/disinfectsystem/print/print.js =================================================================== diff -u -r22206 -r22254 --- ssts-web/src/main/webapp/disinfectsystem/print/print.js (.../print.js) (revision 22206) +++ ssts-web/src/main/webapp/disinfectsystem/print/print.js (.../print.js) (revision 22254) @@ -1652,6 +1652,19 @@ } } } +/** + * 打印签收单。 + * @param recyclingPrintDatas + */ +function doPrintSignRecord(printObject){ + if(printObject){ + formTypeOfPrinted = "signRecordDetail"; + setPrinterByConfig(); + setGoodsInfos(printObject); + print2(printObject); + LODOP.PRINT(); + } +} // 外部代理灭菌申请单 function printForeignProxyDisinfectionApplicationInfo(foreignProxyDisinfectionApplicationObj,printType) { formTypeOfPrinted = "foreignProxyDisinfectionApplication"; Index: ssts-web/src/main/webapp/disinfectsystem/invoice/signRecord.js =================================================================== diff -u -r22238 -r22254 --- ssts-web/src/main/webapp/disinfectsystem/invoice/signRecord.js (.../signRecord.js) (revision 22238) +++ ssts-web/src/main/webapp/disinfectsystem/invoice/signRecord.js (.../signRecord.js) (revision 22254) @@ -60,7 +60,10 @@ field : 'id', align : 'center', formatter : function(value, row, index) {// 自定义显示标签 - return '' + + ' '; } @@ -197,3 +200,45 @@ ; } +/** + * 打印签收记录 + * @param signRecordId + */ +//是否正在打印 +var printing = false; +function printSignRecord(thiz,signRecordId){ + if(printing){ + jShowResult('正在打印,请稍候重试'); + return false; + } + thiz.disabled=true; + printing = true; + $.ajax({ + url : WWWROOT + "/disinfectSystem/signRecordAction!loadPrintData.do", + type : "POST", + timeout : 30000, + dataType :'json', + data : { + signRecordId : signRecordId + }, + success : function(result) { + if(result.success){ + doPrintSignRecord(result); + jShowResult('打印成功'); + }else{ + jShowResult(result.message); + } + thiz.disabled=false; + printing = false; + }, + error: function(x, t, m) { + if(t == "timeout") { + jShowResult("提交超时,请重试"); + } else { + jShowResult(t); + } + thiz.disabled=false; + printing = false; + } + }); +} Index: forgon-tools/src/main/java/com/forgon/tools/hibernate/BasePoManagerImpl.java =================================================================== diff -u -r20493 -r22254 --- forgon-tools/src/main/java/com/forgon/tools/hibernate/BasePoManagerImpl.java (.../BasePoManagerImpl.java) (revision 20493) +++ forgon-tools/src/main/java/com/forgon/tools/hibernate/BasePoManagerImpl.java (.../BasePoManagerImpl.java) (revision 22254) @@ -182,8 +182,17 @@ } return null; } + @Override + public List getByProperty(String property, Long value, String orderBy) { + return objectDao.findByProperty(poName, property, value, false, 0, 0, orderBy); + } @Override + public List getByPropertyForUpdate(String property, Long value, + String orderBy) { + return objectDao.findByProperty(poName, property, value, true, 0, 0, orderBy); + } + @Override public List getByPropertyForUpdate(String property,Object value){ return objectDao.findByProperty_ForUpdate(poName,property,value); } Index: ssts-web/src/main/webapp/disinfectsystem/config/zsyy/print/printConfig.js =================================================================== diff -u -r22204 -r22254 --- ssts-web/src/main/webapp/disinfectsystem/config/zsyy/print/printConfig.js (.../printConfig.js) (revision 22204) +++ ssts-web/src/main/webapp/disinfectsystem/config/zsyy/print/printConfig.js (.../printConfig.js) (revision 22254) @@ -86,7 +86,43 @@ ] } } - +var signRecordDetailConfig = { + fixed:true, + headerFooter : [ + // 页眉名称 + {label : "手术室物品签收记录", dataIndex : '', fontSize : 15, position : ["0.3cm","37%","99%",5]}, + {label : "签收时间:", dataIndex : 'signDate', fontSize : 9, position : ["1cm","2%","99%",5]}, + {label : "仪器班签收人:", dataIndex : '', fontSize : 9, position : ["1.4cm","2%","90%",5]}, + {label : "供应室交接人:", dataIndex : '', fontSize : 9, position : ["1.4cm","45%","90%",5]}, + {label : "签收总数:", dataIndex : 'signAmount', fontSize : 9, position : ["1.4cm","80%","90%",5]} + ], + currentPageNumber : {label : "第#页", fontSize : 9, position : ["1cm","80%","90%",5]}, + totalPageAmount : {label : "共&页", fontSize : 9, position : ["1cm","85%","90%",5]}, + goodsTable :{ + rowHeight : 20, + //position : ["50","1%","96%","6.0cm"], + fontSize:12, + position : ["1.9cm","0.2cm","99%","27cm"], + headRepeat : true, + donotPrintTotal:true,//不打印合计 + columns : [ + {header : "序号", dataIndex : 'serialNumber', width : 60, align : 'center'}, + {header : "物品名称", dataIndex : 'tousseName', width : 100, align : 'center'}, + //{header : "出库仓库", dataIndex : 'warehouseName', width : 60, align : 'center'}, + {header : "条码", dataIndex : 'barcode', width : 60, align : 'center'}, + {header : "装配时间", dataIndex : 'operationTime', width : 60, align : 'center'}, + {header : "装配员", dataIndex : 'operator', width : 60, align : 'center'}, + {header : "与消毒员交接时间", dataIndex : 'transitionTime', width : 60, align : 'center'}, + {header : "灭菌接收员", dataIndex : 'takeover', width : 60, align : 'center'}, + {header : "灭菌时间", dataIndex : 'sterileEndTime', width : 60, align : 'center'}, + {header : "灭菌员", dataIndex : 'sterilizationUser', width : 60, align : 'center'}, + {header : "灭菌炉", dataIndex : 'sterilizerName', width : 100, align : 'center'}, + {header : "炉次", dataIndex : 'sterileFrequency', width : 40, align : 'center'}, + {header : "发放时间", dataIndex : 'invoiceSendTime', width : 60, align : 'center'}, + {header : "发放员", dataIndex : 'invoiceSender', width : 60, align : 'center'} + ] + } +} var appropriationListConfig = { headerFooter : [ // 页眉名称 @@ -1932,5 +1968,7 @@ //调拨出库单 appropriationOutList : appropriationOutListConfig, //灭菌交接记录单 - sterilizationTransitionRecord:sterilizationTransitionRecordConfig + sterilizationTransitionRecord:sterilizationTransitionRecordConfig, + //签收记录打印。 + signRecordDetail : signRecordDetailConfig }; Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManager.java =================================================================== diff -u -r22236 -r22254 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManager.java (.../SignRecordManager.java) (revision 22236) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManager.java (.../SignRecordManager.java) (revision 22254) @@ -6,6 +6,7 @@ import java.util.Map; import com.forgon.disinfectsystem.entity.basedatamanager.signRecord.SignRecord; +import com.forgon.disinfectsystem.signRecord.vo.SignRecordPrintTousseVo; import com.forgon.disinfectsystem.signRecord.vo.SignRecordVo; import com.forgon.tools.hibernate.BasePoManager; @@ -41,6 +42,12 @@ * @param parseLong */ List> getTousseInstanceBySignRecordId(Long signRecordId,String keyWord); + /** + * 获取签收记录打印的包实例信息 + * @param signRecordId + * @return + */ + public List getSignRecordPrintItem(Long signRecordId); /** Index: forgon-tools/src/main/java/com/forgon/tools/hibernate/BasePoManager.java =================================================================== diff -u -r20493 -r22254 --- forgon-tools/src/main/java/com/forgon/tools/hibernate/BasePoManager.java (.../BasePoManager.java) (revision 20493) +++ forgon-tools/src/main/java/com/forgon/tools/hibernate/BasePoManager.java (.../BasePoManager.java) (revision 22254) @@ -151,6 +151,22 @@ */ public List getByProperty(String property, Long value); /** + * 根据属性值获取对象并排序 + * @param property 属性名 + * @param value 属性值 + * @param orderBy 排序子句 + * @return + */ + public List getByProperty(String property, Long value,String orderBy); + /** + * 根据属性值获取对象并排序,带锁 + * @param property 属性名 + * @param value 属性值 + * @param orderBy 排序子句 + * @return + */ + public List getByPropertyForUpdate(String property, Long value,String orderBy); + /** * 根据属性值获取对象并加锁 * @param property 属性名.不能为空,如果为空,返回null * @param value 属性值.如果为null,返回属性值为null(is null)的对象 Index: forgon-tools/src/main/java/com/forgon/tools/hibernate/ObjectDaoImpl.java =================================================================== diff -u -r22106 -r22254 --- forgon-tools/src/main/java/com/forgon/tools/hibernate/ObjectDaoImpl.java (.../ObjectDaoImpl.java) (revision 22106) +++ forgon-tools/src/main/java/com/forgon/tools/hibernate/ObjectDaoImpl.java (.../ObjectDaoImpl.java) (revision 22254) @@ -557,7 +557,51 @@ return list; } + + @Override + @SuppressWarnings("unchecked") + public List findByProperty(String objectPOName,String propertyName,Object propertyValue,boolean update, + int firstIndex,int maxResults,final String orderField) { + String str = " =:value "; + if(propertyValue == null){ + str = " is null "; + } + final String sql = " where po." + propertyName + str; + List list = (List)getHibernateTemplate().execute( + new HibernateCallback() { + @Override + public Object doInHibernate(Session session) + throws HibernateException { + Query query = createQuery(objectPOName, sql, + orderField, session); + if(update){ + query.setLockMode("po", LockMode.UPGRADE); + } + if(propertyValue != null){ + query.setParameter("value", propertyValue); + } + // maxResult >0,才做分页查询 + if (maxResults >0){ + query.setFirstResult(firstIndex); + query.setMaxResults(maxResults); + } + + List list = query.list(); + if(update){ + // hibenate 的bug,如果对象已经加载了,用悲观锁获取,不会重新加载 + if(list != null && list.size()>0){ + for (Object o : list) { + session.refresh(o, LockMode.UPGRADE); + } + } + } + return list; + } + }); + return list; + } + @Override public List findBySql(String objectPOName, String sql) { List list = getHibernateTemplate().find( Index: forgon-tools/src/main/java/com/forgon/tools/json/JSONUtil.java =================================================================== diff -u -r22189 -r22254 --- forgon-tools/src/main/java/com/forgon/tools/json/JSONUtil.java (.../JSONUtil.java) (revision 22189) +++ forgon-tools/src/main/java/com/forgon/tools/json/JSONUtil.java (.../JSONUtil.java) (revision 22254) @@ -250,11 +250,13 @@ jsonString = JSON.toJSONString(object, filter, features); return jsonString; } - private static String toStringWithJsonlib(Object object, - String[] excludeProperties) { - String jsonString; - + String[] excludeProperties){ + JSONObject json = toJsonObjectWithJsonlib(object,excludeProperties); + return json.toString(); + } + public static JSONObject toJsonObjectWithJsonlib(Object object, + String[] excludeProperties) { // JsonConfig不设为全局变量,避免并发访问导致问题,以后可考虑采用ThreadLocal方式 JsonConfig config = new JsonConfig(); // 这段代码可以解决Integer、Double类型的被默认转换为0的问题,这样null将替换0成为默认转换值.其它类型的设置类似. @@ -272,16 +274,42 @@ return JSONNull.getInstance(); } }); - + config.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss")); PropertyFilter propertyFilter = new JsonPropertyFilter(excludeProperties); config.setJsonPropertyFilter(propertyFilter); config.setExcludes(excludeProperties); //这个方法也是过滤, config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); JSONObject jsonObject = JSONObject.fromObject(object, config); - jsonString = jsonObject.toString(); - return jsonString; + return jsonObject; } + public static JSONArray toJsonArrayWithJsonlib(Collection objs, + String[] excludeProperties) { + // JsonConfig不设为全局变量,避免并发访问导致问题,以后可考虑采用ThreadLocal方式 + JsonConfig config = new JsonConfig(); + // 这段代码可以解决Integer、Double类型的被默认转换为0的问题,这样null将替换0成为默认转换值.其它类型的设置类似. + config.registerDefaultValueProcessor(Integer.class, + new DefaultValueProcessor() { + @Override + public Object getDefaultValue(Class type) { + return JSONNull.getInstance(); + } + }); + config.registerDefaultValueProcessor(Double.class, + new DefaultValueProcessor() { + @Override + public Object getDefaultValue(Class type) { + return JSONNull.getInstance(); + } + }); + config.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss")); + PropertyFilter propertyFilter = new JsonPropertyFilter(excludeProperties); + config.setJsonPropertyFilter(propertyFilter); + config.setExcludes(excludeProperties); //这个方法也是过滤, + config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); + return JSONArray.fromObject(objs, config); + } + public Object parseObject(String jsonString, Class clazz){ Object object = null;