Index: ssts-web/src/main/java/com/forgon/disinfectsystem/systemwarning/service/SystemWarningManagerImpl.java =================================================================== diff -u -r30948 -r31144 --- ssts-web/src/main/java/com/forgon/disinfectsystem/systemwarning/service/SystemWarningManagerImpl.java (.../SystemWarningManagerImpl.java) (revision 30948) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/systemwarning/service/SystemWarningManagerImpl.java (.../SystemWarningManagerImpl.java) (revision 31144) @@ -29,6 +29,7 @@ import com.forgon.disinfectsystem.entity.assestmanagement.Contract; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatchStock; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsInstance; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; @@ -326,6 +327,26 @@ vo.setWarningAmount(disabledDiposableGoodsAmount); warningList.add(vo); } + // 启用一次性物品库存的告警弹窗提醒,英文名称:enableDisposableGoodsStorageAlertWindow(BJ307YY-91) + Boolean enableDisposableGoodsStorageAlertWindow = ConfigUtils.getSystemSetConfigByNameBool("enableDisposableGoodsStorageAlertWindow"); + if(enableDisposableGoodsStorageAlertWindow && roomType == SupplyRoomConfig.SUPPLYROOM_TYPE_FIRST_SUPPLYROOM){ + // 超过最大库存的一次性物品 + int overStorageDisposableGoodsAmount = getOverStorageDisposableGoodsCount(orgUnitCoding); + if (overStorageDisposableGoodsAmount > 0) { + SystemWarningItemVO vo = new SystemWarningItemVO(); + vo.setWarningItemType(SystemWarningItemVO.WARNING_TYPE_OVERSTORAGE_DIPOSABLEGOODS); + vo.setWarningAmount(overStorageDisposableGoodsAmount); + warningList.add(vo); + } + // 小于最小库存的一次性物品 + int belowStorageDisposableGoodsAmount = getBelowStorageDisposableGoodsCount(orgUnitCoding); + if (belowStorageDisposableGoodsAmount > 0) { + SystemWarningItemVO vo = new SystemWarningItemVO(); + vo.setWarningItemType(SystemWarningItemVO.WARNING_TYPE_BELOWSTORAGE_DIPOSABLEGOODS); + vo.setWarningAmount(belowStorageDisposableGoodsAmount); + warningList.add(vo); + } + } } //2.器械包告警(含即将过期与已过期) @@ -580,6 +601,36 @@ } /** + * 小于最小库存的一次性物品 + * @param orgUnitCode + * @return + */ + private int getBelowStorageDisposableGoodsCount(String orgUnitCode) { + if(StringUtils.isBlank(orgUnitCode)){ + return 0; + } + String sql = String.format(" where po.minStorage is not null and po.minStorage > 0 and po.amount < po.minStorage " + + "and po.warehouseID in (select id from %s where orgUnitCode = '%s')", WareHouse.class.getSimpleName(), orgUnitCode); + int goodsAmount = objectDao.countObjectBySql(DisposableGoodsStock.class.getSimpleName(),sql); + return goodsAmount; + } + + /** + * 超过最大库存的一次性物品 + * @param orgUnitCode + * @return + */ + private int getOverStorageDisposableGoodsCount(String orgUnitCode) { + if(StringUtils.isBlank(orgUnitCode)){ + return 0; + } + String sql = String.format(" where po.maxStorage is not null and po.maxStorage > 0 and po.amount > po.maxStorage " + + "and po.warehouseID in (select id from %s where orgUnitCode = '%s')", WareHouse.class.getSimpleName(), orgUnitCode); + int goodsAmount = objectDao.countObjectBySql(DisposableGoodsStock.class.getSimpleName(),sql); + return goodsAmount; + } + + /** * 灭菌炉提示做生物监测 * @param sterilizerList * @return Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/dwr/table/DiposableGoodsTableManager.java =================================================================== diff -u -r30706 -r31144 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/dwr/table/DiposableGoodsTableManager.java (.../DiposableGoodsTableManager.java) (revision 30706) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/dwr/table/DiposableGoodsTableManager.java (.../DiposableGoodsTableManager.java) (revision 31144) @@ -50,6 +50,7 @@ import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.util.ConfigUtils; import com.forgon.tools.util.ForgonStringUtils; import com.forgon.tools.util.SqlUtils; @@ -276,7 +277,7 @@ 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"; + String sql = "where dgb.warehouseID in (select id from "+ WareHouse.class.getSimpleName() +" where orgUnitCode='"+ AcegiHelper.getCurrentOrgUnitCode() +"') "; // 默认告警日期为30天 Integer disposableGoodsWarningDate = 30; @@ -292,21 +293,46 @@ .getTime()); String currentDate = new SimpleDateFormat(Constants.DATEFORMAT_YYYYMMDDHHMMSS) .format(new Date()); + // BJ307YY-91 一次性物品设置了最小最大库存预警功能,用户登录时进行告警弹窗提醒 + Boolean enableDisposableGoodsStorageAlertWindow = ConfigUtils.getSystemSetConfigByNameBool("enableDisposableGoodsStorageAlertWindow"); + if(!enableDisposableGoodsStorageAlertWindow + && (StringUtils.equals(type, SystemWarningItemVO.WARNING_TYPE_OVERSTORAGE_DIPOSABLEGOODS) + || StringUtils.equals(type, SystemWarningItemVO.WARNING_TYPE_BELOWSTORAGE_DIPOSABLEGOODS))){ + type = "全部"; + } switch (type) { case SystemWarningItemVO.WARNING_TYPE_DIPOSABLEGOODS: sql += " and dgb.expDate between " + dateQueryAdapter.dateAdapter(currentDate) + " and " - + dateQueryAdapter.dateAdapter(warningDate); + + dateQueryAdapter.dateAdapter(warningDate) + " and dgb.storage > 0 "; break; case SystemWarningItemVO.WARNING_TYPE_DISABLED_DIPOSABLEGOODS: sql += " and dgb.expDate < " - + dateQueryAdapter.dateAdapter(currentDate); + + dateQueryAdapter.dateAdapter(currentDate) + + " and dgb.storage > 0 "; break; + case SystemWarningItemVO.WARNING_TYPE_OVERSTORAGE_DIPOSABLEGOODS: + sql += " and dgb.diposablegoods_id in (select po.id from DisposableGoodsStock po where po.maxStorage is not null and po.maxStorage > 0 and po.amount > po.maxStorage " + + "and po.warehouseID in (select id from WareHouse where orgUnitCode = '"+ AcegiHelper.getCurrentOrgUnitCode() +"')) "; + break; + case SystemWarningItemVO.WARNING_TYPE_BELOWSTORAGE_DIPOSABLEGOODS: + sql += "and dgb.diposablegoods_id in (select po.id from DisposableGoodsStock po where po.minStorage is not null and po.minStorage > 0 and po.amount < po.minStorage " + + "and po.warehouseID in (select id from WareHouse where orgUnitCode = '"+ AcegiHelper.getCurrentOrgUnitCode() +"')) "; + break; default: + String storageSql = ""; + if(enableDisposableGoodsStorageAlertWindow){ + storageSql = " or (dgb.diposablegoods_id in (select po.id from DisposableGoodsStock po where ((po.maxStorage is not null and po.maxStorage > 0 and po.amount > po.maxStorage)" + + " or (po.minStorage is not null and po.minStorage > 0 and po.amount < po.minStorage)) and po.warehouseID in (select id from WareHouse where orgUnitCode = '"+ AcegiHelper.getCurrentOrgUnitCode() +"')) " + + ")"; + } sql += " and (dgb.expDate between " + dateQueryAdapter.dateAdapter(currentDate) + " and " + dateQueryAdapter.dateAdapter(warningDate) + " or dgb.expDate < " - + dateQueryAdapter.dateAdapter(warningDate) + ")"; + + dateQueryAdapter.dateAdapter(warningDate) + "" + + " and dgb.storage > 0" + + storageSql + + ")"; break; } @@ -352,7 +378,7 @@ String isPartOfTousseMaterial = rs.getString("isPartOfTousseMaterial"); String isApplicationMaterial = rs.getString("isApplicationMaterial"); Long minStorage = rs.getLong("minStorage"); - + Long maxStorage = rs.getLong("maxStorage"); Long amount = rs.getLong("amount"); JSONObject batch = new JSONObject(); @@ -371,6 +397,7 @@ diposableGoods.put("isPartOfTousseMaterial", isPartOfTousseMaterial); diposableGoods.put("isApplicationMaterial", isApplicationMaterial); diposableGoods.put("minStorage", minStorage); + diposableGoods.put("maxStorage", maxStorage); diposableGoods.put("amount", amount); batch.put("expDateStr", ""); batch.put("diposableGoods", diposableGoods); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/systemwarning/SystemWarningItemVO.java =================================================================== diff -u -r29301 -r31144 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/systemwarning/SystemWarningItemVO.java (.../SystemWarningItemVO.java) (revision 29301) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/systemwarning/SystemWarningItemVO.java (.../SystemWarningItemVO.java) (revision 31144) @@ -9,6 +9,8 @@ public static final String WARNING_TYPE_DIPOSABLEGOODS = "即将过期的一次性物品"; public static final String WARNING_TYPE_DISABLED_DIPOSABLEGOODS = "已过期的一次性物品"; + public static final String WARNING_TYPE_OVERSTORAGE_DIPOSABLEGOODS = "超过最大库存的一次性物品"; + public static final String WARNING_TYPE_BELOWSTORAGE_DIPOSABLEGOODS = "小于最小库存的一次性物品"; public static final String WARNING_TYPE_TOUSSE = "即将过期的器械包物品"; public static final String WARNING_TYPE_DISABLED_TOUSSE = "已过期的器械包物品"; public static final String WARNING_TYPE_MATERIAL_MIN_STOCK = "小于最小库存材料";