Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoodsBatchStock.java =================================================================== diff -u -r12679 -r12692 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoodsBatchStock.java (.../DisposableGoodsBatchStock.java) (revision 12679) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoodsBatchStock.java (.../DisposableGoodsBatchStock.java) (revision 12692) @@ -57,6 +57,10 @@ private Long wareHouseID;// 仓库ID private String wareHouseName;// 仓库名字 + private Long disposableGoodsID ;// 一次性物品id + + private Long disposableGoodsBatchID ;// 批次id + @JsonIgnore private List identifications = new ArrayList(); @@ -179,6 +183,22 @@ this.wareHouseName = wareHouseName; } + public Long getDisposableGoodsID() { + return disposableGoodsID; + } + + public void setDisposableGoodsID(Long disposableGoodsID) { + this.disposableGoodsID = disposableGoodsID; + } + + public Long getDisposableGoodsBatchID() { + return disposableGoodsBatchID; + } + + public void setDisposableGoodsBatchID(Long disposableGoodsBatchID) { + this.disposableGoodsBatchID = disposableGoodsBatchID; + } + @OneToMany(fetch = FetchType.LAZY) @Cascade(value = { org.hibernate.annotations.CascadeType.ALL }) @JoinColumn(name = "batch_id") Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/IdentificationOfDiposableGoods.java =================================================================== diff -u -r12676 -r12692 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/IdentificationOfDiposableGoods.java (.../IdentificationOfDiposableGoods.java) (revision 12676) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/IdentificationOfDiposableGoods.java (.../IdentificationOfDiposableGoods.java) (revision 12692) @@ -37,6 +37,9 @@ private Long wareHouseID;// 仓库ID private String wareHouseName;// 仓库名字 + private Long disposableGoodsID ;// 一次性物品id + private Long disposableGoodsStockID ;// 一次性物品库存id + private Long disposableGoodsBatchID ;// 批次id @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { @@ -113,6 +116,30 @@ this.wareHouseName = wareHouseName; } + 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; + } + @Override public int compareTo(IdentificationOfDiposableGoods o) { if (entryDate.after(o.getEntryDate())) { Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntry.java =================================================================== diff -u -r12669 -r12692 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntry.java (.../GodownEntry.java) (revision 12669) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntry.java (.../GodownEntry.java) (revision 12692) @@ -1,8 +1,10 @@ package com.forgon.disinfectsystem.entity.assestmanagement; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -12,12 +14,14 @@ import javax.persistence.JoinColumn; import javax.persistence.OneToMany; +import org.apache.commons.lang.StringUtils; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.forgon.tools.db.DatabaseUtil; /** * 入库单 @@ -245,4 +249,20 @@ this.targetWareHouseName = targetWareHouseName; } + public boolean manualIn() { + if (StringUtils.equals(subType, SUBTYPE_MANUE_IN)) { + return true; + } + return false; + } + public void calculateTotalPrice() { + totalPrice = 0.0; + List items = getItemsList(); + for (GodownEntryItem godownEntryItem : items) { + totalPrice += (godownEntryItem.getCost() * godownEntryItem + .getAmount()); + } + setTotalPrice(new BigDecimal(totalPrice).setScale(4, + BigDecimal.ROUND_HALF_UP).doubleValue()); + } } Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java =================================================================== diff -u -r12687 -r12692 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 12687) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 12692) @@ -50,7 +50,7 @@ import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JSONUtil; import com.forgon.tools.util.ForgonDateUtils; -import com.forgon.util.SqlUtils; +import com.forgon.tools.util.SqlUtils; public class GodownEntryManagerImpl implements GodownEntryManager { @@ -122,7 +122,7 @@ this.wareHouseManager = wareHouseManager; } - public void saveOrUpdate(GodownEntry godownEntry) { + private void saveOrUpdate(GodownEntry godownEntry) { objectDao.saveOrUpdate(godownEntry); } @@ -285,7 +285,6 @@ public void saveGodownEntry_TRANS_REQUIRED(GodownEntry entry, Map result) { - setGodownEntrySubType(entry, GodownEntry.SUBTYPE_MANUE_IN); saveGodownEntry_internal(entry, result); } @@ -333,6 +332,10 @@ for (GodownEntry godownEntry : entrys) { saveGodownEntry_internal(godownEntry, idToDisposableGoodsStockMap, idToDisposableGoodsBatchStockMap); + // 设置GodownEntryItem详细列表 + if(godownEntry.manualIn()){ + setReturnDetails(godownEntry, idToDisposableGoodsBatchStockMap,result); + } } } @@ -344,31 +347,11 @@ return (DisposableGoodsBatchStock) objectDao.getBySql( DisposableGoodsBatchStock.class.getSimpleName(), sql); } - // 保存入库单,TODO 代码待重构 + // 保存入库单 private void saveGodownEntry_internal(GodownEntry godownEntry, Map result) { - Set disposableGoodsIDsSet = new HashSet();// 一次性物品id集合 - Set disposableGoodsStockIDsSet = new HashSet();// 一次性物品库存id集合 - Set disposableGoodsBatchIDsSet = new HashSet();// 批次id集合 - Set disposableGoodsBatchStockIDsSet = new HashSet();// 批次库存id集合 - Set disposableGoodsBatchNumberSet = new HashSet();// 批次号集合 - Set identificationIDsSet = new HashSet();// 标识号id集合 - Map idToDisposableGoodsMap = new HashMap(); - Map idToDisposableGoodsStockMap = new HashMap(); - Map idToDisposableGoodsBatchMap = new HashMap(); - Map idToDisposableGoodsBatchStockMap = new HashMap(); - Map idToIdentificationMap = new HashMap(); - // 汇总信息 - summaryDiposableGoodsInfo(godownEntry, disposableGoodsIDsSet,disposableGoodsStockIDsSet,disposableGoodsBatchIDsSet, - disposableGoodsBatchStockIDsSet, disposableGoodsBatchNumberSet, identificationIDsSet); - // 获取并锁定一次性物品相关资源 - lockAndGetDiposableGoodsResources(disposableGoodsIDsSet,disposableGoodsStockIDsSet,disposableGoodsBatchIDsSet, disposableGoodsBatchStockIDsSet, - disposableGoodsBatchNumberSet, identificationIDsSet, idToDisposableGoodsMap,idToDisposableGoodsStockMap,idToDisposableGoodsBatchMap, - idToDisposableGoodsBatchStockMap, idToIdentificationMap); - - saveGodownEntry_internal(godownEntry, idToDisposableGoodsStockMap, - idToDisposableGoodsBatchStockMap); - // 设置GodownEntryItem详细列表 - setReturnDetails(godownEntry, idToDisposableGoodsBatchStockMap,result); + List entrys = new ArrayList(1); + entrys.add(godownEntry); + saveGodownEntry_internal(entrys, result); } /** @@ -379,7 +362,8 @@ private void saveGodownEntry_internal(GodownEntry entry, Map idToDiposableGoodsMap, Map idToBatchStockMap) { - + // 计算总价 + entry.calculateTotalPrice(); // 先保存入库单对象,后面需要入库单ID if(StringUtils.isBlank(entry.getSerialNumber())){// 有可能在其他地方设置了,比如同步入库单/导入入库单 entry.setSerialNumber(serialNumManager @@ -395,10 +379,12 @@ for (int i = 0; i < itemList.size(); ++i) { boolean newBatch = false; GodownEntryItem godownEntryItem = itemList.get(i); + Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); Long diposableGoodsID = godownEntryItem.getDiposableGoodsID(); DisposableGoodsStock diposableGoods = idToDiposableGoodsMap.get(diposableGoodsID); String batchNumber = godownEntryItem.getBatchNumber(); // 保存时,每一项都是新建标识号对象 + Long disposableGoodsBatchID = godownEntryItem.getDisposableGoodsBatchID(); Long batchID = godownEntryItem.getBatchID(); DisposableGoodsBatchStock batchStock = null; @@ -426,6 +412,8 @@ } } // 更新批次相关信息 + batchStock.setDisposableGoodsID(disposableGoodsID); + batchStock.setDisposableGoodsBatchID(disposableGoodsBatchID); batchStock.setBatchNumber(godownEntryItem.getBatchNumber()); batchStock.setCost(godownEntryItem.getCost()); batchStock.setExpDate(godownEntryItem.getExpDate()); @@ -438,6 +426,9 @@ // 新建标识号对象 IdentificationOfDiposableGoods identification = new IdentificationOfDiposableGoods(); + identification.setDisposableGoodsID(disposableGoodsID); + identification.setDisposableGoodsBatchID(disposableGoodsBatchID); + identification.setDisposableGoodsStockID(batchID); identification.setBatchStock(batchStock); batchStock.getIdentifications().add(identification); identification.adjustAmount(godownEntryItem.getAmount()); @@ -797,6 +788,7 @@ //setGodownEntryDefaultWareHouse(curGodownEntry); setGodownEntrySubType(curGodownEntry, GodownEntry.SUBTYPE_MANUE_IN); syncGodownEntryWareHouse(curGodownEntry); + curGodownEntry.calculateTotalPrice(); // 更新入库单对象 saveOrUpdate(curGodownEntry); // 设置GodownEntryItem详细列表 @@ -883,43 +875,50 @@ } private void summaryDiposableGoodsInfo(GodownEntry entry,Set disposableGoodsIDsSet, - Set diposableGoodsIDsSet, Set disposableGoodsBatchIDsSet,Set batchIdsSet, + Set disposableGoodsStockIDsSet, Set disposableGoodsBatchIDsSet,Set disposableGoodsBatchStockIDsSet, Set batchNumbersSet, Set identificationIdsSet) { if(entry == null){ return; } List itemList = entry.getItemsList(); for (GodownEntryItem godownEntryItem : itemList) { - Long diposableGoodsID = godownEntryItem.getDiposableGoodsID(); - if(diposableGoodsID != null){ - diposableGoodsIDsSet.add(diposableGoodsID); + Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); + Long disposableGoodsStockID = godownEntryItem.getDiposableGoodsID(); + if(disposableGoodsID != null){ + disposableGoodsIDsSet.add(disposableGoodsID); } + if(disposableGoodsStockID != null){ + disposableGoodsStockIDsSet.add(disposableGoodsStockID); + } - Long batchID = godownEntryItem.getBatchID(); - - if(batchID != null){ - batchIdsSet.add(batchID); + Long disposableGoodsBatchID = godownEntryItem.getDisposableGoodsBatchID(); + Long disposableGoodsBatchStockID = godownEntryItem.getBatchID(); + if(disposableGoodsBatchID != null){ + disposableGoodsBatchIDsSet.add(disposableGoodsBatchID); } + if(disposableGoodsBatchStockID != null){ + disposableGoodsBatchStockIDsSet.add(disposableGoodsBatchStockID); + } Long identificationID = godownEntryItem.getIdentificationID(); if(identificationID != null){ identificationIdsSet.add(identificationID); } String batchNumber = godownEntryItem.getBatchNumber(); - batchNumbersSet.add(batchNumber); + if(batchNumber != null){ + batchNumbersSet.add(batchNumber); + } } } // 设置GodownEntryItem详细列表 TODO 改为json格式 private void setReturnDetails(GodownEntry entry,Map idToBatchStockMap,Map result){ StringBuffer sb = new StringBuffer(); List items = entry.getItemsList(); - Double totalPrice = 0.0; String supplierName = null; for (GodownEntryItem godownEntryItem : items) { DisposableGoodsStock diposableGoods = godownEntryItem.getDiposableGoods(); - totalPrice += (godownEntryItem.getCost() * godownEntryItem.getAmount()); if(supplierName == null){ supplierName = godownEntryItem.getSupplierName(); } @@ -967,10 +966,6 @@ + specification + ";"); } result.put("itemsDetails", sb.toString()); - - entry.setTotalPrice(new BigDecimal(totalPrice).setScale(4, - BigDecimal.ROUND_HALF_UP).doubleValue()); - objectDao.saveOrUpdate(entry); } // 同步修改发货和退货记录 ,为了不依赖发货和退货两个模块,代码就写在这。 private void synchronizePriceFromIdentificationToInvoiceAndReturnRecord(IdentificationOfDiposableGoods identification, Double oldPrice,Double newPrice){ @@ -1477,6 +1472,7 @@ } // 更新入库单属性 updateGodownEntryProperties(original, entry, curGodownEntry); + curGodownEntry.calculateTotalPrice(); // 更新入库单对象 saveOrUpdate(curGodownEntry); } Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/GodownEntryAction.java =================================================================== diff -u -r12679 -r12692 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/GodownEntryAction.java (.../GodownEntryAction.java) (revision 12679) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/GodownEntryAction.java (.../GodownEntryAction.java) (revision 12692) @@ -249,6 +249,7 @@ //entry = godownEntry; buildGodownEntryParamsForSave(entry); entry.setTime(new Date()); + entry.setSubType(GodownEntry.SUBTYPE_MANUE_IN); godownEntryManager.saveGodownEntry_TRANS_REQUIRED(entry, returnMsg); } saveResult = true; Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntryItem.java =================================================================== diff -u -r12679 -r12692 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntryItem.java (.../GodownEntryItem.java) (revision 12679) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntryItem.java (.../GodownEntryItem.java) (revision 12692) @@ -37,11 +37,15 @@ private String identification; // 标识号 - private Long diposableGoodsID ;// 一次性物品id + private Long diposableGoodsID ;// 一次性物品库存id // TODO 名字待重构 - private Long batchID ;// 批次id + private Long batchID ;// 批次库存id private Long identificationID;// 标识对象的ID,以后不要使用identification来关联了。 + + private Long disposableGoodsID ;// 一次性物品id + + private Long disposableGoodsBatchID ;// 批次id private Date expDate;// 失效期 @@ -143,6 +147,22 @@ this.identificationID = identificationID; } + public Long getDisposableGoodsID() { + return disposableGoodsID; + } + + public void setDisposableGoodsID(Long disposableGoodsID) { + this.disposableGoodsID = disposableGoodsID; + } + + public Long getDisposableGoodsBatchID() { + return disposableGoodsBatchID; + } + + public void setDisposableGoodsBatchID(Long disposableGoodsBatchID) { + this.disposableGoodsBatchID = disposableGoodsBatchID; + } + public Date getExpDate() { return expDate; } @@ -255,6 +275,12 @@ if (!DatabaseUtil.isPoIdValid(identificationID)) { return false; } + if (!DatabaseUtil.isPoIdValid(disposableGoodsID)) { + return false; + } + if (!DatabaseUtil.isPoIdValid(disposableGoodsBatchID)) { + return false; + } if (godownEntry == null) { return false; } @@ -283,6 +309,12 @@ if (!DatabaseUtil.isPoIdValid(identificationID)) { return false; } + if (!DatabaseUtil.isPoIdValid(disposableGoodsID)) { + return false; + } + if (!DatabaseUtil.isPoIdValid(disposableGoodsBatchID)) { + return false; + } if (godownEntry == null) { return false; }