Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/service/ReturnGoodsRecordManagerImpl.java =================================================================== diff -u -r17736 -r17757 --- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/service/ReturnGoodsRecordManagerImpl.java (.../ReturnGoodsRecordManagerImpl.java) (revision 17736) +++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/service/ReturnGoodsRecordManagerImpl.java (.../ReturnGoodsRecordManagerImpl.java) (revision 17757) @@ -28,17 +28,17 @@ import com.forgon.directory.model.OrgUnit; import com.forgon.disinfectsystem.basedatamanager.goodsstock.service.GoodsStockManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; -import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseInstanceUtils; import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodBatchStockManager; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; import com.forgon.disinfectsystem.diposablegoods.util.DisposableGoodsUtils; +import com.forgon.disinfectsystem.entity.assestmanagement.ApplicationSpecificationHelper; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatch; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatchStock; -import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsIdentification; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; import com.forgon.disinfectsystem.entity.assestmanagement.TousseStock; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; @@ -360,6 +360,7 @@ String batchNumber = returnGoodsItem.getBatchNumber(); DisposableGoodsStock disposableGoodsStock = idToDisposableGoodsStockMap.get(disposableGoodsBatchStockID); String diposableGoodsShowName = disposableGoods.getShowName(); + long amountToReturn = returnGoodsItem.getAmountToReturn();// 待退货数量 if(amountToReturn <= 0){ throw new RuntimeException("退货数量必须大于0!"); @@ -795,18 +796,21 @@ if(disposableGoodsBatchStock == null){ throw new RuntimeException("批次库存不能为空!"); } + // 关联批次 returnGoodsItem.setDiposableGoodBatchStock(disposableGoodsBatchStock); if(disposableGoods.expensiveDiposablegoods()){ returnExpensiveDisposablegoods(warehouseID,depart,returnGoodsItem,idToDisposableGoodsMap,disposableGoodsIDToDisposableGoodsStockMap,idToDisposableGoodsStockMap,idToExpensiveDisposablegoodsMap,barcodeToExpensiveDisposablegoodsMap,idToDisposableGoodsBatchMap,idToDisposableGoodsBatchStockMap,returnDiposableGoodsItems); }else{ + // 页面传过来的数量为申领规格数量,此处还原为最小单位数量 + returnGoodsItem.setAmount(Integer.valueOf(ApplicationSpecificationHelper.calculateAmount(returnGoodsItem.getAmount(), disposableGoods.getTransferScale()))); returnDiposableGoods(warehouseID,depart,returnGoodsItem,idToDisposableGoodsMap,disposableGoodsIDToDisposableGoodsStockMap,idToDisposableGoodsStockMap,idToDisposableGoodsBatchMap,idToDisposableGoodsBatchStockMap,returnDiposableGoodsItems); } settlementPriceOfRecord = settlementPriceOfRecord.add(returnGoodsItem.getSettlementPrice()); } returnGoodsRecord.setSettlementPrice(settlementPriceOfRecord); // 创建发货单 - createInvoicePlan(returnGoodsRecord); + createInvoicePlan(returnGoodsRecord,idToDisposableGoodsMap); updateInvoicePlan(invoicePlanId); @@ -931,7 +935,7 @@ } // 创建发货计划单 - createInvoicePlan(returnGoodsRecord); + createInvoicePlan(returnGoodsRecord,null); updateInvoicePlan(invoicePlanId); saveOrUpdate(returnGoodsRecord); @@ -946,7 +950,7 @@ return buildSuccessMsgJsonResult(); } - private boolean createInvoicePlan(ReturnGoodsRecord returnGoodsRecord){ + private boolean createInvoicePlan(ReturnGoodsRecord returnGoodsRecord,Map idToDisposableGoodsMap){ RecyclingApplication recyclingApplication = new RecyclingApplication(); // 生成发货单明细 List tousseItems = new ArrayList(); @@ -966,6 +970,12 @@ String tousseType = null; if(item.disposable()){ tousseType = TousseItem.TYPE_DIPOSABLE_GOODS; + DisposableGoods disposableGoods = idToDisposableGoodsMap.get(returnGoodsItem.getDisposableGoodsID()); + // 数量改为申领规格数量 +// item.setAmount(Integer.valueOf(ApplicationSpecificationHelper.calculateApplicationSpecificationAmount(returnGoodsItem.getReturnedAmount(), disposableGoods.getTransferScale()))); + item.setMiddlePackageAmount(Integer.valueOf(ApplicationSpecificationHelper.calculateApplicationSpecificationAmount(returnGoodsItem.getReturnedAmount(), disposableGoods.getTransferScale()))); + item.setMiddlePackageUnit(disposableGoods.getMiddlePackageUnit()); + item.setTransferScale(disposableGoods.getTransferScale()); // TODO:为item的disposableGoodsId属性赋值 item.setDisposableGoodsId(returnGoodsItem.getDisposableGoodsID()); if(!DatabaseUtil.isPoIdValid(item.getDisposableGoodsId())){ @@ -1588,10 +1598,13 @@ List priceAmountList = new LinkedList(); String isNullFunction = DatabaseUtil.getSqlIsNullFunctionName(dbConnection); - + DisposableGoods disposableGoods = (DisposableGoods)objectDao.getBySql(DisposableGoods.class.getSimpleName(), String.format(" where po.id in(select dbs.disposableGoodsId from %s dbs where dbs.id=%s)", DisposableGoodsBatchStock.class.getSimpleName(),disposableGoodsBatchStockID)); + if(disposableGoods == null){ + throw new RuntimeException("一次性物品定义已被删除!"); + } sql.append(String - .format("select d.price as price,d.fluctuationPrice as fluctuationPrice, sum(%s(d.amount,0)) as sumAmount, sum(%s(d.returnedAmount,0)) as sumReturnedAmount from invoice i,DiposableGoodsItem d" - + " where i.id = d.invoice_id and d.disposableGoodsBatchStockID=%s and %s(d.amount,0)>%s(d.returnedAmount,0) and d.identificationID is not null ", isNullFunction, + .format("select d.price as price,d.fluctuationPrice as fluctuationPrice, sum(%s(d.amount,0)) as sumAmount, sum(%s(d.returnedAmount,0)) as sumReturnedAmount from invoice i inner join DiposableGoodsItem d" + + " on i.id = d.invoice_id inner join DisposableGoods dg on d.disposableGoodsID=dg.id where d.disposableGoodsBatchStockID=%s and %s(d.amount,0)>%s(d.returnedAmount,0) and d.identificationID is not null ", isNullFunction, isNullFunction,disposableGoodsBatchStockID,isNullFunction,isNullFunction)); sql.append(" and i.settleAccountsDepart = '" + depart + "'");// 限定部门 sql.append(" group by d.price, d.fluctuationPrice"); @@ -1600,6 +1613,9 @@ while (resultSet.next()) { Long sumAmount = resultSet.getLong("sumAmount"); Long sumReturnedAmount = resultSet.getLong("sumReturnedAmount"); + + sumAmount = Long.valueOf(ApplicationSpecificationHelper.calculateApplicationSpecificationAmount(sumAmount, disposableGoods.getTransferScale())); + sumReturnedAmount = Long.valueOf(ApplicationSpecificationHelper.calculateApplicationSpecificationAmount(sumReturnedAmount, disposableGoods.getTransferScale())); Double price = resultSet.getDouble("price"); Double fluctuationPrice = resultSet.getDouble("fluctuationPrice"); @@ -1649,7 +1665,7 @@ String isNullFunction = DatabaseUtil.getSqlIsNullFunctionName(dbConnection); sql.append(String - .format("select dg.name,dg.specification,dg.unit, dbs.barcode,dbs.batchNumber,dbs.expDate,dbs.disposableGoodsId,dbs.diposablegoods_id as disposableGoodsStockId,dbs.disposableGoodsBatchId,dbs.id as disposableGoodsBatchStockId,d.identificationID, d.price as price,d.fluctuationPrice as fluctuationPrice, %s(d.amount,0) as sumAmount, %s(d.returnedAmount,0) as sumReturnedAmount from invoice i inner join DiposableGoodsItem d" + .format("select dg.name,dg.specification,dg.applicationSpecification,dg.unit, dbs.barcode,dbs.batchNumber,dbs.expDate,dbs.disposableGoodsId,dbs.diposablegoods_id as disposableGoodsStockId,dbs.disposableGoodsBatchId,dbs.id as disposableGoodsBatchStockId,d.identificationID, d.price as price,d.fluctuationPrice as fluctuationPrice, %s(d.amount,0) as sumAmount, %s(d.returnedAmount,0) as sumReturnedAmount from invoice i inner join DiposableGoodsItem d" + " on i.id = d.invoice_id inner join DisposableGoods dg on d.disposableGoodsID=dg.id inner join DisposableGoodsBatchStock dbs on d.disposableGoodsBatchStockID=dbs.id where i.invoicePlan_ID=%s and %s(d.amount,0)>%s(d.returnedAmount,0) and d.identificationID is not null ", isNullFunction, isNullFunction,invoicePlanId,isNullFunction,isNullFunction)); sql.append(" and i.sourceWarehouseId = " + warehouseID + "");// 限定仓库 @@ -1667,8 +1683,9 @@ } String name = resultSet.getString("name"); String specification = resultSet.getString("specification"); + String applicationSpecification = resultSet.getString("applicationSpecification"); String unit = resultSet.getString("unit"); - String showName = DisposableGoodsUtils.getDisposableGoodsFullName(name, specification); + String showName = DisposableGoodsUtils.getDisposableGoodsFullName(name, specification,applicationSpecification); String barcode = resultSet.getString("barcode"); String batchNumber = resultSet.getString("batchNumber"); Date expDate = resultSet.getTimestamp("expDate"); Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java =================================================================== diff -u -r17723 -r17757 --- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java (.../ReturnGoodsRecordAction.java) (revision 17723) +++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java (.../ReturnGoodsRecordAction.java) (revision 17757) @@ -38,6 +38,8 @@ import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseInstanceUtils; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodBatchStockManager; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; +import com.forgon.disinfectsystem.diposablegoods.util.DisposableGoodsUtils; +import com.forgon.disinfectsystem.entity.assestmanagement.ApplicationSpecificationHelper; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatch; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatchStock; @@ -449,7 +451,7 @@ String barcode = disposableGoodsBatchStock.getBarcode(); String batchNumber = disposableGoodsBatchStock.getBatchNumber(); String showName = disposableGoodsBatchStock.getDiposableGoods() - .getShowNameForSmallestUnit(); + .getShowName(); diposableGood.put("disposableGoodsID", disposableGoodsBatchStock.getDisposableGoodsId()); diposableGood.put("disposableGoodsStockID", disposableGoodsBatchStock.getDiposableGoods().getId()); diposableGood.put("disposableGoodsBatchID", disposableGoodsBatchStock.getDisposableGoodsBatchId()); @@ -468,6 +470,11 @@ if (storage == null || storage < 0) { storage = 0l; } + DisposableGoods disposableGoods = diposableGoodsManager.getDisposableGoodsById(disposableGoodsBatchStock.getDisposableGoodsId()); + if(disposableGoods == null){ + throw new RuntimeException("一次性物品定义已被删除!"); + } + storage = Long.valueOf(ApplicationSpecificationHelper.calculateApplicationSpecificationAmount(storage, disposableGoods.getTransferScale())); diposableGood.put("storage", storage); // 价格列表 List priceAmountList = returnGoodsRecordManager Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java =================================================================== diff -u -r17677 -r17757 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 17677) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 17757) @@ -2195,6 +2195,7 @@ disposableGoodsStock.setPackageSpec(disposableGoods.getPackageSpec()); disposableGoodsStock.setReferencePrice(disposableGoods.getReferencePrice()); disposableGoodsStock.setSpecification(disposableGoods.getSpecification()); + disposableGoodsStock.setApplicationSpecification(disposableGoods.getApplicationSpecification()); disposableGoodsStock.setSpelling(disposableGoods.getSpelling()); disposableGoodsStock.setType(disposableGoods.getType()); disposableGoodsStock.setUnit(disposableGoods.getUnit()); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ApplicationSpecificationHelper.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ApplicationSpecificationHelper.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ApplicationSpecificationHelper.java (revision 17757) @@ -0,0 +1,80 @@ +/** + * + */ +package com.forgon.disinfectsystem.entity.assestmanagement; + +/** + * @author jeffli 2017年4月12日 上午10:48:05 + * + */ +public class ApplicationSpecificationHelper { + private String middlePackageUnit; // 中包装单位 + + private Integer middlePackageAmount; // 中包装数量 + + private Integer transferScale; // 中包装单位装换单位系数 + + public ApplicationSpecificationHelper(String middlePackageUnit, + Integer transferScale) { + super(); + this.middlePackageUnit = middlePackageUnit; + this.transferScale = transferScale; + } + + // 计算申领规格数量 + public int calculateApplicationSpecificationAmount(Integer amount) { + return calculateApplicationSpecificationAmount(amount, transferScale); + } + + public static int calculateApplicationSpecificationAmount(Integer amount, + Integer transferScale) { + if (amount == null) { + return 0; + } + if (transferScale == null) { + return amount; + } + int amountInt = amount.intValue(); + int transferScaleInt = transferScale.intValue(); + + return calculateApplicationSpecificationAmount(amountInt, + transferScaleInt); + } + + public static int calculateApplicationSpecificationAmount(long amount, + long transferScale) { + if (transferScale == 0) { + return (int)amount; + } + if (amount == 0) { + return 0; + } + + return (int) (amount / transferScale); + } + public static int calculateAmount(Integer applicationSpecificationAmount, + Integer transferScale) { + if (applicationSpecificationAmount == null) { + return 0; + } + if (transferScale == null) { + return applicationSpecificationAmount; + } + int applicationSpecificationAmountInt = applicationSpecificationAmount.intValue(); + int transferScaleInt = transferScale.intValue(); + + return calculateAmount(applicationSpecificationAmountInt, + transferScaleInt); + } + public static int calculateAmount(long applicationSpecificationAmount, + long transferScale) { + if (transferScale == 0) { + return (int)applicationSpecificationAmount; + } + if (applicationSpecificationAmount == 0) { + return 0; + } + + return (int) (applicationSpecificationAmount * transferScale); + } +} Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r17557 -r17757 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 17557) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 17757) @@ -4355,7 +4355,8 @@ if(diposableGoods.expensiveDiposablegoods()){ return buildErrorMsgJsonResult("此物品为高值耗材,请扫描高值耗材条码!"); } - String name = diposableGoods.getShowName(); + String showName = diposableGoods.getShowName(); + String name = diposableGoods.getShowNameForSmallestUnit(); DisposableGoodsBatchStock disposableGoodsBatchStock = diposableGoodsManager.getDisposableGoodsStockByBatchNumber(sourceWarehouseId, diposableGoods.getId(), disposableGoodsBatch.getBatchNumber()); if(disposableGoodsBatchStock == null){ @@ -4369,15 +4370,15 @@ } // 验证库存 if(storage <= 0){ - return buildErrorMsgJsonResult(String.format("[%s]库存不足!", name)); + return buildErrorMsgJsonResult(String.format("[%s]库存不足!", showName)); } // ***验证一次性物品*** Date scannedExpDate = disposableGoodsBatch.getExpDate(); Date curDate = new Date(); String scannedExpDateStr = DateFormatUtils.format(scannedExpDate, "yyyy-MM-dd HH:mm:ss"); if (curDate.after(scannedExpDate)) {// 一次性物品失效 - return buildErrorMsgJsonResult(String.format("[%s]已过期", name)); + return buildErrorMsgJsonResult(String.format("[%s]已过期", showName)); } // 获取单价 @@ -4397,8 +4398,8 @@ typeInfoOnScanned.put("disposableGoodsBatchId", disposableGoodsBatchStock.getDisposableGoodsBatchId()); typeInfoOnScanned.put("disposableGoodsBatchStockId", disposableGoodsBatchStock.getId()); JsonObject data = new JsonObject(); - data.addProperty("name", name); - data.addProperty("showTousseName", name); + data.addProperty("name", showName); + data.addProperty("showTousseName", showName); data.addProperty("barcode", disposableGoodsBatch.getBarcode()); data.addProperty("diposable", Constants.STR_YES); data.addProperty("batchNumber",