package com.consum.base.core; import com.consum.base.core.param.BaseWarehouseParam; import com.consum.base.core.param.DepBackWarehouseParam; import com.consum.base.core.utils.SqlParameter; import com.consum.base.core.utils.SuperMap; import com.consum.base.core.utils.DateUtil; import com.consum.model.po.*; import com.walker.infrastructure.utils.NumberGenerator; import com.walker.jdbc.service.BaseServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * 进出库 业务处 类 */ @Service public class WarehouseBusinessService extends BaseServiceImpl { @Autowired private WarehouseCoreService coreService; /** * 执行采购入库 * 第一步:通过采购单【WH_FORM_PROCURE】查询采购单型号【WH_FORM_PROCURE_MODEL】数据 * 第二步:组织CheckWarehouseParam,调用WarehouseCoreService.unifyCheck()执行入库 * 第三步:更新采购单型号【WH_FORM_PROCURE_MODEL】库存物品编号字段及主表WH_FORM_PROCURE状态信息 * 第四步:更新 进出库流水(仓库)【WH_GOODS_DETAILS】 * @param procure */ public void doProcure(WhFormProcure procure){ String sql = "SELECT\n" + " * \n" + "FROM\n" + " WH_FORM_PROCURE_MODEL A \n" + "WHERE\n" + " A.WH_FORM_PROCURE_ID = :PROCURE_ID"; List modelList = this.select(sql,new SqlParameter().put("PROCURE_ID",procure.getId()),new WhFormProcureModel()); for (WhFormProcureModel model : modelList){ BaseWarehouseParam param = new BaseWarehouseParam(); param.setIsCheckIn(true); param.setWarehouseId(procure.getId()); param.setCount(model.getCounts()); param.setFirstInputCode(model.getId().toString()); param.setFirst_input_type(1); param.setModelId(model.getBaseGoodsModelsId()); CheckWarehouseResult result = coreService.unifyCheck(param).get(0); WhGoodsDetails details = new WhGoodsDetails(); details.setId(result.getWhGoods().getFirstInputHisId()); details.setBusinessFormId(procure.getId()); details.setBusinessFormCode(procure.getBusinessFormCode()); details.setBusinessFormName(procure.getWarehouseName() + "采购入库单:" + details.getBusinessFormCode()); details.setInitialCount(result.getInitial_count()); details.setThisType(1); details.setEndCount(result.getEnd_count()); details.setWarehouseId(param.getWarehouseId()); details.setWarehouseName(procure.getWarehouseName()); details.setClassification(1); details.setOperatorId(procure.getOperatorId2()); details.setOperatorName(procure.getOperatorName2()); details.setDealTime(procure.getIncomeTime()); details.setWhGoodsId(result.getWhGoods().getId()); this.insert(details); model.setInWhGoodsDetailsId(details.getId()); update(model); procure.setStates(2); update(procure); } } public void doOutPut(WhFormOutput output){ String sql = "SELECT\n" + " * \n" + "FROM\n" + " WH_FORM_OUTPUT_GOODS A \n" + "WHERE\n" + " A.WH_FORM_OUTPUT_ID = :OUTPUT_ID"; List goodsList = this.select(sql,new SqlParameter() .put("OUTPUT_ID",output.getId()),new WhFormOutputGoods()); for (WhFormOutputGoods goods : goodsList){ BaseWarehouseParam param = new BaseWarehouseParam(); param.setIsCheckIn(false); param.setWarehouseId(output.getWarehouseId()); param.setModelId(goods.getBaseGoodsModelsId()); param.setCount(goods.getCounts()); List results = coreService.unifyCheck(param); for (CheckWarehouseResult result : results){ WhFormOutputModel model = new WhFormOutputModel(); model.setId(NumberGenerator.getLongSequenceNumber()); model.setCounts(result.getInitial_count() - result.getEnd_count()); model.setOutWhGoodsDetailsId(result.getWhGoods().getId()); model.setWhGoodsId(result.getWhGoods().getId()); model.setWhFormOutputId(output.getId()); model.setWhFormOutputGoodsId(goods.getId()); insert(model); WhGoodsDetails details = new WhGoodsDetails(); details.setBusinessFormId(output.getId()); details.setBusinessFormCode(output.getBusinessFormCode()); details.setBusinessFormName("出库单:" + output.getBusinessFormCode()); details.setInitialCount(result.getInitial_count()); details.setThisType(2); details.setThisCount(result.getInitial_count() - result.getEnd_count()); details.setEndCount(result.getEnd_count()); details.setWarehouseId(result.getWhGoods().getWarehouseId()); details.setWarehouseName(result.getWhGoods().getWarehouseName()); details.setClassification(3); details.setOperatorId(output.getOperatorId()); details.setOperatorName(output.getOperatorName()); details.setDealTime(output.getDealTime()); details.setWhGoodsId(result.getWhGoods().getId()); this.insert(details); } } } /** * 执行调拨出库操作 * 1. 通过调拨单【WH_FORM_TRANSFER】、调拨单物品【WH_FORM_TRANSFER_GOODS】组织CheckWarehouseParam * 2. 调用调用WarehouseCoreService.unifyCheck()执行出库 * 3. 更新进出库流水(仓库)【WH_GOODS_DETAILS】 * 4. 更新调拨单【WH_FORM_TRANSFER】为待接收,更新调拨单物品【WH_FORM_TRANSFER_MODEL】出库流水ID * @param transfer */ public void doTransferOutPut(WhFormTransfer transfer){ String sql = "SELECT\n" + " * \n" + "FROM\n" + " WH_FORM_TRANSFER_GOODS A \n" + "WHERE\n" + " A.WH_FORM_TRANSFER_ID = :TRANSFER_ID"; List goodsList = this.select(sql,new SqlParameter() .put("TRANSFER_ID",transfer.getId()),new WhFormTransferGoods()); for (WhFormTransferGoods goods : goodsList){ BaseWarehouseParam param = new BaseWarehouseParam(); param.setIsCheckIn(false); param.setWarehouseId(transfer.getOutWarehouseId()); param.setCount(goods.getCounts()); List results = coreService.unifyCheck(param); for (CheckWarehouseResult result : results){ WhFormTransferModel model = new WhFormTransferModel(); model.setId(NumberGenerator.getLongSequenceNumber()); model.setWhFormTransferId(transfer.getId()); model.setWorehouseCount(result.getInitial_count()); model.setCounts(result.getInitial_count() - result.getEnd_count()); model.setOutWhGoodsDetailsId(result.getWhGoods().getId()); model.setWhFormTransferGoodsId(goods.getId()); insert(model); WhGoodsDetails details = new WhGoodsDetails(); details.setBusinessFormId(transfer.getId()); details.setBusinessFormCode(transfer.getBusinessFormCode()); details.setBusinessFormName("调拨出库单:" + transfer.getBusinessFormCode()); details.setInitialCount(result.getInitial_count()); details.setThisType(2); details.setThisCount(result.getInitial_count() - result.getEnd_count()); details.setEndCount(result.getEnd_count()); details.setWarehouseId(result.getWhGoods().getWarehouseId()); details.setWarehouseName(result.getWhGoods().getWarehouseName()); details.setClassification(5); details.setOperatorId(transfer.getOperatorId()); details.setOperatorName(transfer.getOperatorName()); details.setDealTime(transfer.getOutputTime()); details.setWhGoodsId(result.getWhGoods().getId()); this.insert(details); } } } /** * 执行调拨入库操作 * 1. 通过调拨单【WH_FORM_TRANSFER】、调拨单物品【WH_FORM_TRANSFER_GOODS】组织CheckWarehouseParam * 2. 调用调用WarehouseCoreService.unifyCheck()执行出库 * 3. 更新进出库流水(仓库)【WH_GOODS_DETAILS】 * 4. 更新调拨单【WH_FORM_TRANSFER】为已入库,,更新调拨单物品【WH_FORM_TRANSFER_MODEL】入库流水ID * @param transfer */ public void doTransferInPut(WhFormTransfer transfer){ String sql = "SELECT\n" + " * \n" + "FROM\n" + " WH_FORM_TRANSFER_MODEL A \n" + "WHERE\n" + " A.WH_FORM_TRANSFER_ID = :TRANSFER_ID"; List modelsList = this.select(sql,new SqlParameter() .put("TRANSFER_ID",transfer.getId()),new WhFormTransferModel()); for (WhFormTransferModel model : modelsList) { BaseWarehouseParam param = new BaseWarehouseParam(); param.setIsCheckIn(true); param.setWarehouseId(transfer.getInWarehouseId()); param.setCount(model.getCounts()); param.setWh_goods_id(model.getWhGoodsId()); CheckWarehouseResult result = coreService.unifyCheck(param).get(0); WhGoodsDetails details = new WhGoodsDetails(); details.setBusinessFormId(transfer.getId()); details.setBusinessFormCode(transfer.getBusinessFormCode()); details.setBusinessFormName("调拨入库单:" + transfer.getBusinessFormCode()); details.setInitialCount(result.getInitial_count()); details.setThisType(1); details.setThisCount(result.getEnd_count()-result.getInitial_count()); details.setEndCount(result.getEnd_count()); details.setWarehouseId(result.getWhGoods().getWarehouseId()); details.setWarehouseName(result.getWhGoods().getWarehouseName()); details.setClassification(4); details.setOperatorId(transfer.getOperatorId2()); details.setOperatorName(transfer.getOperatorName2()); details.setDealTime(transfer.getIninputTime()); details.setWhGoodsId(result.getWhGoods().getId()); this.insert(details); model.setInWhGoodsDetailsId(details.getId()); update(model); } } /** * 报废单 * @param scrapped */ public void doScrapped(WhFormScrapped scrapped){ String sql = "SELECT\n" + " * \n" + "FROM\n" + " WH_FORM_SCRAPPED_GOODS A \n" + "WHERE\n" + " A.DEP_FORM_SCRAPPED_ID = :SCRAPPED_ID"; List goodsList = this.select(sql,new SqlParameter() .put("SCRAPPED_ID",scrapped.getId()),new WhFormScrappedGoods()); for (WhFormScrappedGoods goods : goodsList){ BaseWarehouseParam param = new BaseWarehouseParam(); param.setIsCheckIn(false); param.setWarehouseId(scrapped.getWarehouseId()); param.setCount(goods.getCounts()); List results = coreService.unifyCheck(param); for (CheckWarehouseResult result : results){ WhGoodsDetails details = new WhGoodsDetails(); details.setBusinessFormId(scrapped.getId()); details.setBusinessFormCode(scrapped.getBusinessFormCode()); details.setBusinessFormName("报废单:" + scrapped.getBusinessFormCode()); details.setInitialCount(result.getInitial_count()); details.setThisType(2); details.setThisCount(result.getInitial_count() - result.getEnd_count()); details.setEndCount(result.getEnd_count()); details.setWarehouseId(result.getWhGoods().getWarehouseId()); details.setWarehouseName(result.getWhGoods().getWarehouseName()); details.setClassification(10); details.setOperatorId(scrapped.getOperatorId()); details.setOperatorName(scrapped.getOperatorName()); details.setDealTime(scrapped.getDealTime()); details.setWhGoodsId(result.getWhGoods().getId()); this.insert(details); WhFormScrappedModel model = new WhFormScrappedModel(); model.setId(NumberGenerator.getLongSequenceNumber()); model.setCounts(result.getWhGoods().getWhCount()); model.setScrappedCode(goods.getScrappedCode()); model.setScrappedName(goods.getScrappedName()); model.setDepGoodsDetailsId(details.getId()); model.setDepFormScrappedId(scrapped.getId()); model.setWhGoodsId(result.getWhGoods().getId()); model.setWhFormScrappedGoodsId(goods.getId()); insert(model); } } } /** * 创建盘点任务,创建盘点任务时,根据当时时间会将库存数据冻结一份放入待盘点单。 * 1.从库存物品【WH_GOODS】中按照仓库将数据放入盘点单物品【WH_FORM_INVENTORY_GOODS】,主要是 * 期初数量INIT_COUNTS,和 库存物品编号WH_GOODS_ID字段 * @param inventory */ public void createInventoryForm(WhFormInventory inventory){ String sql = "SELECT\n" + " b.BASE_GOODS_TEMPLATE_ID,\n" + " b.GOODS_TEMPLATE_NAME,\n" + " SUM( b.WH_COUNT ) AS WH_COUNT,\n" + " b.BASE_GOODS_MODELS_ID,\n" + " b.BASE_GOODS_MODELS_NAME,\n" + " b.UNIT \n" + "FROM\n" + " (\n" + " SELECT\n" + " ID \n" + " FROM\n" + " BASE_GOODS_MODELS m \n" + " WHERE\n" + " STATES != 3 \n" + " AND EXISTS ( SELECT 1 FROM BASE_GOODS_TEMPLATE t WHERE t.ID = m.GOODS_TEMPLATES_ID AND t.STATES != 3 ) \n" + " ) a\n" + " LEFT JOIN wh_goods b ON a.ID = b.BASE_GOODS_MODELS_ID \n" + "WHERE\n" + " b.STATES = 1 \n" + " AND b.WAREHOUSE_ID =:WAREHOUSE_ID \n" + "GROUP BY\n" + " b.BASE_GOODS_TEMPLATE_ID,\n" + " b.GOODS_TEMPLATE_NAME,\n" + " b.BASE_GOODS_MODELS_ID,\n" + " b.BASE_GOODS_MODELS_NAME"; List goodsList = select(sql,new SqlParameter().add("WAREHOUSE_ID",inventory.getWarehouseId())); List list = new ArrayList<>(); for (WhGoods goods : goodsList) { WhFormInventoryGoods inventoryGoods = new WhFormInventoryGoods(); inventoryGoods.setId(NumberGenerator.getLongSequenceNumber()); inventoryGoods.setWhFormInventoryId(inventory.getId()); inventoryGoods.setBaseGoodsTemplateId(goods.getBaseGoodsTemplateId()); inventoryGoods.setGoodsTemplateName(goods.getGoodsTemplateName()); inventoryGoods.setUnit(goods.getUnit()); inventoryGoods.setBaseGoodsModelsId(goods.getBaseGoodsModelsId()); inventoryGoods.setBaseGoodsModelsName(goods.getBaseGoodsModelsName()); inventoryGoods.setInitCounts(goods.getWhCount()); inventoryGoods.setInitCounts(null); inventoryGoods.setErrorCounts(null); inventoryGoods.setInventoryResult(1); list.add(inventoryGoods); } insertBatch(list); } /** * 盘点出库 * @param inventory */ public void doInventoryOutput(WhFormInventory inventory){ String sql = "SELECT\n" + " * \n" + "FROM\n" + " WH_FORM_INVENTORY_GOODS A \n" + "WHERE\n" + " A.WH_FORM_INVENTORY_ID = :INVENTORY_ID \n" + " AND A.INVENTORY_RESULT =3 "; List goodsList = this.select(sql,new SqlParameter() .put("INVENTORY_ID",inventory.getId()),new WhFormInventoryGoods()); for (WhFormInventoryGoods goods : goodsList){ BaseWarehouseParam param = new BaseWarehouseParam(); param.setIsCheckIn(false); param.setWarehouseId(inventory.getWarehouseId()); param.setCount(goods.getErrorCounts()); param.setModelId(goods.getBaseGoodsModelsId()); param.setOutput_type(3); List results = coreService.unifyCheck(param); for (CheckWarehouseResult result : results){ WhGoodsDetails details = new WhGoodsDetails(); details.setBusinessFormId(inventory.getId()); details.setBusinessFormCode(inventory.getBusinessFormCode()); details.setBusinessFormName("盘点出单:" + inventory.getBusinessFormCode()); details.setInitialCount(result.getInitial_count()); details.setThisType(2); details.setThisCount(result.getInitial_count() - result.getEnd_count()); details.setEndCount(result.getEnd_count()); details.setWarehouseId(result.getWhGoods().getWarehouseId()); details.setWarehouseName(result.getWhGoods().getWarehouseName()); details.setClassification(9); details.setOperatorId(inventory.getOperatorId()); details.setOperatorName(inventory.getOperatorName()); details.setDealTime(inventory.getStopTime()); details.setWhGoodsId(result.getWhGoods().getId()); this.insert(details); WhFormInventoryModel model = new WhFormInventoryModel(); model.setId(NumberGenerator.getLongSequenceNumber()); model.setCounts(result.getWhGoods().getWhCount()); model.setWhFormInventoryId(inventory.getId()); model.setInventoryResult(3); model.setWhGoodsDetailsId(details.getId()); model.setWhFormInventoryGoodsId(goods.getId()); model.setWhGoodsId(result.getWhGoods().getId()); insert(model); } } } /** * 盘点入库 * @param inventory */ public void doInventoryInput(WhFormInventory inventory){ String sql = "SELECT\n" + " * \n" + "FROM\n" + " WH_FORM_INVENTORY_GOODS A \n" + "WHERE\n" + " A.WH_FORM_INVENTORY_ID = :INVENTORY_ID \n" + " AND A.INVENTORY_RESULT =2 "; List goodsList = this.select(sql,new SqlParameter() .put("INVENTORY_ID",inventory.getId()),new WhFormInventoryGoods()); for (WhFormInventoryGoods goods : goodsList){ BaseWarehouseParam param = new BaseWarehouseParam(); param.setIsCheckIn(true); param.setWarehouseId(inventory.getWarehouseId()); param.setCount(goods.getErrorCounts()); param.setModelId(goods.getBaseGoodsModelsId()); param.setFirst_input_type(3); CheckWarehouseResult result = coreService.unifyCheck(param).get(0); WhGoodsDetails details = new WhGoodsDetails(); details.setBusinessFormId(inventory.getId()); details.setBusinessFormCode(inventory.getBusinessFormCode()); details.setBusinessFormName("盘点入库单:" + inventory.getBusinessFormCode()); details.setInitialCount(result.getInitial_count()); details.setThisType(1); details.setThisCount(result.getEnd_count()-result.getInitial_count()); details.setEndCount(result.getEnd_count()); details.setWarehouseId(result.getWhGoods().getWarehouseId()); details.setWarehouseName(result.getWhGoods().getWarehouseName()); details.setClassification(8); details.setOperatorId(inventory.getOperatorId()); details.setOperatorName(inventory.getOperatorName()); details.setDealTime(inventory.getStopTime()); details.setWhGoodsId(result.getWhGoods().getId()); this.insert(details); WhFormInventoryModel model = new WhFormInventoryModel(); model.setId(NumberGenerator.getLongSequenceNumber()); model.setCounts(result.getWhGoods().getWhCount()); model.setWhFormInventoryId(inventory.getId()); model.setInventoryResult(3); model.setWhGoodsDetailsId(details.getId()); model.setWhFormInventoryGoodsId(goods.getId()); model.setWhGoodsId(result.getWhGoods().getId()); insert(model); } } /** * 统一处理库存预警(定时任务调用服务) * 计划:每天中午13:00、晚上1:00执行两次 */ public void insertWarning(){ String sql = "SELECT\n" + " SUM(b.WH_COUNT) AS WH_COUNT,\n" + " b.BASE_GOODS_TEMPLATE_ID,\n" + " b.GOODS_TEMPLATE_NAME,\n" + " b.WAREHOUSE_ID,\n" + " a.UPPER_LIMIT,\n" + " a.LOWER_LIMIT \n" + "FROM\n" + " WH_WARNING_CONFIG a\n" + " LEFT JOIN wh_goods b ON a.BASE_GOODS_TEMPLATE_ID = b.BASE_GOODS_TEMPLATE_ID \n" + "WHERE\n" + " a.BASE_WAREHOUSE_ID = b.WAREHOUSE_ID \n" + " AND b.STATES = 1 \n" + " AND a.GOODS_TYPE=1\n" + " AND ( a.UPPER_LIMIT <= WH_COUNT OR a.LOWER_LIMIT >= WH_COUNT ) \n" + "GROUP BY\n" + " b.BASE_GOODS_TEMPLATE_ID,\n" + " b.GOODS_TEMPLATE_NAME,\n" + " b.WAREHOUSE_ID,\n" + " a.UPPER_LIMIT,\n" + " a.LOWER_LIMIT"; List goodslist = select(sql,new SqlParameter()); sql = "SELECT\n" + " SUM(b.WH_COUNT) AS WH_COUNT,\n" + " b.BASE_GOODS_TEMPLATE_ID,\n" + " b.GOODS_TEMPLATE_NAME,\n" + " b.BASE_GOODS_MODELS_ID,\n" + " b.BASE_GOODS_MODELS_NAME,\n" + " b.WAREHOUSE_ID,\n" + " a.UPPER_LIMIT,\n" + " a.LOWER_LIMIT \n" + "FROM\n" + " WH_WARNING_CONFIG a\n" + " LEFT JOIN wh_goods b ON a.BASE_GOODS_MODELS_ID = b.BASE_GOODS_MODELS_ID \n" + "WHERE\n" + " a.BASE_WAREHOUSE_ID = b.WAREHOUSE_ID \n" + " AND b.STATES = 1 \n" + " AND a.GOODS_TYPE=2\n" + " AND ( a.UPPER_LIMIT <= WH_COUNT OR a.LOWER_LIMIT >= WH_COUNT ) \n" + "GROUP BY\n" + " b.BASE_GOODS_TEMPLATE_ID,\n" + " b.GOODS_TEMPLATE_NAME,\n" + " b.BASE_GOODS_MODELS_ID,\n" + " b.BASE_GOODS_MODELS_NAME,\n" + " b.WAREHOUSE_ID,\n" + " a.UPPER_LIMIT,\n" + " a.LOWER_LIMIT"; List modeslist = select(sql,new SqlParameter()); List list = new ArrayList<>(); list.addAll(goodslist); list.addAll(modeslist); List warningList = new ArrayList<>(); for (Map map : list) { SuperMap superMap = new SuperMap(map); BaseWarehouse warehouse = get(new BaseWarehouse(),"ID=?",new Object[]{superMap.get("WAREHOUSE_ID")}); WhWarning warning = new WhWarning(); warning.setId(NumberGenerator.getLongSequenceNumber()); warning.setBaseWarehouseId(warehouse.getId()); warning.setBaseWarehouseName(warehouse.getWarehouseName()); warning.setBaseGoodsTemplateId(superMap.getLong("BASE_GOODS_TEMPLATE_ID")); warning.setBaseGoodsTemplateName(superMap.getString("GOODS_TEMPLATE_NAME")); if (superMap.getString("BASE_GOODS_MODELS_ID") == null){ warning.setGoodsType(1); } else { warning.setBaseGoodsModelsId(superMap.getLong("BASE_GOODS_MODELS_ID")); warning.setBaseGoodsModelsName(superMap.getString("BASE_GOODS_MODELS_NAME")); warning.setGoodsType(2); } int whCount = superMap.getInteger("WH_COUNT"); int upCount = superMap.getInteger("UPPER_LIMIT"); int lowCount = superMap.getInteger("LOWER_LIMIT"); if (whCount >= upCount){ warning.setWarningType(1); } if (whCount<=lowCount){ warning.setWarningType(2); } warning.setUpperLimit(upCount); warning.setLowerLimit(lowCount); warning.setWarehouseCount(whCount); warning.setStates(1); warning.setWarningTime(DateUtil.getCurrentDateFor14()); warning.setAgencyId(warehouse.getAgencyId()); warning.setAgencyName(warehouse.getAgencyName()); warningList.add(warning); } insertBatch(warningList); } public void doDepBack(String depFormBackId){ DepFormBack back = get(new DepFormBack(),"ID=?",new Object[]{depFormBackId}); String sql = "SELECT\n" + " B.*,\n" + " A.BACK_COUNTS, \n" + " A.ID AS DEP_FORM_BACK_GOODS_ID \n" + "FROM\n" + " DEP_FORM_BACK_GOODS A\n" + " LEFT JOIN DEP_FORM_LENDING_GOODS B ON A.DEP_FORM_LENDING_GOODS_ID = B.ID \n" + "WHERE\n" + " A.DEP_FORM_BACK_ID = :DEP_FORM_BACK_ID \n" + " AND A.WAREHOUSE_ID = B.WAREHOUSE_ID \n" + " AND A.WAREHOUSE_ID = :WAREHOUSE_ID"; List list = select(sql,new SqlParameter("DEP_FORM_BACK_ID",back.getId()).add("WAREHOUSE_ID",back.getWarehouseId())); for (Map myMap : list) { SuperMap map = new SuperMap(myMap); CheckUsingParam param = new CheckUsingParam(); param.setIsCheckIn(false); param.setLending_id(map.getLong("DEP_FORM_LENDING_ID")); param.setModel_id(map.getLong("BASE_GOODS_MODELS_ID")); param.setUser_name(map.getString("GOODS_USER_NAME")); List resultList = coreService.unifyUsingCheck(param); for (CheckUsingResult result : resultList) { BaseWarehouseParam param1 = new DepBackWarehouseParam(); param1.setIsCheckIn(true); param1.setWarehouseId(result.getLendingModel().getWarehouseId()); param1.setModelId(result.getLendingModel().getBaseGoodsModelsId()); param1.setCount(result.getEnd_count() - result.getInitial_count()); param1.setFirst_input_type(4); //入库并存入流水 CheckWarehouseResult result1 = coreService.unifyCheck(param1).get(0); WhGoodsDetails details = new WhGoodsDetails(); details.setId(result1.getWhGoods().getFirstInputHisId()); details.setBusinessFormId(back.getId()); details.setBusinessFormCode(back.getBusinessFormCode()); details.setBusinessFormName(back.getWarehouseName() + "返库入库单:" + details.getBusinessFormCode()); details.setInitialCount(result.getInitial_count()); details.setThisType(1); details.setEndCount(result.getEnd_count()); details.setWarehouseId(back.getWarehouseId()); details.setWarehouseName(back.getWarehouseName()); details.setClassification(1); details.setOperatorId(back.getOperatorId()); details.setOperatorName(back.getOperatorName()); details.setDealTime(back.getDealTime()); details.setWhGoodsId(result1.getWhGoods().getId()); this.insert(details); //存入在用流水 UsingGoodsHis his = new UsingGoodsHis(); his.setId(NumberGenerator.getLongSequenceNumber()); his.setBusinessFormId(back.getId()); his.setBusinessFormCode(back.getBusinessFormCode()); his.setBusinessFormName("返库单:" + back.getBusinessFormCode()); his.setClassification(3); his.setOperatorId(back.getOperatorId()); his.setOperatorName(back.getOperatorName()); his.setDealTime(back.getDealTime()); his.setDepFormLendingModelId(result.getLendingModel().getId()); his.setDepFormLendingGoodsId(result.getLendingModel().getDepFormLendingGoodsId()); his.setDepFormLendingId(result.getLendingModel().getDepFormLendingId()); his.setWhGoodsId(result.getLendingModel().getWhGoodsId()); his.setInitialCount(result.getInitial_count()); his.setEndCount(result.getEnd_count()); his.setWarehouseId(back.getWarehouseId()); his.setWarehouseName(back.getWarehouseName()); his.setDepartmentId(back.getDepartmentId()); his.setDepartmentName(back.getDepartmentName()); insert(his); DepFormBackModel model = new DepFormBackModel(); model.setId(NumberGenerator.getLongSequenceNumber()); model.setDepFormBackGoodsId(map.getLong("DEP_FORM_BACK_GOODS_ID")); model.setDepFormBackId(back.getId()); model.setWhGoodsDetailsId(result1.getWh_goods_detail_id()); model.setUsingGoodsHisId(his.getId()); model.setWhGoodsId(his.getWhGoodsId()); model.setCounts(his.getThisCount()); model.setDepFormLendingModelId(his.getDepFormLendingModelId()); model.setDepFormLendingGoodsId(his.getDepFormLendingGoodsId()); model.setDepFormLendingId(his.getDepFormLendingId()); model.setWhGoodsId(his.getWhGoodsId()); insert(model); } } } /** * 部门物品分发 */ public void doDepLending(DepFormLending lending){ String sql = "SELECT\n" + " * \n" + "FROM\n" + " DEP_FORM_LENDING_GOODS A \n" + "WHERE\n" + " A.DEP_FORM_LENDING_ID = :LENDING_ID"; List goodsList = this.select(sql,new SqlParameter() .put("LENDING_ID",lending.getId()),new DepFormLendingGoods()); for (DepFormLendingGoods goods : goodsList){ BaseWarehouseParam param = new BaseWarehouseParam(); param.setIsCheckIn(false); param.setWarehouseId(lending.getWarehouseId()); param.setModelId(goods.getBaseGoodsModelsId()); param.setCount(goods.getCounts()); //首先从机构仓库出库 List results = coreService.unifyCheck(param); for (CheckWarehouseResult result : results){ WhGoodsDetails details = new WhGoodsDetails(); details.setId(NumberGenerator.getLongSequenceNumber()); details.setBusinessFormId(lending.getId()); details.setBusinessFormCode(lending.getBusinessFormCode()); details.setBusinessFormName("分发单:" + lending.getBusinessFormCode()); details.setInitialCount(result.getInitial_count()); details.setThisType(2); details.setThisCount(result.getInitial_count() - result.getEnd_count()); details.setEndCount(result.getEnd_count()); details.setWarehouseId(result.getWhGoods().getWarehouseId()); details.setWarehouseName(result.getWhGoods().getWarehouseName()); details.setClassification(11); details.setOperatorId(lending.getOperatorId()); details.setOperatorName(lending.getOperatorName()); details.setDealTime(lending.getDealTime()); details.setWhGoodsId(result.getWhGoods().getId()); this.insert(details); //回填出库流水ID,用于分发时使用 result.setWh_goods_detail_id(details.getId()); } CheckUsingParam usingParam = new CheckUsingParam(); usingParam.setIsCheckIn(true); usingParam.setInput_type(1); usingParam.setOutputList(results); List usingResults = coreService.unifyUsingCheck(usingParam); for (CheckUsingResult usingResult : usingResults) { UsingGoodsHis his = new UsingGoodsHis(); his.setId(NumberGenerator.getLongSequenceNumber()); his.setBusinessFormId(lending.getId()); his.setBusinessFormCode(lending.getBusinessFormCode()); his.setBusinessFormName("分发单:" + lending.getBusinessFormCode()); his.setClassification(1); his.setOperatorId(lending.getOperatorId()); his.setOperatorName(lending.getOperatorName()); his.setDealTime(lending.getDealTime()); his.setDepFormLendingModelId(usingResult.getLendingModel().getId()); his.setDepFormLendingGoodsId(usingResult.getLendingModel().getDepFormLendingGoodsId()); his.setDepFormLendingId(lending.getId()); his.setWhGoodsId(usingResult.getLendingModel().getWhGoodsId()); his.setInitialCount(usingResult.getInitial_count()); his.setEndCount(usingResult.getEnd_count()); his.setWarehouseId(lending.getWarehouseId()); his.setWarehouseName(lending.getWarehouseName()); his.setDepartmentId(lending.getDepartmentId()); his.setDepartmentName(lending.getDepartmentName()); insert(his); } } } public void doDepScrapped(String dep_form_scrapped_id){ DepFormScrapped scrapped = get(new DepFormScrapped(),"ID=?",new Object[]{dep_form_scrapped_id}); String sql = "SELECT\n" + " B.*,\n" + " A.SCRAPPED_COUNTS, \n" + " A.ID AS DEP_FORM_SCRAPPED_GOODS_ID \n" + "FROM\n" + " DEP_FORM_SCRAPPED_GOODS A\n" + " LEFT JOIN DEP_FORM_LENDING_GOODS B ON A.DEP_FORM_LENDING_GOODS_ID = B.ID \n" + "WHERE\n" + " A.DEP_FORM_SCRAPPED_ID = :DEP_FORM_SCRAPPED_ID \n" + " AND A.WAREHOUSE_ID = B.WAREHOUSE_ID \n" + " AND A.WAREHOUSE_ID = :WAREHOUSE_ID"; List list = select(sql,new SqlParameter("DEP_FORM_SCRAPPED_ID",scrapped.getId()).add("WAREHOUSE_ID",scrapped.getWarehouseId())); for (Map _map : list) { SuperMap map = new SuperMap(_map); CheckUsingParam param = new CheckUsingParam(); param.setIsCheckIn(false); param.setOutputCount(map.getInteger("SCRAPPED_COUNTS")); param.setLending_id(map.getLong("DEP_FORM_LENDING_ID")); param.setModel_id(map.getLong("BASE_GOODS_MODELS_ID")); param.setUser_name(map.getString("GOODS_USER_NAME")); List resultList = coreService.unifyUsingCheck(param); for (CheckUsingResult result : resultList) { //存入在用流水 UsingGoodsHis his = new UsingGoodsHis(); his.setId(NumberGenerator.getLongSequenceNumber()); his.setBusinessFormId(scrapped.getId()); his.setBusinessFormCode(scrapped.getBusinessFormCode()); his.setBusinessFormName("部门报废单:" + scrapped.getBusinessFormCode()); his.setClassification(4); his.setOperatorId(scrapped.getOperatorId()); his.setOperatorName(scrapped.getOperatorName()); his.setDealTime(scrapped.getDealTime()); his.setDepFormLendingModelId(result.getLendingModel().getId()); his.setDepFormLendingGoodsId(result.getLendingModel().getDepFormLendingGoodsId()); his.setDepFormLendingId(result.getLendingModel().getDepFormLendingId()); his.setWhGoodsId(result.getLendingModel().getWhGoodsId()); his.setInitialCount(result.getInitial_count()); his.setEndCount(result.getEnd_count()); his.setWarehouseId(scrapped.getWarehouseId()); his.setWarehouseName(scrapped.getWarehouseName()); his.setDepartmentId(scrapped.getDepartmentId()); his.setDepartmentName(scrapped.getDepartmentName()); insert(his); DepFormScrappedModel model = new DepFormScrappedModel(); model.setId(NumberGenerator.getLongSequenceNumber()); model.setDepFormScrappedGoodsId(map.getLong("DEP_FORM_SCRAPPED_GOODS_ID")); model.setScrappedCode(map.getString("SCRAPPED_CODE")); model.setScrappedName(map.getString("SCRAPPED_NAME")); model.setUsingGoodsHisId(his.getId()); model.setDepFormScrappedId(scrapped.getId()); model.setWhGoodsId(his.getWhGoodsId()); model.setScrappedCounts(his.getThisCount()); model.setInitCount(his.getInitialCount()); model.setDepFormLendingModelId(his.getDepFormLendingModelId()); model.setDepFormLendingGoodsId(his.getDepFormLendingGoodsId()); model.setDepFormLendingId(his.getDepFormLendingId()); insert(model); } } } /** * 用于变更物品使用人后,更新库存物品使用人信息。 * @param dep_form_lending_goods_user_id */ public void changeUser(Long dep_form_lending_goods_user_id){ DepFormLendingGoodsUser user = get(new DepFormLendingGoodsUser(),"ID=?",new Object[]{dep_form_lending_goods_user_id}); DepFormLendingGoods goods = get(new DepFormLendingGoods(),"ID=?",new Object[]{user.getDepFormLendingGoodsId()}); String sql = "UPDATE DEP_FORM_LENDING_MODEL \n" + "SET NOW_USER_NAME =:NOW_USER_NAME,\n" + "NOW_USER_PHONE =:NOW_USER_PHONE \n" + "WHERE\n" + " DEP_FORM_LENDING_GOODS_ID =:DEP_FORM_LENDING_GOODS_ID \n" + " AND BASE_GOODS_MODELS_ID =:BASE_GOODS_MODELS_ID \n" + " AND NOW_USER_NAME =:OLD_USER_NAME\n" + " AND USING_COUNT > 0"; List parameterList = new ArrayList<>(); List modelList = select(new DepFormLendingModel(),"DEP_FORM_LENDING_GOODS_ID=?",new Object[]{goods.getId()}); for (DepFormLendingModel model : modelList) { if (model.getUsingCount() == 0) continue; SqlParameter parameter = new SqlParameter(); parameter.add("NOW_USER_NAME",user.getNowUserName()) .add("NOW_USER_PHONE",user.getNowUserPhone()) .add("DEP_FORM_LENDING_GOODS_ID",goods.getId()) .add("BASE_GOODS_MODELS_ID",goods.getBaseGoodsModelsId()) .add("OLD_USER_NAME",goods.getGoodsUserName()); parameterList.add(parameter); } execBatchUpdate(sql,parameterList); } }