自动化立体仓库 - WMS系统
1
ZY
2024-10-28 d75cbb1bbf53219034aeff3a27b0d1dd083c51ff
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -16,7 +16,9 @@
import com.zy.asrs.utils.MatUtils;
import com.zy.common.model.DetlDto;
import com.zy.common.utils.NodeUtils;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -59,6 +61,10 @@
    private WrkDetlService wrkDetlService;
    @Autowired
    private ReportQueryMapper reportQueryMapper;
    @Autowired
    private AgvLocMastService agvLocMastService;
    @Autowired
    private AgvLocDetlService agvLocDetlService;
    @Override
    @Transactional
@@ -129,10 +135,14 @@
            }
            OrderDetl orderDetl = new OrderDetl();
            orderDetl.sync(mat);
            if (!Cools.isEmpty(detlDto.getCFree1())){
                orderDetl.setSpecs(detlDto.getCFree1());
            }
            orderDetl.setBatch(detlDto.getBatch());
            orderDetl.setAnfme(detlDto.getAnfme());
            orderDetl.setOrderId(order.getId());
            orderDetl.setOrderNo(order.getOrderNo());
            orderDetl.setSource(docType.getDocId().intValue());
            orderDetl.setCreateBy(9527L);
            orderDetl.setCreateTime(now);
            orderDetl.setUpdateBy(9527L);
@@ -143,6 +153,84 @@
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
        }
// 生成调拨单
        if (docType.getDocId().intValue() == 32) {
            order = new Order(
                    String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                    "DB" + param.getOrderNo(),    // 订单编号
                    DateUtils.convert(now),    // 单据日期
                    33L,    // 单据类型
                    null,    // 项目编号
                    null,    //
                    null,    // 调拨项目编号
                    null,    // 初始票据号
                    null,    // 票据号
                    null,    // 客户编号
                    null,    // 客户
                    null,    // 联系方式
                    null,    // 操作人员
                    null,    // 合计金额
                    null,    // 优惠率
                    null,    // 优惠金额
                    null,    // 销售或采购费用合计
                    null,    // 实付金额
                    null,    // 付款类型
                    null,    // 业务员
                    null,    // 结算天数
                    null,    // 邮费支付类型
                    null,    // 邮费
                    null,    // 付款时间
                    null,    // 发货时间
                    null,    // 物流名称
                    null,    // 物流单号
                    1L,    // 订单状态
                    1,    // 状态
                    9527L,    // 添加人员
                    now,    // 添加时间
                    9527L,    // 修改人员
                    now,    // 修改时间
                    null    // 备注
            );
            if (!orderService.insert(order)) {
                throw new CoolException("生成半成品调拨单失败");
            }
            List<DetlDto> dbList = new ArrayList<>();
            List<DetlDto> dbOrderDetails = param.getOrderDetails();
            // 单据明细档
            for (DetlDto detail : orderDetails) {
                DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
                if (DetlDto.has(dbList, dto)) {
                    DetlDto detlDto = DetlDto.find(dbList, dto.getMatnr(), dto.getBatch(),dto.getCsocode(),dto.getIsoseq(),null);
                    assert detlDto != null;
                    detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
                } else {
                    dbList.add(dto);
                }
            }
            for (DetlDto detlDto : dbList) {
                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(detlDto.getMatnr() + "编号商品检索失败,请先添加商品");
                }
                OrderDetl orderDetl = new OrderDetl();
                orderDetl.sync(mat);
                orderDetl.setBatch(detlDto.getBatch());
                orderDetl.setAnfme(detlDto.getAnfme());
                orderDetl.setOrderId(order.getId());
                orderDetl.setOrderNo(order.getOrderNo());
                orderDetl.setSource(docType.getDocId().intValue());
                orderDetl.setCreateBy(9527L);
                orderDetl.setCreateTime(now);
                orderDetl.setUpdateBy(9527L);
                orderDetl.setUpdateTime(now);
                orderDetl.setStatus(1);
                orderDetl.setQty(0.0D);
                if (!orderDetlService.insert(orderDetl)) {
                    throw new CoolException("生成半成品调拨单明细档失败,请联系管理员");
                }
            }
        }
    }
    @Override
@@ -268,6 +356,7 @@
            orderDetl.setAnfme(detlDto.getAnfme());
            orderDetl.setOrderId(order.getId());
            orderDetl.setOrderNo(order.getOrderNo());
            orderDetl.setSource(docType.getDocId().intValue());
            orderDetl.setCreateBy(9527L);
            orderDetl.setCreateTime(now);
            orderDetl.setUpdateBy(9527L);
