Index: ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/action/ReceiveRecordAction.java =================================================================== diff -u -r13124 -r13528 --- ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/action/ReceiveRecordAction.java (.../ReceiveRecordAction.java) (revision 13124) +++ ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/action/ReceiveRecordAction.java (.../ReceiveRecordAction.java) (revision 13528) @@ -4,7 +4,6 @@ package com.forgon.disinfectsystem.receiverecord.action; import java.io.IOException; -import java.io.PrintWriter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -19,19 +18,27 @@ import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.time.FastDateFormat; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import com.forgon.Constants; +import com.forgon.directory.model.BarcodeDevice; +import com.forgon.disinfectsystem.barcode.service.BarcodeManager; +import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodBatchStockManager; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatchStock; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.receiverecord.ReceiveRecord; import com.forgon.disinfectsystem.entity.receiverecord.ReceiveRecordItem; import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryRecord; import com.forgon.disinfectsystem.receiverecord.service.ReceiveRecordManager; import com.forgon.disinfectsystem.receiverecord.vo.ReceiveRecordItemVo; import com.forgon.disinfectsystem.receiverecord.vo.ReceiveRecordVo; +import com.forgon.tools.MathTools; import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.json.JSONUtil; import com.opensymphony.xwork2.ModelDriven; @@ -52,6 +59,10 @@ private DiposableGoodBatchStockManager diposableGoodBatchStockManager; + private BarcodeManager barcodeManager; + + private SupplyRoomConfigManager supplyRoomConfigManager; + public void setReceiveRecord(ReceiveRecord receiveRecord) { this.receiveRecord = receiveRecord; } @@ -65,6 +76,15 @@ this.diposableGoodBatchStockManager = diposableGoodBatchStockManager; } + public void setBarcodeManager(BarcodeManager barcodeManager) { + this.barcodeManager = barcodeManager; + } + + public void setSupplyRoomConfigManager( + SupplyRoomConfigManager supplyRoomConfigManager) { + this.supplyRoomConfigManager = supplyRoomConfigManager; + } + // 设置ReceiveRecord参数 private void setReceiveRecordPropertiesFromParams(ReceiveRecord entry, String formParams, String items) { @@ -105,13 +125,23 @@ receiveRecordItem.setId(itemId);// itemID receiveRecordItem.setGoodsName(obj.optString("name")); - Long diposableGoodsID = JSONUtil.optLong(obj, - "diposableGoodsID", null);// 一次性物品id - receiveRecordItem.setDiposableGoodsID(diposableGoodsID); + Long disposableGoodsId = JSONUtil.optLong(obj, + "disposableGoodsId", null);// 一次性物品id + Long disposableGoodsStockId = JSONUtil.optLong(obj, + "disposableGoodsStockId", null); + Long disposableGoodsBatchId = JSONUtil.optLong(obj, + "disposableGoodsBatchId", null); + Long disposableGoodsBatchStockId = JSONUtil.optLong(obj, + "disposableGoodsBatchStockId", null); + receiveRecordItem.setDisposableGoodsId(disposableGoodsId); + receiveRecordItem.setDisposableGoodsStockId(disposableGoodsStockId); + receiveRecordItem.setDisposableGoodsBatchId(disposableGoodsBatchId); + receiveRecordItem.setDisposableGoodsBatchStockId(disposableGoodsBatchStockId); - Long objID = JSONUtil.optLong(obj, "objID", null);// objID// - // 批次或者材料 + Long objID = JSONUtil.optLong(obj, "objID", null);// objID, 批次或者材料id + Long expensiveDisposablegoodsId = JSONUtil.optLong(obj, "expensiveDisposablegoodsId", null);// 高值耗材id receiveRecordItem.setObjID(objID); + receiveRecordItem.setExpensiveDisposablegoodsId(expensiveDisposablegoodsId); int amount = Integer.valueOf(obj.optString("amount"));// 数量 receiveRecordItem.setAmount(amount); @@ -122,7 +152,6 @@ String type = obj.optString("type");// type receiveRecordItem.setType(type); receiveRecordItem.setReceiveRecord(entry); - receiveRecordItem.setDiposableGoodsID(diposableGoodsID); receiveRecordItems.add(receiveRecordItem); } @@ -208,6 +237,85 @@ // } // } +public String loadBarcodeDeviceInfo() { + String barcode = StrutsParamUtils.getPraramValue("barcode", ""); + Map returnMsg = new HashMap(); + returnMsg.put("success", false); + returnMsg.put("errMsg", "加载失败"); + + // 需要从发货单和退货记录生成该批次可以退货的价格列表 + try { + if (StringUtils.isBlank(barcode)) { + throw new RuntimeException("条码不能为空!"); + } + BarcodeDevice barcodeDevice = barcodeManager + .getBarcodeByBarcode(barcode); + if (barcodeDevice == null){ + throw new RuntimeException("查无此物品"); + } + Map disposablegoods = null; + if(barcodeDevice instanceof ExpensiveDisposablegoods){// 高值耗材处理 + disposablegoods = buildExpensiveDisposablegoodsInfo((ExpensiveDisposablegoods)barcodeDevice); + returnMsg.put("barcodeType", BarcodeDevice.BARCODE_TYPE_EXPENSIVEDIPOSABLEGOODS); + returnMsg.put("disposablegoods", disposablegoods); + }else{ + throw new RuntimeException("请扫描高值耗材条码"); + } + + returnMsg.put("success", true); + } catch (Exception e) { + e.printStackTrace(); + returnMsg.put("errMsg", e.getMessage()); + } + try { + StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + String jsonStr = JSONUtil.toJSONString(returnMsg,true); + StrutsParamUtils.getResponse().getWriter().print(jsonStr); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + +private Map buildExpensiveDisposablegoodsInfo(ExpensiveDisposablegoods expensiveDisposablegoods) { + Map diposableGood = new HashMap(); + Double cost = expensiveDisposablegoods.getPrice(); + String fluctuationPrice = cost.toString(); + SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); + double f = config.getDiposablePriceFluctuation();// 浮动价格 + if (f > 0) { + double fPrice = MathTools.mul(cost, f, 2); + fluctuationPrice = "" + fPrice; + } + DisposableGoodsBatchStock disposableGoodsBatchStock = expensiveDisposablegoods.getDisposableGoodsBatchStock(); + String barcode = expensiveDisposablegoods.getBarcode(); + String batchNumber = disposableGoodsBatchStock.getBatchNumber(); + String showName = disposableGoodsBatchStock.getDiposableGoods() + .getShowName(); + diposableGood.put("disposableGoodsID", disposableGoodsBatchStock.getDisposableGoodsId()); + diposableGood.put("disposableGoodsStockID", disposableGoodsBatchStock.getDiposableGoods().getId()); + diposableGood.put("disposableGoodsBatchID", disposableGoodsBatchStock.getDisposableGoodsBatchId()); + diposableGood.put("disposableGoodsBatchStockID", disposableGoodsBatchStock.getId()); + diposableGood.put("expensiveDisposablegoodsId", expensiveDisposablegoods.getId()); + diposableGood.put("id", disposableGoodsBatchStock.getDiposableGoods().getId()); + diposableGood.put("goodsType", DisposableGoods.TYPE_EXPENSIVEDIPOSABLEGOODS); + diposableGood.put("barcode", barcode); + diposableGood.put("showName", showName); + diposableGood.put("batchNumber", batchNumber); + diposableGood.put("supplierName", disposableGoodsBatchStock.getSupplierName()); + diposableGood.put("cost", cost); + diposableGood.put("price", cost); + diposableGood.put("expDate", FastDateFormat.getInstance("yyyy-MM-dd") + .format(disposableGoodsBatchStock.getExpDate())); + diposableGood.put("fluctuationPrice", fluctuationPrice); + Long storage = disposableGoodsBatchStock.getStorage(); + if (storage == null || storage < 0) { + storage = 0l; + } + diposableGood.put("storage", storage); + return diposableGood; + } public void loadReceiveRecord() { String id = StrutsParamUtils.getPraramValue("id", ""); if (StringUtils.isNotBlank(id) && !id.equals("0")) { @@ -229,7 +337,7 @@ vo.setType(item.getType()); vo.setAmount(item.getAmount()); if (item.getType().equals(InventoryRecord.TYPE_DISPOSABLEGOOD)) { - vo.setDiposableGoodsID(item.getDiposableGoodsID()); + vo.setDiposableGoodsID(item.getDisposableGoodsStockId()); vo.setObjID(item.getObjID()); DisposableGoodsBatchStock disposableGoodsBatchStock = Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveDisposablegoods.java =================================================================== diff -u -r13522 -r13528 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveDisposablegoods.java (.../ExpensiveDisposablegoods.java) (revision 13522) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveDisposablegoods.java (.../ExpensiveDisposablegoods.java) (revision 13528) @@ -45,6 +45,9 @@ private Long invoiceItemId;// 明细汇总的Id private Long invoiceId;// 发货单Id + private Long receiveRecordItemId;// 领用记录item的ID + private Long receiveRecordId;// 领用记录的ID + private String status = STATUS_IN_WAREHOUSE; public ExpensiveDisposablegoods() { @@ -151,6 +154,22 @@ this.invoiceId = invoiceId; } + public Long getReceiveRecordItemId() { + return receiveRecordItemId; + } + + public void setReceiveRecordItemId(Long receiveRecordItemId) { + this.receiveRecordItemId = receiveRecordItemId; + } + + public Long getReceiveRecordId() { + return receiveRecordId; + } + + public void setReceiveRecordId(Long receiveRecordId) { + this.receiveRecordId = receiveRecordId; + } + public String getStatus() { return status; } @@ -168,6 +187,16 @@ } return true; } + @Transient + public boolean isAssociatedInfoValidForReceive() { + if (!DatabaseUtil.isPoIdValid(receiveRecordId)) { + return false; + } + if (!DatabaseUtil.isPoIdValid(receiveRecordItemId)) { + return false; + } + return true; + } public boolean inWarehouse() { if (STATUS_IN_WAREHOUSE.equals(status)) { return true; Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoodsBatchStock.java =================================================================== diff -u -r13424 -r13528 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoodsBatchStock.java (.../DisposableGoodsBatchStock.java) (revision 13424) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoodsBatchStock.java (.../DisposableGoodsBatchStock.java) (revision 13528) @@ -53,10 +53,10 @@ private Long warehouseID;// 仓库ID private String warehouseName;// 仓库名字 - private Long disposableGoodsID ;// 一次性物品id - private Long disposableGoodsStockID ;// 不保存到数据库,用于json转换 - private Long disposableGoodsBatchID ;// 批次id - private Long disposableGoodsBatchStockID ;// 不保存到数据库,用于json转换 + private Long disposableGoodsId ;// 一次性物品id + private Long disposableGoodsStockId ;// 不保存到数据库,用于json转换 + private Long disposableGoodsBatchId ;// 批次id + private Long disposableGoodsBatchStockId ;// 不保存到数据库,用于json转换 @JsonIgnore private List identifications = new ArrayList(); @@ -183,41 +183,45 @@ this.warehouseName = warehouseName; } - public Long getDisposableGoodsID() { - return disposableGoodsID; + + + public Long getDisposableGoodsId() { + return disposableGoodsId; } - public void setDisposableGoodsID(Long disposableGoodsID) { - this.disposableGoodsID = disposableGoodsID; + public void setDisposableGoodsId(Long disposableGoodsId) { + this.disposableGoodsId = disposableGoodsId; } @Transient - public Long getDisposableGoodsStockID() { + public Long getDisposableGoodsStockId() { if(diposableGoods != null){ return diposableGoods.getId(); } - return disposableGoodsStockID; + return disposableGoodsStockId; } - public void setDisposableGoodsStockID(Long disposableGoodsStockID) { - this.disposableGoodsStockID = disposableGoodsStockID; + public void setDisposableGoodsStockId(Long disposableGoodsStockID) { + this.disposableGoodsStockId = disposableGoodsStockID; } - public Long getDisposableGoodsBatchID() { - return disposableGoodsBatchID; + + + public Long getDisposableGoodsBatchId() { + return disposableGoodsBatchId; } - public void setDisposableGoodsBatchID(Long disposableGoodsBatchID) { - this.disposableGoodsBatchID = disposableGoodsBatchID; + public void setDisposableGoodsBatchId(Long disposableGoodsBatchId) { + this.disposableGoodsBatchId = disposableGoodsBatchId; } @Transient - public Long getDisposableGoodsBatchStockID() { + public Long getDisposableGoodsBatchStockId() { return id; } - public void setDisposableGoodsBatchStockID(Long disposableGoodsBatchStockID) { - this.disposableGoodsBatchStockID = disposableGoodsBatchStockID; + public void setDisposableGoodsBatchStockId(Long disposableGoodsBatchStockID) { + this.disposableGoodsBatchStockId = disposableGoodsBatchStockID; } @OneToMany(fetch = FetchType.LAZY) Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/godownOutToSupplyRoomView.js =================================================================== diff -u -r13119 -r13528 --- ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/godownOutToSupplyRoomView.js (.../godownOutToSupplyRoomView.js) (revision 13119) +++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/godownOutToSupplyRoomView.js (.../godownOutToSupplyRoomView.js) (revision 13528) @@ -10,7 +10,12 @@ ]; var receiveRecordItemPropertiesNames = [ {name : 'id'}, - {name : 'diposableGoodsID'}, + {name : 'barcode'}, + {name : 'disposableGoodsId'}, + {name : 'disposableGoodsStockId'}, + {name : 'disposableGoodsBatchId'}, + {name : 'disposableGoodsBatchStockId'}, + {name : 'expensiveDisposablegoodsId'}, {name : 'batchID'}, {name : 'objID'}, {name : 'name'}, @@ -48,6 +53,8 @@ } for(var i = 0;i idToBatchStockMap) { List items = record.getItems(); - for (ReceiveRecordItem receiveRecordItem : items) { - String type = receiveRecordItem.getType(); - if (StringUtils.equals(type, InventoryRecord.TYPE_DISPOSABLEGOOD)) {// 一次性物品 - if (receiveRecordItem.getDiposableGoodBatchStock() == null) { - Long objID = receiveRecordItem.getObjID(); - DisposableGoodsBatchStock batchStock = idToBatchStockMap - .get(objID); - if (batchStock == null) { - throw new RuntimeException("批次已被删除!"); - } - //receiveRecordItem.setDiposableGoodBatchStock(batchStock); - receiveRecordItem.setDisposableGoodsBatchStockId(batchStock.getId()); - receiveRecordItem.setDiposableGoodsID(batchStock.getDisposableGoodsID()); - receiveRecordItem.setDisposableGoodsId(batchStock.getDisposableGoodsID()); - receiveRecordItem.setDisposableGoodsBatchId(batchStock.getDisposableGoodsBatchID()); - receiveRecordItem.setDisposableGoodsStockId(batchStock.getDisposableGoodsStockID()); - } - } - } +// for (ReceiveRecordItem receiveRecordItem : items) { +// String type = receiveRecordItem.getType(); +// if (StringUtils.equals(type, InventoryRecord.TYPE_DISPOSABLEGOOD)) {// 一次性物品 +// if (receiveRecordItem.getDiposableGoodBatchStock() == null) { +// Long objID = receiveRecordItem.getObjID(); +// DisposableGoodsBatchStock batchStock = idToBatchStockMap +// .get(objID); +// if (batchStock == null) { +// throw new RuntimeException("批次已被删除!"); +// } +// //receiveRecordItem.setDiposableGoodBatchStock(batchStock); +// receiveRecordItem.setDisposableGoodsBatchStockId(batchStock.getId()); +// receiveRecordItem.setDisposableGoodsId(batchStock.getDisposableGoodsID()); +// receiveRecordItem.setDisposableGoodsBatchId(batchStock.getDisposableGoodsBatchID()); +// receiveRecordItem.setDisposableGoodsStockId(batchStock.getDisposableGoodsStockID()); +// } +// } +// } objectDao.save(record); } // 保存领用记录,增加并发控制的版本 public void saveReceiveRecord_internal(ReceiveRecord record){ Set materialDefinitionIDsSet = new HashSet();// 材料定义id集合 - Set diposableGoodsIDsSet = new HashSet();// 一次性物品id集合 - Set batchIdsSet = new HashSet();// 批次id集合 + Set disposableGoodsIDsSet = new HashSet();// 一次性物品id集合 + Set expensiveDisposablegoodsIdsSet = new HashSet(); + Set disposableGoodsBatchIdsSet = new HashSet(); + Set disposableGoodsBatchStockIdsSet = new HashSet(); + Set disposableGoodsStockIdsSet = new HashSet();// 一次性物品id集合 + Set batchIDsSet = new HashSet();// 批次id集合 Set identificationIdsSet = new HashSet();// 标识号id集合 Map idToMaterialDefinitionMap = new HashMap(); - Map idToDiposableGoodsMap = new HashMap(); + Map idToDisposableGoodsMap = new HashMap(); + + Map idToExpensiveDisposablegoodsMap = new HashMap(); + Map barcodeToExpensiveDisposablegoodsMap = new HashMap(); + Map idToDiposableGoodsStockMap = new HashMap(); Map idToBatchStockMap = new HashMap(); Map idToIdentificationMap = new HashMap(); // 汇总信息 summaryMaterialDefinitionInfo(record, materialDefinitionIDsSet); - summaryDiposableGoodsInfo(record, diposableGoodsIDsSet, batchIdsSet,identificationIdsSet); + summaryDiposableGoodsInfo(record, disposableGoodsIDsSet,disposableGoodsStockIdsSet,expensiveDisposablegoodsIdsSet,disposableGoodsBatchIdsSet,disposableGoodsBatchStockIdsSet,batchIDsSet,identificationIdsSet); // 锁定并获取材料定义 // if(materialDefinitionIDsSet.size() == 0){ // throw new RuntimeException("材料已被删除!"); @@ -334,7 +339,7 @@ // if(diposableGoodsIDsSet.size() == 0){ // throw new RuntimeException("物品已被删除!"); // } - lockAndGetDiposableGoodsResources(diposableGoodsIDsSet, batchIdsSet, identificationIdsSet, idToDiposableGoodsMap, idToBatchStockMap, idToIdentificationMap , record.getWarehouseId()); + lockAndGetDiposableGoodsResources(disposableGoodsIDsSet,disposableGoodsStockIdsSet,expensiveDisposablegoodsIdsSet, disposableGoodsBatchStockIdsSet, identificationIdsSet, idToDisposableGoodsMap,idToDiposableGoodsStockMap, idToExpensiveDisposablegoodsMap,idToBatchStockMap, idToIdentificationMap , record.getWarehouseId()); // 保存领用记录,后面需要绑定领用记录和itemID record.setDepartCoding(AcegiHelper.getLoginUser().getCurrentOrgUnitCode()); @@ -352,79 +357,197 @@ receiveRecordItem.setWarehouseId(record.getWarehouseId()); receiveRecordItem.setWarehouseName(record.getWarehouseName()); if(StringUtils.equals(type, InventoryRecord.TYPE_DISPOSABLEGOOD)){// 一次性物品 - Long objID = receiveRecordItem.getObjID(); - DisposableGoodsBatchStock batchStock = idToBatchStockMap.get(objID); - if(batchStock == null){ - throw new RuntimeException("批次已被删除!"); + Long disposableGoodsId = receiveRecordItem.getDisposableGoodsId(); + if(!DatabaseUtil.isPoIdValid(disposableGoodsId)){ + throw new RuntimeException("物品定义id不能为空!"); } - newReceiveRecordDiposableGoodsItem(record, idToDiposableGoodsMap, - idToBatchStockMap, receiveRecordItem); + DisposableGoods disposableGoods = idToDisposableGoodsMap.get(disposableGoodsId); + if(disposableGoods == null){ + throw new RuntimeException(String.format("id为%s的物品定义已被删除!", disposableGoodsId)); + } + if(disposableGoods.expensiveDiposablegoods()){ + newExpensiveDiposablegoodsDisposableGoodsItem(record, idToDisposableGoodsMap,idToDiposableGoodsStockMap, + idToExpensiveDisposablegoodsMap,idToBatchStockMap, receiveRecordItem); + }else{ + newReceiveRecordDiposableGoodsItem(record, idToDisposableGoodsMap,idToDiposableGoodsStockMap, + idToExpensiveDisposablegoodsMap,idToBatchStockMap, receiveRecordItem); + } }else if(StringUtils.equals(type, InventoryRecord.TYPE_MATERIALENTRY)){// 材料 newReceiveRecordItemForMaterialDefinition(record, receiveRecordItem, idToMaterialDefinitionMap); } } // 回写物资系统 writeBackInventory(record); } - private void newReceiveRecordDiposableGoodsItem(ReceiveRecord record, - Map idToDiposableGoodsMap, - Map idToBatchStockMap, + + private void newExpensiveDiposablegoodsDisposableGoodsItem( + ReceiveRecord record, + Map idToDisposableGoodsMap, + Map idToDisposableGoodsStockMap, + Map idToExpensiveDisposablegoodsMap, + Map idToDisposableGoodsBatchStockMap, ReceiveRecordItem receiveRecordItem) { - Long diposableGoodsID = receiveRecordItem.getDiposableGoodsID(); - DisposableGoodsStock diposableGoods = idToDiposableGoodsMap - .get(diposableGoodsID); - Long batchID = receiveRecordItem.getObjID(); - DisposableGoodsBatchStock batchStock = null; + Long disposableGoodsId = receiveRecordItem.getDisposableGoodsId(); + if (!DatabaseUtil.isPoIdValid(disposableGoodsId)) { + throw new RuntimeException("物品定义id不能为空!"); + } + DisposableGoods disposableGoods = idToDisposableGoodsMap + .get(disposableGoodsId); + if (disposableGoods == null) { + throw new RuntimeException(String.format("id为%s的物品定义已被删除!", + disposableGoodsId)); + } + Long disposableGoodsStockId = receiveRecordItem + .getDisposableGoodsStockId(); + if (!DatabaseUtil.isPoIdValid(disposableGoodsStockId)) { + throw new RuntimeException("物品库存id不能为空!"); + } + DisposableGoodsStock disposableGoodsStock = idToDisposableGoodsStockMap + .get(disposableGoodsStockId); + if (disposableGoodsStock == null) { + throw new RuntimeException(String.format("id为%s的物品库存已被删除!", + disposableGoodsId)); + } + Long expensiveDisposablegoodsId = receiveRecordItem.getExpensiveDisposablegoodsId(); + if (!DatabaseUtil.isPoIdValid(expensiveDisposablegoodsId)) { + throw new RuntimeException("高值耗材id不能为空!"); + } + ExpensiveDisposablegoods expensiveDisposablegoods = idToExpensiveDisposablegoodsMap + .get(expensiveDisposablegoodsId); + if (expensiveDisposablegoods == null) { + throw new RuntimeException(String.format("id为%s的高值耗材已被删除!", + expensiveDisposablegoodsId)); + } + Long disposableGoodsBatchStockId = receiveRecordItem.getObjID(); + DisposableGoodsBatchStock disposableGoodsBatchStock = expensiveDisposablegoods.getDisposableGoodsBatchStock(); + if (disposableGoodsBatchStock == null) { + throw new RuntimeException(String.format("id为%s的批次库存已被删除!", + disposableGoodsBatchStockId)); + } + // 库存调整 + expensiveDisposablegoods.setStatus(ExpensiveDisposablegoods.STATUS_RECEIVED); + expensiveDisposablegoods.adjustAmount(-1); + expensiveDisposablegoods.setReceiveRecordId(record.getId()); + expensiveDisposablegoods.setReceiveRecordItemId(receiveRecordItem.getId()); + if(!expensiveDisposablegoods.isAssociatedInfoValidForReceive()){ + throw new RuntimeException("高值耗材关联信息不正确!"); + } + ReceiveRecordDiposableGoodsItem diposableGoodsItem = new ReceiveRecordDiposableGoodsItem(); + diposableGoodsItem.setAmount(1L); + diposableGoodsItem.setDisposableGoodsId(disposableGoodsId); + diposableGoodsItem + .setDisposableGoodsStockId(disposableGoodsStockId); + diposableGoodsItem.setDisposableGoodsBatchId(receiveRecordItem + .getDisposableGoodsBatchId()); + diposableGoodsItem + .setDisposableGoodsBatchStockId(disposableGoodsBatchStockId); + diposableGoodsItem.setExpensiveDisposablegoodsId(expensiveDisposablegoodsId); + diposableGoodsItem.setReceiveRecordID(record.getId());// 关联领用记录ID + diposableGoodsItem + .setReceiveRecordItemID(receiveRecordItem.getId());// 关联领用记录itemID + if (!diposableGoodsItem.isAssociatedInfoValidForExpensiveDisposablegoods()) { + throw new RuntimeException("关联信息不正确!"); + } + objectDao.save(diposableGoodsItem);// 保存diposableGoodsItem + // 领用不需要更新批次相关信息 + long outAmount = receiveRecordItem.getAmount(); + if (outAmount <= 0) { + throw new RuntimeException("领用数量必须大于0!"); + } + objectDao.update(expensiveDisposablegoods); + objectDao.update(disposableGoodsBatchStock); + objectDao.update(disposableGoodsStock); + } + + private void newReceiveRecordDiposableGoodsItem( + ReceiveRecord record, + Map idToDisposableGoodsMap, + Map idToDisposableGoodsStockMap, + Map idToExpensiveDisposablegoodsMap, + Map idToDisposableGoodsBatchStockMap, + ReceiveRecordItem receiveRecordItem) { + Long disposableGoodsId = receiveRecordItem.getDisposableGoodsId(); + if (!DatabaseUtil.isPoIdValid(disposableGoodsId)) { + throw new RuntimeException("物品定义id不能为空!"); + } + DisposableGoods disposableGoods = idToDisposableGoodsMap + .get(disposableGoodsId); + if (disposableGoods == null) { + throw new RuntimeException(String.format("id为%s的物品定义已被删除!", + disposableGoodsId)); + } + Long disposableGoodsStockId = receiveRecordItem + .getDisposableGoodsStockId(); + if (!DatabaseUtil.isPoIdValid(disposableGoodsStockId)) { + throw new RuntimeException("物品库存id不能为空!"); + } + DisposableGoodsStock disposableGoodsStock = idToDisposableGoodsStockMap + .get(disposableGoodsStockId); + if (disposableGoodsStock == null) { + throw new RuntimeException(String.format("id为%s的物品库存已被删除!", + disposableGoodsId)); + } + Long disposableGoodsBatchStockId = receiveRecordItem.getObjID(); + DisposableGoodsBatchStock disposableGoodsBatchStock = null; // 因为批次必须选择,所以batchID不为null - if (batchID == null) { - throw new RuntimeException("批次ID为空!"); - } - batchStock = idToBatchStockMap.get(batchID); - if (batchStock == null) { - // 批次已经不存在 - throw new RuntimeException("批次已被删除!"); + if (disposableGoodsBatchStockId == null) { + throw new RuntimeException("批次库存id不能为空!"); } + disposableGoodsBatchStock = idToDisposableGoodsBatchStockMap + .get(disposableGoodsBatchStockId); + if (disposableGoodsBatchStock == null) { + throw new RuntimeException(String.format("id为%s的批次库存已被删除!", + disposableGoodsBatchStockId)); + } // 领用不需要更新批次相关信息 long outAmount = receiveRecordItem.getAmount(); - if(outAmount <= 0){ + if (outAmount <= 0) { throw new RuntimeException("领用数量必须大于0!"); } // 这是用户在页面看到的领用价格,必须从这些价格的标识号里面领用 Double outPrice = receiveRecordItem.getPrice(); // 开始领用 - for (DisposableGoodsIdentification identification : batchStock.getIdentifications()) { + for (DisposableGoodsIdentification identification : disposableGoodsBatchStock + .getIdentifications()) { Long restAmount = identification.getAmount(); Double price = identification.getPrice(); - if(restAmount <= 0){ + if (restAmount <= 0) { continue; } - if(!outPrice.equals(price)){ + if (!outPrice.equals(price)) { continue; } Long curOutAmount = Math.min(outAmount, restAmount); ReceiveRecordDiposableGoodsItem diposableGoodsItem = new ReceiveRecordDiposableGoodsItem(); diposableGoodsItem.setAmount(curOutAmount); - diposableGoodsItem.setDiposableGoodsID(diposableGoodsID);// 关联一次性物品ID - diposableGoodsItem.setBatchID(batchID);// 关联批次ID + diposableGoodsItem.setDisposableGoodsId(disposableGoodsId); + diposableGoodsItem + .setDisposableGoodsStockId(disposableGoodsStockId); + diposableGoodsItem.setDisposableGoodsBatchId(receiveRecordItem + .getDisposableGoodsBatchId()); + diposableGoodsItem + .setDisposableGoodsBatchStockId(disposableGoodsBatchStockId); + diposableGoodsItem.setBatchID(disposableGoodsBatchStockId);// 关联批次ID diposableGoodsItem.setIdentificationID(identification.getId());// 关联标识号ID diposableGoodsItem.setReceiveRecordID(record.getId());// 关联领用记录ID - diposableGoodsItem.setReceiveRecordItemID(receiveRecordItem.getId());// 关联领用记录itemID - if(!diposableGoodsItem.isAssociatedInfoValid()){ + diposableGoodsItem + .setReceiveRecordItemID(receiveRecordItem.getId());// 关联领用记录itemID + if (!diposableGoodsItem.isAssociatedInfoValid()) { throw new RuntimeException("关联信息不正确!"); } // 库存调整 identification.adjustAmount(-curOutAmount); objectDao.update(identification); - objectDao.update(batchStock); - objectDao.update(diposableGoods); + objectDao.update(disposableGoodsBatchStock); + objectDao.update(disposableGoodsStock); objectDao.save(diposableGoodsItem);// 保存diposableGoodsItem - + outAmount -= curOutAmount; - if(outAmount == 0){ + if (outAmount == 0) { break; } } - if(outAmount > 0){ + if (outAmount > 0) { throw new RuntimeException("库存不够!"); } } @@ -449,30 +572,56 @@ } // 汇总一次性物品信息 private void summaryDiposableGoodsInfo(ReceiveRecord record, - Set diposableGoodsIDsSet, Set batchIDsSet,Set identificationIdsSet) { + Set disposableGoodsIDsSet , + Set diposableGoodsStockIDsSet, + Set expensiveDisposableoodsIdsSet , + Set disposableGoodsBatchIdsSet , + Set disposableGoodsBatchStockIdsSet , + Set batchIDsSet,Set identificationIdsSet) { if(record == null){ throw new RuntimeException("记录为空!"); } Set itemIDs = new HashSet(); List items = record.getItems(); for (ReceiveRecordItem receiveRecordItem : items) { + String type = receiveRecordItem.getType(); + if(!StringUtils.equals(type, InventoryRecord.TYPE_DISPOSABLEGOOD)){// 是否为一次性物品 + continue; + } Long itemID = receiveRecordItem.getId(); if(itemID != null){ itemIDs.add(itemID); } - String type = receiveRecordItem.getType(); - if(!StringUtils.equals(type, InventoryRecord.TYPE_DISPOSABLEGOOD)){// 是否为一次性物品 - continue; + Long disposableGoodsId = receiveRecordItem.getDisposableGoodsId(); + if(disposableGoodsId != null){ + disposableGoodsIDsSet.add(disposableGoodsId); } + Long disposableGoodsStockId = receiveRecordItem.getDisposableGoodsStockId(); + if(disposableGoodsStockId != null){ + diposableGoodsStockIDsSet.add(disposableGoodsStockId); + } + Long disposableGoodsBatchId = receiveRecordItem.getDisposableGoodsBatchId(); + if(disposableGoodsBatchId != null){ + disposableGoodsBatchIdsSet.add(disposableGoodsBatchId); + } + Long disposableGoodsBatchStockId = receiveRecordItem.getDisposableGoodsBatchStockId(); + if(disposableGoodsBatchStockId != null){ + disposableGoodsBatchStockIdsSet.add(disposableGoodsBatchStockId); + } + Long objID = receiveRecordItem.getObjID(); if(objID == null){ throw new RuntimeException("批次ID为空!"); } + Long expensiveDisposablegoodsId = receiveRecordItem.getExpensiveDisposablegoodsId(); batchIDsSet.add(objID);// 批次ID + if(expensiveDisposablegoodsId != null){ + expensiveDisposableoodsIdsSet.add(expensiveDisposablegoodsId); + } } - // 根据批次ID,获取一次性物品ID。 - List diposableGoodsIDs = DisposableGoodsUtils.getDiposableGoodsIDsByBatchIDs(objectDao, batchIDsSet); - diposableGoodsIDsSet.addAll(diposableGoodsIDs); +// // 根据批次ID,获取一次性物品ID。 +// List diposableGoodsIDs = DisposableGoodsUtils.getDiposableGoodsIDsByBatchIDs(objectDao, batchIDsSet); +// diposableGoodsStockIDsSet.addAll(diposableGoodsIDs); // 标识号id Long recordID = record.getId(); if(recordID != null){ @@ -512,78 +661,95 @@ } // 获取并锁定一次性物品相关资源 private void lockAndGetDiposableGoodsResources( - Set diposableGoodsIDsSet, Set batchIdsSet,Set identificationIdsSet, - Map idToDiposableGoodsMap, - Map idToBatchStockMap,Map idToIdentificationMap , Long warehouseId) { + Set disposableGoodsIDsSet, + Set diposableGoodsStockIDsSet, + Set expensiveDisposablegoodsIdsSet, + Set disposableGoodsStockIdsSet,Set identificationIdsSet, + Map idToDisposableGoodsMap, + Map idToDiposableGoodsStockMap, + Map idToExpensiveDisposablegoodsMap, + Map idToDisposableGoodsBatchStockMap, + Map idToIdentificationMap, + Long warehouseId) { // 锁定一次性物品 - String diposableGoodsIDsStr = SqlUtils - .joinToWhereInConditionForNonStringProperties(diposableGoodsIDsSet); - if (StringUtils.isBlank(diposableGoodsIDsStr)) { - return; + List disposableGoodsList = diposableGoodsManager + .getDisposableGoodsByDisposableGoodsIDs_ForUpdate(disposableGoodsIDsSet); + if (disposableGoodsList == null + || disposableGoodsList.size() != disposableGoodsIDsSet.size()) { + throw new RuntimeException("某些物品已被删除!"); } - String diposableGoodsIDsSql = String.format(" where po.disposableGoodsID in (%s) and po.warehouseID=(%s) ", - diposableGoodsIDsStr,warehouseId); - List allDiposableGoods = diposableGoodsManager - .getDiposableGoodsBySql_ForUpdate(diposableGoodsIDsSql); - if (CollectionUtils.isNotEmpty(allDiposableGoods)) { - Set stockIdSet = new HashSet(); - for(DisposableGoodsStock stock : allDiposableGoods){ - stockIdSet.add(stock.getDisposableGoodsID()); - } - if(stockIdSet.size() != diposableGoodsIDsSet.size()){ - throw new RuntimeException("某些物品已被删除!"); - } - }else{ - throw new RuntimeException("物品已被删除!"); + for (DisposableGoods disposableGoods : disposableGoodsList) { + idToDisposableGoodsMap + .put(disposableGoods.getId(), disposableGoods); } - for (DisposableGoodsStock diposableGoods : allDiposableGoods) { - idToDiposableGoodsMap.put(diposableGoods.getDisposableGoodsID(), diposableGoods); + // 获取物品库存 + List disposableGoodsStockList = diposableGoodsManager + .getDisposableGoodsStockByDisposableGoodsStockIDs(diposableGoodsStockIDsSet); + if (disposableGoodsStockList == null + || disposableGoodsStockList.size() != diposableGoodsStockIDsSet + .size()) { + throw new RuntimeException("某些物品已被删除!"); } - // 获取批次 - List batchStocks = null; - String batchIDsStr = SqlUtils - .joinToWhereInConditionForNonStringProperties(batchIdsSet); - if (StringUtils.isNotBlank(batchIDsStr)) { - String batchStockSql = String.format(" where po.disposableGoodsBatchID in (%s) and po.warehouseID=(%s) ", - batchIDsStr,warehouseId); - batchStocks = (List) objectDao.findBySql( - DisposableGoodsBatchStock.class.getSimpleName(), - batchStockSql); + for (DisposableGoodsStock disposableGoodsStock : disposableGoodsStockList) { + idToDiposableGoodsStockMap.put( + disposableGoodsStock.getId(), disposableGoodsStock); } - - if (CollectionUtils.isNotEmpty(batchStocks)) { - Set stockIdSet = new HashSet(); - for(DisposableGoodsBatchStock stock : batchStocks){ - stockIdSet.add(stock.getDisposableGoodsBatchID()); + List expensiveDisposablegoodsList = diposableGoodsManager + .getExpensiveDisposablegoodsByIds(expensiveDisposablegoodsIdsSet); + if (expensiveDisposablegoodsList != null) { + for (ExpensiveDisposablegoods expensiveDisposablegoods : expensiveDisposablegoodsList) { + idToExpensiveDisposablegoodsMap.put( + expensiveDisposablegoods.getId(), + expensiveDisposablegoods); } - if(stockIdSet.size() != batchIdsSet.size()){ + } + // 锁定一次性物品 + String diposableGoodsIDsStr = SqlUtils + .joinToWhereInConditionForNonStringProperties(diposableGoodsStockIDsSet); + if (StringUtils.isBlank(diposableGoodsIDsStr)) { + return; + } + + // 获取批次库存 + String batchStockSql = String + .format(" where %s ", + SqlUtils.getNonStringFieldInCollectionsPredicate("po.id", disposableGoodsStockIdsSet)); + List disposableGoodsBatchStocks = (List) objectDao + .findBySql(DisposableGoodsBatchStock.class.getSimpleName(), + batchStockSql); + + if (CollectionUtils.isNotEmpty(disposableGoodsBatchStocks)) { + if (disposableGoodsBatchStocks.size() != disposableGoodsStockIdsSet.size()) { throw new RuntimeException("某些批次物品已被删除!"); } - }else{ + } else { throw new RuntimeException("某些批次已被删除!"); } - if (batchStocks != null) { - for (DisposableGoodsBatchStock disposableGoodsBatchStock : batchStocks) { - idToBatchStockMap.put(disposableGoodsBatchStock.getDisposableGoodsBatchID(), + if (disposableGoodsBatchStocks != null) { + for (DisposableGoodsBatchStock disposableGoodsBatchStock : disposableGoodsBatchStocks) { + idToDisposableGoodsBatchStockMap.put( + disposableGoodsBatchStock.getId(), disposableGoodsBatchStock); } } // 标识号 List identifications = null; String identificationIDsStr = SqlUtils .joinToWhereInConditionForNonStringProperties(identificationIdsSet); - - if(StringUtils.isNotBlank(identificationIDsStr)){ + + if (StringUtils.isNotBlank(identificationIDsStr)) { String identificationSql = String.format(" where po.id in (%s) ", identificationIDsStr); identifications = (List) objectDao - .findBySql(DisposableGoodsIdentification.class.getSimpleName(), + .findBySql( + DisposableGoodsIdentification.class.getSimpleName(), identificationSql); } - - if(identifications != null){ + + if (identifications != null) { for (DisposableGoodsIdentification identificationOfDiposableGoods : identifications) { - idToIdentificationMap.put(identificationOfDiposableGoods.getId(), + idToIdentificationMap.put( + identificationOfDiposableGoods.getId(), identificationOfDiposableGoods); } } @@ -592,19 +758,29 @@ // 更新领用记录 private void updateReceiveRecord_internal(ReceiveRecord original, ReceiveRecord record, Map result) { + if(true){ + throw new RuntimeException("领用记录不能修改!"); + } Set materialDefinitionIDsSet = new HashSet();// 材料定义id集合 - Set diposableGoodsIDsSet = new HashSet();// 一次性物品id集合 - Set batchIdsSet = new HashSet();// 批次id集合 + Set disposableGoodsIDsSet = new HashSet();// 一次性物品id集合 + Set diposableGoodsStockIdsSet = new HashSet();// 一次性物品id集合 + Set expensiveDisposableoodsIdsSet = new HashSet(); + Set disposableGoodsBatchIdsSet = new HashSet(); + Set disposableGoodsBatchStockIdsSet = new HashSet(); + Set disposableGoodsStockIdsSet = new HashSet();// 批次id集合 Set identificationIdsSet = new HashSet();// 标识号id集合 Map idToMaterialDefinitionMap = new HashMap(); - Map idToDiposableGoodsMap = new HashMap(); + Map idToDisposableGoodsMap = new HashMap(); + Map idToDiposableGoodsStockMap = new HashMap(); + Map idToExpensiveDisposablegoodsMap = new HashMap(); + Map barcodeToExpensiveDisposablegoodsMap = new HashMap(); Map idToBatchStockMap = new HashMap(); Map idToIdentificationMap = new HashMap(); // 汇总信息 summaryMaterialDefinitionInfo(original, materialDefinitionIDsSet); summaryMaterialDefinitionInfo(record, materialDefinitionIDsSet); - summaryDiposableGoodsInfo(original, diposableGoodsIDsSet, batchIdsSet,identificationIdsSet); - summaryDiposableGoodsInfo(record, diposableGoodsIDsSet, batchIdsSet,identificationIdsSet); + summaryDiposableGoodsInfo(original,disposableGoodsIDsSet, diposableGoodsStockIdsSet,expensiveDisposableoodsIdsSet, disposableGoodsBatchIdsSet,disposableGoodsBatchStockIdsSet,disposableGoodsStockIdsSet,identificationIdsSet); + summaryDiposableGoodsInfo(record,disposableGoodsIDsSet, diposableGoodsStockIdsSet,expensiveDisposableoodsIdsSet, disposableGoodsBatchIdsSet,disposableGoodsBatchStockIdsSet,disposableGoodsStockIdsSet,identificationIdsSet); // 锁定并获取领用记录 ReceiveRecord curReceiveRecord = getReceiveRecordById_ForUpdate(original @@ -623,8 +799,8 @@ // if (diposableGoodsIDsSet.size() == 0) { // throw new RuntimeException("物品已被删除!"); // } - lockAndGetDiposableGoodsResources(diposableGoodsIDsSet, batchIdsSet, - identificationIdsSet, idToDiposableGoodsMap, idToBatchStockMap, + lockAndGetDiposableGoodsResources(disposableGoodsIDsSet,diposableGoodsStockIdsSet,expensiveDisposableoodsIdsSet, disposableGoodsStockIdsSet, + identificationIdsSet, idToDisposableGoodsMap,idToDiposableGoodsStockMap, idToExpensiveDisposablegoodsMap,idToBatchStockMap, idToIdentificationMap , record.getWarehouseId()); List originalItemList = original.getItems(); @@ -661,8 +837,8 @@ receiveRecordItem.setWarehouseName(record.getWarehouseName()); String type = receiveRecordItem.getType(); if(StringUtils.equals(type, InventoryRecord.TYPE_DISPOSABLEGOOD)){ - newReceiveRecordItemForDiposableGoods(curReceiveRecord, receiveRecordItem, idToDiposableGoodsMap, idToBatchStockMap, idToIdentificationMap); - newReceiveRecordDiposableGoodsItem(curReceiveRecord, idToDiposableGoodsMap, idToBatchStockMap, receiveRecordItem); + newReceiveRecordItemForDiposableGoods(curReceiveRecord, receiveRecordItem, idToDiposableGoodsStockMap, idToBatchStockMap, idToIdentificationMap); + newReceiveRecordDiposableGoodsItem(curReceiveRecord,idToDisposableGoodsMap, idToDiposableGoodsStockMap, idToExpensiveDisposablegoodsMap,idToBatchStockMap, receiveRecordItem); }else if(StringUtils.equals(type, InventoryRecord.TYPE_MATERIALENTRY)){ newReceiveRecordItemForMaterialDefinition(curReceiveRecord, receiveRecordItem, idToMaterialDefinitionMap); }else { @@ -691,7 +867,7 @@ } String type = originalReceiveRecordItem.getType(); if(StringUtils.equals(type, InventoryRecord.TYPE_DISPOSABLEGOOD)){ - deleteReceiveRecordItemForDiposableGoods(curReceiveRecordItem, idToDiposableGoodsMap, idToBatchStockMap, idToIdentificationMap); + deleteReceiveRecordItemForDiposableGoods(curReceiveRecordItem, idToDiposableGoodsStockMap, idToBatchStockMap, idToIdentificationMap); }else if(StringUtils.equals(type, InventoryRecord.TYPE_MATERIALENTRY)){ deleteReceiveRecordItemForMaterialDefinition(record , curReceiveRecordItem, idToMaterialDefinitionMap); }else { @@ -917,7 +1093,7 @@ if (diposableGoodsItems == null) { throw new RuntimeException("一次性物品明细为空!"); } - Long diposableGoodsID = receiveRecordItem.getDiposableGoodsID(); + Long diposableGoodsID = receiveRecordItem.getDisposableGoodsStockId(); if (diposableGoodsID == null) { throw new RuntimeException("一次性物品ID为空!"); } @@ -1076,25 +1252,32 @@ throw new RuntimeException("领用记录已被删除!"); } Set materialDefinitionIDsSet = new HashSet();// 材料定义id集合 - Set diposableGoodsIDsSet = new HashSet();// 一次性物品id集合 + Set disposableGoodsIDsSet = new HashSet();// 一次性物品id集合 + Set diposableGoodsStockIdsSet = new HashSet();// 一次性物品id集合 + Set expensiveDisposablegoodsIdsSet = new HashSet(); + Set disposableGoodsBatchIdsSet = new HashSet(); + Set disposableGoodsBatchStockIdsSet = new HashSet(); Set batchIdsSet = new HashSet();// 批次id集合 Set identificationIdsSet = new HashSet();// 标识号id集合 Map idToMaterialDefinitionMap = new HashMap(); + Map idToDisposableGoodsMap = new HashMap(); + Map idToExpensiveDisposablegoodsMap = new HashMap(); + Map barcodeToExpensiveDisposablegoodsMap = new HashMap(); Map idToDiposableGoodsMap = new HashMap(); Map idToBatchStockMap = new HashMap(); Map idToIdentificationMap = new HashMap(); // 汇总信息 summaryMaterialDefinitionInfo(receiveRecord, materialDefinitionIDsSet); - summaryDiposableGoodsInfo(receiveRecord, diposableGoodsIDsSet, + summaryDiposableGoodsInfo(receiveRecord, disposableGoodsIDsSet,diposableGoodsStockIdsSet,expensiveDisposablegoodsIdsSet,disposableGoodsBatchIdsSet,disposableGoodsBatchStockIdsSet, batchIdsSet, identificationIdsSet); // 锁定并获取材料定义 lockAndGetMaterialDefinitionResources(materialDefinitionIDsSet, idToMaterialDefinitionMap); // 锁定并获取一次性物品 - lockAndGetDiposableGoodsResources(diposableGoodsIDsSet, - batchIdsSet, identificationIdsSet, idToDiposableGoodsMap, - idToBatchStockMap, idToIdentificationMap , receiveRecord.getWarehouseId()); + lockAndGetDiposableGoodsResources(disposableGoodsIDsSet,diposableGoodsStockIdsSet, + expensiveDisposablegoodsIdsSet,batchIdsSet, identificationIdsSet, idToDisposableGoodsMap,idToDiposableGoodsMap, + idToExpensiveDisposablegoodsMap,idToBatchStockMap, idToIdentificationMap , receiveRecord.getWarehouseId()); // //////// // 删除各个item List itemList = new ArrayList( Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodBatchStockManagerImpl.java =================================================================== diff -u -r13424 -r13528 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodBatchStockManagerImpl.java (.../DiposableGoodBatchStockManagerImpl.java) (revision 13424) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodBatchStockManagerImpl.java (.../DiposableGoodBatchStockManagerImpl.java) (revision 13528) @@ -202,7 +202,7 @@ public List getDisposableGoodsBatchStockByDisposableGoodsId( String disposableGoodsId,String wareHouseId, boolean selectAll) { if (StringUtils.isNotBlank(disposableGoodsId)) { - String sql = " where po.disposableGoodsID = " + disposableGoodsId; + String sql = " where po.disposableGoodsId = " + disposableGoodsId; if (!selectAll) { sql += " and po.storage > 0"; } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r13519 -r13528 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 13519) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 13528) @@ -1820,9 +1820,9 @@ diposableGoodsItem.setBarcode(barcode); diposableGoodsItem.setBatch(diposableGoodBatch .getBatchNumber()); - diposableGoodsItem.setDisposableGoodsID(disposableGoodsBatchStock.getDisposableGoodsID()); - diposableGoodsItem.setDisposableGoodsStockID(disposableGoodsBatchStock.getDisposableGoodsStockID()); - diposableGoodsItem.setDisposableGoodsBatchID(disposableGoodsBatchStock.getDisposableGoodsBatchID()); + diposableGoodsItem.setDisposableGoodsID(disposableGoodsBatchStock.getDisposableGoodsId()); + diposableGoodsItem.setDisposableGoodsStockID(disposableGoodsBatchStock.getDisposableGoodsStockId()); + diposableGoodsItem.setDisposableGoodsBatchID(disposableGoodsBatchStock.getDisposableGoodsBatchId()); diposableGoodsItem.setDisposableGoodsBatchStockID(disposableGoodsBatchStock.getId()); diposableGoodsItem.setIdentificationID(identification.getId());// 标识id关联,这样可以在修改库存价格时做联动修改,jeff li diposableGoodsItem.setInvoice(invoice);// 和发货单关联 @@ -1851,9 +1851,9 @@ .getSettlementPrice() + itemPrice.doubleValue(); invoiceItem.setSettlementPrice(tmpSettlementPrice); } - invoiceItem.setDisposableGoodsId(disposableGoodsBatchStock.getDisposableGoodsID()); - invoiceItem.setDisposableGoodsStockId(disposableGoodsBatchStock.getDisposableGoodsStockID()); - invoiceItem.setDisposableGoodsBatchId(disposableGoodsBatchStock.getDisposableGoodsBatchID()); + invoiceItem.setDisposableGoodsId(disposableGoodsBatchStock.getDisposableGoodsId()); + invoiceItem.setDisposableGoodsStockId(disposableGoodsBatchStock.getDisposableGoodsStockId()); + invoiceItem.setDisposableGoodsBatchId(disposableGoodsBatchStock.getDisposableGoodsBatchId()); invoiceItem.setDisposableGoodsBatchStockId(disposableGoodsBatchStock.getId()); } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerTests.java =================================================================== diff -u -r13424 -r13528 --- ssts-web/src/test/java/test/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerTests.java (.../DiposableGoodsManagerTests.java) (revision 13424) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerTests.java (.../DiposableGoodsManagerTests.java) (revision 13528) @@ -494,7 +494,7 @@ godownEntryItem21.setCost(1.5); godownEntryItem21.setDisposableGoodsID(goods.getDisposableGoodsID()); godownEntryItem21.setDisposableGoodsStockID(goods.getId()); - godownEntryItem21.setDisposableGoodsBatchID(disposableGoodsBatchStock.getDisposableGoodsBatchID()); + godownEntryItem21.setDisposableGoodsBatchID(disposableGoodsBatchStock.getDisposableGoodsBatchId()); godownEntryItem21.setDisposableGoodsBatchStockID(disposableGoodsBatchStock.getId()); godownEntryItem21.setManufacturer("广州白云山制药厂"); godownEntryItem21.setSupplierName("广州捷康医疗"); @@ -548,7 +548,7 @@ godownEntryItem1_1.setCost(1.5); godownEntryItem1_1.setDisposableGoodsID(goods.getDisposableGoodsID()); godownEntryItem1_1.setDisposableGoodsStockID(goods.getId()); - godownEntryItem1_1.setDisposableGoodsBatchID(disposableGoodsBatchStock.getDisposableGoodsBatchID()); + godownEntryItem1_1.setDisposableGoodsBatchID(disposableGoodsBatchStock.getDisposableGoodsBatchId()); godownEntryItem1_1.setDisposableGoodsBatchStockID(disposableGoodsBatchStock.getId()); godownEntryItem1_1.setManufacturer("广州白云山制药厂"); godownEntryItem1_1.setSupplierName("广州捷康医疗"); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/receiverecord/ReceiveRecordDiposableGoodsItem.java =================================================================== diff -u -r12331 -r13528 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/receiverecord/ReceiveRecordDiposableGoodsItem.java (.../ReceiveRecordDiposableGoodsItem.java) (revision 12331) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/receiverecord/ReceiveRecordDiposableGoodsItem.java (.../ReceiveRecordDiposableGoodsItem.java) (revision 13528) @@ -25,16 +25,19 @@ private Long amount;// 数量 - private Long diposableGoodsID;// 一次性物品的ID - private Long batchID;// 批次的ID private Long identificationID;// 标识对象的ID private Long receiveRecordItemID;// 领用记录item的ID private Long receiveRecordID;// 领用记录的ID - + + private Long disposableGoodsId ;// 一次性物品id + private Long disposableGoodsStockId ;// 一次性物品库存id + private Long disposableGoodsBatchId ;// 批次id + private Long disposableGoodsBatchStockId ;// 批次库存id + private Long expensiveDisposablegoodsId; @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { @@ -53,14 +56,6 @@ this.amount = amount; } - public Long getDiposableGoodsID() { - return diposableGoodsID; - } - - public void setDiposableGoodsID(Long diposableGoodsID) { - this.diposableGoodsID = diposableGoodsID; - } - public Long getBatchID() { return batchID; } @@ -93,13 +88,62 @@ this.receiveRecordID = receiveRecordID; } + public Long getDisposableGoodsId() { + return disposableGoodsId; + } + + public void setDisposableGoodsId(Long disposableGoodsId) { + this.disposableGoodsId = disposableGoodsId; + } + + public Long getDisposableGoodsStockId() { + return disposableGoodsStockId; + } + + public void setDisposableGoodsStockId(Long disposableGoodsStockId) { + this.disposableGoodsStockId = disposableGoodsStockId; + } + + public Long getDisposableGoodsBatchId() { + return disposableGoodsBatchId; + } + + public void setDisposableGoodsBatchId(Long disposableGoodsBatchId) { + this.disposableGoodsBatchId = disposableGoodsBatchId; + } + + public Long getDisposableGoodsBatchStockId() { + return disposableGoodsBatchStockId; + } + + public void setDisposableGoodsBatchStockId(Long disposableGoodsBatchStockId) { + this.disposableGoodsBatchStockId = disposableGoodsBatchStockId; + } + + public Long getExpensiveDisposablegoodsId() { + return expensiveDisposablegoodsId; + } + + public void setExpensiveDisposablegoodsId(Long expensiveDisposablegoodsId) { + this.expensiveDisposablegoodsId = expensiveDisposablegoodsId; + } + // 校验关联信息是否正确 @Transient public boolean isAssociatedInfoValid() { - if (!DatabaseUtil.isPoIdValid(diposableGoodsID)) { + if (!DatabaseUtil.isPoIdValid(disposableGoodsId)) { return false; } + if (!DatabaseUtil.isPoIdValid(disposableGoodsStockId)) { + return false; + } + if (!DatabaseUtil.isPoIdValid(disposableGoodsBatchId)) { + return false; + } + if (!DatabaseUtil.isPoIdValid(disposableGoodsBatchStockId)) { + return false; + } if (!DatabaseUtil.isPoIdValid(batchID)) { return false; } @@ -115,5 +159,31 @@ return true; } + @Transient + public boolean isAssociatedInfoValidForExpensiveDisposablegoods() { + if (!DatabaseUtil.isPoIdValid(disposableGoodsId)) { + return false; + } + if (!DatabaseUtil.isPoIdValid(disposableGoodsStockId)) { + return false; + } + if (!DatabaseUtil.isPoIdValid(disposableGoodsBatchId)) { + return false; + } + if (!DatabaseUtil.isPoIdValid(disposableGoodsBatchStockId)) { + return false; + } + if (!DatabaseUtil.isPoIdValid(expensiveDisposablegoodsId)) { + return false; + } + if (!DatabaseUtil.isPoIdValid(receiveRecordID)) { + return false; + } + if (!DatabaseUtil.isPoIdValid(receiveRecordItemID)) { + return false; + } + + return true; + } } Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java =================================================================== diff -u -r13519 -r13528 --- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java (.../ReturnGoodsRecordAction.java) (revision 13519) +++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java (.../ReturnGoodsRecordAction.java) (revision 13528) @@ -420,9 +420,9 @@ String batchNumber = disposableGoodsBatchStock.getBatchNumber(); String showName = disposableGoodsBatchStock.getDiposableGoods() .getShowName(); - diposableGood.put("disposableGoodsID", disposableGoodsBatchStock.getDisposableGoodsID()); + diposableGood.put("disposableGoodsID", disposableGoodsBatchStock.getDisposableGoodsId()); diposableGood.put("disposableGoodsStockID", disposableGoodsBatchStock.getDiposableGoods().getId()); - diposableGood.put("disposableGoodsBatchID", disposableGoodsBatchStock.getDisposableGoodsBatchID()); + diposableGood.put("disposableGoodsBatchID", disposableGoodsBatchStock.getDisposableGoodsBatchId()); diposableGood.put("disposableGoodsBatchStockID", disposableGoodsBatchStock.getId()); diposableGood.put("id", disposableGoodsBatchStock.getDiposableGoods().getId()); diposableGood.put("goodsType", DisposableGoods.TYPE_DIPOSABLEGOODS); @@ -459,9 +459,9 @@ String batchNumber = disposableGoodsBatchStock.getBatchNumber(); String showName = disposableGoodsBatchStock.getDiposableGoods() .getShowName(); - diposableGood.put("disposableGoodsID", disposableGoodsBatchStock.getDisposableGoodsID()); + diposableGood.put("disposableGoodsID", disposableGoodsBatchStock.getDisposableGoodsId()); diposableGood.put("disposableGoodsStockID", disposableGoodsBatchStock.getDiposableGoods().getId()); - diposableGood.put("disposableGoodsBatchID", disposableGoodsBatchStock.getDisposableGoodsBatchID()); + diposableGood.put("disposableGoodsBatchID", disposableGoodsBatchStock.getDisposableGoodsBatchId()); diposableGood.put("disposableGoodsBatchStockID", disposableGoodsBatchStock.getId()); diposableGood.put("expensiveDisposablegoodsId", expensiveDisposablegoods.getId()); diposableGood.put("id", disposableGoodsBatchStock.getDiposableGoods().getId()); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/receiverecord/ReceiveRecordItem.java =================================================================== diff -u -r13370 -r13528 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/receiverecord/ReceiveRecordItem.java (.../ReceiveRecordItem.java) (revision 13370) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/receiverecord/ReceiveRecordItem.java (.../ReceiveRecordItem.java) (revision 13528) @@ -54,7 +54,7 @@ private Long objID;// 批次ID,或者器械包ID。或者材料定义id - private Long diposableGoodsID ;// 一次性物品id + private Long expensiveDisposablegoodsId; private Long disposableGoodsId ;// 一次性物品id private Long disposableGoodsStockId ;// 一次性物品库存id @@ -160,12 +160,12 @@ this.objID = objID; } - public Long getDiposableGoodsID() { - return diposableGoodsID; + public Long getExpensiveDisposablegoodsId() { + return expensiveDisposablegoodsId; } - public void setDiposableGoodsID(Long diposableGoodsID) { - this.diposableGoodsID = diposableGoodsID; + public void setExpensiveDisposablegoodsId(Long expensiveDisposablegoodsId) { + this.expensiveDisposablegoodsId = expensiveDisposablegoodsId; } public Long getDisposableGoodsId() {