自动化立体仓库 - WMS系统
skyouc
1 天以前 6efbf154b3ed88d376763b9d9807256c7bd5eaeb
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -6,12 +6,11 @@
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.OpenOrderCompleteParam;
import com.zy.asrs.entity.param.OpenOrderPakinParam;
import com.zy.asrs.entity.param.OpenOrderPakoutParam;
import com.zy.asrs.entity.param.PackParam;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.OpenOrderCompeteResult;
import com.zy.asrs.entity.result.StockVo;
import com.zy.asrs.enums.CheckStatusEnum;
import com.zy.asrs.enums.OrderTypeEnum;
import com.zy.asrs.mapper.TagMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MatUtils;
@@ -51,6 +50,12 @@
    private TagService tagService;
    @Autowired
    private TagMapper tagMapper;
    @Autowired
    private CheckOrderService checkOrderService;
    @Autowired
    private CheckOrderDetlService checkOrderDetlService;
    @Override
    @Transactional
@@ -184,10 +189,15 @@
    }
    @Override
    @Transactional
    public void pakoutOrderCreate(OpenOrderPakoutParam param) {
        Order order = orderService.selectByNo(param.getOrderNo());
        // 如果单据不存在则添加;如果单据存在,作业中无法修改,反之则修改单据
        if (!Cools.isEmpty(order)) {
            throw new CoolException(param.getOrderNo() + "单据已存在,请勿重复提交");
            if (order.getSettle() > 1L) {
                throw new CoolException(param.getOrderNo() + "正在出库,无法修改单据");
            }
            orderService.remove(order.getId());
        }
        DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.FALSE);
        Date now = new Date();
@@ -333,7 +343,7 @@
        pack = new Pack(
                param.getBarcode(),    // 条码[非空]
                analyse.getMatnr(),    // 商品编号
                analyse.getBarcode(),    // 批号
                analyse.getBarcode(),    // 序列码
                1L,    // 订单状态
                1,    // 状态
                now,    // 添加时间
@@ -380,7 +390,7 @@
                            null    // 备注
                    );
                    if (tagMapper.insert(priTag) == 0) {
                        throw new CoolException("保存一级分类失败");
                        throw new CoolException("服务器内部错误,请联系管理员");
                    }
                }
                // 二级分类
@@ -410,7 +420,7 @@
                            null    // 备注
                    );
                    if (tagMapper.insert(secTag) == 0) {
                        throw new CoolException("保存二级分类失败");
                        throw new CoolException("服务器内部错误,请联系管理员");
                    }
                }
                tagId = secTag.getId();