@@ -276,6 +365,82 @@
            orderDetl.setQty(0.0D);
            if (!orderDetlService.insert(orderDetl)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
        }
        if (docType.getDocId().intValue() == 32) {
            order = new Order(
                    String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                    "DB" + param.getOrderNo(),    // 订单编号
                    DateUtils.convert(now),    // 单据日期
                    33L,    // 单据类型
                    null,    // 项目编号
                    null,    //
                    null,    // 调拨项目编号
                    null,    // 初始票据号
                    null,    // 票据号
                    null,    // 客户编号
                    null,    // 客户
                    null,    // 联系方式
                    null,    // 操作人员
                    null,    // 合计金额
                    null,    // 优惠率
                    null,    // 优惠金额
                    null,    // 销售或采购费用合计
                    null,    // 实付金额
                    null,    // 付款类型
                    null,    // 业务员
                    null,    // 结算天数
                    null,    // 邮费支付类型
                    null,    // 邮费
                    null,    // 付款时间
                    null,    // 发货时间
                    null,    // 物流名称
                    null,    // 物流单号
                    1L,    // 订单状态
                    1,    // 状态
                    9527L,    // 添加人员
                    now,    // 添加时间
                    9527L,    // 修改人员
                    now,    // 修改时间
                    null    // 备注
            );
            if (!orderService.insert(order)) {
                throw new CoolException("生成半成品调拨单失败");
            }
            List<DetlDto> dbList = new ArrayList<>();
            List<DetlDto> dbOrderDetails = param.getOrderDetails();
            // 单据明细档
            for (DetlDto detail : orderDetails) {
                DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
                if (DetlDto.has(dbList, dto)) {
                    DetlDto detlDto = DetlDto.find(dbList, dto.getMatnr(), dto.getBatch(),dto.getCsocode(),dto.getIsoseq(),null);
                    assert detlDto != null;
                    detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
                } else {
                    dbList.add(dto);
                }
            }
            for (DetlDto detlDto : dbList) {
                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(detlDto.getMatnr() + "编号商品检索失败,请先添加商品");
                }
                OrderDetl orderDetl = new OrderDetl();
                orderDetl.sync(mat);
                orderDetl.setBatch(detlDto.getBatch());
                orderDetl.setAnfme(detlDto.getAnfme());
                orderDetl.setOrderId(order.getId());
                orderDetl.setOrderNo(order.getOrderNo());
                orderDetl.setSource(docType.getDocId().intValue());
                orderDetl.setCreateBy(9527L);
                orderDetl.setCreateTime(now);
                orderDetl.setUpdateBy(9527L);
                orderDetl.setUpdateTime(now);
                orderDetl.setStatus(1);
                orderDetl.setQty(0.0D);
                if (!orderDetlService.insert(orderDetl)) {
                    throw new CoolException("生成半成品调拨单明细档失败,请联系管理员");
                }
            }
        }
    }
