Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/StorageLocationManager.java =================================================================== diff -u -r26731 -r26797 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/StorageLocationManager.java (.../StorageLocationManager.java) (revision 26731) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/StorageLocationManager.java (.../StorageLocationManager.java) (revision 26797) @@ -3,6 +3,7 @@ import java.util.List; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.StorageLocation; +import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.StorageRecord; public interface StorageLocationManager { @@ -127,5 +128,12 @@ * @return */ public List getStorageLocationByName(String name); + + /** + * 根据库位编码(用户自定义的库位唯一标识),查找库位 + * @param storageLocationCode + * @return + */ + List getStorageLocationByCode(String storageLocationCode); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/StorageRecordManager.java =================================================================== diff -u -r26724 -r26797 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/StorageRecordManager.java (.../StorageRecordManager.java) (revision 26724) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/StorageRecordManager.java (.../StorageRecordManager.java) (revision 26797) @@ -75,5 +75,10 @@ */ public List getStorageRecordByStorageLocation(String storageLocationId); + /** + * 根据器械包实例id批量修改库存记录为取出状态 + * @param tousseInstanceIdList + */ + public void takeOutByTousseInstanceIdList(List tousseInstanceIdList); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/action/StorageLocationAction.java =================================================================== diff -u -r26731 -r26797 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/action/StorageLocationAction.java (.../StorageLocationAction.java) (revision 26731) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/action/StorageLocationAction.java (.../StorageLocationAction.java) (revision 26797) @@ -169,6 +169,8 @@ responce.put("success", true); responce.put("message", "保存成功!"); String name = StrutsParamUtils.getPraramValue("name", ""); + String simpleName = StrutsParamUtils.getPraramValue("storageLocationSimpleName", ""); + String storageLocationCode = StrutsParamUtils.getPraramValue("wareHouseCode", ""); String orgUnitName = StrutsParamUtils.getPraramValue("orgUnitName", ""); String orgUnitCode = StrutsParamUtils.getPraramValue("orgUnitCode", ""); String wareHouseId = StrutsParamUtils.getPraramValue("wareHouseId", ""); @@ -187,7 +189,19 @@ return; } } + // 判断库位编码(用户自定义库位的唯一标识)是否重复 + if (StringUtils.isNotBlank(storageLocationCode)) { + List storageRecordList = storageLocationManager.getStorageLocationByCode(storageLocationCode); + if (CollectionUtils.isNotEmpty(storageRecordList)) { + responce.put("success", false); + responce.put("message", "库位编码为" + storageLocationCode + "的库位已存在!"); + response.getWriter().print(responce.toString()); + return; + } + } storageLocation.setName(name); + storageLocation.setSimpleName(simpleName); + storageLocation.setStorageLocationCode(storageLocationCode); storageLocation.setOrgUnitCode(orgUnitCode); storageLocation.setOrgUnitName(orgUnitName); storageLocation.setWareHouseId(wareHouseId); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/StorageLocationManagerImpl.java =================================================================== diff -u -r26733 -r26797 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/StorageLocationManagerImpl.java (.../StorageLocationManagerImpl.java) (revision 26733) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/StorageLocationManagerImpl.java (.../StorageLocationManagerImpl.java) (revision 26797) @@ -339,5 +339,11 @@ String sql = " where name = '" + name + "' "; return objectDao.findBySql(StorageLocation.class.getSimpleName(), sql); } + + @Override + public List getStorageLocationByCode(String storageLocationCode) { + String sql = String.format(" where po.storageLocationCode = '%s' ", storageLocationCode); + return objectDao.findBySql(StorageLocation.class.getSimpleName(), sql); + } } Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java =================================================================== diff -u -r25697 -r26797 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 25697) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 26797) @@ -25,6 +25,8 @@ import com.forgon.Constants; import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.BarcodeDevice; +import com.forgon.disinfectsystem.basedatamanager.warehouse.service.StorageRecordManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; @@ -47,6 +49,7 @@ import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.date.DateTools; +import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.json.DateJsonValueProcessor; import com.forgon.tools.json.JSONUtil; import com.forgon.tools.string.StringTools; @@ -79,6 +82,8 @@ private ExpensiveGoodsManager expensiveGoodsManager; + private StorageRecordManager storageRecordManager; + public void setExceptionHandler(ExceptionHandler exceptionHandler) { this.exceptionHandler = exceptionHandler; } @@ -103,6 +108,10 @@ this.expensiveGoodsManager = expensiveGoodsManager; } + public void setStorageRecordManager(StorageRecordManager storageRecordManager) { + this.storageRecordManager = storageRecordManager; + } + public void getOperationName() { List list = httpOptionManager .getHttpOptionTextById(HttpOption.SYSTENSETTING_OPERATION_NAME); @@ -299,6 +308,8 @@ tousseInstanceManager,barcodeManager,objectDao); useRecordManager.saveUseRecord_TRANS_REQUIRED(modified); } + // 如果存在库存记录,就需要设置库存记录为“取出”状态 + updateStorageRecordByItems(items); JSONUtil.addSuccess(json, true); } catch (RuntimeException e) { e.printStackTrace(); @@ -310,6 +321,32 @@ StrutsResponseUtils.output(json); } + private void updateStorageRecordByItems(String items) { + if (StringUtils.isBlank(items)) { + return; + } + JSONArray itemsArray = JSONArray.fromObject(items); + if (itemsArray == null) { + return; + } + List tousseInstanceIdList = new ArrayList(); + int size = itemsArray.size(); + for (int i = 0; i < size; i++) { + JSONObject obj = itemsArray.getJSONObject(i); + if (obj == null) continue; + Long itemId = JSONUtil.optLong(obj, "id", null); + String itemBarcode = JSONUtil.optString(obj, "barcode", null); + if(StringUtils.isNotBlank(itemBarcode) && DatabaseUtil.isPoIdValid(itemId)){ + BarcodeDevice bd = barcodeManager.getBarcodeByBarcode(itemBarcode); + if (bd instanceof TousseInstance) { + tousseInstanceIdList.add(itemId); + } + } + } + // 根据器械包实例id批量修改库存记录为取出状态 + storageRecordManager.takeOutByTousseInstanceIdList(tousseInstanceIdList); + } + /** * 使用记录审核与返回为未审核的action */ Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/warehouse/StorageLocation.java =================================================================== diff -u -r26724 -r26797 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/warehouse/StorageLocation.java (.../StorageLocation.java) (revision 26724) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/warehouse/StorageLocation.java (.../StorageLocation.java) (revision 26797) @@ -42,6 +42,14 @@ */ private String name; /** + * 库位编码(用户自定义的库位唯一标识) + */ + private String storageLocationCode; + /** + * 库位名称简称 + */ + private String simpleName; + /** * 所属仓库ID */ private String wareHouseId; @@ -89,6 +97,22 @@ this.name = name; } + public String getStorageLocationCode() { + return storageLocationCode; + } + + public void setStorageLocationCode(String storageLocationCode) { + this.storageLocationCode = storageLocationCode; + } + + public String getSimpleName() { + return simpleName; + } + + public void setSimpleName(String simpleName) { + this.simpleName = simpleName; + } + public String getWareHouseId() { return wareHouseId; } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/dwr/StorageLocationTableManager.java =================================================================== diff -u -r26733 -r26797 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/dwr/StorageLocationTableManager.java (.../StorageLocationTableManager.java) (revision 26733) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/dwr/StorageLocationTableManager.java (.../StorageLocationTableManager.java) (revision 26797) @@ -148,7 +148,9 @@ start = Integer.parseInt(grid_page_start.get(0)); } - String sql = "select ti.tousseName tousseName, ti.sterileEndTime sterileEndTime, ti.validUntil validUntil, tbd.barcode tousseBarcode, bd.barcode barcode, sl.name storageLocationName, sl2.name parentLocation, sl.wareHouseName wareHouseName, sl.orgUnitName orgUnitName, sl.id id, sl.ancestorIds ancestorIds" + + String sql = "select ti.tousseName tousseName, ti.sterileEndTime sterileEndTime, ti.validUntil validUntil, " + + "tbd.barcode tousseBarcode, bd.barcode barcode, sl.name storageLocationName, sl2.name parentLocation, " + + "sl.wareHouseName wareHouseName, sl.orgUnitName orgUnitName, sl.id id, sl.ancestorIds ancestorIds, sl.storageLocationCode storageLocationCode" + " from TousseInstance ti inner join StorageRecord sr on ti.id = sr.tousseInstanceId " + " inner join StorageLocation sl on sl.id = sr.storageLocationId " + " left join StorageLocation sl2 on sl2.id = sl.parentId " + @@ -250,6 +252,7 @@ String orgUnitNameFilter = ""; String tousseBarcodeFilter = ""; String parentStorageLocationPathFilter = ""; + String storageLocationCodeFilter = ""; List tousseNameStr = parameterMap.get("grid_filter_tousseName_string_"); List validUntilStrGt = parameterMap.get("grid_filter_validUntil_date_gt"); List validUntilStrLt = parameterMap.get("grid_filter_validUntil_date_lt"); @@ -262,6 +265,7 @@ List orgUnitNameStr = parameterMap.get("grid_filter_orgUnitName_string_"); List tousseBarcodeStr = parameterMap.get("grid_filter_tousseBarcode_string_"); List parentStorageLocationPathStr = parameterMap.get("grid_filter_parentStorageLocationPath_string_"); + List storageLocationCodeStr = parameterMap.get("grid_filter_storageLocationCode_string_"); // “物品名称” if (CollectionUtils.isNotEmpty(tousseNameStr)) { @@ -308,6 +312,11 @@ parentStorageLocationPathFilter = parentStorageLocationPathStr.get(0); } + // 库位编码 + if (CollectionUtils.isNotEmpty(storageLocationCodeStr)) { + storageLocationCodeFilter = storageLocationCodeStr.get(0); + } + if (StringUtils.isNotBlank(tousseNameFilter)) { sql += "and tousseName like '%"+ tousseNameFilter +"%' "; } @@ -348,6 +357,10 @@ sql += "and tousseBarcode like '%"+ tousseBarcodeFilter +"%' "; } + if (StringUtils.isNotBlank(storageLocationCodeFilter)) { + sql += "and storageLocationCode like '%"+ storageLocationCodeFilter +"%' "; + } + // 排序 List sortByTousseNameList = parameterMap.get("grid_sort_tousseName"); List sortBySterileEndTimeList = parameterMap.get("grid_sort_sterileEndTime"); @@ -430,6 +443,7 @@ String wareHouseName = rs.getString(8); String orgUnitName = rs.getString(9); String parentStorageLocationId = rs.getString(10); + String storageLocationCode = rs.getString(12); JSONObject obj = new JSONObject(); obj.put("tousseName", tousseNameRS); obj.put("sterileEndTime", sterileEndTime); @@ -441,6 +455,7 @@ obj.put("wareHouseName", wareHouseName); obj.put("orgUnitName", orgUnitName); obj.put("parentStorageLocationPath", parentStorageLocationId); + obj.put("storageLocationCode", storageLocationCode); rows.add(obj); } // 添加上级库位 @@ -457,7 +472,7 @@ e.printStackTrace(); } json.put("rows", rows); - json.put("totalResults", rows.size()); + json.put("totalResults", totalResults); return json.toString(); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/StorageRecordManagerImpl.java =================================================================== diff -u -r26731 -r26797 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/StorageRecordManagerImpl.java (.../StorageRecordManagerImpl.java) (revision 26731) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/StorageRecordManagerImpl.java (.../StorageRecordManagerImpl.java) (revision 26797) @@ -5,6 +5,7 @@ import net.sf.json.JSONObject; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import com.forgon.directory.acegi.tools.AcegiHelper; @@ -16,6 +17,8 @@ import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.StorageRecord; import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.SqlUtils; public class StorageRecordManagerImpl extends BasePoManagerImpl implements StorageRecordManager { @@ -206,4 +209,14 @@ return objectDao.findBySql(StorageRecord.class.getSimpleName(), sql); } + @Override + public void takeOutByTousseInstanceIdList(List tousseInstanceIdList) { + if (CollectionUtils.isEmpty(tousseInstanceIdList)) { + return; + } + String sql = String.format(" update %s set status = '%s' where %s ", + StorageRecord.class.getSimpleName(), StorageRecord.OUT, SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseInstanceId", tousseInstanceIdList)); + objectDao.excuteSQL(sql); + } + }