Index: ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryManager.java =================================================================== diff -u -r20740 -r20812 --- ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryManager.java (.../ExpensiveGoodsGodownEntryManager.java) (revision 20740) +++ ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryManager.java (.../ExpensiveGoodsGodownEntryManager.java) (revision 20812) @@ -7,93 +7,56 @@ import net.sf.json.JSONObject; import com.forgon.directory.model.OrgUnit; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntry; import com.forgon.disinfectsystem.vo.DisposableGoodsStorageAdjustVo; +import com.forgon.tools.hibernate.BasePoManager; -public interface ExpensiveGoodsGodownEntryManager { +public interface ExpensiveGoodsGodownEntryManager extends BasePoManager { - public GodownEntry getGodownEntryById(String id); - public Map deleteGodownEntryById_TRANS_NEW(String id); public Map deleteGodownOutEntryById_TRANS_NEW(String id); - /** - * 根据hql查询语句获取数据 - * @param hql HQL查询语句 - * @return - */ - public List getGodownEntryListByHql(String hql); - // 保存入库单 - public void saveGodownEntry_TRANS_REQUIRED(GodownEntry entry,Map result); + public void saveGodownEntry_TRANS_REQUIRED(ExpensiveGoodsGodownEntry entry,Map result); // 保存入库单,只修改库存,不改其他属性,用于盘点与调拨 - public List saveGodownEntryModifyOnlyAmount_TRANS_REQUIRED(GodownEntry entry,Map result); + public List saveGodownEntryModifyOnlyAmount_TRANS_REQUIRED(ExpensiveGoodsGodownEntry entry,Map result); - public void saveGodownEntry_TRANS_MANDATORY(Collection entrys,Map result); + public void saveGodownEntry_TRANS_MANDATORY(Collection entrys,Map result); // 更新入库单 - public void updateGodownEntry_TRANS_REQUIRED(GodownEntry original,GodownEntry entry,Map result); + public void updateGodownEntry_TRANS_REQUIRED(ExpensiveGoodsGodownEntry original,ExpensiveGoodsGodownEntry entry,Map result); // 保存退库单 - public List saveGodownOutEntry_TRANS_REQUIRED(GodownEntry entry,Map result,boolean needWriteBack); + public List saveGodownOutEntry_TRANS_REQUIRED(ExpensiveGoodsGodownEntry entry,Map result,boolean needWriteBack); - public void saveGodownOutEntry_TRANS_MANDATORY(Collection entrys,Map result); + public void saveGodownOutEntry_TRANS_MANDATORY(Collection entrys,Map result); // 更新退库单 - public void updateGodownOutEntry_TRANS_REQUIRED(GodownEntry original,GodownEntry entry,Map result); + public void updateGodownOutEntry_TRANS_REQUIRED(ExpensiveGoodsGodownEntry original,ExpensiveGoodsGodownEntry entry,Map result); /** - * 保存调拨单,从源仓库产生出库单,从目标仓库产生入库单 - * @param entry - * @param result - */ - public void saveAppropriateEntry_TRANS_REQUIRED(GodownEntry entry,Map result); - public void loadGodownEntryPrintData(String[] invoiceIds,JSONObject jsonObject); - /** * 向入库单\出库单\调拨单添加物品,添加的物品的信息以json对象表示 * @param entry 要添加物品的入库单\出库单 * @param itemObject 物品详细信息的json对象 */ - public void addItemToGodownEntry(GodownEntry entry,JSONObject itemObject); + public void addItemToGodownEntry(ExpensiveGoodsGodownEntry entry,JSONObject itemObject); /** * 更新入库单\出库单\调拨单的信息 * @param entry * @param godownEntryInfo */ - public void updateGodownEntryInfo(GodownEntry entry,JSONObject godownEntryInfo); + public void updateGodownEntryInfo(ExpensiveGoodsGodownEntry entry,JSONObject godownEntryInfo); /** * 设置入库单\出库单\调拨单到对应科室的默认仓库 * @param entry */ - public void setGodownEntryDefaultWareHouse(GodownEntry entry, OrgUnit orgUnit); + public void setGodownEntryDefaultWareHouse(ExpensiveGoodsGodownEntry entry, OrgUnit orgUnit); /** * 设置入库单\出库单\调拨单到对应科室的默认仓库 * @param entry 入库单\出库单\调拨单 * @param orgUnitCoding 科室编码 */ - public void setGodownEntryDefaultWareHouse(GodownEntry entry,String orgUnitCoding); + public void setGodownEntryDefaultWareHouse(ExpensiveGoodsGodownEntry entry,String orgUnitCoding); public void printSomeGodownEntryItem(String items,JSONObject jsonObj); - /** - * 修改入库单的物品明细的各个属性(不支持修改单价、数量等字段)后,需要分别更新到入库明细表、一次n性物品定义、批次定义等表中 - * @param items 物品明细的json数组格式,示例格式: - * [ - * { - id : record.data.id,//入库明细id - disposableGoodsID : record.data.disposableGoodsID,//一次性物品定义id - batchID : record.data.batchID,//批次id - batchNumber : record.data.batchNumber,//批次号 - expDate : record.data.expDate.format('Y-m-d'),//失效期 - supplierName : record.data.supplierName,//供应商 - sterileBatchNumber : record.data.sterileBatchNumber,//灭菌批号 - manufacturer : record.data.manufacturer,//生产厂家 - producingArea : record.data.producingArea,//产地 - certification : record.data.certification,//注册证号 - grade : record.data.grade//类别 - } - * ] - * @param jsonObj 接收返回的参数 - */ - public void modifyGodownEntryItemBaseData(String items,JSONObject jsonObj); } Index: ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryManagerImpl.java =================================================================== diff -u -r20747 -r20812 --- ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryManagerImpl.java (.../ExpensiveGoodsGodownEntryManagerImpl.java) (revision 20747) +++ ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryManagerImpl.java (.../ExpensiveGoodsGodownEntryManagerImpl.java) (revision 20812) @@ -1,6 +1,7 @@ package com.forgon.disinfectsystem.expensiveGoods.service; import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -19,6 +20,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.log4j.Logger; +import org.springframework.stereotype.Service; import com.forgon.Constants; import com.forgon.directory.acegi.tools.AcegiHelper; @@ -27,20 +29,11 @@ import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.common.CssdUtils; -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.DisposableGoodsIdentification; -import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; -import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryDiposableGoodsItem; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItemWB; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryWB; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntry; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntryItem; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsInstance; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; -import com.forgon.disinfectsystem.entity.invoicemanager.DiposableGoodsItem; -import com.forgon.disinfectsystem.entity.receiverecord.ReceiveRecordDiposableGoodsItem; import com.forgon.disinfectsystem.expensiveGoods.util.ExpensiveGoodsUtils; import com.forgon.disinfectsystem.expensivegoods.ExpensiveGoodsServiceContext; import com.forgon.disinfectsystem.inventorymanagement.constant.gdsy.ConstantDefinition; @@ -52,71 +45,32 @@ import com.forgon.log.service.LogManager; import com.forgon.serialnumber.model.SerialNum; import com.forgon.serialnumber.service.SerialNumManager; +import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JSONUtil; import com.forgon.tools.util.ForgonDateUtils; -public class ExpensiveGoodsGodownEntryManagerImpl implements ExpensiveGoodsGodownEntryManager { +@Service("expensiveGoodsGodownEntryManagerTarget") +public class ExpensiveGoodsGodownEntryManagerImpl extends BasePoManagerImpl implements ExpensiveGoodsGodownEntryManager { private Logger logger = Logger.getLogger(ExpensiveGoodsGodownEntryManagerImpl.class); - private ObjectDao objectDao; - - private ExpensiveGoodsManager diposableGoodsManager; - - private ExpensiveGoodsBatchStockManager diposableGoodBatchStockManager; - - private ExpensiveGoodsStockManager disposableGoodsStockManager; - - private WriteBackInventoryHelper writeBackInventoryHelper; - private LogManager appLogManager; - /** - * 回写dao - * 仅省医使用 - */ - private WriteBackInventoryDao writeBackInventoryDao; - private SerialNumManager serialNumManager; private OrgUnitManager orgUnitManager; + private ExpensiveGoodsManager expensiveGoodsManager; + private ExpensiveGoodsGodownEntryItemManager godownEntryItemManager; private WareHouseManager wareHouseManager; private BarcodeManager barcodeManager; - public void setWriteBackInventoryHelper( - WriteBackInventoryHelper writeBackInventoryHelper) { - this.writeBackInventoryHelper = writeBackInventoryHelper; - } - - public void setWriteBackInventoryDao(WriteBackInventoryDao writeBackInventoryDao) { - this.writeBackInventoryDao = writeBackInventoryDao; - } - - public void setObjectDao(ObjectDao objectDao) { - this.objectDao = objectDao; - } - - public void setDiposableGoodsManager( - ExpensiveGoodsManager diposableGoodsManager) { - this.diposableGoodsManager = diposableGoodsManager; - } - - public void setDiposableGoodBatchStockManager( - ExpensiveGoodsBatchStockManager diposableGoodBatchStockManager) { - this.diposableGoodBatchStockManager = diposableGoodBatchStockManager; - } - - public void setDisposableGoodsStockManager( - ExpensiveGoodsStockManager disposableGoodsStockManager) { - this.disposableGoodsStockManager = disposableGoodsStockManager; - } - public void setSerialNumManager(SerialNumManager serialNumManager) { this.serialNumManager = serialNumManager; } @@ -125,6 +79,10 @@ this.orgUnitManager = orgUnitManager; } + public void setExpensiveGoodsManager(ExpensiveGoodsManager expensiveGoodsManager) { + this.expensiveGoodsManager = expensiveGoodsManager; + } + public void setGodownEntryItemManager( ExpensiveGoodsGodownEntryItemManager godownEntryItemManager) { this.godownEntryItemManager = godownEntryItemManager; @@ -134,7 +92,7 @@ this.wareHouseManager = wareHouseManager; } - private void saveOrUpdate(GodownEntry godownEntry) { + private void saveOrUpdate(ExpensiveGoodsGodownEntry godownEntry) { objectDao.saveOrUpdate(godownEntry); } @@ -146,240 +104,55 @@ this.appLogManager = appLogManager; } - @Override - public GodownEntry getGodownEntryById(String id) { - return (GodownEntry) objectDao.getByProperty( - GodownEntry.class.getSimpleName(), "id", Long.valueOf(id)); + private ExpensiveGoodsGodownEntry getGodownEntryById_ForUpdate(String id){ + return (ExpensiveGoodsGodownEntry) objectDao.getByProperty_ForUpdate( + ExpensiveGoodsGodownEntry.class.getSimpleName(), "id", Long.valueOf(id)); } - private GodownEntry getGodownEntryById_ForUpdate(String id){ - return (GodownEntry) objectDao.getByProperty_ForUpdate( - GodownEntry.class.getSimpleName(), "id", Long.valueOf(id)); - } - private void deleteWriteBackForDiposableGoodsStorageOut(GodownEntryWB godownEntryWB){ - // 回写物资系统 - if (writeBackInventoryHelper != null) { - writeBackInventoryHelper - .deleteWriteBackForDiposableGoodsStorageOut(Collections - .singleton(godownEntryWB.getId()),false); - } - } - private void delete(GodownEntry godownEntry) { - objectDao.delete(godownEntry); - } - @Override - public Map deleteGodownEntryById_TRANS_NEW(String id) { - return deleteGodownEntryById_internal(id); - } - @Override - public Map deleteGodownOutEntryById_TRANS_NEW(String id) { - return deleteGodownEntryOutById_internal(id); - } - // 删除入库单 - private Map deleteGodownEntryById_internal(String id) { - Map result = new HashMap(); - result.put("success", false); - try { - // 锁定并获取入库单 - GodownEntry godownEntry = getGodownEntryById_ForUpdate(id); - if (godownEntry == null) { - // 入库单已被删除 - throw new RuntimeException("入库单已被删除!"); - } - 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 disposableGoodsIDToDisposableGoodsStockMap = 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(GodownEntry.TYPE_IN,godownEntry.getWarehouseID(),godownEntry.getWarehouseName(),disposableGoodsIDsSet,disposableGoodsStockIDsSet,disposableGoodsBatchIDsSet, disposableGoodsBatchStockIDsSet, - disposableGoodsBatchNumberSet, identificationIDsSet, idToDisposableGoodsMap,disposableGoodsIDToDisposableGoodsStockMap,idToDisposableGoodsStockMap,idToDisposableGoodsBatchMap, - idToDisposableGoodsBatchStockMap, idToIdentificationMap , null); - - List itemList = new ArrayList(godownEntry.getItemsList()); - for (GodownEntryItem godownEntryItem : itemList) { - deleteGodownEntryItem(godownEntryItem, idToDisposableGoodsMap, disposableGoodsIDToDisposableGoodsStockMap, idToDisposableGoodsStockMap, idToDisposableGoodsBatchMap, idToDisposableGoodsBatchStockMap, idToIdentificationMap); - } - // 构造出库参数 - delete(godownEntry);// 删除入库单 - result.put("success", true); - } catch (Exception e) { - e.printStackTrace(); - result.put("errMsg", e.getMessage()); - throw e; - } - - return result; - } - private GodownEntryWB saveWriteBackRecord(GodownEntry godownEntry) { - // 保存回写记录 - List items = godownEntry.getItemsList(); - List itemsWB = new LinkedList(); - GodownEntryWB godownEntryWB = new GodownEntryWB(); - godownEntryWB.setDeleteTime(new Date()); - godownEntryWB.setItemsList(itemsWB); - godownEntryWB.setOperator(godownEntry.getOperator()); - godownEntryWB.setRemark(godownEntry.getRemark()); - godownEntryWB.setSerialNumber(godownEntry.getSerialNumber()); - godownEntryWB.setSupplierName(godownEntry.getSupplierName()); - godownEntryWB.setTime(godownEntry.getTime()); - godownEntryWB.setTotalPrice(godownEntry.getTotalPrice()); - godownEntryWB.setType(godownEntry.getType()); - - objectDao.save(godownEntryWB); - if (items != null) { - for (GodownEntryItem item : items) { - GodownEntryItemWB itemWB = new GodownEntryItemWB(); - itemWB.setAmount(item.getAmount()); - itemWB.setBatchID(item.getDisposableGoodsBatchStockID()); - itemWB.setBatchNumber(item.getBatchNumber()); - itemWB.setCertification(item.getCertification()); - itemWB.setConclusion(item.getConclusion()); - itemWB.setCost(item.getCost()); - itemWB.setDiposableGoods(item.getDiposableGoods()); - itemWB.setDiposableGoodsID(item.getDisposableGoodsID()); - itemWB.setExpDate(item.getExpDate()); - itemWB.setGodownEntry(godownEntryWB); - itemWB.setIdentification(item.getIdentification()); - itemWB.setIdentificationID(item.getIdentificationID()); - itemWB.setManufacturer(item.getManufacturer()); - itemWB.setNewBatch(item.getNewBatch()); - itemWB.setProducingArea(item.getProducingArea()); - itemWB.setSterileBatchNumber(item.getSterileBatchNumber()); - itemWB.setSupplierName(item.getSupplierName()); - itemsWB.add(itemWB); - objectDao.save(itemWB); - } - } - return godownEntryWB; - } - // 删除出库单 - private Map deleteGodownEntryOutById_internal(String id) { - Map result = new HashMap(); - result.put("success", false); - try { - // 锁定获取出库单 - GodownEntry godownEntry = getGodownEntryById_ForUpdate(id); - if(godownEntry == null){ - throw new RuntimeException("出库单已被删除!"); - } - ExpensiveGoodsServiceContext disposableGoodsServiceContext = new ExpensiveGoodsServiceContext(); - // 汇总信息 - summaryDiposableGoodsInfoForGodownOutEntry2(godownEntry, disposableGoodsServiceContext); - // 获取并锁定一次性物品相关资源 - lockAndGetDiposableGoodsResourcesForCancellingStocks(GodownEntry.TYPE_OUT,godownEntry.getWarehouseID(),godownEntry.getWarehouseName(),disposableGoodsServiceContext); - ////////// - // 保存回写记录 - GodownEntryWB godownEntryWB = saveWriteBackRecord(godownEntry); - // 删除各个item - List itemList = new ArrayList(godownEntry.getItemsList()); - for (GodownEntryItem godownEntryItem : itemList) { - deleteGodownOutEntryItem(godownEntryItem, disposableGoodsServiceContext); - } - // 删除退库单 - delete(godownEntry); - deleteWriteBackForDiposableGoodsStorageOut(godownEntryWB); - result.put("success", true); - } catch (Exception e) { - e.printStackTrace(); - result.put("errMsg", e.getMessage()); - throw e; - } - - return result; - } - - @SuppressWarnings("unchecked") - @Override - public List getGodownEntryListByHql(String hql) { - if (StringUtils.isNotBlank(hql)) { - return objectDao.findBySql(GodownEntry.class.getSimpleName(), hql); - } - return null; - } - - @Override - public void saveGodownEntry_TRANS_REQUIRED(GodownEntry entry, + public void saveGodownEntry_TRANS_REQUIRED(ExpensiveGoodsGodownEntry entry, Map result) { saveGodownEntry_internal(entry, result); } // 保存入库单,只修改库存,不改其他属性,用于盘点与调拨 @Override - public List saveGodownEntryModifyOnlyAmount_TRANS_REQUIRED(GodownEntry entry,Map result){ + public List saveGodownEntryModifyOnlyAmount_TRANS_REQUIRED(ExpensiveGoodsGodownEntry entry,Map result){ return saveGodownEntryModifyOnlyAmount_internal(entry, result , null); } @Override - public void saveGodownEntry_TRANS_MANDATORY(Collection entrys, + public void saveGodownEntry_TRANS_MANDATORY(Collection entrys, Map result) { saveGodownEntry_internal(entrys, result); } - private void saveGodownEntry_internal(Collection entrys, + private void saveGodownEntry_internal(Collection entrys, Map result) { if (entrys == null || entrys.isEmpty()) { return; } - 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 disposableGoodsIDToDisposableGoodsStockMap = new HashMap(); - Map idToDisposableGoodsStockMap = new HashMap(); - Map idToDisposableGoodsBatchMap = new HashMap(); - Map idToDisposableGoodsBatchStockMap = new HashMap(); - Map idToIdentificationMap = new HashMap(); Long warehouseID = null; String warehouseName = null; - for (GodownEntry godownEntry : entrys) { + for (ExpensiveGoodsGodownEntry godownEntry : entrys) { warehouseID = godownEntry.getWarehouseID(); warehouseName = godownEntry.getWarehouseName(); - // 汇总信息 - summaryDiposableGoodsInfo(godownEntry, disposableGoodsIDsSet,disposableGoodsStockIDsSet,disposableGoodsBatchIDsSet, - disposableGoodsBatchStockIDsSet, disposableGoodsBatchNumberSet, identificationIDsSet); } - // 获取并锁定一次性物品相关资源 - lockAndGetDiposableGoodsResources(GodownEntry.TYPE_IN,warehouseID,warehouseName,disposableGoodsIDsSet,disposableGoodsStockIDsSet,disposableGoodsBatchIDsSet, disposableGoodsBatchStockIDsSet, - disposableGoodsBatchNumberSet, identificationIDsSet, idToDisposableGoodsMap,disposableGoodsIDToDisposableGoodsStockMap,idToDisposableGoodsStockMap,idToDisposableGoodsBatchMap, - idToDisposableGoodsBatchStockMap, idToIdentificationMap , null); - for (GodownEntry godownEntry : entrys) { - saveGodownEntry_internal(godownEntry, warehouseID, warehouseName,idToDisposableGoodsMap, disposableGoodsIDToDisposableGoodsStockMap, idToDisposableGoodsStockMap, idToDisposableGoodsBatchMap, idToDisposableGoodsBatchStockMap, idToIdentificationMap); - // 设置GodownEntryItem详细列表 - if(godownEntry.manualIn()){ - setReturnDetails(godownEntry,idToDisposableGoodsBatchMap, idToDisposableGoodsBatchStockMap,result); - } + for (ExpensiveGoodsGodownEntry godownEntry : entrys) { + saveGodownEntry_internal(godownEntry, result); } } - private List saveGodownEntryModifyOnlyAmount_internal(GodownEntry entry, + private List saveGodownEntryModifyOnlyAmount_internal(ExpensiveGoodsGodownEntry entry, Long warehouseID,String warehouseName, - Map idToDisposableGoodsMap,Map disposableGoodsIDToDisposableGoodsStockMap, - Map idToDisposableGoodsStockMap,Map idToDisposableGoodsBatchMap , - Map idToBatchStockMap, Map idToIdentificationMap , - List disposableGoodsStorageAdjustVoList) { + Map idToExpensiveGoodsMap) { save(entry); List newDisposableGoodsStorageAdjustVoList = new ArrayList(); - List itemList = entry.getItemsList(); + List itemList = entry.getItemsList(); for (int i = 0; i < itemList.size(); ++i) { - GodownEntryItem godownEntryItem = itemList.get(i); + ExpensiveGoodsGodownEntryItem godownEntryItem = itemList.get(i); List list = warehousingByGodownEntryItemModifyOnlyAmount(entry, warehouseID, warehouseName, - idToDisposableGoodsMap, idToDisposableGoodsStockMap, - idToBatchStockMap, godownEntryItem , disposableGoodsStorageAdjustVoList); + idToExpensiveGoodsMap, godownEntryItem); if(CollectionUtils.isNotEmpty(list)){ newDisposableGoodsStorageAdjustVoList.addAll(list); } @@ -395,60 +168,42 @@ * @param disposableGoodsStorageAdjustVoList 传入的一次性物品库存调整记录(当调拨的业务场景时,传入的为库存扣减的记录集体,其它业务场景传null) * @return List 最终返回的一次性物品库存调整记录 */ - private List saveGodownEntryModifyOnlyAmount_internal(Collection entrys, + private List saveGodownEntryModifyOnlyAmount_internal(Collection entrys, Map result , List disposableGoodsStorageAdjustVoList) { if (entrys == null || entrys.isEmpty()) { return null; } List newDisposableGoodsStorageAdjustVoList = new ArrayList(); - 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 disposableGoodsIDToDisposableGoodsStockMap = new HashMap(); - Map idToDisposableGoodsStockMap = new HashMap(); - Map idToDisposableGoodsBatchMap = new HashMap(); - Map idToDisposableGoodsBatchStockMap = new HashMap(); - Map idToIdentificationMap = new HashMap(); + Set expensiveGoodsIDsSet = new HashSet();// 高值耗材id集合 + Map idToExpensiveGoodsMap = new HashMap(); Long warehouseID = null; String warehouseName = null; - for (GodownEntry godownEntry : entrys) { + for (ExpensiveGoodsGodownEntry godownEntry : entrys) { warehouseID = godownEntry.getWarehouseID(); warehouseName = godownEntry.getWarehouseName(); // 汇总信息 - summaryDiposableGoodsInfo(godownEntry, disposableGoodsIDsSet,disposableGoodsStockIDsSet,disposableGoodsBatchIDsSet, - disposableGoodsBatchStockIDsSet, disposableGoodsBatchNumberSet, identificationIDsSet); + summaryDiposableGoodsInfo(godownEntry, expensiveGoodsIDsSet); } - + ExpensiveGoodsServiceContext disposableGoodsServiceContext = new ExpensiveGoodsServiceContext(); // 获取并锁定一次性物品相关资源 - lockAndGetDiposableGoodsResources(GodownEntry.TYPE_IN,warehouseID,warehouseName,disposableGoodsIDsSet,disposableGoodsStockIDsSet,disposableGoodsBatchIDsSet, disposableGoodsBatchStockIDsSet, - disposableGoodsBatchNumberSet, identificationIDsSet, idToDisposableGoodsMap,disposableGoodsIDToDisposableGoodsStockMap,idToDisposableGoodsStockMap,idToDisposableGoodsBatchMap, - idToDisposableGoodsBatchStockMap, idToIdentificationMap , disposableGoodsStorageAdjustVoList); - for (GodownEntry godownEntry : entrys) { + lockAndGetDiposableGoodsResources(ExpensiveGoodsGodownEntry.TYPE_IN,warehouseID,warehouseName,disposableGoodsServiceContext); + for (ExpensiveGoodsGodownEntry godownEntry : entrys) { List list = - saveGodownEntryModifyOnlyAmount_internal(godownEntry, warehouseID, warehouseName,idToDisposableGoodsMap, disposableGoodsIDToDisposableGoodsStockMap, idToDisposableGoodsStockMap, idToDisposableGoodsBatchMap, idToDisposableGoodsBatchStockMap, idToIdentificationMap , disposableGoodsStorageAdjustVoList); + saveGodownEntryModifyOnlyAmount_internal(godownEntry, warehouseID, warehouseName,idToExpensiveGoodsMap); if(CollectionUtils.isNotEmpty(list)){ newDisposableGoodsStorageAdjustVoList.addAll(list); } } return newDisposableGoodsStorageAdjustVoList; } - - private DisposableGoodsBatchStock getDiposableGoodBatchStockByBatchNumber( - Long diposableGoodsID, String batchNumber) { - String sql = String.format( - " where po.diposableGoods.id=%s and po.batchNumber='%s' ", - diposableGoodsID.toString(), batchNumber); - return (DisposableGoodsBatchStock) objectDao.getBySql( - DisposableGoodsBatchStock.class.getSimpleName(), sql); + private void summaryDiposableGoodsInfo(ExpensiveGoodsGodownEntry godownEntry, Set expensiveGoodsIDsSet){ + } + // 保存入库单 - private void saveGodownEntry_internal(GodownEntry godownEntry, Map result) { - List entrys = new ArrayList(1); + private void saveGodownEntry_internal(ExpensiveGoodsGodownEntry godownEntry, Map result) { + List entrys = new ArrayList(1); entrys.add(godownEntry); saveGodownEntry_internal(entrys, result); } @@ -460,210 +215,14 @@ * @param disposableGoodsStorageAdjustVoList 传入的一次性物品库存调整记录(当调拨的业务场景时,传入的为库存扣减的记录集体,其它业务场景传null) * @return List 最终返回的一次性物品库存调整记录 */ - private List saveGodownEntryModifyOnlyAmount_internal(GodownEntry godownEntry, Map result , List disposableGoodsStorageAdjustVoList) { - List entrys = new ArrayList(1); + private List saveGodownEntryModifyOnlyAmount_internal(ExpensiveGoodsGodownEntry godownEntry, Map result , List disposableGoodsStorageAdjustVoList) { + List entrys = new ArrayList(1); entrys.add(godownEntry); return saveGodownEntryModifyOnlyAmount_internal(entrys, result , disposableGoodsStorageAdjustVoList); } - - private DisposableGoodsBatch newDisposableGoodsBatch(DisposableGoods diposableGoods,Long warehouseID,String warehouseName,GodownEntryItem godownEntryItem){ - DisposableGoodsBatch disposableGoodsBatch = new DisposableGoodsBatch(); - disposableGoodsBatch.setDiposableGoods(diposableGoods); - disposableGoodsBatch.setBatchNumber(godownEntryItem.getBatchNumber()); - - //设置灭菌批次(灭菌日期/生产日期) - disposableGoodsBatch.setSterileBatchNumber(godownEntryItem.getSterileBatchNumber()); - //供货商 - disposableGoodsBatch.setSupplierName(godownEntryItem.getSupplierName()); - //生产厂家 - disposableGoodsBatch.setManufacturer(godownEntryItem.getManufacturer()); - //产地 - disposableGoodsBatch.setProducingArea(godownEntryItem.getProducingArea()); - //设置为his系统的批次id - disposableGoodsBatch.setBatchIdFromHisSync(godownEntryItem.getBatchIdFromHisSync()); - //深圳南山同步入库时传递的批次batchId - disposableGoodsBatch.setIdentification(godownEntryItem.getIdentification()); -// diposableGoodsManager.saveOrUpdate(disposableGoodsBatch); - return disposableGoodsBatch; - } - private DisposableGoodsBatchStock newDisposableGoodsBatchStock( - DisposableGoods disposableGoods, - DisposableGoodsStock disposableGoodsStock, - DisposableGoodsBatch disposableGoodsBatch, Long warehouseID, - String warehouseName, GodownEntryItem godownEntryItem) { - DisposableGoodsBatchStock disposableGoodsBatchStock = new DisposableGoodsBatchStock(); - disposableGoodsBatchStock.setDiposableGoods(disposableGoodsStock); - disposableGoodsStock.getGoodsBatchs().add(disposableGoodsBatchStock); - disposableGoodsBatchStock.setBarcode(disposableGoodsBatch.getBarcode()); - disposableGoodsBatchStock.setDisposableGoodsId(disposableGoods.getId()); - disposableGoodsBatchStock - .setDisposableGoodsBatchId(disposableGoodsBatch.getId()); - disposableGoodsBatchStock.setBatchNumber(godownEntryItem - .getBatchNumber()); - disposableGoodsBatchStock.setCost(godownEntryItem.getCost()); - disposableGoodsBatchStock.setExpDate(godownEntryItem.getExpDate()); - disposableGoodsBatchStock.setManufacturer(godownEntryItem - .getManufacturer()); - disposableGoodsBatchStock.setSterileBatchNumber(godownEntryItem - .getSterileBatchNumber()); - disposableGoodsBatchStock.setSupplierName(godownEntryItem - .getSupplierName()); - disposableGoodsBatchStock.setProducingArea(godownEntryItem - .getProducingArea()); - disposableGoodsBatchStock.setWarehouseID(warehouseID); - disposableGoodsBatchStock.setWarehouseName(warehouseName); - diposableGoodBatchStockManager.saveOrUpdate(disposableGoodsBatchStock); - return disposableGoodsBatchStock; - } - - /** - * @param entry - * @param idToDiposableGoodsMap - * @param idToBatchStockMap - */ - private void saveGodownEntry_internal(GodownEntry entry, - Long warehouseID,String warehouseName, - Map idToDisposableGoodsMap,Map disposableGoodsIDToDisposableGoodsStockMap,Map idToDisposableGoodsStockMap, - Map idToDisposableGoodsBatchMap ,Map idToBatchStockMap, - Map idToIdentificationMap) { - save(entry); - List itemList = entry.getItemsList(); - for (int i = 0; i < itemList.size(); ++i) { - GodownEntryItem godownEntryItem = itemList.get(i); - warehousingByGodownEntryItem(entry, warehouseID, warehouseName, - idToDisposableGoodsMap, idToDisposableGoodsStockMap, - idToBatchStockMap, godownEntryItem); - //根据入库单所选一次性物品类型所选更新一次性物品类型 - if(godownEntryItem.getDisposableGoodsID() != null && StringUtils.isNotBlank(godownEntryItem.getGrade())){ - DisposableGoods disposableGoods = - (DisposableGoods)objectDao.getByProperty(DisposableGoods.class.getSimpleName(), "id", godownEntryItem.getDisposableGoodsID()); - if(disposableGoods != null){ - disposableGoods.setGrade(godownEntryItem.getGrade()); - objectDao.saveOrUpdate(disposableGoods); - } - } - objectDao.update(godownEntryItem);// 更新item - } - } - - - - private List warehousingByGodownEntryItem(GodownEntry entry, Long warehouseID, - String warehouseName, - Map idToDisposableGoodsMap, - Map idToDisposableGoodsStockMap, - Map idToDisposableGoodsBatchStockMap, - GodownEntryItem godownEntryItem) { - List disposableGoodsStorageAdjustVoList = new ArrayList(); - boolean newBatch = false; - Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); - Long disposableGoodsStockID = godownEntryItem.getDisposableGoodsStockID(); - DisposableGoods disposableGoods = idToDisposableGoodsMap.get(disposableGoodsID); - DisposableGoodsStock disposableGoodsStock = null; - - String batchNumber = godownEntryItem.getBatchNumber(); - - if(disposableGoods == null){ - throw new RuntimeException("物品未定义!"); - } - if(StringUtils.isBlank(batchNumber)){ - throw new RuntimeException("批次号不能为空!"); - } - if(disposableGoodsStockID != null){ - disposableGoodsStock = idToDisposableGoodsStockMap.get(disposableGoodsStockID); - } - // 查找一次性物品库存 - if(disposableGoodsStock == null){ - disposableGoodsStock = disposableGoodsStockManager.getDisposableGoodsStockByDisposableGoodsId(disposableGoodsID.toString(), warehouseID.toString()); - } - if(disposableGoodsStock == null){ - throw new RuntimeException("物品库存对象未找到!"); - } - // 校验仓库是否是当前仓库 - if(!warehouseID.equals(disposableGoodsStock.getWarehouseID())){ - throw new RuntimeException("物品库存不是当前仓库的!"); - } -// // 查找批次定义 -// DisposableGoodsBatch disposableGoodsBatch = diposableGoodsManager.getDisposableGoodsBatchByBatchNumber(disposableGoodsID, batchNumber); -// if(disposableGoodsBatch == null){ -// disposableGoodsBatch = newDisposableGoodsBatch(disposableGoods,warehouseID, warehouseName, godownEntryItem); -// } -// // 查找批次库存 -// DisposableGoodsBatchStock disposableGoodsBatchStock = diposableGoodsManager.getDisposableGoodsStockByBatchNumber(warehouseID, disposableGoodsID, batchNumber); -// -// if(disposableGoodsBatchStock == null){ -// // 新建 批次 -// disposableGoodsBatchStock = newDisposableGoodsBatchStock(disposableGoods, disposableGoodsStock, disposableGoodsBatch, warehouseID, warehouseName, godownEntryItem); -// -// newBatch = true; -// idToDisposableGoodsBatchStockMap.put(disposableGoodsBatchStock.getId(), disposableGoodsBatchStock); -// } -// // 更新一次性物品定义 -// disposableGoods.setReferencePrice(godownEntryItem.getCost()); -// // 更新批次定义 -// disposableGoodsBatch.setCost(godownEntryItem.getCost()); -// disposableGoodsBatch.setExpDate(godownEntryItem.getExpDate()); -// disposableGoodsBatch.setManufacturer(godownEntryItem.getManufacturer()); -// disposableGoodsBatch.setSterileBatchNumber(godownEntryItem.getSterileBatchNumber()); -// disposableGoodsBatch.setSupplierName(godownEntryItem.getSupplierName()); -// disposableGoodsBatch.setProducingArea(godownEntryItem.getProducingArea()); -// // 更新批次库存相关信息 -//// disposableGoodsBatchStock.setDisposableGoodsID(disposableGoodsID); -//// disposableGoodsBatchStock.setDisposableGoodsBatchID(disposableGoodsBatch.getId()); -//// disposableGoodsBatchStock.setBatchNumber(godownEntryItem.getBatchNumber()); -// disposableGoodsBatchStock.setCost(godownEntryItem.getCost()); -// disposableGoodsBatchStock.setExpDate(godownEntryItem.getExpDate()); -// disposableGoodsBatchStock.setManufacturer(godownEntryItem.getManufacturer()); -// disposableGoodsBatchStock.setSterileBatchNumber(godownEntryItem.getSterileBatchNumber()); -// disposableGoodsBatchStock.setSupplierName(godownEntryItem.getSupplierName()); -// disposableGoodsBatchStock.setProducingArea(godownEntryItem.getProducingArea()); -// -// if(disposableGoods.expensiveDiposablegoods()){ -// Long amount = godownEntryItem.getAmount(); -// // 高值耗材的处理 -// diposableGoodsManager.newExpensivediposablegoods(disposableGoodsBatchStock, amount,null,godownEntryItem.getConclusion(), entry.getTime(), -// godownEntryItem.getIdentification(),entry.getId(),godownEntryItem.getId() , godownEntryItem.getBatchIdFromHisSync()); -// }else{ -// DisposableGoodsIdentification identification = newIdentificationOfDisposableGoods( -// entry, godownEntryItem, disposableGoodsID, -// disposableGoodsStock, disposableGoodsBatch, -// disposableGoodsBatchStock); -// objectDao.save(identification); -// godownEntryItem.setIdentificationID(identification.getId()); -// } -// -// godownEntryItem.setNewBatch(newBatch); -// // 设置godownEntryItem和批次,标识号关联的信息 -// godownEntryItem.setDisposableGoodsID(disposableGoodsID); -// godownEntryItem.setDisposableGoodsStockID(disposableGoodsStock.getId()); -// godownEntryItem.setDisposableGoodsBatchID(disposableGoodsBatch.getId()); -// godownEntryItem.setDisposableGoodsBatchStockID(disposableGoodsBatchStock.getId()); -// godownEntryItem.setDiposableGoods(disposableGoodsStock); -// if(disposableGoods.expensiveDiposablegoods()){ -// if(!godownEntryItem.isAssociatedInfoValidForExpensiveDisposablegoodsInEntry()){ -// throw new RuntimeException("关联信息不正确!"); -// } -// }else{ -// if(!godownEntryItem.isAssociatedInfoValidForInEntry()){ -// throw new RuntimeException("关联信息不正确!"); -// } -// } -// -// // 新建项需要修改一次性物品价格 -// disposableGoodsStock.setReferencePrice(godownEntryItem.getCost()); -// objectDao.update(disposableGoods); -// objectDao.update(disposableGoodsStock); -// objectDao.update(disposableGoodsBatch); -// objectDao.update(disposableGoodsBatchStock); -// objectDao.saveOrUpdate(godownEntryItem); - - return disposableGoodsStorageAdjustVoList; - } - - /** * 根据入/退库单明细调整库存,并返回最后的调整记录 * @param entry * @param warehouseID @@ -675,989 +234,98 @@ * @param disposableGoodsStorageAdjustVoList * @return */ - private List warehousingByGodownEntryItemModifyOnlyAmount(GodownEntry entry, Long warehouseID, - String warehouseName, - Map idToDisposableGoodsMap, - Map idToDisposableGoodsStockMap, - Map idToDisposableGoodsBatchStockMap, - GodownEntryItem godownEntryItem , List disposableGoodsStorageAdjustVoList) { - boolean newBatch = false; - Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); - Long disposableGoodsStockID = godownEntryItem.getDisposableGoodsStockID(); - //物资系统的batchId - Long batchIdFromHisSync = godownEntryItem.getBatchIdFromHisSync(); - DisposableGoods disposableGoods = idToDisposableGoodsMap.get(disposableGoodsID); - DisposableGoodsStock disposableGoodsStock = null; - - String batchNumber = godownEntryItem.getBatchNumber(); - - if(disposableGoods == null){ - throw new RuntimeException("物品未定义!"); + private List warehousingByGodownEntryItemModifyOnlyAmount(ExpensiveGoodsGodownEntry entry, Long warehouseID, + String warehouseName,Map idToExpensiveGoodsMap , + ExpensiveGoodsGodownEntryItem godownEntryItem) { + Long expensiveGoodsId = godownEntryItem.getExpensiveGoodsId(); + ExpensiveGoods expensiveGoods = idToExpensiveGoodsMap.get(expensiveGoodsId); + if(expensiveGoods == null){ + throw new RuntimeException("高值耗材未定义!"); } - if(StringUtils.isBlank(batchNumber)){ - throw new RuntimeException("批次号不能为空!"); - } - if(disposableGoodsStockID != null){ - disposableGoodsStock = idToDisposableGoodsStockMap.get(disposableGoodsStockID); - } - // 查找一次性物品库存 - if(disposableGoodsStock == null){ - disposableGoodsStock = disposableGoodsStockManager.getDisposableGoodsStockByDisposableGoodsId(disposableGoodsID.toString(), warehouseID.toString()); - } - if(disposableGoodsStock == null){ - throw new RuntimeException("物品库存对象未找到!"); - } - // 校验仓库是否是当前仓库 - if(!warehouseID.equals(disposableGoodsStock.getWarehouseID())){ - throw new RuntimeException("物品库存不是当前仓库的!"); - } - - List result = new ArrayList(); - // 查找批次定义 -// DisposableGoodsBatch disposableGoodsBatch = diposableGoodsManager.getDisposableGoodsBatchByBatchNumber(disposableGoodsID, batchNumber); -// if(disposableGoodsBatch == null){ -// disposableGoodsBatch = newDisposableGoodsBatch(disposableGoods,warehouseID, warehouseName, godownEntryItem); -// } -// // 查找批次库存 -// DisposableGoodsBatchStock disposableGoodsBatchStock = diposableGoodsManager.getDisposableGoodsStockByBatchNumber(warehouseID, disposableGoodsID, batchNumber); -// -// if(disposableGoodsBatchStock == null){ -// // 新建 批次 -// disposableGoodsBatchStock = newDisposableGoodsBatchStock(disposableGoods, disposableGoodsStock, disposableGoodsBatch, warehouseID, warehouseName, godownEntryItem); -// newBatch = true; -// idToDisposableGoodsBatchStockMap.put(disposableGoodsBatchStock.getId(), disposableGoodsBatchStock); -// } -// -// if(DisposableGoods.TYPE_EXPENSIVEDIPOSABLEGOODS.equals(disposableGoods.getGoodsType())){ -// //根据条码设置高值耗所属仓库及一次性物品定义、批次定义、库存、批次库存id -// List expensiveGoodsList = setExpensiveGoodsWarehouse(entry,godownEntryItem , warehouseID, warehouseName , disposableGoodsStock.getId(),disposableGoodsBatch.getId(),disposableGoodsBatchStock); -// if(StringUtils.isNotBlank(godownEntryItem.getBarcode())){ -// disposableGoodsBatchStock.adjustAmount(1);//数量加1 -// -// if(CollectionUtils.isNotEmpty(expensiveGoodsList)){ -// ExpensiveDisposablegoods expensiveDisposablegoods = expensiveGoodsList.get(0); -// //记录各标识库存数量调整变动结果 -// DisposableGoodsStorageAdjustVo disposableGoodsStorageAdjustVo = new DisposableGoodsStorageAdjustVo(); -// disposableGoodsStorageAdjustVo.setExpensiveDisposablegoodsId(expensiveDisposablegoods.getId()); -// disposableGoodsStorageAdjustVo.setAdjustAmount(1L); -// result.add(disposableGoodsStorageAdjustVo); -// } -// }else{ -// if(CollectionUtils.isNotEmpty(expensiveGoodsList)){ -// for (ExpensiveDisposablegoods expensiveDisposablegoods : expensiveGoodsList) { -// //记录各标识库存数量调整变动结果 -// DisposableGoodsStorageAdjustVo disposableGoodsStorageAdjustVo = new DisposableGoodsStorageAdjustVo(); -// disposableGoodsStorageAdjustVo.setExpensiveDisposablegoodsId(expensiveDisposablegoods.getId()); -// disposableGoodsStorageAdjustVo.setAdjustAmount(1L); -// result.add(disposableGoodsStorageAdjustVo); -// } -// } -// } -// }else{ -// //是否已完成标识符数据创建 -// boolean finished = false; -// //如果存在先前扣减的标识符数据 -// if(CollectionUtils.isNotEmpty(disposableGoodsStorageAdjustVoList)){ -// for (DisposableGoodsStorageAdjustVo disposableGoodsStorageAdjustVo : disposableGoodsStorageAdjustVoList) { -// if(DatabaseUtil.isPoIdValid(disposableGoodsStorageAdjustVo.getDisposableGoodsIdentificationId())){ -// DisposableGoodsIdentification disposableGoodsIdentification = -// (DisposableGoodsIdentification)objectDao.getByProperty(DisposableGoodsIdentification.class.getSimpleName(), "id", disposableGoodsStorageAdjustVo.getDisposableGoodsIdentificationId()); -// //如果标识数据集合里的一次性物品批次id与需新生成标识的批次id不相同时,则跳过 -// if(!MathTools.valueEquals(disposableGoodsIdentification.getDisposableGoodsBatchID(), disposableGoodsBatch.getId())){ -// continue; -// } -// godownEntryItem.setAmount(Math.abs(disposableGoodsStorageAdjustVo.getAdjustAmount())); -// godownEntryItem.setBatchIdFromHisSync(disposableGoodsIdentification.getBatchIdFromHisSync()); -// godownEntryItem.setIdentification(disposableGoodsIdentification.getIdentification()); -// // 新建标识号对象 -// DisposableGoodsIdentification identification = newIdentificationOfDisposableGoods( -// entry, godownEntryItem, disposableGoodsID, -// disposableGoodsStock, disposableGoodsBatch, -// disposableGoodsBatchStock); -// objectDao.save(identification); -// godownEntryItem.setIdentificationID(identification.getId()); -// //记录各标识库存数量调整变动结果 -// DisposableGoodsStorageAdjustVo newDisposableGoodsStorageAdjustVo = new DisposableGoodsStorageAdjustVo(); -// disposableGoodsStorageAdjustVo.setDisposableGoodsIdentificationId(identification.getId()); -// disposableGoodsStorageAdjustVo.setAdjustAmount(godownEntryItem.getAmount()); -// result.add(newDisposableGoodsStorageAdjustVo); -// -// finished = true; -// } -// } -// }else{ -// // 新建标识号对象 -// DisposableGoodsIdentification identification = newIdentificationOfDisposableGoods( -// entry, godownEntryItem, disposableGoodsID, -// disposableGoodsStock, disposableGoodsBatch, -// disposableGoodsBatchStock); -// objectDao.save(identification); -// godownEntryItem.setIdentificationID(identification.getId()); -// //记录各标识库存数量调整变动结果 -// DisposableGoodsStorageAdjustVo disposableGoodsStorageAdjustVo = new DisposableGoodsStorageAdjustVo(); -// disposableGoodsStorageAdjustVo.setDisposableGoodsIdentificationId(identification.getId()); -// disposableGoodsStorageAdjustVo.setAdjustAmount(godownEntryItem.getAmount()); -// result.add(disposableGoodsStorageAdjustVo); -// finished = true; -// } -// -// if(finished == false){ -// // 新建标识号对象 -// DisposableGoodsIdentification identification = newIdentificationOfDisposableGoods( -// entry, godownEntryItem, disposableGoodsID, -// disposableGoodsStock, disposableGoodsBatch, -// disposableGoodsBatchStock); -// objectDao.save(identification); -// godownEntryItem.setIdentificationID(identification.getId()); -// //记录各标识库存数量调整变动结果 -// DisposableGoodsStorageAdjustVo disposableGoodsStorageAdjustVo = new DisposableGoodsStorageAdjustVo(); -// disposableGoodsStorageAdjustVo.setDisposableGoodsIdentificationId(identification.getId()); -// disposableGoodsStorageAdjustVo.setAdjustAmount(godownEntryItem.getAmount()); -// result.add(disposableGoodsStorageAdjustVo); -// } -// } -// godownEntryItem.setNewBatch(newBatch); -// // 设置godownEntryItem和批次,标识号关联的信息 -// godownEntryItem.setDisposableGoodsID(disposableGoodsID); -// godownEntryItem.setDisposableGoodsStockID(disposableGoodsStock.getId()); -// godownEntryItem.setDisposableGoodsBatchID(disposableGoodsBatch.getId()); -// godownEntryItem.setDisposableGoodsBatchStockID(disposableGoodsBatchStock.getId()); -// godownEntryItem.setDiposableGoods(disposableGoodsStock); -// if(!DatabaseUtil.isPoIdValid(disposableGoodsID) -// || !DatabaseUtil.isPoIdValid(disposableGoodsStock.getId()) -// || !DatabaseUtil.isPoIdValid(disposableGoodsBatch.getId()) -// || !DatabaseUtil.isPoIdValid(disposableGoodsBatchStock.getId()) -// || godownEntryItem.getGodownEntry() == null -// || godownEntryItem.getGodownEntry().getId() == null -// || disposableGoods == null -// || !DatabaseUtil.isPoIdValid(disposableGoods.getId())){ -// throw new RuntimeException("关联信息不正确!"); -// } -// objectDao.update(disposableGoods); -// objectDao.update(disposableGoodsStock); -// objectDao.update(disposableGoodsBatch); -// objectDao.update(disposableGoodsBatchStock); - return result; + return null; } /** - * 新增一次性物品标识数据(手工入库、导入excel入库、同步接口或接口推送入库单入库、盘盈入库、调拨入库等业务最终会调用此方法) - * @param entry - * @param godownEntryItem - * @param disposableGoodsID - * @param disposableGoodsStock - * @param disposableGoodsBatch - * @param disposableGoodsBatchStock - * @return - */ - private DisposableGoodsIdentification newIdentificationOfDisposableGoods( - GodownEntry entry, GodownEntryItem godownEntryItem, - Long disposableGoodsID, DisposableGoodsStock disposableGoodsStock, - DisposableGoodsBatch disposableGoodsBatch, - DisposableGoodsBatchStock disposableGoodsBatchStock) { - DisposableGoodsIdentification identification = new DisposableGoodsIdentification(); - - identification.setDisposableGoodsID(disposableGoodsID); - identification.setDisposableGoodsBatchID(disposableGoodsBatch.getId()); - identification.setDisposableGoodsStockID(disposableGoodsStock.getId()); - identification.setBatchStock(disposableGoodsBatchStock); - disposableGoodsBatchStock.getIdentifications().add(identification); - identification.adjustAmount(godownEntryItem.getAmount()); - identification.setBatchStock(disposableGoodsBatchStock); - identification.setConclusion(godownEntryItem.getConclusion()); - identification.setEntryDate(entry.getTime()); - identification.setIdentification(godownEntryItem.getIdentification()); - identification.setPrice(godownEntryItem.getCost()); - identification.setWarehouseID(entry.getWarehouseID()); - identification.setWarehouseName(entry.getWarehouseName()); - identification.setBatchIdFromHisSync(godownEntryItem.getBatchIdFromHisSync()); - return identification; - } - /** - * 保存对象到数据库 - * @param entry - * @return - */ - private void save(GodownEntry entry) { - // 计算总价 - entry.calculateTotalPrice(); - // 先保存入库单对象,后面需要入库单ID - if(StringUtils.isBlank(entry.getSerialNumber())){// 有可能在其他地方设置了,比如同步入库单/导入入库单 - entry.setSerialNumber(serialNumManager - .getSerialNumberStr(SerialNum.TYPE_INSERT_GODOWN)); - } - - List itemList = entry.getItemsList(); - if(itemList.size() > 0){ - entry.setSupplierName(itemList.get(0).getSupplierName()); - } - syncGodownEntryWareHouse(entry); - objectDao.save(entry); - } - - @Override - public void updateGodownEntry_TRANS_REQUIRED(GodownEntry original, GodownEntry entry, - Map result) { - updateGodownEntry_internal(original, entry, result); - } - private void deleteGodownEntryItem(GodownEntryItem godownEntryItem, - Map idToDisposableGoodsMap , - Map disposableGoodsIDToDisposableGoodsStockMap, - Map idToDisposableGoodsStockMap, - Map idToDisposableGoodsBatchMap, - Map idToDisposableGoodsBatchStockMap, - Map idToIdentificationMap) { - - // 修改时,每一项都应该有ID - Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); - Long disposableGoodsStockID = godownEntryItem.getDisposableGoodsStockID(); - Long disposableGoodsBatchID = godownEntryItem.getDisposableGoodsBatchID(); - Long disposableGoodsBatchStockID = godownEntryItem.getDisposableGoodsBatchStockID(); - Long identificationID = godownEntryItem.getIdentificationID(); - if(disposableGoodsID == null){ - throw new RuntimeException("物品定义id不能为空,请升级数据!"); - } - if(disposableGoodsStockID == null){ - throw new RuntimeException("物品库存id不能为空,请升级数据!"); - } - if(disposableGoodsBatchID == null){ - throw new RuntimeException("物品批次id不能为空,请升级数据!"); - } - if(disposableGoodsBatchStockID == null){ - throw new RuntimeException("物品批次库存id不能为空,请升级数据!"); - } - if(identificationID == null){ - throw new RuntimeException("标识号不能为空,请升级数据!"); - } - DisposableGoods disposableGoods = idToDisposableGoodsMap.get(disposableGoodsID); - DisposableGoodsStock disposableGoodsStock = idToDisposableGoodsStockMap.get(disposableGoodsStockID); - // 查找批次定义 - DisposableGoodsBatch disposableGoodsBatch = idToDisposableGoodsBatchMap.get(disposableGoodsBatchID); - DisposableGoodsBatchStock disposableGoodsBatchStock = idToDisposableGoodsBatchStockMap.get(disposableGoodsBatchStockID); - DisposableGoodsIdentification identification = idToIdentificationMap.get(identificationID); - if(disposableGoods == null){ - throw new RuntimeException("物品定义不存在!"); - } - if(disposableGoodsStock == null){ - throw new RuntimeException("物品库存不存在!"); - } - if(disposableGoodsBatch == null){ - throw new RuntimeException("物品批次不存在!"); - } - if(disposableGoodsBatchStock == null){ - throw new RuntimeException("物品批次库存不存在!"); - } - if(identification == null){ - throw new RuntimeException("标识号已被删除!"); - } - Long amount = godownEntryItem.getAmount(); - Long amountChange = -amount; - identification.adjustAmount(amountChange);// 调整库存 - - objectDao.update(identification); - objectDao.update(disposableGoodsBatchStock); - objectDao.update(disposableGoodsStock); - objectDao.update(disposableGoodsBatch); - objectDao.update(disposableGoods); - // 删除godownEntryItem - // 删除godownEntryItem - godownEntryItem.getGodownEntry().getItemsList().remove(godownEntryItem); - objectDao.delete(godownEntryItem); - - } - // 更新入库单,TODO 代码待重构 - private void updateGodownEntry_internal(GodownEntry original, GodownEntry entry, - 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 disposableGoodsIDToDisposableGoodsStockMap = new HashMap(); - Map idToDisposableGoodsStockMap = new HashMap(); - Map idToDisposableGoodsBatchMap = new HashMap(); - Map idToDisposableGoodsBatchStockMap = new HashMap(); - Map idToIdentificationMap = new HashMap(); - // 汇总信息 - summaryDiposableGoodsInfo(original, disposableGoodsIDsSet,disposableGoodsStockIDsSet,disposableGoodsBatchIDsSet, - disposableGoodsBatchStockIDsSet, disposableGoodsBatchNumberSet, identificationIDsSet); - summaryDiposableGoodsInfo(entry, disposableGoodsIDsSet,disposableGoodsStockIDsSet,disposableGoodsBatchIDsSet, - disposableGoodsBatchStockIDsSet, disposableGoodsBatchNumberSet, identificationIDsSet); - // 锁定并获取入库单 - GodownEntry curGodownEntry = getGodownEntryById_ForUpdate(original.getId().toString()); - if(curGodownEntry == null){ - // 入库单已被删除 - throw new RuntimeException("入库单已被删除!"); - } - // 获取并锁定一次性物品相关资源 - lockAndGetDiposableGoodsResources(GodownEntry.TYPE_IN,original.getWarehouseID(),original.getWarehouseName(),disposableGoodsIDsSet,disposableGoodsStockIDsSet,disposableGoodsBatchIDsSet, disposableGoodsBatchStockIDsSet, - disposableGoodsBatchNumberSet, identificationIDsSet, idToDisposableGoodsMap,disposableGoodsIDToDisposableGoodsStockMap,idToDisposableGoodsStockMap,idToDisposableGoodsBatchMap, - idToDisposableGoodsBatchStockMap, idToIdentificationMap , null); - - List originalItemList = original.getItemsList(); - List itemList = entry.getItemsList(); - List curItemList = curGodownEntry.getItemsList(); - - if(itemList.size() > 0){ - curGodownEntry.setSupplierName(itemList.get(0).getSupplierName()); - } - Long warehouseID = original.getWarehouseID(); - String warehouseName = original.getWarehouseName(); - // 处理修改 - for (int i = 0; i < itemList.size(); ++i) { - GodownEntryItem godownEntryItem = itemList.get(i); - Long itemID = godownEntryItem.getId(); - if(itemID == null){ - continue; - } - GodownEntryItem originalGodownEntryItem = ExpensiveGoodsUtils.getGodownEntryItemsByItemId(originalItemList, itemID); - if(originalGodownEntryItem == null){ - // 在页面上被删除了。 - //continue; - throw new RuntimeException("参数错误!"); - } - GodownEntryItem curGodownEntryItem = ExpensiveGoodsUtils.getGodownEntryItemsByItemId(curItemList, itemID); - if(curGodownEntryItem == null){ - // 被并发删除了,也不需要处理 - continue; - } - // 修改时,每一项都应该有ID - Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); - Long disposableGoodsStockID = godownEntryItem.getDisposableGoodsStockID(); - Long disposableGoodsBatchID = godownEntryItem.getDisposableGoodsBatchID(); - Long disposableGoodsBatchStockID = godownEntryItem.getDisposableGoodsBatchStockID(); - Long identificationID = godownEntryItem.getIdentificationID(); - if(disposableGoodsID == null){ - throw new RuntimeException("物品定义id不能为空,请升级数据!"); - } - if(disposableGoodsStockID == null){ - throw new RuntimeException("物品库存id不能为空,请升级数据!"); - } - if(disposableGoodsBatchID == null){ - throw new RuntimeException("物品批次id不能为空,请升级数据!"); - } - if(disposableGoodsBatchStockID == null){ - throw new RuntimeException("物品批次库存id不能为空,请升级数据!"); - } - if(identificationID == null){ - throw new RuntimeException("标识号不能为空,请升级数据!"); - } - DisposableGoods disposableGoods = idToDisposableGoodsMap.get(disposableGoodsID); - DisposableGoodsStock disposableGoodsStock = idToDisposableGoodsStockMap.get(disposableGoodsStockID); - // 查找批次定义 - DisposableGoodsBatch disposableGoodsBatch = idToDisposableGoodsBatchMap.get(disposableGoodsBatchID); - DisposableGoodsBatchStock disposableGoodsBatchStock = idToDisposableGoodsBatchStockMap.get(disposableGoodsBatchStockID); - DisposableGoodsIdentification identification = idToIdentificationMap.get(identificationID); - if(disposableGoods == null){ - throw new RuntimeException("物品定义不存在!"); - } - if(disposableGoodsStock == null){ - throw new RuntimeException("物品库存不存在!"); - } - if(disposableGoodsBatch == null){ - throw new RuntimeException("物品批次不存在!"); - } - if(disposableGoodsBatchStock == null){ - throw new RuntimeException("物品批次库存不存在!"); - } - if(!disposableGoods.expensiveDiposablegoods()){ - if(identification == null){ - throw new RuntimeException("标识号已被删除!"); - } - } - - // 修改普通属性 - // 注册证号 - String originalCertification = originalGodownEntryItem.getCertification(); - String certification = godownEntryItem.getCertification(); - if(!StringUtils.equals(originalCertification, certification)){ - curGodownEntryItem.setCertification(certification); - } - // 失效期 - Date originalExpDate = originalGodownEntryItem.getExpDate(); - Date expDate = godownEntryItem.getExpDate(); - if(!originalExpDate.equals(expDate)){ - curGodownEntryItem.setExpDate(expDate); - disposableGoodsBatchStock.setExpDate(expDate); - disposableGoodsBatch.setExpDate(expDate); - } - // 供应商 - String originalSupplierName = originalGodownEntryItem.getSupplierName(); - String supplierName = godownEntryItem.getSupplierName(); - if(!StringUtils.equals(originalSupplierName, supplierName)){ - curGodownEntryItem.setSupplierName(supplierName); - disposableGoodsBatchStock.setSupplierName(supplierName); - disposableGoodsBatch.setSupplierName(supplierName); - } - // 灭菌批次 - String originalSterileBatchNumber = originalGodownEntryItem.getSterileBatchNumber(); - String sterileBatchNumber = godownEntryItem.getSterileBatchNumber(); - if(!StringUtils.equals(originalSterileBatchNumber, sterileBatchNumber)){ - curGodownEntryItem.setSterileBatchNumber(sterileBatchNumber); - disposableGoodsBatchStock.setSterileBatchNumber(sterileBatchNumber); - disposableGoodsBatch.setSterileBatchNumber(sterileBatchNumber); - } - // 生产厂家 - String originalManufacturer = originalGodownEntryItem.getManufacturer(); - String manufacturer = godownEntryItem.getManufacturer(); - if(!StringUtils.equals(originalManufacturer, manufacturer)){ - curGodownEntryItem.setManufacturer(manufacturer); - disposableGoodsBatchStock.setManufacturer(manufacturer); - disposableGoodsBatch.setManufacturer(manufacturer); - } - // 修改库存 - Long originalAmount = originalGodownEntryItem.getAmount(); - Long amount = godownEntryItem.getAmount(); - Long curAmount = curGodownEntryItem.getAmount(); - if(!originalAmount.equals(amount)){ - if(!originalAmount.equals(curAmount)){// 有可能被并发修改了库存 - throw new RuntimeException("库存已被修改!"); - } - Long amountChange = amount - originalAmount; - if(disposableGoods.expensiveDiposablegoods()){ -// diposableGoodsManager.newExpensivediposablegoods(disposableGoodsBatchStock, amountChange, godownEntryItem.getConclusion(), entry.getTime(), godownEntryItem.getIdentification()); - throw new RuntimeException("暂不支持修改高值耗材库存!"); - }else{ - identification.adjustAmount(amountChange); - } - - curGodownEntryItem.setAmount(amount); - } - // 修改价格 - Double originalPrice = originalGodownEntryItem.getCost(); - Double price = godownEntryItem.getCost(); - Double curPrice = curGodownEntryItem.getCost(); - if(!originalPrice.equals(price)){ - if(!price.equals(curPrice)){// 这个判断是有必要的,有可能价格已经被并发修改过了。所以就不需要再修改。 - disposableGoodsBatchStock.setCost(price); - disposableGoodsBatch.setCost(price); - disposableGoods.setReferencePrice(price); - curGodownEntryItem.setCost(price); - - if(disposableGoods.expensiveDiposablegoods()){ - throw new RuntimeException("暂不支持修改高值耗材价格!"); - }else{ - identification.setPrice(price); - // 同步修改发货和退货记录 - synchronizePriceFromIdentificationToInvoiceAndReturnRecord(disposableGoods,identification,originalPrice,price); - } - } - } - // 有无生物检测报告 - String originalHasBiologicalTestReport = originalGodownEntryItem.getHasBiologicalTestReport(); - String hasBiologicalTestReport = godownEntryItem.getHasBiologicalTestReport(); - if(!StringUtils.equals(originalHasBiologicalTestReport, hasBiologicalTestReport)){ - curGodownEntryItem.setHasBiologicalTestReport(hasBiologicalTestReport); - } - // 有无发票 - String originalHasInvoice = originalGodownEntryItem.getHasInvoice(); - String hasInvoice = godownEntryItem.getHasInvoice(); - if(!StringUtils.equals(originalHasInvoice, hasInvoice)){ - curGodownEntryItem.setHasInvoice(hasInvoice); - } - // 类别 - String originalGrade = originalGodownEntryItem.getGrade(); - String grade = godownEntryItem.getGrade(); - if(!StringUtils.equals(originalGrade, grade)){ - curGodownEntryItem.setGrade(grade); - disposableGoods.setGrade(godownEntryItem.getGrade()); - } - if(identification != null){ - objectDao.update(identification); - } - objectDao.update(disposableGoodsBatchStock); - objectDao.update(disposableGoodsStock); - objectDao.update(disposableGoodsBatch); - objectDao.update(disposableGoods); - } - // 处理新增 - for (int i = 0; i < itemList.size(); ++i) { - GodownEntryItem godownEntryItem = itemList.get(i); - Long itemID = godownEntryItem.getId(); - if(itemID != null){// 有id就不是新增项 - continue; - } - // 保存godownEntryItem - godownEntryItem.setGodownEntry(curGodownEntry); - curItemList.add(godownEntryItem); - objectDao.save(godownEntryItem); - warehousingByGodownEntryItem(curGodownEntry, warehouseID, warehouseName, idToDisposableGoodsMap, idToDisposableGoodsStockMap, idToDisposableGoodsBatchStockMap, godownEntryItem); - - } - // 处理删除项 - for (int i = 0; i < originalItemList.size(); ++i) { - GodownEntryItem originalGodownEntryItem = originalItemList.get(i); - Long itemID = originalGodownEntryItem.getId(); - if(itemID == null){ - continue; - } - GodownEntryItem godownEntryItem = ExpensiveGoodsUtils.getGodownEntryItemsByItemId(itemList, itemID); - if(godownEntryItem != null){// 现在还存在,就不是删除项 - // 在页面上被删除了。 - continue; - } - GodownEntryItem curGodownEntryItem = ExpensiveGoodsUtils.getGodownEntryItemsByItemId(curItemList, itemID); - if(curGodownEntryItem == null){ - // 被并发删除了。也不需要处理 - continue; - } - // 修改时,每一项都应该有ID - Long disposableGoodsID = originalGodownEntryItem.getDisposableGoodsID(); - Long disposableGoodsStockID = originalGodownEntryItem.getDisposableGoodsStockID(); - Long disposableGoodsBatchID = originalGodownEntryItem.getDisposableGoodsBatchID(); - Long disposableGoodsBatchStockID = originalGodownEntryItem.getDisposableGoodsBatchStockID(); - Long identificationID = originalGodownEntryItem.getIdentificationID(); - if(disposableGoodsID == null){ - throw new RuntimeException("物品定义id不能为空,请升级数据!"); - } - if(disposableGoodsStockID == null){ - throw new RuntimeException("物品库存id不能为空,请升级数据!"); - } - if(disposableGoodsBatchID == null){ - throw new RuntimeException("物品批次id不能为空,请升级数据!"); - } - if(disposableGoodsBatchStockID == null){ - throw new RuntimeException("物品批次库存id不能为空,请升级数据!"); - } - if(identificationID == null){ - throw new RuntimeException("标识号不能为空,请升级数据!"); - } - DisposableGoods disposableGoods = idToDisposableGoodsMap.get(disposableGoodsID); - DisposableGoodsStock disposableGoodsStock = idToDisposableGoodsStockMap.get(disposableGoodsStockID); - // 查找批次定义 - DisposableGoodsBatch disposableGoodsBatch = idToDisposableGoodsBatchMap.get(disposableGoodsBatchID); - DisposableGoodsBatchStock disposableGoodsBatchStock = idToDisposableGoodsBatchStockMap.get(disposableGoodsBatchStockID); - DisposableGoodsIdentification identification = idToIdentificationMap.get(identificationID); - if(disposableGoods == null){ - throw new RuntimeException("物品定义不存在!"); - } - if(disposableGoodsStock == null){ - throw new RuntimeException("物品库存不存在!"); - } - if(disposableGoodsBatch == null){ - throw new RuntimeException("物品批次不存在!"); - } - if(disposableGoodsBatchStock == null){ - throw new RuntimeException("物品批次库存不存在!"); - } - if(identification == null){ - throw new RuntimeException("标识号已被删除!"); - } - Long originalAmount = originalGodownEntryItem.getAmount(); - Long amountChange = -originalAmount; - identification.adjustAmount(amountChange); - - objectDao.update(identification); - objectDao.update(disposableGoodsBatchStock); - objectDao.update(disposableGoodsStock); - objectDao.update(disposableGoodsBatch); - objectDao.update(disposableGoods); - - // TODO 如果标识号库存为0了,并且没有入库单引用它,那么可以删除标识号 -// if(false){ -// batchStock.getIdentifications().remove(identification); -// objectDao.delete(identification); -// } - // 删除godownEntryItem - curItemList.remove(curGodownEntryItem); - objectDao.delete(curGodownEntryItem); - } - // 更新入库单属性 - updateGodownEntryProperties(original, entry, curGodownEntry); - //setGodownEntryDefaultWareHouse(curGodownEntry); - setGodownEntrySubType(curGodownEntry, GodownEntry.SUBTYPE_MANUAL_IN); - syncGodownEntryWareHouse(curGodownEntry); - curGodownEntry.calculateTotalPrice(); - // 更新入库单对象 - saveOrUpdate(curGodownEntry); - // 设置GodownEntryItem详细列表 - setReturnDetails(curGodownEntry,idToDisposableGoodsBatchMap, idToDisposableGoodsBatchStockMap,result); - } - /** * 同步入库单、出库单、调拨单的物品的仓库,使之与单的对应属性一致 * @param original */ - private void syncGodownEntryWareHouse(GodownEntry entry){ + private void syncGodownEntryWareHouse(ExpensiveGoodsGodownEntry entry){ if(entry != null){ Long wareHouseId = entry.getWarehouseID(); String wareHouseName = entry.getWarehouseName(); - for(GodownEntryItem item : entry.getItemsList()){ + for(ExpensiveGoodsGodownEntryItem item : entry.getItemsList()){ godownEntryItemManager.setWareHouse(item, wareHouseId,wareHouseName); } } } - // 根据库存操作类型来新建相关的批次和库存对象。 - private void createDisposableGoodsBatchAndStockByEntryType(String entryType,Long warehouseID,String warehouseName, - Map idToDiposableGoodsMap,Map disposableGoodsIDToDisposableGoodsStockMap, - Map idToDisposableGoodsStockMap){} - // 获取并锁定一次性物品相关资源,TODO 加载物品批次待优化 - @SuppressWarnings("unchecked") - private void lockAndGetDiposableGoodsResources(String entryType,Long warehouseID,String warehouseName,Set diposableGoodsIDsSet,Set diposableGoodsStockIDsSet,Set disposableGoodsBatchIDsSet, - Set disposableGoodsBatchStockIDsSet, Set batchNumbersSet, - Set identificationIdsSet, - Map idToDiposableGoodsMap,Map disposableGoodsIDToDisposableGoodsStockMap,Map idToDisposableGoodsStockMap, - Map idToDisposableGoodsBatchMap ,Map idToBatchStockMap, - Map idToIdentificationMap , List disposableGoodsStorageAdjustVoList) { - if(!DatabaseUtil.isPoIdValid(warehouseID)){ - throw new RuntimeException("仓库信息不能为空!"); - } - // 锁定一次性物品 -// List disposableGoodsList = diposableGoodsManager.getDisposableGoodsByDisposableGoodsIDs_ForUpdate(diposableGoodsIDsSet); -// if (disposableGoodsList == null -// || disposableGoodsList.size() != diposableGoodsIDsSet.size()) { -// throw new RuntimeException("某些物品已被删除!"); -// } -// for (DisposableGoods disposableGoods : disposableGoodsList) { -// idToDiposableGoodsMap.put(disposableGoods.getId(), disposableGoods); -// } -// // 可以直接根据物品定义和仓库获取仓库下面对应的所有物品库存对象 -// List disposableGoodsStocks = diposableGoodsManager.getDisposableGoodsStockByDisposableGoodsIDs(warehouseID.toString(),diposableGoodsIDsSet); -// if(disposableGoodsStocks != null){ -// for (DisposableGoodsStock disposableGoodsStock : disposableGoodsStocks) { -// idToDisposableGoodsStockMap.put(disposableGoodsStock.getId(), disposableGoodsStock); -// disposableGoodsIDToDisposableGoodsStockMap.put(disposableGoodsStock.getDisposableGoodsID(), disposableGoodsStock); -// } -// } -// -// -// // 加载所有的批次定义 -// String getDisposableGoodsBatchSql = String.format(" where %s ", -// SqlUtils.getNonStringFieldInCollectionsPredicate("po.diposableGoods.id", diposableGoodsIDsSet)); -// List disposableGoodsBatchs = objectDao.findBySql(DisposableGoodsBatch.class.getSimpleName(),getDisposableGoodsBatchSql); -// if(disposableGoodsBatchs != null){ -// for (DisposableGoodsBatch disposableGoodsBatch : disposableGoodsBatchs) { -// idToDisposableGoodsBatchMap.put(disposableGoodsBatch.getId(), disposableGoodsBatch); -// } -// } -// -// // 获取相关批次和标识号 -// List batchStocks = null; -// String batchStockIDsStr = SqlUtils -// .joinToWhereInConditionForNonStringProperties(disposableGoodsBatchStockIDsSet); -// if (StringUtils.isNotBlank(batchStockIDsStr)) { -// String batchStockSql = String.format(" where %s ", -// SqlUtils.getStringFieldInCollectionsPredicate("po.id", disposableGoodsBatchStockIDsSet)); -// batchStocks = objectDao.findBySql( -// DisposableGoodsBatchStock.class.getSimpleName(), -// batchStockSql); -// } -// -// if (batchStocks != null){ -// for (DisposableGoodsBatchStock diposableGoodBatchStock : batchStocks) { -// idToBatchStockMap.put(diposableGoodBatchStock.getId(), -// diposableGoodBatchStock); -// } -// } -// String getIdentificationSql = String.format(" where %s ", -// SqlUtils.getNonStringFieldInCollectionsPredicate("po.id", identificationIdsSet)); -// List identifications = objectDao -// .findBySql(DisposableGoodsIdentification.class.getSimpleName(), -// getIdentificationSql); -// -// if(identifications != null){ -// for (DisposableGoodsIdentification identificationOfDiposableGoods : identifications) { -// idToIdentificationMap.put(identificationOfDiposableGoods.getId(), -// identificationOfDiposableGoods); -// } -// } - createDisposableGoodsBatchAndStockByEntryType(entryType, warehouseID, warehouseName, idToDiposableGoodsMap, disposableGoodsIDToDisposableGoodsStockMap, idToDisposableGoodsStockMap); - } - // 获取并锁定一次性物品相关资源,TODO 加载物品批次待优化 - private void lockAndGetDiposableGoodsResourcesForCancellingStocks( - String entryType, Long warehouseID, String warehouseName, - ExpensiveGoodsServiceContext disposableGoodsServiceContext) { - if (!DatabaseUtil.isPoIdValid(warehouseID)) { - throw new RuntimeException("仓库信息不能为空!"); - } - // 获取并锁定一次性物品相关资源 - diposableGoodsManager - .lockAndGetExpensiveGoodsResources(disposableGoodsServiceContext); - } - - private void summaryDiposableGoodsInfo(GodownEntry entry,Set disposableGoodsIDsSet, - Set disposableGoodsStockIDsSet, Set disposableGoodsBatchIDsSet,Set disposableGoodsBatchStockIDsSet, - Set batchNumbersSet, Set identificationIdsSet) { - if(entry == null){ - return; - } - List itemList = entry.getItemsList(); - for (GodownEntryItem godownEntryItem : itemList) { - Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); - Long disposableGoodsStockID = godownEntryItem.getDisposableGoodsStockID(); - if(disposableGoodsID == null){ - throw new RuntimeException("物品定义的id不能为空!"); - } - disposableGoodsIDsSet.add(disposableGoodsID); - if(disposableGoodsStockID != null){ - disposableGoodsStockIDsSet.add(disposableGoodsStockID); - } - - Long disposableGoodsBatchID = godownEntryItem.getDisposableGoodsBatchID(); - Long disposableGoodsBatchStockID = godownEntryItem.getDisposableGoodsBatchStockID(); - 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(); - if(batchNumber != null){ - batchNumbersSet.add(batchNumber); - } - } - } // 设置GodownEntryItem详细列表 TODO 改为json格式 - private void setReturnDetails(GodownEntry entry,Map idToDisposableGoodsBatchMap,Map idToBatchStockMap,Map result){ + private void setReturnDetails(ExpensiveGoodsGodownEntry entry,Map idToExpensiveGoodsMap,Map result){ JSONArray jsonArray = new JSONArray(); - List items = entry.getItemsList(); + List items = entry.getItemsList(); Date date = new Date(); - for (GodownEntryItem godownEntryItem : items) { + for (ExpensiveGoodsGodownEntryItem godownEntryItem : items) { String expDateStr = ""; - Boolean newBatch = godownEntryItem.getNewBatch(); - DisposableGoodsStock diposableGoods = godownEntryItem.getDiposableGoods(); Date expDate = godownEntryItem.getExpDate(); if(expDate != null){ expDateStr = Constants.SIMPLEDATEFORMAT_YYYYMMDD.format(expDate); } String specification = ""; - if(diposableGoods != null){ - specification = diposableGoods.getSpecification(); - if (StringUtils.isBlank(specification)){ - specification = ""; - } - } String barcode = ""; - DisposableGoodsBatchStock batchStock = idToBatchStockMap.get(godownEntryItem.getDisposableGoodsBatchStockID()); - if(batchStock == null){ - Long diposableGoodsID = godownEntryItem.getDisposableGoodsStockID(); - String batchNumber = godownEntryItem.getBatchNumber(); - if(!DatabaseUtil.isPoIdValid(diposableGoodsID)){ - if(diposableGoods != null){ - diposableGoodsID = diposableGoods.getId();// 旧数据 - } - } - if(DatabaseUtil.isPoIdValid(diposableGoodsID) && StringUtils.isNotBlank(batchNumber)){ - batchStock = diposableGoodBatchStockManager.getDiposableGoodBatchStock(diposableGoods.getId().toString(), godownEntryItem.getBatchNumber()); - } - } - if(batchStock != null){ - barcode = batchStock.getBarcode(); - } - // 更新打印状态 -// if(newBatch != null && newBatch){ -// Long disposableGoodsBatchId = godownEntryItem.getDisposableGoodsBatchID(); -// if(disposableGoodsBatchId != null){ -// DisposableGoodsBatch disposableGoodsBatch = diposableGoodsManager.getDisposableGoodsBatchById(disposableGoodsBatchId); -// if(disposableGoodsBatch != null){ -// disposableGoodsBatch.setHasPrinted(Constants.STR_YES); -// disposableGoodsBatch.setPrintTime(date); -// objectDao.update(disposableGoodsBatch); -// } -// } -// -// } - List expensiveDisposablegoodsList = diposableGoodsManager.getExpensivediposablegoodsByGodownEntryItemId(godownEntryItem.getId()); - if(!CollectionUtils.isEmpty(expensiveDisposablegoodsList)){ - for (ExpensiveDisposablegoods expensiveDisposablegoods : expensiveDisposablegoodsList) { + List expensiveGoodsInstanceList = objectDao.findBySql(ExpensiveGoodsInstance.class.getSimpleName(), "where id in (select from where " + godownEntryItem.getId()); + if(CollectionUtils.isNotEmpty(expensiveGoodsInstanceList)){ + for (ExpensiveGoodsInstance expensiveGoodsInstance : expensiveGoodsInstanceList) { JSONObject printItemObj = new JSONObject(); - printItemObj.put("fullName", godownEntryItem.getDiposableGoods().getName()); - printItemObj.put("newBatch", godownEntryItem.getNewBatch()); - printItemObj.put("barcode", expensiveDisposablegoods.getBarcode()); + printItemObj.put("fullName", expensiveGoodsInstance.getShowName()); + printItemObj.put("barcode", expensiveGoodsInstance.getBarcode()); printItemObj.put("expDate", expDateStr); printItemObj.put("supplierName", godownEntryItem.getSupplierName()); - printItemObj.put("batchNumber", godownEntryItem.getBatchNumber()); printItemObj.put("specification", specification); printItemObj.put("type", "高值耗材"); jsonArray.add(printItemObj); } - }else{ - JSONObject printItemObj = new JSONObject(); - printItemObj.put("fullName", godownEntryItem.getDiposableGoods().getName()); - printItemObj.put("newBatch", godownEntryItem.getNewBatch()); - printItemObj.put("barcode", barcode); - printItemObj.put("expDate", expDateStr); - printItemObj.put("supplierName", godownEntryItem.getSupplierName()); - printItemObj.put("batchNumber", godownEntryItem.getBatchNumber()); - printItemObj.put("specification", specification); - printItemObj.put("type", "批次"); - jsonArray.add(printItemObj); } } result.put("itemsDetails", jsonArray); } - // 同步修改发货和退货记录 ,为了不依赖发货和退货两个模块,代码就写在这。 - private void synchronizePriceFromIdentificationToInvoiceAndReturnRecord( - DisposableGoods diposableGoods, - DisposableGoodsIdentification identification, Double oldPrice, - Double newPrice) { - // 如果存在发货或者退货记录,不允许修改价格。 - String diposableGoodsItemSql = String.format( - " where po.identificationID=%s ", identification.getId()); - int diposableGoodsItemCount = objectDao - .countObjectBySql(DiposableGoodsItem.class.getSimpleName(), - diposableGoodsItemSql); - if (diposableGoodsItemCount > 0) { - throw new RuntimeException(String.format("物品[%s]已发货,不允许修改价格!", - diposableGoods.getShowName())); - } - // 如果存在领用记录,不允许修改价格。 - String receiveRecordDiposableGoodsItemSql = String.format( - " where po.identificationID=%s ", identification.getId()); - int receiveRecordDiposableGoodsItemCount = objectDao.countObjectBySql( - ReceiveRecordDiposableGoodsItem.class.getSimpleName(), - receiveRecordDiposableGoodsItemSql); - if (receiveRecordDiposableGoodsItemCount > 0) { - throw new RuntimeException(String.format("物品[%s]已领用,不允许修改价格!", - diposableGoods.getShowName())); - } - // 如果存在出库记录,不允许修改价格 - String godownEntryDiposableGoodsItemSql = String.format( - " where po.identificationID=%s ", identification.getId()); - int godownEntryDiposableGoodsItemCount = objectDao.countObjectBySql( - GodownEntryDiposableGoodsItem.class.getSimpleName(), - godownEntryDiposableGoodsItemSql); - if (godownEntryDiposableGoodsItemCount > 0) { - throw new RuntimeException(String.format("物品[%s]已出库,不允许修改价格!", - diposableGoods.getShowName())); - } - } // 保存退库单 @Override - public List saveGodownOutEntry_TRANS_REQUIRED(GodownEntry entry, + public List saveGodownOutEntry_TRANS_REQUIRED(ExpensiveGoodsGodownEntry entry, Map result , boolean needWriteBack) { - return saveGodownOutEntry_internal(entry, result , needWriteBack); + return saveGodownOutEntry_internal(entry, result); } + /** - * - */ - @Override - public void saveAppropriateEntry_TRANS_REQUIRED(GodownEntry entry,Map result){ - if(entry != null){ - entry.setId(null); - entry.setType(GodownEntry.TYPE_APPROPRIATE); - entry.setOrgUnitCode(AcegiHelper.getCurrentOrgUnitCode()); - entry.setOrgUnitName(AcegiHelper.getCurrentOrgUnitName()); - WareHouse wareHouse = wareHouseManager.getWareHouseById(entry.getTargetWareHouseId()); - if(wareHouse != null){ - entry.setTargetOrgUnitCode(wareHouse.getOrgUnitCode()); - entry.setTargetOrgUnitName(wareHouse.getOrgUnitName()); - } - save(entry); - - GodownEntry inEntry = clone(entry); - inEntry.setId(null); - inEntry.setType(GodownEntry.TYPE_IN); - inEntry.setSubType(GodownEntry.SUBTYPE_MOVE_IN); - inEntry.setTargetWareHouseId(null); - inEntry.setTargetWareHouseName(null); - inEntry.setWarehouseID(entry.getTargetWareHouseId()); - inEntry.setWarehouseName(entry.getTargetWareHouseName()); - - for(GodownEntryItem item : inEntry.getItemsList()){ - item.setDisposableGoodsStockID(null); - item.setDisposableGoodsBatchStockID(null); - } - - GodownEntry outEntry = clone(entry); - outEntry.setId(null); - outEntry.setType(GodownEntry.TYPE_OUT); - outEntry.setSubType(GodownEntry.SUBTYPE_MOVE_OUT); - //outEntry.setTargetWareHouseId(null); - //outEntry.setTargetWareHouseName(null); - outEntry.setWarehouseID(entry.getWarehouseID()); - outEntry.setWarehouseName(entry.getWarehouseName()); - - Map outResult = new HashMap(); - //设置单的关系 - inEntry.setSourceId(entry.getId()); - outEntry.setSourceId(entry.getId()); - - //生成调拨出库和调拨入库业务方法 - //生成调拨出库记录 - List disposableGoodsStorageAdjustVoList = saveGodownOutEntry_internal(outEntry, outResult , false); - - //生成调拨入库记录 - saveGodownEntryModifyOnlyAmount_internal(inEntry, result , disposableGoodsStorageAdjustVoList); - - //省医回写接口调用 - if(CssdUtils.isProject("gdsy") && writeBackInventoryDao != null){ - if(CollectionUtils.isNotEmpty(disposableGoodsStorageAdjustVoList)){ - //调拨由于调入与调出方式的库存都发生了变化,所以需要实时回写。 - /*4 - */ - //退库单的二级科室-供应室 - OrgUnit sendDepartmentOrgUnit = (OrgUnit)objectDao.getByProperty(OrgUnit.class.getSimpleName(), "orgUnitCoding", entry.getOrgUnitCode()); - //退库单的一级科室-设备仓库(健迅系统的一级科室推入库单数据过来只会有一个一级科室,且id不会变) - OrgUnit receiveDepartmentOrgUnit = (OrgUnit)objectDao.getByProperty(OrgUnit.class.getSimpleName(), "orgUnitCoding", entry.getTargetOrgUnitCode()); - String xmlParam = "4" + sendDepartmentOrgUnit.getIdFromHisSync() + "" - + "" + receiveDepartmentOrgUnit.getIdFromHisSync() + "" - + "APPR_" + entry.getSerialNumber() + ""; - - xmlParam += writeBackInventoryDao.getXmlStringOfWriteBackDataDetailList(disposableGoodsStorageAdjustVoList); - logger.debug("调拨回写参数xmlParam="+xmlParam); - appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "调拨回写参数xmlParam="+xmlParam); - String writeBackResult = writeBackInventoryDao.insertWriteBackForCommon(xmlParam); - appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "调拨回写参数xmlParam="+xmlParam+",对应的回写结果=" + writeBackResult); - JSONObject jsonReturn = JSONObject.fromObject(writeBackResult); - if(!jsonReturn.optBoolean("success")){ - throw new RuntimeException(ConstantDefinition.WRITEBACK_RESULTMESSAGE_PREFIX + jsonReturn.optString("message")); - } - } - } - - //设置库存关系,但是调拨单本身不影响库存 - for(GodownEntryItem item : entry.getItemsList()){ -// item.setDiposableGoods(diposableGoodsManager.getDisposableGoodsStockById(item.getDisposableGoodsStockID() + "")); - } - } - } - /** * 从源对象中复制一个信息一样的副本,但是修改了引用关系,同时里面的item也是副本 * @param source * @return */ - private GodownEntry clone(GodownEntry source){ + private ExpensiveGoodsGodownEntry clone(ExpensiveGoodsGodownEntry source){ if(source == null){ return null; } - GodownEntry newEntry = new GodownEntry(); - newEntry.setInventoryWriteBackEntryId(source.getInventoryWriteBackEntryId()); + ExpensiveGoodsGodownEntry newEntry = new ExpensiveGoodsGodownEntry(); newEntry.setOperator(source.getOperator()); newEntry.setRemark(source.getRemark()); newEntry.setSerialNumber(serialNumManager.getSerialNumberStr(SerialNum.TYPE_INSERT_GODOWN)); - newEntry.setSourceId(source.getSourceId()); newEntry.setSupplierName(source.getSupplierName()); newEntry.setTime(source.getTime()); newEntry.setTotalPrice(source.getTotalPrice()); newEntry.setId(null); newEntry.setSubType(source.getSubType()); - newEntry.setTargetWareHouseId(source.getTargetWareHouseId()); - newEntry.setTargetWareHouseName(source.getTargetWareHouseName()); - newEntry.setTargetOrgUnitCode(source.getTargetOrgUnitCode()); - newEntry.setTargetOrgUnitName(source.getTargetOrgUnitName()); newEntry.setType(source.getType()); newEntry.setWarehouseID(source.getWarehouseID()); newEntry.setWarehouseName(source.getWarehouseName()); newEntry.setOrgUnitCode(source.getOrgUnitCode()); newEntry.setOrgUnitName(source.getOrgUnitName()); //设置item项 - for(GodownEntryItem item : source.getItemsList()){ - GodownEntryItem newItem = godownEntryItemManager.clone(item); - newItem.setGodownEntry(newEntry); + for(ExpensiveGoodsGodownEntryItem item : source.getItemsList()){ + ExpensiveGoodsGodownEntryItem newItem = godownEntryItemManager.clone(item); + newItem.setExpensiveGoodsEntry(newEntry); newItem.setId(null); - newItem.setNewBatch(false); newEntry.addItem(newItem); } this.syncGodownEntryWareHouse(newEntry); @@ -1666,7 +334,7 @@ @Override public void saveGodownOutEntry_TRANS_MANDATORY( - Collection entrys, Map result) { + Collection entrys, Map result) { //手工添加退库单,暂定需要回写 boolean needWriteBack = true; saveGodownOutEntry_internal(entrys, result ,needWriteBack); @@ -1679,571 +347,90 @@ * @param result * @param needWriteBack 是否需要回写,为true时需要 */ - private List saveGodownOutEntry_internal(Iterable entrys, + private List saveGodownOutEntry_internal(Iterable entrys, Map result , boolean needWriteBack) { if(entrys == null){ return null; } List disposableGoodsStorageAdjustVoList = new ArrayList(); - ExpensiveGoodsServiceContext disposableGoodsServiceContext = new ExpensiveGoodsServiceContext(); + ExpensiveGoodsServiceContext expensiveGoodsServiceContext = new ExpensiveGoodsServiceContext(); Long warehouseID = null; String warehouseName = null; - for (GodownEntry godownEntry : entrys) { + for (ExpensiveGoodsGodownEntry godownEntry : entrys) { warehouseID = godownEntry.getWarehouseID(); warehouseName = godownEntry.getWarehouseName(); // 汇总信息 - summaryDiposableGoodsInfoForGodownOutEntry2(godownEntry, disposableGoodsServiceContext); + summaryDiposableGoodsInfoForGodownOutEntry2(godownEntry, expensiveGoodsServiceContext); } // 获取并锁定一次性物品相关资源 - lockAndGetDiposableGoodsResourcesForCancellingStocks(GodownEntry.TYPE_OUT,warehouseID,warehouseName,disposableGoodsServiceContext); - for (GodownEntry godownEntry : entrys) { - List list = saveGodownOutEntry_internal(godownEntry, disposableGoodsServiceContext,needWriteBack); + lockAndGetDiposableGoodsResources(ExpensiveGoodsGodownEntry.TYPE_OUT,warehouseID,warehouseName,expensiveGoodsServiceContext); + for (ExpensiveGoodsGodownEntry godownEntry : entrys) { + List list = saveGodownOutEntry_internal(godownEntry, expensiveGoodsServiceContext); if(CollectionUtils.isNotEmpty(list)){ disposableGoodsStorageAdjustVoList.addAll(list); } } return disposableGoodsStorageAdjustVoList; } - private List saveGodownOutEntry_internal(GodownEntry godownEntry, - Map result , boolean needWriteBack) { - ExpensiveGoodsServiceContext disposableGoodsServiceContext = new ExpensiveGoodsServiceContext(); + private List saveGodownOutEntry_internal(ExpensiveGoodsGodownEntry godownEntry, + Map result) { + ExpensiveGoodsServiceContext expensiveGoodsServiceContext = new ExpensiveGoodsServiceContext(); // 汇总信息 - summaryDiposableGoodsInfoForGodownOutEntry2(godownEntry, disposableGoodsServiceContext); + summaryDiposableGoodsInfoForGodownOutEntry2(godownEntry, expensiveGoodsServiceContext); - lockAndGetDiposableGoodsResourcesForCancellingStocks(GodownEntry.TYPE_OUT,godownEntry.getWarehouseID(),godownEntry.getWarehouseName(),disposableGoodsServiceContext); + lockAndGetDiposableGoodsResources(ExpensiveGoodsGodownEntry.TYPE_OUT,godownEntry.getWarehouseID(),godownEntry.getWarehouseName(),expensiveGoodsServiceContext); - return saveGodownOutEntry_internal(godownEntry, disposableGoodsServiceContext , needWriteBack); + return saveGodownOutEntry_internal(godownEntry, expensiveGoodsServiceContext); } + + private void lockAndGetDiposableGoodsResources(String entryTYPE, + Long warehouseID,String warehouseName,ExpensiveGoodsServiceContext expensiveGoodsServiceContext){ + + } /** * @param entry * @param idToDisposableGoodsStockMap * @param idToBatchStockMap */ - private List saveGodownOutEntry_internal(GodownEntry entry, - ExpensiveGoodsServiceContext disposableGoodsServiceContext, boolean needWriteBack) { - List disposableGoodsStorageAdjustVoList = new ArrayList(); - Map idToDisposableGoodsMap = disposableGoodsServiceContext - .getIdToDisposableGoodsMap(); - Map idToDisposableGoodsStockMap = disposableGoodsServiceContext - .getIdToDisposableGoodsStockMap(); - Map idToDisposableGoodsBatchStockMap = disposableGoodsServiceContext - .getIdToDisposableGoodsBatchStockMap(); - // 保存入库单对象,后面需要绑定入库单和itemID - /*if(StringUtils.isBlank(entry.getSerialNumber())){// 有可能在其他地方设置了,比如同步入库单/导入入库单 - entry.setSerialNumber(serialNumManager - .getSerialNumberStr(SerialNum.TYPE_INSERT_GODOWN)); - }*/ + private List saveGodownOutEntry_internal(ExpensiveGoodsGodownEntry entry, + ExpensiveGoodsServiceContext disposableGoodsServiceContext) { this.save(entry); - //objectDao.save(entry); - List itemList = entry.getItemsList(); + List itemList = entry.getItemsList(); for (int i = 0; i < itemList.size(); ++i) { - GodownEntryItem godownEntryItem = itemList.get(i); - Long disposableGoodsId = godownEntryItem.getDisposableGoodsID(); - if (disposableGoodsId == null) { - throw new RuntimeException("一次性物品定义id不能为空!"); - } - DisposableGoods disposableGoods = idToDisposableGoodsMap - .get(disposableGoodsId); - if (disposableGoods == null) { - throw new RuntimeException("物品定义已被删除!"); + ExpensiveGoodsGodownEntryItem godownEntryItem = itemList.get(i); + if (godownEntryItem.getExpensiveGoodsId() == null) { + throw new RuntimeException("高值耗材实例id不能为空!"); } - Long disposableGoodsStockID = godownEntryItem.getDisposableGoodsStockID(); - if (disposableGoodsStockID == null) { - throw new RuntimeException("一次性物品库存为空!"); - } - DisposableGoodsStock disposableGoodsStock = idToDisposableGoodsStockMap - .get(disposableGoodsStockID); - if (disposableGoodsStock == null) { - throw new RuntimeException("物品已被删除!"); - } - if(disposableGoods.expensiveDiposablegoods()){ - List list = newGodownEntryDisposableGoodsItemForExpensiveDisposablegoods(entry, disposableGoodsServiceContext, godownEntryItem); - if(CollectionUtils.isNotEmpty(list)){ - disposableGoodsStorageAdjustVoList.addAll(list); - } - }else{ - List list = newGodownEntryDiposableGoodsItem(entry, idToDisposableGoodsStockMap, - idToDisposableGoodsBatchStockMap, godownEntryItem); - if(CollectionUtils.isNotEmpty(list)){ - disposableGoodsStorageAdjustVoList.addAll(list); - } - } - godownEntryItem.setDiposableGoods(disposableGoodsStock);// 和一次性物品库存关联 objectDao.update(godownEntryItem); } - //如果需要回写为true,这时才回写 - if(needWriteBack){ - // 回写物资系统 - writeBackForDiposableGoodsStorageOut(entry , disposableGoodsStorageAdjustVoList); - } - return disposableGoodsStorageAdjustVoList; + return null; } - /** - * 构造新的一次性物品入库明细,返回各标识数据及库存调整数量 - * @param entry - * @param idToDiposableGoodsMap - * @param idToBatchStockMap - * @param godownEntryItem - * @return List - */ - private List newGodownEntryDiposableGoodsItem(GodownEntry entry, - Map idToDiposableGoodsMap, - Map idToBatchStockMap, - GodownEntryItem godownEntryItem) { - List result = new ArrayList(); - Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); - Long disposableGoodsStockID = godownEntryItem.getDisposableGoodsStockID(); - DisposableGoodsStock diposableGoods = idToDiposableGoodsMap - .get(disposableGoodsStockID); - Long disposableGoodsBatchID = godownEntryItem.getDisposableGoodsBatchID(); - Long disposableGoodsBatchStockID = godownEntryItem.getDisposableGoodsBatchStockID(); - //物资系统的batchId - Long batchIdFromHisSync = godownEntryItem.getBatchIdFromHisSync(); - //深圳南山同步入库时传递的批次batchId - String identificationSync = godownEntryItem.getIdentification(); - String batchNumber = godownEntryItem.getBatchNumber(); - DisposableGoodsBatchStock disposableGoodsBatchStock = null; - if(!DatabaseUtil.isPoIdValid(disposableGoodsID)){ - throw new RuntimeException("disposableGoodsID不能为空!"); - } - if(!DatabaseUtil.isPoIdValid(disposableGoodsStockID)){ - throw new RuntimeException("disposableGoodsStockID不能为空!"); - } - if(!DatabaseUtil.isPoIdValid(disposableGoodsBatchID)){ - throw new RuntimeException("disposableGoodsBatchID不能为空!"); - } - if(!DatabaseUtil.isPoIdValid(disposableGoodsBatchStockID)){ - throw new RuntimeException("disposableGoodsBatchStockID不能为空!"); - } - // 因为批次必须选择,所以batchID不为null - if (disposableGoodsBatchStockID == null) { - // 有可能该批次已经存在,尝试根据批次获取 - disposableGoodsBatchStock = getDiposableGoodBatchStockByBatchNumber(disposableGoodsStockID,batchNumber); -// throw new RuntimeException("批次ID为空!"); - }else{ - disposableGoodsBatchStock = idToBatchStockMap.get(disposableGoodsBatchStockID); - } - if (disposableGoodsBatchStock == null) { - // 批次已经不存在 - throw new RuntimeException("批次已被删除!"); - } - if(disposableGoodsBatchStockID == null){ - disposableGoodsBatchStockID = disposableGoodsBatchStock.getId(); - godownEntryItem.setDisposableGoodsBatchStockID(disposableGoodsBatchStockID); - } - - // 退库不需要更新批次相关信息 - long outAmount = godownEntryItem.getAmount(); - if(outAmount <= 0){ - throw new RuntimeException("退库数量必须大于0!"); - } - // 这是用户在页面看到的退库价格,必须从这些价格的标识号里面退库 - Double outPrice = godownEntryItem.getCost(); - - List identifications = null; - if(DatabaseUtil.isPoIdValid(batchIdFromHisSync)){ - identifications = objectDao.findBySql(DisposableGoodsIdentification.class.getSimpleName(), - " where batchStock.id="+ disposableGoodsBatchStockID +" and batchIdFromHisSync=" + batchIdFromHisSync); - }else{ - identifications = disposableGoodsBatchStock.getIdentifications(); - } - // 开始退库 - for (DisposableGoodsIdentification identification : identifications) { - Long restAmount = identification.getAmount(); - Double price = identification.getPrice(); - if(restAmount <= 0){ - continue; + private void summaryDiposableGoodsInfoForGodownOutEntry2(ExpensiveGoodsGodownEntry entry, + ExpensiveGoodsServiceContext expensiveGoodsServiceContext) { + Set expensiveGoodsIDsSet = expensiveGoodsServiceContext.getExpensiveGoodsIdsSet(); + List itemList = entry.getItemsList(); + for (ExpensiveGoodsGodownEntryItem godownEntryItem : itemList) { + Long expensiveGoodsId = godownEntryItem + .getExpensiveGoodsId(); + if (DatabaseUtil.isPoIdValid(expensiveGoodsId)) { + expensiveGoodsIDsSet.add(expensiveGoodsId); } - //出库单的成功不为空时才比较价格,否则忽略 - if(outPrice != null && !outPrice.equals(price)){ - continue; - } - Long curOutAmount = Math.min(outAmount, restAmount); - GodownEntryDiposableGoodsItem diposableGoodsItem = new GodownEntryDiposableGoodsItem(); - diposableGoodsItem.setAmount(curOutAmount); - diposableGoodsItem.setPrice(price); - diposableGoodsItem.setGoodsName(diposableGoods.getShowNameForSmallestUnit()); - diposableGoodsItem.setDisposableGoodsID(disposableGoodsID); - diposableGoodsItem.setDisposableGoodsStockID(disposableGoodsStockID); - diposableGoodsItem.setDisposableGoodsBatchID(disposableGoodsBatchID); - diposableGoodsItem.setDisposableGoodsBatchStockID(disposableGoodsBatchStockID); - diposableGoodsItem.setGodownEntryID(entry.getId());// 关联退库单ID - diposableGoodsItem.setGodownEntryItemID(godownEntryItem.getId());// 关联退库itemID - diposableGoodsItem.setIdentificationID(identification.getId());// 关联标识号ID - - diposableGoodsItem.setSourceIdFromHisSync(godownEntryItem.getSourceIdFromHisSync()); - diposableGoodsItem.setBatchIdFromHisSync(batchIdFromHisSync); - - diposableGoodsItem.setIdentification(identificationSync); - if(!diposableGoodsItem.isAssociatedInfoValid()){ - throw new RuntimeException("关联信息不正确!"); - } - // 库存调整 - identification.adjustAmount(-curOutAmount); - objectDao.update(identification); - objectDao.update(disposableGoodsBatchStock); - objectDao.update(diposableGoods); - objectDao.save(diposableGoodsItem);// 保存diposableGoodsItem - - //记录各标识库存数量调整变动结果 - DisposableGoodsStorageAdjustVo disposableGoodsStorageAdjustVo = new DisposableGoodsStorageAdjustVo(); - disposableGoodsStorageAdjustVo.setDisposableGoodsIdentificationId(identification.getId()); - disposableGoodsStorageAdjustVo.setAdjustAmount(curOutAmount); - result.add(disposableGoodsStorageAdjustVo); - - outAmount -= curOutAmount; - if(outAmount == 0){ - break; - } } - if(outAmount > 0){ - throw new RuntimeException("库存不够!"); - } - return result; - // 从批次设置信息,因为有可能是同步过来的 -// godownEntryItem.setExpDate(batchStock.getExpDate()); -// godownEntryItem.setManufacturer(batchStock.getManufacturer()); -// godownEntryItem.setSterileBatchNumber(batchStock.getSterileBatchNumber()); -// godownEntryItem.setSupplierName(batchStock.getSupplierName()); -// objectDao.saveOrUpdate(godownEntryItem); } - - private List newGodownEntryDisposableGoodsItemForExpensiveDisposablegoods(GodownEntry entry, - ExpensiveGoodsServiceContext disposableGoodsServiceContext, - GodownEntryItem godownEntryItem) { - List result = new ArrayList(); - Map idToDisposableGoodsStockMap = disposableGoodsServiceContext - .getIdToDisposableGoodsStockMap(); - Map idToExpensiveDisposablegoodsMap = disposableGoodsServiceContext - .getIdToExpensiveDisposableGoodsMap(); - Map idToDisposableGoodsBatchStockMap = disposableGoodsServiceContext - .getIdToDisposableGoodsBatchStockMap(); - - Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); - Long disposableGoodsStockID = godownEntryItem.getDisposableGoodsStockID(); - DisposableGoodsStock diposableGoods = idToDisposableGoodsStockMap - .get(disposableGoodsStockID); - Long disposableGoodsBatchID = godownEntryItem.getDisposableGoodsBatchID(); - Long disposableGoodsBatchStockID = godownEntryItem.getDisposableGoodsBatchStockID(); - Long expensiveDisposableGoodsId = godownEntryItem.getExpensiveDisposableGoodsId(); - DisposableGoodsBatchStock disposableGoodsBatchStock = null; - if(!DatabaseUtil.isPoIdValid(disposableGoodsID)){ - throw new RuntimeException("disposableGoodsID不能为空!"); - } - if(!DatabaseUtil.isPoIdValid(disposableGoodsStockID)){ - throw new RuntimeException("disposableGoodsStockID不能为空!"); - } - if(!DatabaseUtil.isPoIdValid(disposableGoodsBatchID)){ - throw new RuntimeException("disposableGoodsBatchID不能为空!"); - } - if(!DatabaseUtil.isPoIdValid(disposableGoodsBatchStockID)){ - throw new RuntimeException("disposableGoodsBatchStockID不能为空!"); - } - if(!DatabaseUtil.isPoIdValid(expensiveDisposableGoodsId)){ - throw new RuntimeException("高值耗材id不能为空!"); - } - // 因为批次必须选择,所以batchID不为null - disposableGoodsBatchStock = idToDisposableGoodsBatchStockMap.get(disposableGoodsBatchStockID); - if (disposableGoodsBatchStock == null) { - // 批次已经不存在 - throw new RuntimeException("批次已被删除!"); - } - ExpensiveDisposablegoods expensiveDisposableGoods = idToExpensiveDisposablegoodsMap.get(expensiveDisposableGoodsId); - if (expensiveDisposableGoods == null) { - // 批次已经不存在 - throw new RuntimeException("高值耗材已被删除!"); - } - // 状态校验 - if(!expensiveDisposableGoods.inWarehouse()){ - throw new RuntimeException(String.format("%s 为[%s]状态,不能退库!", expensiveDisposableGoods.getBarcode(),expensiveDisposableGoods.getStatus())); - } - // 更改状态 - expensiveDisposableGoods.setStatus(ExpensiveDisposablegoods.STATUS_OUT_WAREHOUSE); - // 调整库存 - expensiveDisposableGoods.adjustAmount(-1); - expensiveDisposableGoods.setGodownEntryId(entry.getId()); - expensiveDisposableGoods.setGodownEntryItemId(godownEntryItem.getId()); - objectDao.update(expensiveDisposableGoods); - - DisposableGoodsStorageAdjustVo disposableGoodsStorageAdjustVo = new DisposableGoodsStorageAdjustVo(); - disposableGoodsStorageAdjustVo.setExpensiveDisposablegoodsId(expensiveDisposableGoods.getId()); - disposableGoodsStorageAdjustVo.setAdjustAmount(1L); - result.add(disposableGoodsStorageAdjustVo); - - if(!expensiveDisposableGoods.isAssociatedInfoValidForGodownOutEntry()){ - throw new RuntimeException("关联信息不正确!"); - } - // 退库不需要更新批次相关信息 - long outAmount = godownEntryItem.getAmount(); - if(outAmount <= 0){ - throw new RuntimeException("退库数量必须大于0!"); - } - GodownEntryDiposableGoodsItem diposableGoodsItem = new GodownEntryDiposableGoodsItem(); - diposableGoodsItem.setAmount(outAmount); - diposableGoodsItem.setPrice(expensiveDisposableGoods.getPrice()); - diposableGoodsItem.setGoodsName(diposableGoods.getShowNameForSmallestUnit()); - diposableGoodsItem.setDisposableGoodsID(disposableGoodsID); - diposableGoodsItem.setDisposableGoodsStockID(disposableGoodsStockID); - diposableGoodsItem.setDisposableGoodsBatchID(disposableGoodsBatchID); - diposableGoodsItem.setDisposableGoodsBatchStockID(disposableGoodsBatchStockID); - diposableGoodsItem.setExpensiveDisposableGoodsId(expensiveDisposableGoodsId); - diposableGoodsItem.setGodownEntryID(entry.getId());// 关联退库单ID - diposableGoodsItem.setGodownEntryItemID(godownEntryItem.getId());// 关联退库itemID - if(!diposableGoodsItem.isAssociatedInfoValidForOutExpensiveDisposableGoodsId()){ - throw new RuntimeException("关联信息不正确!"); - } - objectDao.update(disposableGoodsBatchStock); - objectDao.update(diposableGoods); - objectDao.save(diposableGoodsItem);// 保存diposableGoodsItem - return result; - } - private void deleteGodownOutEntryItem(GodownEntryItem godownEntryItem, - ExpensiveGoodsServiceContext disposableGoodsServiceContext) { - Map idToDisposableGoodsMap = disposableGoodsServiceContext - .getIdToDisposableGoodsMap(); - Map idToDisposableGoodsStockMap = disposableGoodsServiceContext - .getIdToDisposableGoodsStockMap(); - Map idToExpensiveDisposablegoodsMap = disposableGoodsServiceContext - .getIdToExpensiveDisposableGoodsMap(); - Map idToDisposableGoodsBatchMap = disposableGoodsServiceContext - .getIdToDisposableGoodsBatchMap(); - Map idToDisposableGoodsBatchStockMap = disposableGoodsServiceContext - .getIdToDisposableGoodsBatchStockMap(); - Map idToIdentificationMap = disposableGoodsServiceContext - .getIdToIdentificationMap(); - Long itemID = godownEntryItem.getId(); - // 删除该项 - String sql = String.format(" where po.godownEntryItemID=%s", itemID); - @SuppressWarnings("unchecked") - List diposableGoodsItems = objectDao - .findBySql(GodownEntryDiposableGoodsItem.class.getSimpleName(), - sql); - if(diposableGoodsItems == null || diposableGoodsItems.isEmpty()){ - throw new RuntimeException("数据异常,退库单一次性物品明细数据已不存在!"); - } - // 修改时,每一项都应该有ID - Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); - Long disposableGoodsStockID = godownEntryItem.getDisposableGoodsStockID(); - Long disposableGoodsBatchID = godownEntryItem.getDisposableGoodsBatchID(); - Long disposableGoodsBatchStockID = godownEntryItem.getDisposableGoodsBatchStockID(); - if(disposableGoodsID == null){ - throw new RuntimeException("物品定义id不能为空,请升级数据!"); - } - if(disposableGoodsStockID == null){ - throw new RuntimeException("物品库存id不能为空,请升级数据!"); - } - if(disposableGoodsBatchID == null){ - throw new RuntimeException("物品批次id不能为空,请升级数据!"); - } - if(disposableGoodsBatchStockID == null){ - throw new RuntimeException("物品批次库存id不能为空,请升级数据!"); - } - DisposableGoods disposableGoods = idToDisposableGoodsMap.get(disposableGoodsID); - DisposableGoodsStock disposableGoodsStock = idToDisposableGoodsStockMap.get(disposableGoodsStockID); - // 查找批次定义 - DisposableGoodsBatch disposableGoodsBatch = idToDisposableGoodsBatchMap.get(disposableGoodsBatchID); - DisposableGoodsBatchStock disposableGoodsBatchStock = idToDisposableGoodsBatchStockMap.get(disposableGoodsBatchStockID); - if(disposableGoods == null){ - throw new RuntimeException("物品定义不存在!"); - } - if(disposableGoodsStock == null){ - throw new RuntimeException("物品库存不存在!"); - } - if(disposableGoodsBatch == null){ - throw new RuntimeException("物品批次不存在!"); - } - if(disposableGoodsBatchStock == null){ - throw new RuntimeException("物品批次库存不存在!"); - } - if(disposableGoods.expensiveDiposablegoods()){ - for (GodownEntryDiposableGoodsItem diposableGoodsItem : diposableGoodsItems) { - Long identificationID = diposableGoodsItem.getIdentificationID(); - if (identificationID != null) { - throw new RuntimeException("物品当前类型为高值耗材,和当时的退库类型不一致,无法删除!"); - } - Long expensiveDisposableGoodsId = diposableGoodsItem.getExpensiveDisposableGoodsId(); - if(expensiveDisposableGoodsId == null){ - throw new RuntimeException("高值耗材id不能为空!"); - } - ExpensiveDisposablegoods expensiveDisposableGoods = idToExpensiveDisposablegoodsMap.get(expensiveDisposableGoodsId); - if (expensiveDisposableGoods == null) { - // 批次已经不存在 - throw new RuntimeException("高值耗材已被删除!"); - } - // 状态校验 - if(!expensiveDisposableGoods.outWarehouse()){ - throw new RuntimeException(String.format("%s 为[%s]状态,不能删除退库单!", expensiveDisposableGoods.getBarcode(),expensiveDisposableGoods.getStatus())); - } - // 更改状态 - expensiveDisposableGoods.setStatus(ExpensiveDisposablegoods.STATUS_IN_WAREHOUSE); - // 调整库存 - expensiveDisposableGoods.adjustAmount(1); - expensiveDisposableGoods.setGodownEntryId(null); - expensiveDisposableGoods.setGodownEntryItemId(null); - objectDao.update(expensiveDisposableGoods); - - objectDao.update(disposableGoodsBatchStock); - objectDao.update(disposableGoodsStock); - objectDao.update(disposableGoodsBatch); - objectDao.update(disposableGoods); - objectDao.delete(diposableGoodsItem);// 删除明细项 - } - }else{ - for (GodownEntryDiposableGoodsItem diposableGoodsItem : diposableGoodsItems) { - Long identificationID = diposableGoodsItem.getIdentificationID(); - if (identificationID == null) { - throw new RuntimeException("标识号不能为空!"); - } - - DisposableGoodsIdentification identification = idToIdentificationMap - .get(identificationID); - if (identification == null) { - throw new RuntimeException("标识号已被删除!"); - } - Long amount = diposableGoodsItem.getAmount(); - identification.adjustAmount(amount);// 增加库存 - objectDao.update(identification); - objectDao.update(disposableGoodsBatchStock); - objectDao.update(disposableGoodsStock); - objectDao.update(disposableGoodsBatch); - objectDao.update(disposableGoods); - - objectDao.delete(diposableGoodsItem);// 删除明细项 - } - } - - // 删除godownEntryItem - godownEntryItem.getGodownEntry().getItemsList().remove(godownEntryItem); - objectDao.delete(godownEntryItem); - } - - private void summaryDiposableGoodsInfoForGodownOutEntry2(GodownEntry entry, - ExpensiveGoodsServiceContext disposableGoodsServiceContext) { - Set disposableGoodsIDsSet = disposableGoodsServiceContext - .getDisposableGoodsIdsSet(); - Set disposableGoodsStockIDsSet = disposableGoodsServiceContext - .getDisposableGoodsStockIdsSet(); - Set expensiveDisposablegoodsIdsSet = disposableGoodsServiceContext - .getExpensiveDisposableGoodsIdsSet(); - Set disposableGoodsBatchIDsSet = disposableGoodsServiceContext - .getDisposableGoodsBatchIdsSet(); - Set disposableGoodsBatchStockIDsSet = disposableGoodsServiceContext - .getDisposableGoodsBatchStockIdsSet(); - Set batchNumbersSet = disposableGoodsServiceContext - .getDisposableGoodsBatchNumberSet(); - Set identificationIdsSet = disposableGoodsServiceContext - .getIdentificationIdsSet(); - Set batchIdFromHisSyncSet = disposableGoodsServiceContext - .getBatchIdFromHisSyncSet(); - Set identificationSyncSet = disposableGoodsServiceContext - .getIdentificationSet(); - List itemList = entry.getItemsList(); - for (GodownEntryItem godownEntryItem : itemList) { - Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); - Long disposableGoodsStockID = godownEntryItem - .getDisposableGoodsStockID(); - if (disposableGoodsID == null) { - throw new RuntimeException("物品定义的id不能为空!"); - } - disposableGoodsIDsSet.add(disposableGoodsID); - if (DatabaseUtil.isPoIdValid(disposableGoodsStockID)) { - disposableGoodsStockIDsSet.add(disposableGoodsStockID); - } - Long disposableGoodsBatchID = godownEntryItem - .getDisposableGoodsBatchID(); - Long disposableGoodsBatchStockID = godownEntryItem - .getDisposableGoodsBatchStockID(); - if (DatabaseUtil.isPoIdValid(disposableGoodsBatchID)) { - disposableGoodsBatchIDsSet.add(disposableGoodsBatchID); - } - if (DatabaseUtil.isPoIdValid(disposableGoodsBatchStockID)) { - disposableGoodsBatchStockIDsSet - .add(disposableGoodsBatchStockID); - } - - Long identificationID = godownEntryItem.getIdentificationID(); - if (DatabaseUtil.isPoIdValid(identificationID)) { - identificationIdsSet.add(identificationID); - } - Long expensiveDisposablegoodsId = godownEntryItem - .getExpensiveDisposableGoodsId(); - if (DatabaseUtil.isPoIdValid(expensiveDisposablegoodsId)) { - expensiveDisposablegoodsIdsSet.add(expensiveDisposablegoodsId); - } - Long batchIdFromHisSyncId = godownEntryItem.getBatchIdFromHisSync(); - if (DatabaseUtil.isPoIdValid(batchIdFromHisSyncId)) { - batchIdFromHisSyncSet.add(batchIdFromHisSyncId); - } - String identificationSetSync = godownEntryItem.getIdentification(); - if (StringUtils.isNotBlank(identificationSetSync)){ - identificationSyncSet.add(identificationSetSync); - } - String batchNumber = godownEntryItem.getBatchNumber(); - batchNumbersSet.add(batchNumber); - } - Long entryID = entry.getId(); - if (entryID != null) { - String sql = String.format(" where po.godownEntryID=%s", entryID); - List identificationIDs = objectDao.getLongProperties( - GodownEntryDiposableGoodsItem.class.getSimpleName(), - "identificationID", sql); - if (identificationIDs != null) { - for (Long identificationID : identificationIDs) { - identificationIdsSet.add(identificationID); - } - } - } - } - // 回写物资系统 - private void writeBackForDiposableGoodsStorageOut(GodownEntry godownEntry , List disposableGoodsStorageAdjustVoList) { - //省医回写接口调用 - if(CssdUtils.isProject("gdsy") && writeBackInventoryDao != null){ - if(CollectionUtils.isNotEmpty(disposableGoodsStorageAdjustVoList)){ - try{ - /*4 - */ - //退库单的二级科室-供应室 - OrgUnit godownOutEntryCssdOrgUnit = (OrgUnit)objectDao.getByProperty(OrgUnit.class.getSimpleName(), "orgUnitCoding", godownEntry.getOrgUnitCode()); - //退库单的一级科室-设备仓库(健迅系统的一级科室推入库单数据过来只会有一个一级科室,且id不会变) - String firstGradeOrgUnit = "144"; - String xmlParam = "4" + godownOutEntryCssdOrgUnit.getIdFromHisSync() + "" - + "" + firstGradeOrgUnit + "" - + "OUT_" + godownEntry.getSerialNumber() + ""; - - xmlParam += writeBackInventoryDao.getXmlStringOfWriteBackDataDetailList(disposableGoodsStorageAdjustVoList); - logger.debug("退库回写参数xmlParam="+xmlParam); - appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "退库回写参数xmlParam="+xmlParam); - String writeBackResult = writeBackInventoryDao.insertWriteBackForCommon(xmlParam); - appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "退库回写参数xmlParam="+xmlParam+",对应的回写结果=" + writeBackResult); - JSONObject jsonReturn = JSONObject.fromObject(writeBackResult); - if(!jsonReturn.optBoolean("success")){ - throw new RuntimeException(ConstantDefinition.WRITEBACK_RESULTMESSAGE_PREFIX + jsonReturn.optString("message")); - } - }catch(Exception e){ - e.printStackTrace(); - throw new RuntimeException(e); - } - } - }else if (writeBackInventoryHelper != null) { - // 回写物资系统 - writeBackInventoryHelper.writeBackForDiposableGoodsStorageOut( - Collections.singleton(godownEntry.getId()), true); - } - } // 更新退库单 @Override - public void updateGodownOutEntry_TRANS_REQUIRED(GodownEntry original, - GodownEntry entry, Map result) { + public void updateGodownOutEntry_TRANS_REQUIRED(ExpensiveGoodsGodownEntry original, + ExpensiveGoodsGodownEntry entry, Map result) { updateGodownOutEntry_internal(original, entry, result); } - private void updateGodownOutEntry_internal(GodownEntry original, - GodownEntry entry, Map result) { + private void updateGodownOutEntry_internal(ExpensiveGoodsGodownEntry original, + ExpensiveGoodsGodownEntry entry, Map result) { if(true){ throw new RuntimeException("退库单不允许修改!"); } @@ -2343,13 +530,14 @@ } return obj1.equals(obj2); } + /** * @param original * @param entry * @param curGodownEntry */ - private void updateGodownEntryProperties(GodownEntry original, - GodownEntry entry, GodownEntry curGodownEntry) { + private void updateGodownEntryProperties(ExpensiveGoodsGodownEntry original, + ExpensiveGoodsGodownEntry entry, ExpensiveGoodsGodownEntry curGodownEntry) { // 备注 String originalRemark = original.getRemark(); String remark = entry.getRemark(); @@ -2375,107 +563,20 @@ curGodownEntry.setWarehouseName(wareHouseName); } } - // 找出已经存在项 - private Collection loadToussePrintData( - Collection godownEntrys) { - if (CollectionUtils.isEmpty(godownEntrys)) { - return CollectionUtils.emptyCollection(); - } - List voList = new ArrayList(); - for (GodownEntry godownEntry : godownEntrys) { - List tousseList = godownEntry.getItemsList(); - for (GodownEntryItem godownEntryItem : tousseList) { - DisposableGoodsStock diposableGoods = godownEntryItem - .getDiposableGoods(); - DisposableGoodsBatchStock diposableGoodBatchStock = godownEntryItem.getDiposableGoodBatchStock(objectDao); - GodownEntryItemPrintVO tempVo = new GodownEntryItemPrintVO(); - tempVo.setCode(diposableGoods.getExternalCode()); - tempVo.setAmount(godownEntryItem.getAmount()); - tempVo.setName(diposableGoods.getName()); - tempVo.setSpecification(diposableGoods.getSpecification()); - tempVo.setInventorySerialNumber(diposableGoods.getInventorySerialNumber()); - if(diposableGoodBatchStock != null){ - tempVo.setProducingArea(diposableGoodBatchStock.getProducingArea()); - tempVo.setSupplierName(diposableGoodBatchStock.getSupplierName()); - } - tempVo.setUnit(diposableGoods.getUnit()); - tempVo.setAmount(godownEntryItem.getAmount()); - tempVo.setPrice(godownEntryItem.getCost()); - tempVo.setRowPrice(godownEntryItem.getCost() - * godownEntryItem.getAmount()); - tempVo.setTotalPrice(tempVo.getRowPrice()); - tempVo.setBatchNumber(godownEntryItem.getBatchNumber()); - tempVo.setCertification(godownEntryItem.getCertification()); - tempVo.setProducingArea(godownEntryItem.getProducingArea()); - voList.add(tempVo); - } - } - - return voList; - } - // 获取入库单打印信息 @Override - public void loadGodownEntryPrintData( - String[] invoiceIds,JSONObject jsonObject) { - Collection tousseList = CollectionUtils.emptyCollection(); - jsonObject.put("goods", tousseList); - if (ArrayUtils.isEmpty(invoiceIds)){ - return ; - } - - String idsStr = StringUtils.join(invoiceIds, ","); - String sql = String.format(" where po.id in (%s)", idsStr); - @SuppressWarnings("unchecked") - List list = objectDao.findBySql( - GodownEntry.class.getSimpleName(), sql); - if (list == null || list.size() == 0){ - return ; - } - String serialNumber = ""; - String applicant = ""; - String time = ""; - String supplierName = "";//供应商 - String warehouseName = ""; - String targetWarehouseName = ""; - String subType = ""; - String remark = ""; - if(list.size() == 1){ - GodownEntry godownEntry = list.get(0); - serialNumber = godownEntry.getSerialNumber(); - time = ForgonDateUtils.safelyFormatDate(godownEntry.getTime(), Constants.DATEFORMAT_YYYYMMDD, ""); - supplierName = godownEntry.getSupplierName(); - warehouseName = godownEntry.getWarehouseName(); - targetWarehouseName = godownEntry.getTargetWareHouseName(); - subType = godownEntry.getSubType(); - remark = godownEntry.getRemark(); - } - jsonObject.put("serialNumber", serialNumber); - jsonObject.put("applicant", applicant); - jsonObject.put("godownEntryTime", time); - jsonObject.put("supplierName", supplierName); - jsonObject.put("warehouseName", warehouseName); - jsonObject.put("targetWarehouseName", targetWarehouseName); - jsonObject.put("subType", subType); - jsonObject.put("remark", remark); - - tousseList = loadToussePrintData(list); - jsonObject.put("goods", tousseList); - } - - @Override - public void addItemToGodownEntry(GodownEntry entry, JSONObject itemObject) { + public void addItemToGodownEntry(ExpensiveGoodsGodownEntry entry, JSONObject itemObject) { if(entry == null || itemObject == null){ throw new IllegalArgumentException("entry和itemObject都不能为空"); } - GodownEntryItem godownEntryItem = godownEntryItemManager.parseGodownEntryItem(itemObject); - godownEntryItem.setGodownEntry(entry); + ExpensiveGoodsGodownEntryItem godownEntryItem = godownEntryItemManager.parseGodownEntryItem(itemObject); + godownEntryItem.setExpensiveGoodsEntry(entry); entry.getItemsList().add(godownEntryItem); } @Override - public void updateGodownEntryInfo(GodownEntry entry, + public void updateGodownEntryInfo(ExpensiveGoodsGodownEntry entry, JSONObject godownEntryInfo) { if(entry == null || godownEntryInfo == null){ return; @@ -2493,19 +594,17 @@ entry.setRemark(remark); entry.setWarehouseID(wareHouseId); entry.setWarehouseName(wareHouseName); - entry.setTargetWareHouseId(targetWareHouseId); - entry.setTargetWareHouseName(targetWareHouseName); Date time; try { - time = GodownEntryItem.DATE_FORMAT.parse(timeStr); + time = new SimpleDateFormat(DateTools.COMMON_DATE_ONLY).parse(timeStr); } catch (ParseException e) { e.printStackTrace(); throw new RuntimeException("日期格式错误!"); } entry.setTime(time); } - private void setWareHouse(GodownEntry entry,WareHouse wareHouse){ + private void setWareHouse(ExpensiveGoodsGodownEntry entry,WareHouse wareHouse){ if(entry == null){ throw new IllegalArgumentException("entry不能为空"); } @@ -2514,8 +613,9 @@ entry.setWarehouseName(wareHouse.getName()); } } + @Override - public void setGodownEntryDefaultWareHouse(GodownEntry entry,OrgUnit orgUnit) { + public void setGodownEntryDefaultWareHouse(ExpensiveGoodsGodownEntry entry,OrgUnit orgUnit) { if(entry != null){ WareHouse wh = wareHouseManager.getWareHouseById(entry.getWarehouseID()); if(wh == null){ @@ -2526,8 +626,9 @@ } } } + @Override - public void setGodownEntryDefaultWareHouse(GodownEntry entry,String orgUnitCoding){ + public void setGodownEntryDefaultWareHouse(ExpensiveGoodsGodownEntry entry,String orgUnitCoding){ setGodownEntryDefaultWareHouse(entry,orgUnitManager.getByCode(orgUnitCoding)); } @@ -2536,7 +637,7 @@ * @param entry * @param subType */ - private void setGodownEntrySubType(GodownEntry entry,String subType){ + private void setGodownEntrySubType(ExpensiveGoodsGodownEntry entry,String subType){ if(entry != null){ entry.setSubType(subType); } @@ -2546,116 +647,22 @@ public void printSomeGodownEntryItem(String items,JSONObject jsonObj){} @Override - public void modifyGodownEntryItemBaseData(String items, JSONObject jsonObj) { - jsonObj.put(JSONUtil.JSON_KEY_SUCCESS, false); + public Map deleteGodownEntryById_TRANS_NEW(String id) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Map deleteGodownOutEntryById_TRANS_NEW(String id) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void updateGodownEntry_TRANS_REQUIRED(ExpensiveGoodsGodownEntry original, + ExpensiveGoodsGodownEntry entry, Map result) { + // TODO Auto-generated method stub - try { - if (StringUtils.isBlank(items)) { - throw new RuntimeException("参数非法,items不能为空!"); - } - GodownEntry godownEntry = null; - Date now = new Date(); - JSONArray itemsObj = JSONArray.fromObject(items); - for(int i=0;i disposableGoodsBarcodesSet = new HashSet(); + private Set expensiveGoodsBarcodesSet = new HashSet(); /** - * + * 仓库id */ private String warehouseId; /** - * 一次性物品id集合 + * 高值耗材定义id集合 */ - private Set disposableGoodsIdsSet = new HashSet(); + private Set expensiveGoodsIdsSet = new HashSet(); /** - * 一次性物品库存id集合 - */ - private Set disposableGoodsStockIdsSet = new HashSet(); - - /** - * 高值耗材的id集合 - */ - private Set expensiveDisposableGoodsIdsSet = new HashSet(); - - /** - * 一次性物品批次id集合 - */ - private Set disposableGoodsBatchIdsSet = new HashSet(); - - /** - * 一次性物品批次库存id集合 - */ - private Set disposableGoodsBatchStockIdsSet = new HashSet(); - - /** - * 一次性物品批次号集合 - */ - private Set disposableGoodsBatchNumberSet = new HashSet(); - - /** - * 一次性物品标识号id集合 - */ - private Set identificationIdsSet = new HashSet(); - - /** - * 一次性物品标识号表对应的物资系统的batchId(即batchIdFromHisSync字段)集合 - * 针对省医的盘点功能增加此变量 - */ - private Set batchIdFromHisSyncSet = new HashSet(); - - /** - * 一次性物品标识号表对应的物资系统的batchId(即identification字段)集合 - * 针对中山南山医院增加 - */ - private Set identificationSet = new HashSet(); - - /** - * 一次性物品的id和一次性物品的Map - */ - private Map idToDisposableGoodsMap = new HashMap(); - - /** - * 一次性物品库存集合 - */ - private List disposableGoodsStockList = new LinkedList(); - - /** - * 一次性物品id和一次性物品库存的Map - */ - private Map disposableGoodsIDToDisposableGoodsStockMap = new HashMap(); - - /** - * 一次性物品库存id和一次性物品库存的Map - */ - private Map idToDisposableGoodsStockMap = new HashMap(); - - /** * 高值耗材id和高值耗材的Map */ - private Map idToExpensiveDisposableGoodsMap = new HashMap(); + private Map idToExpensiveGoodsMap = new HashMap(); /** * 高值耗材的集合 */ - private List expensiveDisposablegoodsList = new LinkedList(); + private List ExpensiveGoodsList = new LinkedList(); /** * 高值耗材条码和高值耗材对象的Map */ - private Map barcodeToExpensiveDisposablegoodsMap = new HashMap(); + private Map barcodeToExpensiveGoodsMap = new HashMap(); - /** - * 一次性物品批次的id和一次性物品批次的Map - */ - private Map idToDisposableGoodsBatchMap = new HashMap(); - - /** - * 一次性物品批次的条码和一次性物品批次的Map - */ - private Map barcodeToDisposableGoodsBatchMap = new HashMap(); - - /** - * 一次性物品批次库存集合 - */ - private List disposableGoodsBatchStockList = new LinkedList(); - - /** - * 一次性物品批次库存的id和一次性物品批次库存Map - */ - private Map idToDisposableGoodsBatchStockMap = new HashMap(); - - /** - * 一次性物品批次库存的条码和一次性物品批次库存Map - */ - private Map barcodeToDisposableGoodsBatchStockMap = new HashMap(); - - /** - * 一次性物品标识号的id和一次性物品标识号Map - */ - private Map idToIdentificationMap = new HashMap(); - - public Set getIdentificationSet() { - return identificationSet; + public Set getExpensiveGoodsBarcodesSet() { + return expensiveGoodsBarcodesSet; } - public void setIdentificationSet(Set identificationSet) { - this.identificationSet = identificationSet; + public void setExpensiveGoodsBarcodesSet(Set expensiveGoodsBarcodesSet) { + this.expensiveGoodsBarcodesSet = expensiveGoodsBarcodesSet; } - public String getScene() { - return scene; + public Set getExpensiveGoodsIdsSet() { + return expensiveGoodsIdsSet; } - public void setScene(String scene) { - this.scene = scene; + public void setExpensiveGoodsIdsSet(Set expensiveGoodsIdsSet) { + this.expensiveGoodsIdsSet = expensiveGoodsIdsSet; } - public Set getDisposableGoodsBarcodesSet() { - return disposableGoodsBarcodesSet; - } - - public void setDisposableGoodsBarcodesSet( - Set disposableGoodsBarcodesSet) { - this.disposableGoodsBarcodesSet = disposableGoodsBarcodesSet; - } - public String getWarehouseId() { return warehouseId; } @@ -182,210 +71,32 @@ this.warehouseId = warehouseId; } - public Set getDisposableGoodsIdsSet() { - return disposableGoodsIdsSet; - } - public void setDisposableGoodsIdsSet(Set disposableGoodsIdsSet) { - this.disposableGoodsIdsSet = disposableGoodsIdsSet; + public Map getIdToExpensiveGoodsMap() { + return idToExpensiveGoodsMap; } - public Set getDisposableGoodsStockIdsSet() { - return disposableGoodsStockIdsSet; + public void setIdToExpensiveGoodsMap( + Map idToExpensiveGoodsMap) { + this.idToExpensiveGoodsMap = idToExpensiveGoodsMap; } - public void setDisposableGoodsStockIdsSet( - Set disposableGoodsStockIdsSet) { - this.disposableGoodsStockIdsSet = disposableGoodsStockIdsSet; + public List getExpensiveGoodsList() { + return ExpensiveGoodsList; } - public Set getExpensiveDisposableGoodsIdsSet() { - return expensiveDisposableGoodsIdsSet; + public void setExpensiveGoodsList( + List ExpensiveGoodsList) { + this.ExpensiveGoodsList = ExpensiveGoodsList; } - public void setExpensiveDisposableGoodsIdsSet( - Set expensiveDisposableGoodsIdsSet) { - this.expensiveDisposableGoodsIdsSet = expensiveDisposableGoodsIdsSet; + public Map getBarcodeToExpensiveGoodsMap() { + return barcodeToExpensiveGoodsMap; } - public Set getDisposableGoodsBatchIdsSet() { - return disposableGoodsBatchIdsSet; + public void setBarcodeToExpensiveGoodsMap( + Map barcodeToExpensiveGoodsMap) { + this.barcodeToExpensiveGoodsMap = barcodeToExpensiveGoodsMap; } - public void setDisposableGoodsBatchIdsSet( - Set disposableGoodsBatchIdsSet) { - this.disposableGoodsBatchIdsSet = disposableGoodsBatchIdsSet; - } - - public Set getDisposableGoodsBatchStockIdsSet() { - return disposableGoodsBatchStockIdsSet; - } - - public void setDisposableGoodsBatchStockIdsSet( - Set disposableGoodsBatchStockIdsSet) { - this.disposableGoodsBatchStockIdsSet = disposableGoodsBatchStockIdsSet; - } - - public Set getDisposableGoodsBatchNumberSet() { - return disposableGoodsBatchNumberSet; - } - - public void setDisposableGoodsBatchNumberSet( - Set disposableGoodsBatchNumberSet) { - this.disposableGoodsBatchNumberSet = disposableGoodsBatchNumberSet; - } - - public Set getIdentificationIdsSet() { - return identificationIdsSet; - } - - public void setIdentificationIdsSet(Set identificationIdsSet) { - this.identificationIdsSet = identificationIdsSet; - } - - public Set getBatchIdFromHisSyncSet() { - return batchIdFromHisSyncSet; - } - - public void setBatchIdFromHisSyncSet(Set batchIdFromHisSyncSet) { - this.batchIdFromHisSyncSet = batchIdFromHisSyncSet; - } - - public Map getIdToDisposableGoodsMap() { - return idToDisposableGoodsMap; - } - - public void setIdToDisposableGoodsMap( - Map idToDisposableGoodsMap) { - this.idToDisposableGoodsMap = idToDisposableGoodsMap; - } - - public List getDisposableGoodsStockList() { - return disposableGoodsStockList; - } - - public void setDisposableGoodsStockList( - List disposableGoodsStockList) { - this.disposableGoodsStockList = disposableGoodsStockList; - } - - public Map getDisposableGoodsIDToDisposableGoodsStockMap() { - return disposableGoodsIDToDisposableGoodsStockMap; - } - - public void setDisposableGoodsIDToDisposableGoodsStockMap( - Map disposableGoodsIDToDisposableGoodsStockMap) { - this.disposableGoodsIDToDisposableGoodsStockMap = disposableGoodsIDToDisposableGoodsStockMap; - } - - public Map getIdToDisposableGoodsStockMap() { - return idToDisposableGoodsStockMap; - } - - public void setIdToDisposableGoodsStockMap( - Map idToDisposableGoodsStockMap) { - this.idToDisposableGoodsStockMap = idToDisposableGoodsStockMap; - } - - public Map getIdToExpensiveDisposableGoodsMap() { - return idToExpensiveDisposableGoodsMap; - } - - public void setIdToExpensiveDisposableGoodsMap( - Map idToExpensiveDisposableGoodsMap) { - this.idToExpensiveDisposableGoodsMap = idToExpensiveDisposableGoodsMap; - } - - public List getExpensiveDisposablegoodsList() { - return expensiveDisposablegoodsList; - } - - public void setExpensiveDisposablegoodsList( - List expensiveDisposablegoodsList) { - this.expensiveDisposablegoodsList = expensiveDisposablegoodsList; - } - - public Map getBarcodeToExpensiveDisposablegoodsMap() { - return barcodeToExpensiveDisposablegoodsMap; - } - - public void setBarcodeToExpensiveDisposablegoodsMap( - Map barcodeToExpensiveDisposablegoodsMap) { - this.barcodeToExpensiveDisposablegoodsMap = barcodeToExpensiveDisposablegoodsMap; - } - - public Map getIdToDisposableGoodsBatchMap() { - return idToDisposableGoodsBatchMap; - } - - public void setIdToDisposableGoodsBatchMap( - Map idToDisposableGoodsBatchMap) { - this.idToDisposableGoodsBatchMap = idToDisposableGoodsBatchMap; - } - - public Map getBarcodeToDisposableGoodsBatchMap() { - return barcodeToDisposableGoodsBatchMap; - } - - public void setBarcodeToDisposableGoodsBatchMap( - Map barcodeToDisposableGoodsBatchMap) { - this.barcodeToDisposableGoodsBatchMap = barcodeToDisposableGoodsBatchMap; - } - - public List getDisposableGoodsBatchStockList() { - return disposableGoodsBatchStockList; - } - - public void setDisposableGoodsBatchStockList( - List disposableGoodsBatchStockList) { - this.disposableGoodsBatchStockList = disposableGoodsBatchStockList; - } - - public Map getIdToDisposableGoodsBatchStockMap() { - return idToDisposableGoodsBatchStockMap; - } - - public void setIdToDisposableGoodsBatchStockMap( - Map idToDisposableGoodsBatchStockMap) { - this.idToDisposableGoodsBatchStockMap = idToDisposableGoodsBatchStockMap; - } - - public Map getBarcodeToDisposableGoodsBatchStockMap() { - return barcodeToDisposableGoodsBatchStockMap; - } - - public void setBarcodeToDisposableGoodsBatchStockMap( - Map barcodeToDisposableGoodsBatchStockMap) { - this.barcodeToDisposableGoodsBatchStockMap = barcodeToDisposableGoodsBatchStockMap; - } - - public Map getIdToIdentificationMap() { - return idToIdentificationMap; - } - - public void setIdToIdentificationMap( - Map idToIdentificationMap) { - this.idToIdentificationMap = idToIdentificationMap; - } - - /** - * 发货自动减库存 - * @return - */ - public boolean sceneInvoiceAutoDeduction(){ - if(StringUtils.equals(scene, SCENE_INVOICE_AUTO_DEDUCTION)){ - return true; - } - return false; - } - - public void validateParams(){ - switch(scene){ - case SCENE_INVOICE_AUTO_DEDUCTION: - if(StringUtils.isBlank(warehouseId)){ - throw new RuntimeException("仓库id不能为空!"); - } - break; - } - } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsGodownEntry.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsGodownEntry.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsGodownEntry.java (revision 20812) @@ -0,0 +1,282 @@ +package com.forgon.disinfectsystem.entity.assestmanagement; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.Index; + +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; + +/** + * 高值耗材入/退库单 + * @author shuyongfu + * + */ +@Entity +@Table(indexes={@Index(columnList="type",name="egge_type_index") +,@Index(columnList="subType",name="egge_subtype_index") +,@Index(columnList="orgUnitCode",name="egge_ouc_index") +,@Index(columnList="warehouseID",name="egge_whid_index") +,@Index(columnList="supplierId",name="egge_spid_index") +}) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class ExpensiveGoodsGodownEntry { + + private Long id; + + private String serialNumber; //单号 + + private String operator; //操作员 + + private Date time; // 入库/退库时间 + + private String remark; //备注 + + /** + * 类型:如入库单、退库单 + */ + private String type; + + /** + * 子类型:如自购入库、预入库、手工退库、预出库 + */ + private String subType; + + public static final String SUBTYPE_PURCHASE = "自购入库"; + public static final String SUBTYPE_PREPARE_IN = "预入库"; + public static final String SUBTYPE_MANUAL_OUT = "手工退库"; + public static final String SUBTYPE_PREPARE_OUT = "预出库"; + + private Double totalPrice;//总价 + + /** + * 供应商id + */ + private String supplierId; + + /** + * 供应商名称 + */ + private String supplierName; + + /** + * 入库单 + */ + public static final String TYPE_IN ="入库单"; + + /** + * 退库单 + */ + public static final String TYPE_OUT ="退库单"; + + /** + * 仓库ID + */ + private Long warehouseID; + private String orgUnitCode; + + /** + * 仓库名称 + */ + private String warehouseName; + private String orgUnitName; + + @JsonIgnore + private List itemsList = new ArrayList(); + + public ExpensiveGoodsGodownEntry(){ + + } + + public ExpensiveGoodsGodownEntry(Long id, String serialNumber, String operator, + Date time, String remark, List itemsList) { + super(); + this.id = id; + this.serialNumber = serialNumber; + this.operator = operator; + this.time = time; + this.remark = remark; + this.itemsList = itemsList; + } + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSerialNumber() { + return serialNumber; + } + + public void setSerialNumber(String serialNumber) { + this.serialNumber = serialNumber; + } + + public String getOperator() { + return operator; + } + + public void setOperator(String operator) { + this.operator = operator; + } + + public Date getTime() { + return time; + } + + public void setTime(Date time) { + this.time = time; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @OneToMany(fetch = FetchType.LAZY) + @Cascade(value = { CascadeType.ALL }) + @JoinColumn(name = "godownEntry_id") + public List getItemsList() { + return itemsList; + } + + public void setItemsList(List itemsList) { + this.itemsList = itemsList; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public void copyPlainPropertiesFrom(ExpensiveGoodsGodownEntry godownEntry){ + this.operator = godownEntry.operator; + this.remark = godownEntry.remark; + this.serialNumber = godownEntry.serialNumber; + this.time = godownEntry.time; + this.type = godownEntry.type; + this.subType = godownEntry.subType; + } + + public Double getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(Double totalPrice) { + this.totalPrice = totalPrice; + } + + public String getSupplierId() { + return supplierId; + } + + public void setSupplierId(String supplierId) { + this.supplierId = supplierId; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } + + public String getSubType() { + return subType; + } + + public void setSubType(String subType) { + this.subType = subType; + } + + public Long getWarehouseID() { + return warehouseID; + } + + public void setWarehouseID(Long warehouseID) { + this.warehouseID = warehouseID; + } + + public String getWarehouseName() { + return warehouseName; + } + + public void setWarehouseName(String warehouseName) { + this.warehouseName = warehouseName; + } + + public String getOrgUnitCode() { + return orgUnitCode; + } + + public String getOrgUnitName() { + return orgUnitName; + } + + public void setOrgUnitCode(String orgUnitCode) { + this.orgUnitCode = orgUnitCode; + } + + public void setOrgUnitName(String orgUnitName) { + this.orgUnitName = orgUnitName; + } + + public void calculateTotalPrice() { + totalPrice = 0.0; + List items = getItemsList(); + for (ExpensiveGoodsGodownEntryItem godownEntryItem : items) { + //如果成功为空,则跳过 + if(godownEntryItem.getCost() == null){ + continue; + } + totalPrice += (godownEntryItem.getCost() * godownEntryItem + .getAmount()); + } + setTotalPrice(new BigDecimal(totalPrice).setScale(4, + BigDecimal.ROUND_HALF_UP).doubleValue()); + } + public void addItem(ExpensiveGoodsGodownEntryItem item){ + if(item != null){ + if(this.itemsList == null){ + this.itemsList = new ArrayList(); + } + this.itemsList.add(item); + } + } + + @Override + public boolean equals(Object obj) { + if(obj !=null && obj instanceof ExpensiveGoodsGodownEntry){ + ExpensiveGoodsGodownEntry ge = (ExpensiveGoodsGodownEntry)obj; + return ge.getId().equals(this.getId()); + } + return false; + } +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsInstance.java =================================================================== diff -u -r20804 -r20812 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsInstance.java (.../ExpensiveGoodsInstance.java) (revision 20804) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsInstance.java (.../ExpensiveGoodsInstance.java) (revision 20812) @@ -23,12 +23,46 @@ @Entity public class ExpensiveGoodsInstance extends BarcodeDevice { + /** + * 高值耗材自购入库后的状态 + */ public static final String STATUS_IN_WAREHOUSE = "已入库"; + + /** + * 高值耗材预入库后的状态 + */ + public static final String STATUS_PRE_IN_WAREHOUSE = "预入库"; + + /** + * 状态为已入库的高值耗材退库后的状态 + * 已退库的高值耗材能否再次入库? + */ public static final String STATUS_OUT_WAREHOUSE = "已退库"; + + /** + * 高值耗材发货后的状态 + */ public static final String STATUS_DELIVERED = "已发货"; + + /** + * + */ public static final String STATUS_RECEIVED = "已领用"; - public static final String STATUS_RETURNED = "已退货"; + + /** + * 状态为已发货的高值耗材录使用记录后的状态 + */ public static final String STATUS_USED = "已使用"; + + /** + * 状态为已使用的高值耗材结算后的状态 + */ + public static final String STATUS_SETTLED = "已结算"; + + /** + * 状态为已发货且对应的入库单类型为预入库的高值耗材预出库后的状态 + */ + public static final String STATUS_PRE_OUT_WAREHOUSE = "预出库"; private Date entryDate; // 入库时间 @@ -54,8 +88,6 @@ private Long expensiveGoodsStockId; - // private Long userecordId;//使用记录id - private UseRecord useRecord; private String status = STATUS_IN_WAREHOUSE; @@ -64,6 +96,13 @@ private String locationForDisplay; // 位置(组织机构名称) + /** + * 入库类型(区分是自购入库还是预入库) + */ + private String entryType = ENTRY_TYPE_PURCHASE; + public static final String ENTRY_TYPE_PURCHASE = "自购入库"; + public static final String ENTRY_TYPE_PREPARE = "预入库"; + public ExpensiveGoodsInstance() { super(); setType(BarcodeDevice.BARCODE_TYPE_EXPENSIVEGOODS); @@ -243,6 +282,14 @@ return showName; } + public String getEntryType() { + return entryType; + } + + public void setEntryType(String entryType) { + this.entryType = entryType; + } + @Transient public boolean isAssociatedInfoValidForInvoice() { if (!DatabaseUtil.isPoIdValid(invoiceId)) { Index: ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryItemManagerImpl.java =================================================================== diff -u -r20740 -r20812 --- ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryItemManagerImpl.java (.../ExpensiveGoodsGodownEntryItemManagerImpl.java) (revision 20740) +++ ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryItemManagerImpl.java (.../ExpensiveGoodsGodownEntryItemManagerImpl.java) (revision 20812) @@ -1,38 +1,36 @@ package com.forgon.disinfectsystem.expensiveGoods.service; import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import net.sf.json.JSONObject; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; +import org.springframework.stereotype.Service; import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.OrgUnit; import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; -import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; -import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntry; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntryItem; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsInstance; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; import com.forgon.disinfectsystem.expensiveGoods.util.ExpensiveGoodsGodownEntryUtil; -import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.date.DateTools; +import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.json.JSONUtil; -import com.forgon.tools.string.StringTools; -public class ExpensiveGoodsGodownEntryItemManagerImpl implements ExpensiveGoodsGodownEntryItemManager { - private ObjectDao objectDao; +@Service("expensiveGoodsGodownEntryItemManagerTarget") +public class ExpensiveGoodsGodownEntryItemManagerImpl extends BasePoManagerImpl implements ExpensiveGoodsGodownEntryItemManager { + private DateQueryAdapter dateQueryAdapter; private WareHouseManager wareHouseManager; - public void setObjectDao(ObjectDao objectDao) { - this.objectDao = objectDao; - } - public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { this.dateQueryAdapter = dateQueryAdapter; } @@ -43,9 +41,9 @@ @SuppressWarnings("unchecked") @Override - public List getGodownEntryItemList(String startDateTime, + public List getGodownEntryItemList(String startDateTime, String endDateTime, String supplier,String orderField,String warehouseId, - String type,String hasInvoice,String disposableGoodsType) { + String type) { String sql = " where " + dateQueryAdapter.dateAreaSql("po.godownEntry.time", startDateTime, endDateTime); sql += " and " + ExpensiveGoodsGodownEntryUtil.getGodownEntryTypeSqlWhere("po.godownEntry", type); if(StringUtils.isNotBlank(supplier)){ @@ -54,24 +52,11 @@ if(StringUtils.isNotBlank(warehouseId)){ sql += " and po.godownEntry.warehouseID = " + warehouseId; } - if(StringUtils.isNotBlank(hasInvoice)){ - sql += " and po.hasInvoice = '" + hasInvoice + "'"; - } - if(StringTools.isNotBlank(disposableGoodsType)){ - sql += " and po.diposableGoods.disposableGoodsID in (select id from " - + DisposableGoods.class.getSimpleName() + " where type='" + disposableGoodsType + "')"; - } - return objectDao.findBySql(GodownEntryItem.class.getSimpleName(), sql, orderField); + return objectDao.findBySql(ExpensiveGoodsGodownEntryItem.class.getSimpleName(), sql, orderField); } @Override - public GodownEntryItem getGodownEntryItemById(String id) { - return (GodownEntryItem) objectDao.getByProperty( - GodownEntryItem.class.getSimpleName(), "id", Long.valueOf(id)); - } - - @Override - public void setDefaultWareHouse(GodownEntryItem item, OrgUnit orgUnit) { + public void setDefaultWareHouse(ExpensiveGoodsGodownEntryItem item, OrgUnit orgUnit) { if(item == null){ throw new IllegalArgumentException("item不能为空"); } @@ -85,15 +70,15 @@ } @Override - public void setWareHouse(GodownEntryItem item, WareHouse wareHouse) { + public void setWareHouse(ExpensiveGoodsGodownEntryItem item, WareHouse wareHouse) { if(wareHouse == null){ throw new IllegalArgumentException("wareHouse不能为空"); } setWareHouse(item,wareHouse.getId(),wareHouse.getName()); } @Override - public void setWareHouse(GodownEntryItem item, Long wareHouseId, + public void setWareHouse(ExpensiveGoodsGodownEntryItem item, Long wareHouseId, String wareHouseName) { if(item == null){ throw new IllegalArgumentException("item不能为空"); @@ -103,25 +88,18 @@ } @Override - public GodownEntryItem parseGodownEntryItem(JSONObject itemObject) { + public ExpensiveGoodsGodownEntryItem parseGodownEntryItem(JSONObject itemObject) { if(itemObject == null){ return null; } Long itemId = JSONUtil.optLong(itemObject,"id",null); - Long disposableGoodsID = JSONUtil.optLong(itemObject,"disposableGoodsID",null);// 一次性物品id - Long disposableGoodsStockID = JSONUtil.optLong(itemObject,"disposableGoodsStockID",null); - Long disposableGoodsBatchID = JSONUtil.optLong(itemObject,"disposableGoodsBatchID",null); - Long disposableGoodsBatchStockID = JSONUtil.optLong(itemObject,"disposableGoodsBatchStockID",null); - Long expensiveDisposableGoodsId = JSONUtil.optLong(itemObject,"expensiveDisposableGoodsId",null); - Long identificationID = JSONUtil.optLong(itemObject,"identificationID",null);// 一次性物品id - String identification = itemObject.optString("identification");// 标识号id - String batchNumber = itemObject.optString("batchNumber");// 批次号 - int amount = Integer.valueOf(itemObject.optString("amount"));// 数量 + Long expensiveGoodsInstanceId = JSONUtil.optLong(itemObject,"expensiveGoodsInstanceId",null); + int amount = itemObject.optInt("amount");// 数量 String barcode = itemObject.optString("barcode");// 条码(一般用于高值耗材),可以为空 Date expDate; try { - expDate = GodownEntryItem.DATE_FORMAT.parse(itemObject.optString("expDate")); + expDate = new SimpleDateFormat(DateTools.COMMON_DATE_ONLY).parse(itemObject.optString("expDate")); } catch (ParseException e) { e.printStackTrace(); throw new RuntimeException("日期格式错误!"); @@ -130,91 +108,48 @@ double cost = Double.valueOf(itemObject.optString("cost"));// 价格 String certification = itemObject.optString("certification");// 注册证号 String supplierName = itemObject.optString("supplierName");// 供应商 - - String sterileBatchNumber = itemObject.optString("sterileBatchNumber");// 灭菌批次 - String manufacturer = itemObject.optString("manufacturer");// 生产厂家 - String producingArea = itemObject.optString("producingArea");// 产地 - String hasBiologicalTestReport = itemObject.optString("hasBiologicalTestReport", null);//是否有生物检测报告 - hasBiologicalTestReport = GodownEntryItem.hasTypeOrDefault(hasBiologicalTestReport); - - String hasInvoice = itemObject.optString("hasInvoice", null);//是否有发票 - hasInvoice = GodownEntryItem.hasTypeOrDefault(hasInvoice); - - String grade = itemObject.optString("grade", null);//类别 - - GodownEntryItem godownEntryItem = new GodownEntryItem(); + ExpensiveGoodsGodownEntryItem godownEntryItem = new ExpensiveGoodsGodownEntryItem(); godownEntryItem.setId(itemId); - godownEntryItem.setDisposableGoodsID(disposableGoodsID); - godownEntryItem.setDisposableGoodsStockID(disposableGoodsStockID); - godownEntryItem.setDisposableGoodsBatchID(disposableGoodsBatchID); - godownEntryItem.setDisposableGoodsBatchStockID(disposableGoodsBatchStockID); - godownEntryItem.setExpensiveDisposableGoodsId(expensiveDisposableGoodsId); - godownEntryItem.setIdentificationID(identificationID); - godownEntryItem.setIdentification(identification); -// DisposableGoodsStock disposableGoodsStock = new DisposableGoodsStock(); -// disposableGoodsStock.setId(diposableGoodsID); -// godownEntryItem.setDiposableGoods(disposableGoodsStock); + godownEntryItem.setExpensiveGoodsId(expensiveGoodsInstanceId); godownEntryItem.setAmount(new Long(amount)); godownEntryItem.setCost(cost); - godownEntryItem.setBatchNumber(batchNumber); godownEntryItem.setExpDate(expDate); godownEntryItem.setCertification(certification); godownEntryItem.setSupplierName(supplierName); - godownEntryItem.setSterileBatchNumber(sterileBatchNumber); - godownEntryItem.setManufacturer(manufacturer); - godownEntryItem.setProducingArea(producingArea); - godownEntryItem.setHasBiologicalTestReport(hasBiologicalTestReport); - godownEntryItem.setHasInvoice(hasInvoice); - godownEntryItem.setGrade(grade); godownEntryItem.setBarcode(barcode); //如果高值耗材id为空,则根据条码判断是否为高值耗材 - if(godownEntryItem.getExpensiveDisposableGoodsId() == null && StringUtils.isNotBlank(barcode)){ + if(godownEntryItem.getExpensiveGoodsId() == null && StringUtils.isNotBlank(barcode)){ BarcodeDevice bd = (BarcodeDevice)objectDao.getBySql(BarcodeDevice.class.getSimpleName(), "where barcode='" + barcode + "'"); - if(bd != null && bd instanceof ExpensiveDisposablegoods){ - godownEntryItem.setExpensiveDisposableGoodsId(bd.getId()); + if(bd != null && bd instanceof ExpensiveGoodsInstance){ + godownEntryItem.setExpensiveGoodsId(bd.getId()); } } return godownEntryItem; } @Override - public GodownEntryItem clone(GodownEntryItem source) { + public ExpensiveGoodsGodownEntryItem clone(ExpensiveGoodsGodownEntryItem source) { if(source == null){ return null; } - GodownEntryItem newItem = new GodownEntryItem(); + ExpensiveGoodsGodownEntryItem newItem = new ExpensiveGoodsGodownEntryItem(); newItem.setAmount(source.getAmount()); - newItem.setBatchNumber(source.getBatchNumber()); newItem.setCertification(source.getCertification()); - newItem.setConclusion(source.getConclusion()); newItem.setCost(source.getCost()); - newItem.setDiposableGoods(source.getDiposableGoods()); - newItem.setDisposableGoodsBatchID(source.getDisposableGoodsBatchID()); - newItem.setDisposableGoodsBatchStockID(source.getDisposableGoodsBatchStockID()); - newItem.setDisposableGoodsID(source.getDisposableGoodsID()); - newItem.setDisposableGoodsStockID(source.getDisposableGoodsStockID()); newItem.setExpDate(source.getExpDate()); - newItem.setGodownEntry(source.getGodownEntry()); + newItem.setExpensiveGoodsEntry(source.getExpensiveGoodsEntry()); newItem.setId(source.getId()); - newItem.setIdentification(source.getIdentification()); - newItem.setIdentificationID(source.getIdentificationID()); - newItem.setManufacturer(source.getManufacturer()); - newItem.setNewBatch(source.getNewBatch()); - newItem.setProducingArea(source.getProducingArea()); - newItem.setSterileBatchNumber(source.getSterileBatchNumber()); newItem.setSupplierName(source.getSupplierName()); newItem.setWarehouseID(source.getWarehouseID()); newItem.setWarehouseName(source.getWarehouseName()); - newItem.setHasBiologicalTestReport(source.getHasBiologicalTestReport()); - newItem.setHasInvoice(source.getHasInvoice()); newItem.setBarcode(source.getBarcode()); - newItem.setExpensiveDisposableGoodsId(source.getExpensiveDisposableGoodsId()); + newItem.setExpensiveGoodsId(source.getExpensiveGoodsId()); return newItem; } @@ -223,11 +158,11 @@ * @param disposableGoodsId * @return */ - public GodownEntryItem getLastGodownEntryByDisposableGoodsId(String disposableGoodsId){ - GodownEntryItem godownEntryItem = null; - String sql = "from GodownEntryItem po where 1=1 and disposableGoodsID= " + disposableGoodsId - + " and godownEntry_id in (select id from GodownEntry where type='"+GodownEntry.TYPE_IN+"') order by id desc"; - List list = objectDao.findByHql(sql,0,1); + public ExpensiveGoodsGodownEntryItem getLastExpensiveGoodsEntryByExpensiveGoodsId(String expensiveGoodsId){ + ExpensiveGoodsGodownEntryItem godownEntryItem = null; + String sql = "from ExpensiveGoodsEntryItem po where 1=1 and expensiveGoodsId= " + expensiveGoodsId + + " and godownEntry_id in (select id from ExpensiveGoodsEntry where type='"+ExpensiveGoodsGodownEntry.TYPE_IN+"') order by id desc"; + List list = objectDao.findByHql(sql,0,1); godownEntryItem = CollectionUtils.isNotEmpty(list) ? list.get(0) : null; return godownEntryItem; } Index: ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryItemManager.java =================================================================== diff -u -r20740 -r20812 --- ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryItemManager.java (.../ExpensiveGoodsGodownEntryItemManager.java) (revision 20740) +++ ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryItemManager.java (.../ExpensiveGoodsGodownEntryItemManager.java) (revision 20812) @@ -5,60 +5,64 @@ import net.sf.json.JSONObject; import com.forgon.directory.model.OrgUnit; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntryItem; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; +import com.forgon.tools.hibernate.BasePoManager; -public interface ExpensiveGoodsGodownEntryItemManager { - public GodownEntryItem getGodownEntryItemById(String id); +public interface ExpensiveGoodsGodownEntryItemManager extends BasePoManager { + /** - * 获取入库单或者退库单的列表 + * 获取入库单或者退库单的明细列表 * @param startDate 起始日期 * @param endDate 结束日期 * @param supplier 供应商 * @param orderField 排序字段 * @param warehouseId 仓库id * @param type 单类型,入库单或者是退库单或者全部 - * @param hasInvoice 是否有发票 - * @param disposableGoodsType 一次性物品类型 * @return */ - public List getGodownEntryItemList(String startDate,String endDate, - String supplier,String orderField,String warehouseId,String type,String hasInvoice,String disposableGoodsType); + public List getGodownEntryItemList(String startDate,String endDate, + String supplier,String orderField,String warehouseId,String type); + /** * 设置物品到对应科室的默认仓库 * @param entry */ - public void setDefaultWareHouse(GodownEntryItem item, OrgUnit orgUnit); + public void setDefaultWareHouse(ExpensiveGoodsGodownEntryItem item, OrgUnit orgUnit); + /** * 设置物品到指定的仓库 * @param item * @param wareHouse */ - public void setWareHouse(GodownEntryItem item, WareHouse wareHouse); + public void setWareHouse(ExpensiveGoodsGodownEntryItem item, WareHouse wareHouse); + /** * 设置物品到指定的仓库 * @param item * @param wareHouseId * @param wareHouseName */ - public void setWareHouse(GodownEntryItem item, Long wareHouseId,String wareHouseName); + public void setWareHouse(ExpensiveGoodsGodownEntryItem item, Long wareHouseId,String wareHouseName); + /** - * 转换json对象为GodownEntryItem + * 转换json对象为ExpensiveGoodsEntryItem * @param itemObject - * @return 以json对象的信息创建的GodownEntryItem + * @return 以json对象的信息创建的ExpensiveGoodsEntryItem */ - public GodownEntryItem parseGodownEntryItem(JSONObject itemObject); + public ExpensiveGoodsGodownEntryItem parseGodownEntryItem(JSONObject itemObject); + /** * 从源对象中复制一个信息完全一样的副本 * @param other * @return */ - public GodownEntryItem clone(GodownEntryItem other); + public ExpensiveGoodsGodownEntryItem clone(ExpensiveGoodsGodownEntryItem other); /** * 根据一次性物品id查询出该一次性物品最近一条入库单明细数据 - * @param disposableGoodsId + * @param expensiveGoodsId * @return */ - public GodownEntryItem getLastGodownEntryByDisposableGoodsId(String disposableGoodsId); + public ExpensiveGoodsGodownEntryItem getLastExpensiveGoodsEntryByExpensiveGoodsId(String expensiveGoodsId); } Index: ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/action/ExpensiveGoodsGodownEntryAction.java =================================================================== diff -u -r20747 -r20812 --- ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/action/ExpensiveGoodsGodownEntryAction.java (.../ExpensiveGoodsGodownEntryAction.java) (revision 20747) +++ ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/action/ExpensiveGoodsGodownEntryAction.java (.../ExpensiveGoodsGodownEntryAction.java) (revision 20812) @@ -26,12 +26,9 @@ import com.forgon.directory.model.BarcodeDevice; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.common.CssdUtils; -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.ExpensiveDisposablegoods; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntry; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntryItem; import com.forgon.disinfectsystem.entity.basedatamanager.barcodeinformation.BarcodeInformation; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.expensiveGoods.service.ExpensiveGoodsGodownEntryManager; @@ -47,16 +44,14 @@ @ParentPackage(value = "default") @Namespace(value = "/disinfectSystem") @Action(value = "expensiveGoodsGodownEntryAction") -public class ExpensiveGoodsGodownEntryAction implements ModelDriven { +public class ExpensiveGoodsGodownEntryAction implements ModelDriven { private GridManager gridManager; - private GodownEntry godownEntry = new GodownEntry(); + private ExpensiveGoodsGodownEntry godownEntry = new ExpensiveGoodsGodownEntry(); - private ExpensiveGoodsGodownEntryManager godownEntryManager; + private ExpensiveGoodsGodownEntryManager expensiveGoodsGodownEntryManager; - private ExpensiveGoodsManager diposableGoodsManager; - private DateQueryAdapter dateQueryAdapter; private BarcodeManager barcodeManager; @@ -67,13 +62,9 @@ public void setGodownEntryManager(ExpensiveGoodsGodownEntryManager godownEntryManager) { - this.godownEntryManager = godownEntryManager; + this.expensiveGoodsGodownEntryManager = godownEntryManager; } - public void setDiposableGoodsManager(ExpensiveGoodsManager diposableGoodsManager) { - this.diposableGoodsManager = diposableGoodsManager; - } - public void setGridManager(GridManager gridManager) { this.gridManager = gridManager; } @@ -91,7 +82,7 @@ String sql = "where 1=1"; String json = gridManager.renderGrid2(map, - GodownEntry.class.getSimpleName(), sql, null); + ExpensiveGoodsGodownEntry.class.getSimpleName(), sql, null); HttpServletResponse response = StrutsParamUtils.getResponse(); response.setCharacterEncoding("UTF-8"); @@ -128,25 +119,25 @@ try { String id = StrutsParamUtils.getPraramValue("id", ""); - GodownEntry original = new GodownEntry(); - GodownEntry entry = godownEntry; + ExpensiveGoodsGodownEntry original = new ExpensiveGoodsGodownEntry(); + ExpensiveGoodsGodownEntry entry = godownEntry; if (DatabaseUtil.isPoIdValid(id)) { // 更新入库单,里面的item有可能会更新,新建,删除标识号。 buildGodownEntryParamsForUpdate(original, entry); - godownEntryManager.updateGodownOutEntry_TRANS_REQUIRED(original, entry, returnMsg); + expensiveGoodsGodownEntryManager.updateGodownOutEntry_TRANS_REQUIRED(original, entry, returnMsg); } else { // 保存入库单,里面的item一定都是新建标识号对象,并且需要更新批次属性。 entry = godownEntry; buildGodownEntryParamsForSave(entry); entry.setTime(new Date()); - entry.setSubType(GodownEntry.SUBTYPE_MANUAL_OUT); + entry.setSubType(ExpensiveGoodsGodownEntry.SUBTYPE_MANUAL_OUT); entry.setOrgUnitCode(AcegiHelper.getCurrentOrgUnitCode()); entry.setOrgUnitName(AcegiHelper.getCurrentOrgUnitName()); //是否需要回写 boolean needWriteBack = true; - godownEntryManager.saveGodownOutEntry_TRANS_REQUIRED(entry, returnMsg , needWriteBack); + expensiveGoodsGodownEntryManager.saveGodownOutEntry_TRANS_REQUIRED(entry, returnMsg , needWriteBack); } saveResult = true; } catch (Exception e) { @@ -162,50 +153,6 @@ */ public void loadScanedGoods(){} - /** - * 保存调拨单 - */ - public void saveAppropriateEntry(){ - HttpServletResponse response = StrutsParamUtils.getResponse(); - PrintWriter out = null; - String result = "保存成功"; - response.setCharacterEncoding("UTF-8"); - Map returnMsg = new HashMap(); - returnMsg.put("success", false); - returnMsg.put("errMsg", "保存失败"); - try { - out = response.getWriter(); - } catch (IOException e) { - e.printStackTrace(); - } - boolean saveResult = false; - try { - String id = StrutsParamUtils.getPraramValue("id", ""); - - //GodownEntry original = new GodownEntry(); - GodownEntry entry = godownEntry; - - if (StringUtils.isNotBlank(id)) { - // 调拨单没有更新操作 - // 更新入库单,里面的item有可能会更新,新建,删除标识号。 - //buildGodownEntryParamsForUpdate(original, entry); - - //godownEntryManager.updateGodownOutEntry_TRANS_REQUIRED(original, entry, returnMsg); - } else { - // 保存入库单,里面的item一定都是新建标识号对象,并且需要更新批次属性。 - entry = godownEntry; - buildGodownEntryParamsForSave(entry); - entry.setTime(new Date()); - godownEntryManager.saveAppropriateEntry_TRANS_REQUIRED(entry, returnMsg); - } - saveResult = true; - } catch (Exception e) { - e.printStackTrace(); - saveResult = false; - result = e.getMessage(); - } - printMsgToClient(saveResult, out, result.toString(), null); - } /** * @param out @@ -225,31 +172,31 @@ out.close(); } - private void setGodownEntryPropertiesFromParams(GodownEntry entry,String formParams,String items){ + private void setGodownEntryPropertiesFromParams(ExpensiveGoodsGodownEntry entry,String formParams,String items){ // 表单参数 if(StringUtils.isNotBlank(formParams)){ JSONObject formParamsObj = JSONObject.fromObject(formParams); - godownEntryManager.updateGodownEntryInfo(entry, formParamsObj); + expensiveGoodsGodownEntryManager.updateGodownEntryInfo(entry, formParamsObj); } // items列表 setGodownEntryItemsFromParams(entry, items); } // 设置items参数 - private void setGodownEntryItemsFromParams(GodownEntry entry,String items){ + private void setGodownEntryItemsFromParams(ExpensiveGoodsGodownEntry entry,String items){ JSONArray itemsArray = JSONArray.fromObject(items); int size = itemsArray.size(); for (int i = 0; i < size; ++i) { JSONObject obj = itemsArray.getJSONObject(i); if (obj != null) { - godownEntryManager.addItemToGodownEntry(entry, obj); + expensiveGoodsGodownEntryManager.addItemToGodownEntry(entry, obj); } } } - private void buildGodownEntryParamsForUpdate(GodownEntry original, - GodownEntry entry) { + private void buildGodownEntryParamsForUpdate(ExpensiveGoodsGodownEntry original, + ExpensiveGoodsGodownEntry entry) { // String formParams = StrutsParamUtils.getPraramValue("formParams", ""); String originalFormParams = StrutsParamUtils.getPraramValue("originalFormParams", ""); @@ -260,7 +207,7 @@ setGodownEntryPropertiesFromParams(entry,null,items); } - private void buildGodownEntryParamsForSave(GodownEntry entry) { + private void buildGodownEntryParamsForSave(ExpensiveGoodsGodownEntry entry) { String items = StrutsParamUtils.getPraramValue("items", ""); String formParams = StrutsParamUtils.getPraramValue("formParams", ""); @@ -288,22 +235,22 @@ try { String id = StrutsParamUtils.getPraramValue("id", ""); String print = StrutsParamUtils.getPraramValue("print", ""); + String entryType = StrutsParamUtils.getPraramValue("entryType", ExpensiveGoodsGodownEntry.SUBTYPE_PURCHASE); - GodownEntry entry = godownEntry; + ExpensiveGoodsGodownEntry entry = godownEntry; if (StringUtils.isNotBlank(id)) { // 常规功能不能修改入库单了 throw new RuntimeException("请在干预模块修改入库单!"); } else { // 保存入库单,里面的item一定都是新建标识号对象,并且需要更新批次属性。 - //entry = godownEntry; buildGodownEntryParamsForSave(entry); entry.setTime(new Date()); - entry.setSubType(GodownEntry.SUBTYPE_MANUAL_IN); + entry.setSubType(ExpensiveGoodsGodownEntry.SUBTYPE_PURCHASE); entry.setOrgUnitCode(AcegiHelper.getCurrentOrgUnitCode()); entry.setOrgUnitName(AcegiHelper.getCurrentOrgUnitName()); returnMsg.put(print, print); - godownEntryManager.saveGodownEntry_TRANS_REQUIRED(entry, returnMsg); + expensiveGoodsGodownEntryManager.saveGodownEntry_TRANS_REQUIRED(entry, returnMsg); } saveResult = true; } catch (Exception e) { @@ -334,14 +281,14 @@ try { String id = StrutsParamUtils.getPraramValue("id", ""); - GodownEntry entry = godownEntry; + ExpensiveGoodsGodownEntry entry = godownEntry; if (StringUtils.isNotBlank(id)) { - GodownEntry original = new GodownEntry(); + ExpensiveGoodsGodownEntry original = new ExpensiveGoodsGodownEntry(); // 更新入库单,里面的item有可能会更新,新建,删除标识号。 buildGodownEntryParamsForUpdate(original, entry); - godownEntryManager.updateGodownEntry_TRANS_REQUIRED(original, + expensiveGoodsGodownEntryManager.updateGodownEntry_TRANS_REQUIRED(original, entry, returnMsg); } else { throw new RuntimeException("请在一次性物品模块新建入库单!"); @@ -360,8 +307,8 @@ public String loadGodownEntryItemByid() { String id = StrutsParamUtils.getPraramValue("id", ""); if (StringUtils.isNotBlank(id) && id.equals("0") == false) {// 初始化加载的数据 - godownEntry = godownEntryManager.getGodownEntryById(id); - List items = godownEntry.getItemsList(); + godownEntry = expensiveGoodsGodownEntryManager.get(id); + List items = godownEntry.getItemsList(); Map map = new HashMap(); map.put("success", true); map.put("data", items); @@ -381,26 +328,14 @@ String items = StrutsParamUtils.getPraramValue("items", ""); JSONObject jsonObj = new JSONObject(); - godownEntryManager.printSomeGodownEntryItem(items, jsonObj); + expensiveGoodsGodownEntryManager.printSomeGodownEntryItem(items, jsonObj); StrutsResponseUtils.output(jsonObj); } - /** - * 仅修改入库明细的物品及批次相关的基础数据,不涉及单价、金额及修改 - */ - public void modifyGodownEntryItemBaseData(){ - String items = StrutsParamUtils.getPraramValue("items", ""); - JSONObject jsonObj = new JSONObject(); - if(StringUtils.isNotBlank(items)){ - godownEntryManager.modifyGodownEntryItemBaseData(items , jsonObj); - } - StrutsResponseUtils.output(jsonObj); - } - public String loadGodownEntry() { String id = StrutsParamUtils.getPraramValue("id", ""); if (StringUtils.isNotBlank(id) && StringUtils.isNumeric(id)) { - godownEntry = godownEntryManager.getGodownEntryById(id); + godownEntry = expensiveGoodsGodownEntryManager.get(id); } StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); Map map = new HashMap(); @@ -436,7 +371,7 @@ for (String id : idsArray) { // 每一个入库单作为一个单独的事务 try { - godownEntryManager.deleteGodownEntryById_TRANS_NEW(id); + expensiveGoodsGodownEntryManager.deleteGodownEntryById_TRANS_NEW(id); deletedCount++; } catch (Exception e) { e.printStackTrace(); @@ -485,7 +420,7 @@ for (String id : idsArray) { // 每一个入库单作为一个单独的事务 try { - godownEntryManager.deleteGodownOutEntryById_TRANS_NEW(id); + expensiveGoodsGodownEntryManager.deleteGodownOutEntryById_TRANS_NEW(id); deletedCount++; } catch (Exception e) { e.printStackTrace(); @@ -550,7 +485,7 @@ sql += " and po.godownEntry.time between " + startDate + " and " + endDate; String json = gridManager.renderGrid2(map, - GodownEntryItem.class.getSimpleName(), sql, + ExpensiveGoodsGodownEntryItem.class.getSimpleName(), sql, new String[] { "itemsList" }); HttpServletResponse response = StrutsParamUtils.getResponse(); @@ -567,38 +502,6 @@ return null; } - // 合并打印 - public void mergeLoadToussePrintData() { - try { - String idsStr = StrutsParamUtils.getPraramValue("ids", ""); - String[] idStrs = StringUtils.split(idsStr, ','); - - JSONObject jsonObject = new JSONObject(); - godownEntryManager.loadGodownEntryPrintData(idStrs, jsonObject); - jsonObject.put("success", true); - StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); - StrutsParamUtils.getResponse().getWriter() - .println(jsonObject.toString()); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void loadGodownEntryListPrintData(){ - try{ - String idsStr = StrutsParamUtils.getPraramValue("ids", ""); - String[] idStrs = StringUtils.split(idsStr, ','); - - JSONObject jsonObject = new JSONObject(); - godownEntryManager.loadGodownEntryPrintData(idStrs, jsonObject); - jsonObject.put("success", true); - StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); - StrutsParamUtils.getResponse().getWriter() - .println(jsonObject.toString()); - }catch(Exception e){ - e.printStackTrace(); - } - } public String loadBarcodeDeviceInfo() { String barcode = StrutsParamUtils.getPraramValue("barcode", ""); Map returnMsg = new HashMap(); @@ -636,19 +539,19 @@ return null; } @Override - public GodownEntry getModel() { + public ExpensiveGoodsGodownEntry getModel() { return godownEntry; } /** - * 根据ID获取GodownEntryItem表数据 + * 根据ID获取ExpensiveGoodsEntryItem表数据 */ public String getGodownEntryItemById() { String id = StrutsParamUtils.getPraramValue("id", ""); if (StringUtils.isNotBlank(id) && StringUtils.isNumeric(id)) { - godownEntry = godownEntryManager.getGodownEntryById(id); + godownEntry = expensiveGoodsGodownEntryManager.get(id); } - List itemList = godownEntry.getItemsList(); + List itemList = godownEntry.getItemsList(); if(itemList!=null){ StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); Map map = new HashMap(); Index: ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/dwr/table/ExpensiveGoodsGodownEntryTableManager.java =================================================================== diff -u -r20772 -r20812 --- ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/dwr/table/ExpensiveGoodsGodownEntryTableManager.java (.../ExpensiveGoodsGodownEntryTableManager.java) (revision 20772) +++ ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/dwr/table/ExpensiveGoodsGodownEntryTableManager.java (.../ExpensiveGoodsGodownEntryTableManager.java) (revision 20812) @@ -1,165 +1,38 @@ package com.forgon.disinfectsystem.expensiveGoods.dwr.table; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; -import net.sf.json.JSONArray; -import net.sf.json.JSONObject; - import org.apache.commons.lang.StringUtils; -import org.springframework.stereotype.Service; import com.forgon.component.grid.GridManager; -import com.forgon.databaseadapter.service.DateQueryAdapter; -import com.forgon.directory.acegi.tools.AcegiHelper; -import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry; -import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem; -import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntry; import com.forgon.disinfectsystem.expensiveGoods.service.ExpensiveGoodsGodownEntryItemManager; import com.forgon.disinfectsystem.expensiveGoods.service.ExpensiveGoodsGodownEntryManager; -import com.forgon.disinfectsystem.expensiveGoods.service.ExpensiveGoodsManager; -import com.forgon.disinfectsystem.vo.PriceAmount; -import com.forgon.tools.db.DatabaseUtil; -import com.forgon.tools.json.JSONUtil; -import com.forgon.tools.util.SqlUtils; //@Service public class ExpensiveGoodsGodownEntryTableManager { private GridManager gridManager; - private DateQueryAdapter dateQueryAdapter; + private ExpensiveGoodsGodownEntryItemManager expensiveGoodsGodownEntryItemManager; - private ExpensiveGoodsManager diposableGoodsManager; - - private WareHouseManager wareHouseManager; - - private ExpensiveGoodsGodownEntryItemManager godownEntryItemManager; - - private ExpensiveGoodsGodownEntryManager godownEntryManager; + private ExpensiveGoodsGodownEntryManager expensiveGoodsGodownEntryManager; - public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { - this.dateQueryAdapter = dateQueryAdapter; - } - public void setGridManager(GridManager gridManager) { this.gridManager = gridManager; } - public void setDiposableGoodsManager( - ExpensiveGoodsManager diposableGoodsManager) { - this.diposableGoodsManager = diposableGoodsManager; - } - public void setWareHouseManager(WareHouseManager wareHouseManager) { - this.wareHouseManager = wareHouseManager; - } public void setGodownEntryItemManager( ExpensiveGoodsGodownEntryItemManager godownEntryItemManager) { - this.godownEntryItemManager = godownEntryItemManager; + this.expensiveGoodsGodownEntryItemManager = godownEntryItemManager; } public void setGodownEntryManager(ExpensiveGoodsGodownEntryManager godownEntryManager) { - this.godownEntryManager = godownEntryManager; + this.expensiveGoodsGodownEntryManager = godownEntryManager; } - /** - * 获取调拨单的打印数据。调拨单的打印数据,每个仓库的入库和退库分别打印 - * @param sqlWhereParamMap - * @return - */ - public String loadAppropriateListPrintData(Map sqlWhereParamMap){ - List currentUserWarehouses = wareHouseManager.getWareHouseListByCurrentOrgUnit(); - String startDate = sqlWhereParamMap.get("startDate"); - String endDate = sqlWhereParamMap.get("endDate"); - - if(currentUserWarehouses != null && !currentUserWarehouses.isEmpty()){ - List jsonStrings = new ArrayList(); - for(WareHouse warehouse : currentUserWarehouses){ - String sql = getAppropriateListHql(sqlWhereParamMap, GodownEntry.SUBTYPE_MOVE_IN, warehouse.getId()); - String result = godownEntryListToJsonString(startDate, endDate, - warehouse, sql, GodownEntry.SUBTYPE_MOVE_IN); - jsonStrings.add(result); - - sql = getAppropriateListHql(sqlWhereParamMap, GodownEntry.SUBTYPE_MOVE_OUT, warehouse.getId()); - result = godownEntryListToJsonString(startDate,endDate, - warehouse,sql,GodownEntry.SUBTYPE_MOVE_OUT); - jsonStrings.add(result); - } - return JSONArray.fromObject(jsonStrings).toString(); - } - return null; - } - private String godownEntryListToJsonString(String startDate, - String endDate, WareHouse warehouse, String sql, String subType) { - List list = godownEntryManager.getGodownEntryListByHql(sql); - Double sum = 0.0; - for(GodownEntry entry : list){ - sum += entry.getTotalPrice(); - } - Map map = new HashMap(); - map.put("success", true); - map.put("goods", list); - map.put("totalPrice", sum); - map.put("date", startDate + " 至 " + endDate); - map.put("depart", "[" + AcegiHelper.getCurrentOrgUnitName() + "]"); - map.put("warehouse", warehouse.getName()); - map.put("subType", subType); - return JSONUtil.toJSONStringEx(map, true, new String[] { "itemsList" }); - } /** - * 获取调拨单列表界面传递的hql语句 - * @param sqlWhereParamMap - * @param 子类型,调拨入库或者调拨出库 - * @return - */ - private String getAppropriateListHql(Map sqlWhereParamMap,String subType,Long warehouseId) { - if(!DatabaseUtil.isPoIdValid(warehouseId)){ - return ""; - } - String godownEntryType = GodownEntry.TYPE_APPROPRIATE; - String code = sqlWhereParamMap.get("code"); - String batchNumber = sqlWhereParamMap.get("batchNumber"); - String sql = "where po.type='" + godownEntryType + "'"; - int codeIndex = code.lastIndexOf("["); - String specification = ""; - if (StringUtils.isNotBlank(code) && code.lastIndexOf("[") != -1) { - specification = code.substring(codeIndex + 1, code.length() - 1); - code = code.substring(0, codeIndex); - } - String startDate = sqlWhereParamMap.get("startDate"); - String endDate = sqlWhereParamMap.get("endDate"); - if (StringUtils.isNotBlank(code)) { - if (StringUtils.isNotBlank(specification)) { - sql += " and po.id in (select bo.godownEntry.id from GodownEntryItem as bo where bo.diposableGoods.name = '" - + code - + "' and bo.diposableGoods.specification = '" - + specification + "'"; - } else { - sql += " and po.id in (select bo.godownEntry.id from GodownEntryItem as bo where bo.diposableGoods.name = '" - + code + "'"; - } - if(StringUtils.isNotBlank(batchNumber)){ - sql += " and bo.batchNumber = '"+batchNumber+"')"; - }else{ - sql += ")"; - } - } - sql += " and " + dateQueryAdapter.dateAreaSql("po.time", startDate, endDate,true,true); - - if(GodownEntry.SUBTYPE_MOVE_IN.equals(subType)){ - sql += " and ( po.targetWareHouseId=" + warehouseId; - }else{ - sql += " and ( po.warehouseID=" + warehouseId; - } - - sql += " ) "; - return sql; - } - /** - * 入库单 + * 入库单(自购入库或预入库) * * @param parameterMap * @return @@ -170,337 +43,45 @@ Map sqlWhereParamMap = gridManager .getParamFromView(parameterMap); - sqlWhereParamMap.put("type", GodownEntry.TYPE_IN); - String sql = getGodownEntryListHql2(sqlWhereParamMap); + sqlWhereParamMap.put("type", ExpensiveGoodsGodownEntry.TYPE_IN); + String sql = getExpensiveGoodsEntryListSqlCondition(sqlWhereParamMap); return gridManager.renderGrid(parameterMap, - GodownEntry.class.getSimpleName(), sql, + ExpensiveGoodsGodownEntry.class.getSimpleName(), sql, new String[] { "itemsList" }); } - /** - * 获取入库单和退库单列表打印数据,不分页 - * @param sqlWhereParamMap - * @return - */ - public String loadGodownEntryListPrintData(Map sqlWhereParamMap){ - String sql = getGodownEntryListHql(sqlWhereParamMap); - String startDate = sqlWhereParamMap.get("startDate"); - String endDate = sqlWhereParamMap.get("endDate"); - List list = godownEntryManager.getGodownEntryListByHql(sql); - Double sum = 0.0; - for(GodownEntry entry : list){ - sum += entry.getTotalPrice(); - } - Map map = new HashMap(); - map.put("success", true); - map.put("goods", list); - map.put("totalPrice", sum); - map.put("date", startDate + " 至 " + endDate); - map.put("depart", "[" + AcegiHelper.getCurrentOrgUnitName() + "]"); - return JSONUtil.toJSONStringEx(map, true, new String[] { "itemsList" }); - } - /** - * 获取入库单和退库单列表界面传递的hql语句 - * @param sqlWhereParamMap - * @return - */ - private String getGodownEntryListHql(Map sqlWhereParamMap) { - String godownEntryType = sqlWhereParamMap.get("type"); - //boolean isAppropriation = "调拨单".equals(godownEntryType); - boolean isStockTake = "盘盈盘亏".equals(godownEntryType); - String code = sqlWhereParamMap.get("code"); - String batchNumber = sqlWhereParamMap.get("batchNumber"); - String sql = "where (1=1)"; - if(isStockTake){ - sql += " and po.subType in ('" + GodownEntry.SUBTYPE_STOCKTAKE_IN + "','" + GodownEntry.SUBTYPE_STOCKTAKE_OUT + "')"; - }else{ - sql += " and po.type='" + godownEntryType + "'"; - List types = new ArrayList(); - types.add(GodownEntry.SUBTYPE_MANUAL_IN); - types.add(GodownEntry.SUBTYPE_MANUAL_OUT); - types.add(GodownEntry.SUBTYPE_SYNC_IN); - types.add(GodownEntry.SUBTYPE_SYNC_OUT); - types.add(GodownEntry.SUBTYPE_IMPORT_IN); - - sql += String.format(" and %s ", SqlUtils.getStringFieldInCollectionsPredicate("po.subType", types)); -// sql += " and po.subType in ('" + GodownEntry.SUBTYPE_MANUAL_IN + "','" + GodownEntry.SUBTYPE_MANUAL_OUT + "')"; - } - /*if(!isAppropriation){ - sql += " and (po.sourceId is null or po.sourceId = 0)"; - }*/ - String startDate = sqlWhereParamMap.get("startDate"); - String endDate = sqlWhereParamMap.get("endDate"); - if (StringUtils.isNotBlank(code)) { - int codeIndex = code.lastIndexOf("["); - String specification = ""; - if (StringUtils.isNotBlank(code) && code.lastIndexOf("[") != -1) { - specification = code.substring(codeIndex + 1, code.length() - 1); - code = code.substring(0, codeIndex); - } - if (StringUtils.isNotBlank(specification)) { - sql += " and po.id in (select bo.godownEntry.id from GodownEntryItem as bo where bo.diposableGoods.name = '" - + code - + "' and bo.diposableGoods.specification = '" - + specification + "'"; - } else { - sql += " and po.id in (select bo.godownEntry.id from GodownEntryItem as bo where bo.diposableGoods.name = '" - + code + "'"; - } - if(StringUtils.isNotBlank(batchNumber)){ - sql += " and bo.batchNumber = '"+batchNumber+"')"; - }else{ - sql += ")"; - } - } - if (StringUtils.isNotBlank(startDate)) { - startDate += " 00:00:00"; - //sql += " and po.time >= " + dateQueryAdapter.dateAdapter(startDate); - } - - if (StringUtils.isNotBlank(endDate)) { - endDate += " 23:59:59"; - //sql += " and po.time <= " + dateQueryAdapter.dateAdapter(endDate); - } - sql += " and " + dateQueryAdapter.dateAreaSql("po.time", startDate, endDate); - Set currentUserWarehouseIds = wareHouseManager.getCurrentUserOrgUnitWarehouseIds(); - /*if(isAppropriation){ - String subType=sqlWhereParamMap.get("subType"); - if(GodownEntry.SUBTYPE_MOVE_IN.equals(subType)){ - sql += " and ( " + SqlUtils.getNonStringFieldInCollectionsPredicate("po.targetWareHouseId", currentUserWarehouseIds); - }else{ - sql += " and ( " + SqlUtils.getNonStringFieldInCollectionsPredicate("po.warehouseID", currentUserWarehouseIds); - } - }else*/{ - sql += " and ( " + SqlUtils.getNonStringFieldInCollectionsPredicate("po.warehouseID", currentUserWarehouseIds); - } - sql += " ) "; - return sql; - } - /** - * 退库单 - * + * 手工退库或预出库单 * @param parameterMap * @return */ - public String findGodownEntryTableList2( + public String findGodownOutEntryTableList( Map> parameterMap) { Map sqlWhereParamMap = gridManager .getParamFromView(parameterMap); - sqlWhereParamMap.put("type", GodownEntry.TYPE_OUT); - String sql = getGodownEntryListHql2(sqlWhereParamMap); + sqlWhereParamMap.put("type", ExpensiveGoodsGodownEntry.TYPE_OUT); + String sql = getExpensiveGoodsEntryListSqlCondition(sqlWhereParamMap); - //String sql = "where po.type='" + GodownEntry.TYPE_OUT + "' and (po.sourceId is null or po.sourceId = 0)"; - //sql += " and " + SqlUtils.getNonStringFieldInCollectionsPredicate("po.warehouseID", wareHouseManager.getCurrentUserOrgUnitWarehouseIds()); return gridManager.renderGrid(parameterMap, - GodownEntry.class.getSimpleName(), sql, + ExpensiveGoodsGodownEntry.class.getSimpleName(), sql, new String[] { "itemsList" }); } - /** - * 调拨单 - * @param parameterMap - * @return - */ - public String findAppropriationTableList( - Map> parameterMap){ - String sql = "where po.type='" + GodownEntry.TYPE_APPROPRIATE + "'"; - - //构造时间查询条件 - Map sqlWhereParamMap = gridManager - .getParamFromView(parameterMap); - String startDate = sqlWhereParamMap.get("startDate"); - String endDate = sqlWhereParamMap.get("endDate"); - if (StringUtils.isNotBlank(startDate)) { - startDate += " 00:00:00"; - } - - if (StringUtils.isNotBlank(endDate)) { - endDate += " 23:59:59"; - } - sql += " and " + dateQueryAdapter.dateAreaSql("po.time", startDate, endDate); - - String ors[] = new String[]{SqlUtils.getNonStringFieldInCollectionsPredicate( - "po.warehouseID", wareHouseManager.getCurrentUserOrgUnitWarehouseIds()), - SqlUtils.getNonStringFieldInCollectionsPredicate( - "po.targetWareHouseId", wareHouseManager.getCurrentUserOrgUnitWarehouseIds()) - }; - return gridManager.renderGrid(parameterMap, - GodownEntry.class.getSimpleName(), sql,ors, - new String[] { "itemsList" }); - } - /** - * 一次性物品盘盈盘亏单 - * @param parameterMap - * @return - */ - public String findGodownStockTakeTableList( - Map> parameterMap){ - String sql = "where po.subType in ('" + GodownEntry.SUBTYPE_STOCKTAKE_IN + "','" + GodownEntry.SUBTYPE_STOCKTAKE_OUT + "')"; - - //构造时间查询条件 - Map sqlWhereParamMap = gridManager - .getParamFromView(parameterMap); - String startDate = sqlWhereParamMap.get("startDate"); - String endDate = sqlWhereParamMap.get("endDate"); - - if (StringUtils.isNotBlank(startDate)) { - startDate += " 00:00:00"; - } - - if (StringUtils.isNotBlank(endDate)) { - endDate += " 23:59:59"; - } - sql += " and " + dateQueryAdapter.dateAreaSql("po.time", startDate, endDate); - - String ors[] = new String[]{SqlUtils.getNonStringFieldInCollectionsPredicate( - "po.warehouseID", wareHouseManager.getCurrentUserOrgUnitWarehouseIds()) - }; - return gridManager.renderGrid(parameterMap, - GodownEntry.class.getSimpleName(), sql,ors, - new String[] { "itemsList" }); - } - - // 获取批次的可以退库的价格数量 - public List getDiposableGoodsPriceAmountInfoCanOutEntryByBatchID( - String batchID) { - return null; - } - - /** - * 根据一次性物品id查找最近一张该一次性物品入库单信息 - * 用于添加一次性物品入库单页面选择物品时,根据查询到的信息给页面的产地、供应商、生产厂家、灭菌批号、注册证号、类别等进行自动赋值 - * @param diposableGoodsId - * @return - */ - public String getLastDiposableGoodsFromGodownEntry(String disposableGoodsId) { - GodownEntryItem godownEntryItem = - godownEntryItemManager.getLastGodownEntryByDisposableGoodsId(disposableGoodsId); - JSONObject jsonObject = new JSONObject(); - - //查一次性物品定义的类别 -// DisposableGoods disposableGoods = -// diposableGoodsManager.get(disposableGoodsId); -// if(disposableGoods != null && StringUtils.isNotBlank(disposableGoods.getGrade())){ -// jsonObject.put("grade", disposableGoods.getGrade()); -// } -// -// jsonObject.put("certification", ""); -// jsonObject.put("producingArea", ""); -// jsonObject.put("supplierName", ""); -// jsonObject.put("manufacturer", ""); -// jsonObject.put("sterileBatchNumber", ""); -// jsonObject.put("grade", ""); -// jsonObject.put("cost", ""); -// if (godownEntryItem != null) { -// //注册证号 -// if(StringUtils.isNotBlank(godownEntryItem.getCertification())){ -// jsonObject.put("certification", godownEntryItem.getCertification()); -// } -// //产地 -// if(StringUtils.isNotBlank(godownEntryItem.getProducingArea())){ -// jsonObject.put("producingArea", godownEntryItem.getProducingArea()); -// } -// //供应商 -// if(StringUtils.isNotBlank(godownEntryItem.getSupplierName())){ -// jsonObject.put("supplierName", godownEntryItem.getSupplierName()); -// } -// //生产厂家 -// if(StringUtils.isNotBlank(godownEntryItem.getManufacturer())){ -// jsonObject.put("manufacturer", godownEntryItem.getManufacturer()); -// } -// //灭菌批号 -// if(StringUtils.isNotBlank(godownEntryItem.getSterileBatchNumber())){ -// jsonObject.put("sterileBatchNumber", godownEntryItem.getSterileBatchNumber()); -// } -// //类别 -// if(StringUtils.isBlank(jsonObject.optString("grade")) && StringUtils.isNotBlank(godownEntryItem.getGrade())){ -// jsonObject.put("grade", godownEntryItem.getGrade()); -// } -// //单价 -// if(StringUtils.isBlank(jsonObject.optString("cost")) && godownEntryItem.getCost() != null){ -// jsonObject.put("cost", godownEntryItem.getCost()); -// } -// } - return jsonObject.toString(); - } - ///////////////////////////////////////// - /** - * 获取入库单和退库单列表界面传递的hql语句 - * (使用没有拼接过的一次性物品名字) + * 根据map中的sql语句条件返回sql条件 * @param sqlWhereParamMap * @return */ - private String getGodownEntryListHql2(Map sqlWhereParamMap) { - String godownEntryType = sqlWhereParamMap.get("type"); - //boolean isAppropriation = "调拨单".equals(godownEntryType); - boolean isStockTake = "盘盈盘亏".equals(godownEntryType); - String code = sqlWhereParamMap.get("code"); - String batchNumber = sqlWhereParamMap.get("batchNumber"); - String sql = "where (1=1)"; - if(isStockTake){ - sql += " and po.subType in ('" + GodownEntry.SUBTYPE_STOCKTAKE_IN + "','" + GodownEntry.SUBTYPE_STOCKTAKE_OUT + "')"; - }else{ - sql += " and po.type='" + godownEntryType + "'"; - List types = new ArrayList(); - types.add(GodownEntry.SUBTYPE_MANUAL_IN); - types.add(GodownEntry.SUBTYPE_MANUAL_OUT); - types.add(GodownEntry.SUBTYPE_SYNC_IN); - types.add(GodownEntry.SUBTYPE_SYNC_OUT); - types.add(GodownEntry.SUBTYPE_IMPORT_IN); - - sql += String.format(" and %s ", SqlUtils.getStringFieldInCollectionsPredicate("po.subType", types)); -// sql += " and po.subType in ('" + GodownEntry.SUBTYPE_MANUAL_IN + "','" + GodownEntry.SUBTYPE_MANUAL_OUT + "')"; + private String getExpensiveGoodsEntryListSqlCondition(Map sqlWhereParamMap){ + String sqlCondition = "where 1=1 "; + if(sqlWhereParamMap.containsKey("type") && StringUtils.isNotBlank(sqlWhereParamMap.get("type"))){ + sqlCondition += "type='"+ sqlWhereParamMap.get("type") +"'"; } - /*if(!isAppropriation){ - sql += " and (po.sourceId is null or po.sourceId = 0)"; - }*/ - String startDate = sqlWhereParamMap.get("startDate"); - String endDate = sqlWhereParamMap.get("endDate"); - String disposableGoodsName = sqlWhereParamMap.get("disposableGoodsName");//没拼接的名字 - - if(StringUtils.isNotBlank(disposableGoodsName)){ - String specification = sqlWhereParamMap.get("specification"); - if(StringUtils.isNotBlank(specification)){ - sql += " and po.id in (select bo.godownEntry.id from GodownEntryItem as bo where bo.diposableGoods.name = '" - + disposableGoodsName - + "' and bo.diposableGoods.specification = '" - + specification + "'"; - }else{ - sql += " and po.id in (select bo.godownEntry.id from GodownEntryItem as bo where bo.diposableGoods.name = '" - + disposableGoodsName + "'"; - } - if(StringUtils.isNotBlank(batchNumber)){ - sql += " and bo.batchNumber = '"+batchNumber+"')"; - }else{ - sql += ")"; - } + if(sqlWhereParamMap.containsKey("subType") && StringUtils.isNotBlank(sqlWhereParamMap.get("subType"))){ + sqlCondition += "subType='"+ sqlWhereParamMap.get("subType") +"'"; } - - if (StringUtils.isNotBlank(startDate)) { - startDate += " 00:00:00"; - //sql += " and po.time >= " + dateQueryAdapter.dateAdapter(startDate); - } - - if (StringUtils.isNotBlank(endDate)) { - endDate += " 23:59:59"; - //sql += " and po.time <= " + dateQueryAdapter.dateAdapter(endDate); - } - sql += " and " + dateQueryAdapter.dateAreaSql("po.time", startDate, endDate); - Set currentUserWarehouseIds = wareHouseManager.getCurrentUserOrgUnitWarehouseIds(); - /*if(isAppropriation){ - String subType=sqlWhereParamMap.get("subType"); - if(GodownEntry.SUBTYPE_MOVE_IN.equals(subType)){ - sql += " and ( " + SqlUtils.getNonStringFieldInCollectionsPredicate("po.targetWareHouseId", currentUserWarehouseIds); - }else{ - sql += " and ( " + SqlUtils.getNonStringFieldInCollectionsPredicate("po.warehouseID", currentUserWarehouseIds); - } - }else*/{ - sql += " and ( " + SqlUtils.getNonStringFieldInCollectionsPredicate("po.warehouseID", currentUserWarehouseIds); - } - sql += " ) "; - return sql; + return sqlCondition; } + }