package com.consum.base.core;
|
|
import com.consum.base.core.tools.SqlParameter;
|
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();
|
goods.setId(1l);
|
goods.setWarehouseId(111l);
|
goods.setSupplier("河南金明源");
|
|
WhGoods_mapper mapper = new WhGoods_mapper(goods);
|
System.out.println(mapper.getInsertSql_().getParameters());
|
System.out.println(mapper.getInsertSql_().getSql());
|
}
|
|
/**
|
* 统一出入库
|
*/
|
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;
|
synchronized (param.getWarehouseId()) {
|
if (param.getIsCheckIn()) {
|
result = checkin(param);
|
} else {
|
result = checkout(param);
|
}
|
}
|
return result;
|
} catch (Exception e) {
|
log.error(e.getMessage());
|
throw new RuntimeException(e.getMessage());
|
}
|
|
}
|
|
/**
|
* 出库
|
*/
|
private CheckWarehouseResult checkout(CheckWarehouseParam param) {
|
return new CheckWarehouseResult();
|
}
|
|
private BaseWarehouse getWarehouse(long id){
|
BaseWarehouse w = get(new BaseWarehouse(),"ID=:ID",new Object[]{id});
|
return w;
|
}
|
|
/**
|
* 入库
|
*/
|
private CheckWarehouseResult checkin(CheckWarehouseParam param) {
|
|
//如果是采购入库
|
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()});
|
|
|
WhGoods goods = new WhGoods();
|
goods.setId(NumberGenerator.getLongSequenceNumber());
|
goods.setBaseGoodsTemplateId(procureModel.getBaseGoodsTemplateId());
|
goods.setGoodsTemplateName(procureModel.getGoodsTemplateName());
|
goods.setBaseGoodsModelsId(procureModel.getBaseGoodsModelsId());
|
goods.setBaseGoodsModelsName(procureModel.getBaseGoodsModelsName());
|
goods.setWhCount(procureModel.getCounts());
|
goods.setTransferCount(0);
|
goods.setAllCount(procureModel.getCounts());
|
goods.setFirstInputCode(param.getFirstInputCode());
|
goods.setFirstInputType(param.getFirst_input_type());
|
goods.setFirstInputHisId(NumberGenerator.getLongSequenceNumber());
|
goods.setWarehouseId(procure.getWarehouseId());
|
goods.setWarehouseName(procure.getWarehouseName());
|
goods.setSupplier(procureModel.getSupplier());
|
goods.setUnit(procureModel.getUnit());
|
goods.setPrice(procureModel.getPrice());
|
goods.setProcureDate(procure.getIncomeTime());
|
goods.setBackDate(procure.getIncomeTime());
|
goods.setStates(1);
|
insert(goods);
|
|
CheckWarehouseResult result = new CheckWarehouseResult();
|
result.setGoods(goods);
|
result.setInitial_count(0);
|
result.setEnd_count(goods.getAllCount());
|
return result;
|
}
|
|
String sql = "SELECT\n" +
|
" * \n" +
|
"FROM\n" +
|
" WH_GOODS \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";
|
SqlParameter parameter = new SqlParameter();
|
parameter.add("WAREHOUSE_ID",param.getWarehouseId())
|
.add("FIRST_INPUT_CODE",param.getFirstInputCode())
|
.add("BASE_GOODS_MODELS_ID",param.getModelId());
|
|
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);
|
|
BaseGoodsTemplate t = new BaseGoodsTemplate();
|
t.setId(models.getGoodsTemplatesId());
|
BaseGoodsTemplate template = get(t);
|
|
BaseWarehouse w = new BaseWarehouse();
|
w.setId(param.getWarehouseId());
|
BaseWarehouse warehouse = get(w);
|
|
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 new CheckWarehouseResult();
|
}
|
|
|
}
|