杨凯
2023-10-17 e7c9fc40786f387f2c0d65e10294317480b0f621
consum-base/src/main/java/com/consum/base/core/WarehouseCoreService.java
@@ -1,12 +1,12 @@
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;
@@ -18,7 +18,6 @@
@Service
@Slf4j
public class WarehouseCoreService extends BaseServiceImpl {
    public static void main(String[] args) {
        WhGoods goods = new WhGoods();
@@ -34,15 +33,15 @@
    /**
     * 统一出入库
     */
    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);
                }
@@ -58,25 +57,45 @@
    /**
     * 出库
     */
    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());
@@ -101,10 +120,15 @@
            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" +
@@ -114,7 +138,8 @@
                "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())
@@ -122,35 +147,26 @@
        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;
        }