@@ -433,4 +443,172 @@
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void adjustmentOrderCreate(OpenAdjustmentOrderParam param) {
        if(Cools.isEmpty(param.getOrderNo())){
            String prefix = "";
            DocType docType = docTypeService.selectById(param.getOrderNo());
            if(!Cools.isEmpty(docType)){
                prefix = "Adjust";
            }
            param.setOrderNo(prefix + snowflakeIdWorker.nextId());
        }
        CheckOrder checkOrder = checkOrderService.selectOne(new EntityWrapper<CheckOrder>().eq("order_no", param.getOrderNo()) );
        if (checkOrder != null) {
            throw new CoolException("单据已存在");
        }
        Date now = new Date();
        checkOrder = new CheckOrder();
        checkOrder.setOrderNo(param.getOrderNo());
        checkOrder.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
        checkOrder.setOrderTime( DateUtils.convert(now));
        checkOrder.setDocType(Long.valueOf(OrderTypeEnum.ADJUSTMENT.type));
        checkOrder.setSettle(1L);
        checkOrder.setCreateBy(9527L);
        checkOrder.setCreateTime(now);
        checkOrder.setUpdateBy(9527L);
        checkOrder.setUpdateTime(now);
        checkOrder.setStatus(1);
        if (!checkOrderService.insert(checkOrder)) {
            throw new CoolException("保存调整单主单失败");
        }
        for (CheckOrderDetl checkOrderDetl1 : param.getOrderDetails()) {
            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>()
                    .eq("matnr", checkOrderDetl1.getMatnr())
                    .eq("loc_no", checkOrderDetl1.getLocNo())
                    .eq("batch", checkOrderDetl1.getBatch())
            );
            if (Cools.isEmpty(locDetl)) {
                throw new CoolException("未找到库存明细,请检查库存");
            }
            CheckOrderDetl checkOrderDetl = new CheckOrderDetl();
            checkOrderDetl.sync(locDetl);
            checkOrderDetl.setLocDetlId(locDetl.getId());
            checkOrderDetl.setOrderId(checkOrder.getId());
            checkOrderDetl.setOrderNo(checkOrder.getOrderNo());
            checkOrderDetl.setAnfme(checkOrderDetl1.getAnfme());
            checkOrderDetl.setDiffQty(checkOrderDetl1.getDiffQty());
            checkOrderDetl.setWorkQty(checkOrderDetl1.getWorkQty());
            checkOrderDetl.setStatus(checkOrderDetl1.getStatus().equals(1)? CheckStatusEnum.ALLOW.type:CheckStatusEnum.FORBID.type);
            checkOrderDetl.setZpallet(locDetl.getZpallet());
            checkOrderDetl.setCreateTime(now);
            checkOrderDetl.setUpdateTime(now);
            if (!checkOrderDetlService.insert(checkOrderDetl)) {
                throw new CoolException("保存调整单明细失败");
            }
        }
    }
    @Override
    @Transactional
    public void syncMat(MatSyncParam param) {
        if (Cools.isEmpty(param.getMatDetails()) || param.getMatDetails().size() <=0 ) {
            throw new CoolException("商品数据为空");
        }
        for(MatSyncParam.MatParam matParam : param.getMatDetails()){
            if(Cools.isEmpty(matParam.getMatnr())){
                throw new CoolException("商品编码不能为空");
            }
            Date now = new Date();
            Mat mat = matService.selectByMatnr(matParam.getMatnr());
            if (mat == null) {
                mat = new Mat();
                // 分类
                Long tagId;
                // 一级分类
                if (!Cools.isEmpty(matParam.getGroupCode()) && !Cools.isEmpty(matParam.getGroupName())) {
                    Tag priTag = tagService.selectByName(matParam.getGroupCode(), 2);
                    if (priTag == null) {
                        Tag top = tagService.getTop();
                        NodeUtils nodeUtils = new NodeUtils();
                        nodeUtils.executePath(top.getId());
                        priTag = new Tag(
                                null,    // 编号
                                matParam.getGroupCode(),    // 名称
                                top.getId(),    // 父级
                                top.getName(),    // 父级名称
                                nodeUtils.path.toString(),    // 关联路径
                                nodeUtils.pathName.toString(),    // 关联路径名
                                0,    // 类型
                                null,    // 负责人
                                null,    // 图片
                                null,    // 简要描述
                                null,    // 数量
                                2,    // 等级
                                null,    // 排序
                                1,    // 状态
                                now,    // 添加时间
                                null,    // 添加人员
                                now,    // 修改时间
                                null,    // 修改人员
                                null    // 备注
                        );
                        if (tagMapper.insert(priTag) == 0) {
                            throw new CoolException("服务器内部错误,请联系管理员");
                        }
                    }
                    // 二级分类
                    Tag secTag = tagService.selectByName(matParam.getGroupName(), 3);
                    if (secTag == null) {
                        NodeUtils nodeUtils = new NodeUtils();
                        nodeUtils.executePath(priTag.getId());
                        secTag = new Tag(
                                null,    // 编号
                                matParam.getGroupName(),    // 名称
                                priTag.getId(),    // 父级
                                priTag.getName(),    // 父级名称
                                nodeUtils.path.toString(),    // 关联路径
                                nodeUtils.pathName.toString(),    // 关联路径名
                                0,    // 类型
                                null,    // 负责人
                                null,    // 图片
                                null,    // 简要描述
                                null,    // 数量
                                3,    // 等级
                                null,    // 排序
                                1,    // 状态
                                now,    // 添加时间
                                null,    // 添加人员
                                now,    // 修改时间
                                null,    // 修改人员
                                null    // 备注
                        );
                        if (tagMapper.insert(secTag) == 0) {
                            throw new CoolException("服务器内部错误,请联系管理员");
                        }
                    }
                    tagId = secTag.getId();
                } else {
                    tagId = tagService.getTop().getId();
                }
                mat.sync(param);
//            mat.setMatnr(param.getMatnr());
//            mat.setMaktx(param.getMaktx());
//            mat.setSpecs(param.getSpecs());
//            mat.setModel(param.getModel());
                mat.setTagId(tagId);
                mat.setStatus(1);
                mat.setCreateTime(now);
                mat.setUpdateTime(now);
                if (!matService.insert(mat)) {
                    throw new CoolException("服务器内部错误,请联系管理员");
                } else {
                    log.info("同步新物料[商品编号:{}]", mat.getMatnr());
                }
            } else {
                mat.sync(param);
                if (!matService.update(mat, new EntityWrapper<Mat>().eq("matnr",matParam.getMatnr()))) {
                    throw new CoolException("更新已存在商品信息失败,请联系管理员");
                }
            }
        }
    }
}