Index: forgon-core/src/main/java/com/forgon/log/model/Log.java =================================================================== diff -u -r29561 -r30689 --- forgon-core/src/main/java/com/forgon/log/model/Log.java (.../Log.java) (revision 29561) +++ forgon-core/src/main/java/com/forgon/log/model/Log.java (.../Log.java) (revision 30689) @@ -22,7 +22,8 @@ @DynamicUpdate(true) @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) @Table(name = "Log",indexes = { - @Index(columnList = "logDateTime", name = "logDateTime_index"),@Index(columnList = "model", name = "model_index") + @Index(columnList = "logDateTime", name = "logDateTime_index"),@Index(columnList = "model", name = "model_index"), + @Index(columnList = "operationType", name = "operationType_index") }) public class Log { Index: forgon-core/src/main/java/com/forgon/log/service/LogManagerImpl.java =================================================================== diff -u -r20390 -r30689 --- forgon-core/src/main/java/com/forgon/log/service/LogManagerImpl.java (.../LogManagerImpl.java) (revision 20390) +++ forgon-core/src/main/java/com/forgon/log/service/LogManagerImpl.java (.../LogManagerImpl.java) (revision 30689) @@ -1,5 +1,6 @@ package com.forgon.log.service; +import java.sql.ResultSet; import java.util.Date; import java.util.HashMap; import java.util.Iterator; @@ -17,6 +18,7 @@ import com.forgon.log.model.Log; import com.forgon.runwithtrans.model.RunWithTransNewTask; import com.forgon.runwithtrans.service.RunWithTransNewManager; +import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JSONUtil; import com.forgon.tools.string.StringTools; @@ -203,10 +205,26 @@ if(StringUtils.isBlank(operationType)) return null; try{ - String sql = String.format("where po.operationType=\'%s\' and po.id = (select max(id) from %s where operationType=\'%s\')", - operationType, - Log.class.getSimpleName(), - operationType); + + Long maxId = null; + String sql1 = String.format("select max(id) from %s where operationType=\'%s\'", Log.class.getSimpleName(), operationType); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql1); + while(rs.next()){ + maxId = rs.getLong("id"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + if(!DatabaseUtil.isPoIdValid(maxId)){ + return null; + } + + String sql = String.format("where po.id = %s", maxId); Log log = (Log) objectDao.getBySql(Log.class.getSimpleName(), sql); if( log != null) { Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/dwr/table/DiposableGoodsTableManager.java =================================================================== diff -u -r27761 -r30689 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/dwr/table/DiposableGoodsTableManager.java (.../DiposableGoodsTableManager.java) (revision 27761) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/dwr/table/DiposableGoodsTableManager.java (.../DiposableGoodsTableManager.java) (revision 30689) @@ -22,6 +22,7 @@ import com.alibaba.fastjson.JSONArray; import com.forgon.Constants; import com.forgon.component.grid.GridManager; +import com.forgon.component.grid.vo.GridVo; import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.disinfectsystem.basedatamanager.certificate.service.CertificateManager; @@ -275,6 +276,131 @@ Map sqlWhereParamMap = gridManager .getParamFromView(parameterMap); String type = sqlWhereParamMap.get("type"); + String sql = "where dgb.warehouseID in (select id from "+ WareHouse.class.getSimpleName() +" where orgUnitCode='"+ AcegiHelper.getCurrentOrgUnitCode() +"') and dgb.storage > 0"; + + // 默认告警日期为30天 + Integer disposableGoodsWarningDate = 30; + //如果科室供应室配置有配置一次性物品告警天数,则用科室供应室配置的值 + SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj(); + if(supplyRoomConfig != null && supplyRoomConfig.getDisposableGoodsWarningDate() != null){ + disposableGoodsWarningDate = supplyRoomConfig.getDisposableGoodsWarningDate(); + } + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_YEAR, disposableGoodsWarningDate);// 默认告警日期为30天 + String warningDate = new SimpleDateFormat(Constants.DATEFORMAT_YYYYMMDDHHMMSS).format(calendar + .getTime()); + String currentDate = new SimpleDateFormat(Constants.DATEFORMAT_YYYYMMDDHHMMSS) + .format(new Date()); + switch (type) { + case SystemWarningItemVO.WARNING_TYPE_DIPOSABLEGOODS: + sql += " and dgb.expDate between " + + dateQueryAdapter.dateAdapter(currentDate) + " and " + + dateQueryAdapter.dateAdapter(warningDate); + break; + case SystemWarningItemVO.WARNING_TYPE_DISABLED_DIPOSABLEGOODS: + sql += " and dgb.expDate < " + + dateQueryAdapter.dateAdapter(currentDate); + break; + default: + sql += " and (dgb.expDate between " + + dateQueryAdapter.dateAdapter(currentDate) + " and " + + dateQueryAdapter.dateAdapter(warningDate) + " or dgb.expDate < " + + dateQueryAdapter.dateAdapter(warningDate) + ")"; + break; + } + + GridVo gridVo = gridManager.getGridVoByParameter(parameterMap, DisposableGoodsBatchStock.class.getSimpleName(), sql); + + // 分页 + int start = gridVo.getStart(); + int pageSize = gridVo.getPageSize(); + int end = start + pageSize; + sql = gridVo.getSql(); + sql = sql.replaceAll("po.diposableGoods.", ""); + + sql += "group by dg.id, dg.name, dg.specification, dg.externalCode, dg.referencePrice, dg.minApplyAmount, dg.unit, dg.spelling, "; + sql += "dg.wbCode, dg.isPartOfTousseMaterial, dg.isApplicationMaterial, dg.minStorage, dg.maxStorage"; + + sql = "select dg.id, dg.name, dg.specification, dg.externalCode, dg.referencePrice, dg.minApplyAmount, dg.unit, dg.spelling, " + + "dg.wbCode, dg.isPartOfTousseMaterial, dg.isApplicationMaterial, dg.minStorage, dg.maxStorage, sum(dgb.storage) amount from DisposableGoods dg join DisposableGoodsBatchStock dgb on dgb.disposableGoodsId = dg.id " + + sql; + + String orderStr = gridVo.getOrderStr(); + orderStr = " order by " + orderStr.replace("diposableGoods.", ""); + sql += orderStr.replace("diposableGoods.", ""); + + ResultSet rs = null; + JSONObject result = new JSONObject(); + JSONArray rows = new JSONArray(); + int totalResults = 0; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + if(totalResults >= start && totalResults < end){ + Long id = rs.getLong("id"); + String name = rs.getString("name"); + String specification = rs.getString("specification"); + String externalCode = rs.getString("externalCode"); + + Double referencePrice = rs.getDouble("referencePrice"); + int minApplyAmount = rs.getInt("minApplyAmount"); + String unit = rs.getString("unit"); + String spelling = rs.getString("spelling"); + + String wbCode = rs.getString("wbCode"); + String isPartOfTousseMaterial = rs.getString("isPartOfTousseMaterial"); + String isApplicationMaterial = rs.getString("isApplicationMaterial"); + Long minStorage = rs.getLong("minStorage"); + + Long amount = rs.getLong("amount"); + + JSONObject batch = new JSONObject(); + JSONObject diposableGoods = new JSONObject(); + diposableGoods.put("id", id); + diposableGoods.put("name", name); + diposableGoods.put("specification", specification); + diposableGoods.put("externalCode", externalCode); + + diposableGoods.put("referencePrice", referencePrice); + diposableGoods.put("minApplyAmount", minApplyAmount); + diposableGoods.put("unit", unit); + diposableGoods.put("spelling", spelling); + + diposableGoods.put("wbCode", wbCode); + diposableGoods.put("isPartOfTousseMaterial", isPartOfTousseMaterial); + diposableGoods.put("isApplicationMaterial", isApplicationMaterial); + diposableGoods.put("minStorage", minStorage); + diposableGoods.put("amount", amount); + batch.put("expDateStr", ""); + batch.put("diposableGoods", diposableGoods); + + rows.add(batch); + } + totalResults++; + } + } catch (SQLException e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + result.put("rows", rows); + result.put("totalResults", totalResults); + + return result.toString(); + } + + /** + * 一次性物品告警grid + * + * @param parameterMap + * @return + */ + public String findWarningDiposableGoodsTableList2( + Map> parameterMap) { + Map sqlWhereParamMap = gridManager + .getParamFromView(parameterMap); + String type = sqlWhereParamMap.get("type"); String sql = "where warehouseID in (select id from "+ WareHouse.class.getSimpleName() +" where orgUnitCode='"+ AcegiHelper.getCurrentOrgUnitCode() +"') and po.storage > 0"; // 默认告警日期为30天 @@ -338,6 +464,7 @@ newRows.add(value); } obj.put("rows", newRows); + obj.put("totalResults", newRows.size()); for (Object object : newRows) { JSONObject jsonObj = (JSONObject) object; //获得rows中的diposableGoods json对象