@@ -453,7 +618,7 @@
        }
        Tag tag = tagService.selectByName("全部", 1);
        Mat mat = matService.selectByMatnr(param.getCInvCCode());
        Mat mat = matService.selectByMatnr(param.getCInvCode());
        if (Cools.isEmpty(mat)) {
            mat = new Mat();
            mat.setTagId(tag.getId());
@@ -468,6 +633,7 @@
        } else {
            mat.setTagId(tag.getId());
            syncMat(mat,param);
            System.out.println(mat.getMaktx().length());
            if (matService.updateById(mat)) {
                callApiLogSave(mat, "/open/asrs/mat/v1", "接收ERP下发商品信息成功!添加商品信息成功!", true);
            } else {
@@ -480,11 +646,11 @@
    private void syncMat(Mat mat, MatSyncParam param){
        Date date = new Date();
        mat.setMatnr(param.getCInvCCode());//物料编码
        mat.setMatnr(param.getCInvCode());//物料编码
        mat.setMaktx(param.getCInvName());//物料名称
        mat.setSpecs(param.getCInvStd());//规格
        mat.setUnit(param.getCComUnitName());
        mat.setBeBatch(param.getBInvBatch());
        mat.setBeBatch(Cools.eq("true",param.getBInvBatch()) ? 1 : 0);
        mat.setStatus(param.getStates());
        mat.setCreateBy(9999L);//9999表示erp下发
@@ -702,9 +868,29 @@
            throw new CoolException("单据参数为空或者单据详情为空,无法生成单据信息");
        }
        Order orderOld = null;
        if(!Cools.isEmpty(orderService.selectByNo(param.getCPOID()))){
            callApiLogSave(param, "/order/pakout/default/v1", "接受单据失败,该单据已存在,无法生成单据信息", false);
            throw new CoolException("该单据已存在,无法生成单据信息");
            orderOld = orderService.selectByNo(param.getCPOID());
            if(orderOld.getSettle() > 1){
                throw new CoolException("该单据已在作业中,无法更改单据信息");
            }
//            String orderNo = param.getCPOID();
//            if (orderNo.contains("-")){
//                int index = Integer.parseInt(orderNo.split("-")[1]) + 1;
//                orderNo = orderNo.split("-")[0] + "-" + index;
//                param.setcPOID(orderNo);
//            }else {
//                orderNo = orderNo + "-1";
//                param.setcPOID(orderNo);
//            }
//
//            syncOrder(param,pakin,docName);
            //callApiLogSave(param, "/order/pakout/default/v1", "接受单据失败,该单据已存在,无法生成单据信息", false);
            //throw new CoolException("该单据已存在,无法生成单据信息");
        }
        Date now = new Date();
        Order order = orderMapping(param,now,pakin,docName);
@@ -713,6 +899,12 @@
            OrderDetl orderDetl = orderDetlMapping(order,od,now);
            orderDetlService.insert(orderDetl);
        });
        if(!Cools.isEmpty(orderOld)){
            //删除原有单据信息
            orderService.delete(new EntityWrapper<Order>().eq("id",orderOld.getId()));
            orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id",orderOld.getId()));
        }
        callApiLogSave(param, "/order/pakout/default/v1", "接受单据成功", true);
@@ -731,7 +923,50 @@
        }
        orderService.deleteById(order);
        orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_no",orderNo));
        orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id",order.getId()));
        return true;
    }
    @Override
    @Transactional
    @Synchronized
    public boolean checkAndAdjustLocDetl(CheckParam params) {
        //判断库位是否存在
        AgvLocMast agvLocMast = agvLocMastService.selectById(params.getLocNo());
        if(Cools.isEmpty(agvLocMast)){
            throw new CoolException("库位号不存在");
        }
        if(!Cools.eq("O",agvLocMast.getLocSts()) && !Cools.eq("F",agvLocMast.getLocSts())){
            throw new CoolException("当前库位正在作业中,无法盘点调整");
        }
        if(Cools.isEmpty(params.getLocDetls())){
            agvLocMast.setLocSts("O");
        }else {
            agvLocMast.setLocSts("F");
        }
        agvLocMastService.updateById(agvLocMast);
        //删除旧库存
        agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",params.getLocNo()));
        //新增盘点库存
        for (DetlDto detlDto : params.getLocDetls()){
            AgvLocDetl agvLocDetl = new AgvLocDetl();
            Mat mat = matService.selectByMatnr(detlDto.getMatnr());
            BeanUtils.copyProperties(mat,agvLocDetl);
            agvLocDetl.setLocNo(params.getLocNo());
            agvLocDetl.setSuppCode(params.getContainerCode());
            agvLocDetl.setAnfme(detlDto.getAnfme());
            agvLocDetl.setBatch(detlDto.getBatch());
            agvLocDetl.setThreeCode(detlDto.getCsocode());
            agvLocDetl.setDeadTime(detlDto.getIsoseq());
            agvLocDetlService.insert(agvLocDetl);
        }
        return true;
    }
@@ -748,9 +983,14 @@
        //单据日期
        order.setOrderTime(param.getDdate());
        //供应商编码
        order.setSalesman(param.getCVenCode());
        order.setMemo(param.getCMemo());
        //制单人
        order.setShipCode(param.getCPersonCode());
        order.setDefNumber(param.get操作系统号());
        order.setCreateTime(now);
        order.setUpdateTime(now);
@@ -787,12 +1027,15 @@
        //数量
        od.setAnfme(odParam.getIQuantity());
        //销售订单号
        od.setThreeCode(odParam.getCsocode());
        od.setThreeCode(odParam.getCDefine22());
        //自由项
        od.setDeadTime(odParam.getBFree1());
        //IDs
        od.setSku(odParam.getID());
        od.setSku(odParam.getId());
        od.setLength(odParam.getINum());
        od.setSource(order.getDocType().intValue());
        od.setStatus(1);
        od.setQty(0.0D);
        od.setCreateBy(9999L);