| | |
| | | package com.consum.base.core; |
| | | |
| | | import com.consum.base.core.tools.SqlParameter; |
| | | import com.consum.base.core.util.DateUtil; |
| | | import com.consum.model.po.*; |
| | | import com.walker.infrastructure.utils.NumberGenerator; |
| | | import com.walker.jdbc.service.BaseServiceImpl; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.Assert; |
| | | |
| | | import java.util.List; |
| | |
| | | @Service |
| | | @Slf4j |
| | | public class WarehouseCoreService extends BaseServiceImpl { |
| | | |
| | | |
| | | public static void main(String[] args) { |
| | | WhGoods goods = new WhGoods(); |
| | |
| | | /** |
| | | * 统一出入库 |
| | | */ |
| | | public CheckWarehouseResult unifyCheck(CheckWarehouseParam param) { |
| | | public CheckWarehouseResult[] unifyCheck(CheckWarehouseParam param) { |
| | | // TODO: 10/10/2023 此处加了唯一锁,会影响性能,思考是否有更合适的办法 |
| | | try { |
| | | Assert.notNull(param, "wareHouse param can not null !"); |
| | | Assert.notNull(param.getWarehouseId(), "wareHouse id can not null"); |
| | | CheckWarehouseResult result; |
| | | CheckWarehouseResult[] result; |
| | | synchronized (param.getWarehouseId()) { |
| | | if (param.getIsCheckIn()) { |
| | | result = checkin(param); |
| | | result = new CheckWarehouseResult[]{checkin(param)}; |
| | | } else { |
| | | result = checkout(param); |
| | | } |
| | |
| | | /** |
| | | * 出库 |
| | | */ |
| | | private CheckWarehouseResult checkout(CheckWarehouseParam param) { |
| | | return new CheckWarehouseResult(); |
| | | private CheckWarehouseResult[] checkout(CheckWarehouseParam param) { |
| | | String sql = "SELECT\n" + |
| | | " * \n" + |
| | | "FROM\n" + |
| | | " WH_GOODS \n" + |
| | | "WHERE\n" + |
| | | " WAREHOUSE_ID =:WAREHOUSE_ID \n" + |
| | | " AND BASE_GOODS_MODELS_ID =:BASE_GOODS_MODELS_ID \n" + |
| | | " AND STATES =1 \n" + |
| | | " AND WH_COUNT > 0 \n" + |
| | | " order by PROCURE_DATE asc PRICE DESC"; |
| | | SqlParameter parameter = new SqlParameter(); |
| | | parameter.add("WAREHOUSE_ID",param.getWarehouseId()) |
| | | .add("BASE_GOODS_MODELS_ID",param.getModelId()); |
| | | List<WhGoods> goodsList = select(sql,parameter,new WhGoods()); |
| | | |
| | | for (WhGoods goods : goodsList){ |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | return null; |
| | | } |
| | | |
| | | private BaseWarehouse getWarehouse(long id){ |
| | | BaseWarehouse w = get(new BaseWarehouse(),"ID=:ID",new Object[]{id}); |
| | | BaseWarehouse w = get(new BaseWarehouse(),"ID=?",new Object[]{id}); |
| | | return w; |
| | | } |
| | | |
| | | /** |
| | | * 入库 |
| | | */ |
| | | private CheckWarehouseResult checkin(CheckWarehouseParam param) { |
| | | private CheckWarehouseResult checkin(CheckWarehouseParam param) throws RuntimeException { |
| | | |
| | | //如果是采购入库 |
| | | if (param.getFirst_input_type() ==1){ |
| | | WhFormProcureModel procureModel = get(new WhFormProcureModel(),"ID=:ID",new Object[]{param.getFirstInputCode()}); |
| | | WhFormProcure procure = get(new WhFormProcure(),"ID=:ID",new Object[]{procureModel.getWhFormProcureId()}); |
| | | |
| | | WhFormProcureModel procureModel = get(new WhFormProcureModel(),"ID=?",new Object[]{param.getFirstInputCode()}); |
| | | WhFormProcure procure = get(new WhFormProcure(),"ID=?",new Object[]{procureModel.getWhFormProcureId()}); |
| | | |
| | | WhGoods goods = new WhGoods(); |
| | | goods.setId(NumberGenerator.getLongSequenceNumber()); |
| | |
| | | insert(goods); |
| | | |
| | | CheckWarehouseResult result = new CheckWarehouseResult(); |
| | | result.setGoods(goods); |
| | | result.setWhGoods(goods); |
| | | result.setInitial_count(0); |
| | | result.setEnd_count(goods.getAllCount()); |
| | | return result; |
| | | //零星入库 |
| | | } else if (param.getFirst_input_type() ==2){ |
| | | |
| | | return null; |
| | | |
| | | } |
| | | |
| | | String sql = "SELECT\n" + |
| | |
| | | "WHERE\n" + |
| | | " WAREHOUSE_ID =:WAREHOUSE_ID \n" + |
| | | " AND FIRST_INPUT_CODE =:FIRST_INPUT_CODE \n" + |
| | | " AND BASE_GOODS_MODELS_ID =:BASE_GOODS_MODELS_ID"; |
| | | " AND BASE_GOODS_MODELS_ID =:BASE_GOODS_MODELS_ID" + |
| | | " order by PROCURE_DATE desc PRICE asc"; |
| | | SqlParameter parameter = new SqlParameter(); |
| | | parameter.add("WAREHOUSE_ID",param.getWarehouseId()) |
| | | .add("FIRST_INPUT_CODE",param.getFirstInputCode()) |
| | |
| | | |
| | | List<WhGoods> goodsList = select(sql,parameter,new WhGoods()); |
| | | |
| | | //第一次入库:采购入库或者零星入库 |
| | | if (goodsList == null || goodsList.size() == 0){ |
| | | BaseGoodsModels m = new BaseGoodsModels(); |
| | | m.setId(param.getModelId()); |
| | | BaseGoodsModels models = get(m); |
| | | new RuntimeException("查不到历史库存"); |
| | | return null; |
| | | } |
| | | |
| | | BaseGoodsTemplate t = new BaseGoodsTemplate(); |
| | | t.setId(models.getGoodsTemplatesId()); |
| | | BaseGoodsTemplate template = get(t); |
| | | for (WhGoods goods : goodsList){ |
| | | CheckWarehouseResult result = new CheckWarehouseResult(); |
| | | result.setWhGoods(goods); |
| | | result.setInitial_count(goods.getWhCount()); |
| | | result.setEnd_count(goods.getWhCount() + param.getCount()); |
| | | |
| | | BaseWarehouse w = new BaseWarehouse(); |
| | | w.setId(param.getWarehouseId()); |
| | | BaseWarehouse warehouse = get(w); |
| | | WhGoods newGoods = new WhGoods(); |
| | | newGoods.setId(goods.getId()); |
| | | newGoods.setWhCount(result.getEnd_count()); |
| | | newGoods.setAllCount(goods.getAllCount() + param.getCount()); |
| | | newGoods.setStates(1); |
| | | newGoods.setBackDate(DateUtil.getCurrentDateFor14()); |
| | | this.update(newGoods); |
| | | |
| | | WhGoods goods = new WhGoods(); |
| | | goods.setId(NumberGenerator.getLongSequenceNumber()); |
| | | goods.setBaseGoodsTemplateId(template.getId()); |
| | | goods.setGoodsTemplateName(template.getGoodsName()); |
| | | goods.setBaseGoodsModelsId(models.getId()); |
| | | goods.setBaseGoodsModelsName(models.getModelName()); |
| | | goods.setWhCount(param.getCount()); |
| | | goods.setTransferCount(0); |
| | | goods.setAllCount(param.getCount()); |
| | | goods.setFirstInputCode(param.getFirstInputCode()); |
| | | // goods.setFirstInputType(); 这个值在业务代码层面添加 |
| | | // goods.setFirstInputHisId();这个值在业务代码层面添加 |
| | | goods.setWarehouseId(param.getWarehouseId()); |
| | | goods.setWarehouseName(warehouse.getWarehouseName()); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | |