自动化立体仓库 - WMS系统
zyx
2024-04-26 f972013eb3be00b09091ddc5358b31bbc27e0d5f
ERP物料同步,单据同步
7个文件已修改
329 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutParam.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderCheckService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderCheckServiceImpl.java 104 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -95,13 +95,13 @@
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
        if (Cools.isEmpty(param.getOrderNo())) {
        if (Cools.isEmpty(param.getCCode())) {
            return R.error("单据编号[orderNo]不能为空");
        }
        if (Cools.isEmpty(param.getOrderType())) {
        if (Cools.isEmpty(param.getType())) {
            return R.error("单据类型[orderType]不能为空");
        }
        if (Cools.isEmpty(param.getOrderDetails())) {
        if (Cools.isEmpty(param.getADDBody())) {
            return R.error("单据明细[orderDetails]不能为空");
        }
        openService.pakoutOrderCreate(param);
@@ -181,4 +181,5 @@
        System.out.println(JSON.toJSONString(param1));
    }
}
src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutParam.java
@@ -1,39 +1,48 @@
package com.zy.asrs.entity.param;
import com.alibaba.fastjson.JSON;
import com.core.common.DateUtils;
import com.zy.common.model.DetlDto;
import lombok.Data;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * Created by vincent on 2022/4/8
 * 海诺尔U8出库单同步参数
 */
@Data
public class OpenOrderPakoutParam {
    private String orderNo;
    //入库单号
    private String cCode;
    private String orderType;
    //单据日期
    private Date dDate;
    private String orderTime;
    //类型
    private String type;
    private List<DetlDto> orderDetails;
    //制单人
    private String cMaker;
    //公司
    private String cAccount;
    public static void main(String[] args) {
        OpenOrderPakoutParam param = new OpenOrderPakoutParam();
        param.setOrderNo("LXT12321321");
        param.setOrderType("交货单");
        param.setOrderTime(DateUtils.convert(new Date()));
        List<DetlDto> orderDetails = new ArrayList<>();
        param.setOrderDetails(orderDetails);
        DetlDto detlDto = new DetlDto("15099-10000", 3.0);
        orderDetails.add(detlDto);
        System.out.println(JSON.toJSONString(param));
    //备注
    private String cMemo;
    private List<Body> ADDBody;
    //private List<DetlDto> orderDetails;
    @Data
    public static class Body{
        //存货编码
        private String cInvCode;
        //数量
        private Double iQuantity;
        //批号
        private String cBatch;
        //行备注
        private String cbMemo;
    }
}
src/main/java/com/zy/asrs/service/OrderCheckService.java
@@ -17,7 +17,7 @@
    void checkComplete(String orderNo);
    boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List<WrkDetl> wrkDetls);
 //   boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List<WrkDetl> wrkDetls);
src/main/java/com/zy/asrs/service/OrderService.java
@@ -15,7 +15,7 @@
    void checkComplete(String orderNo);
    boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List<WrkDetl> wrkDetls);
//    boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List<WrkDetl> wrkDetls);
    void remove(Long orderId);
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -16,6 +16,8 @@
import com.zy.asrs.utils.MatUtils;
import com.zy.common.model.DetlDto;
import com.zy.common.utils.NodeUtils;
import com.zy.system.entity.User;
import com.zy.system.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -62,6 +64,8 @@
    private LocOwnerService locOwnerService;
    @Autowired
    private ReportQueryMapper reportQueryMapper;
    @Autowired
    private UserService userService;
    @Override
    @Transactional
@@ -180,20 +184,27 @@
    @Override
    @Transactional
    public void pakoutOrderCreate(OpenOrderPakoutParam param) {
        Order order = orderService.selectByNo(param.getOrderNo());
        Order order = orderService.selectByNo(param.getCCode());
        // 如果单据不存在则添加;如果单据存在,作业中无法修改,反之则修改单据
        if (!Cools.isEmpty(order)) {
            if (order.getSettle() > 1L) {
                throw new CoolException(param.getOrderNo() + "正在出库,无法修改单据");
                throw new CoolException(param.getCCode() + "正在出库,无法修改单据");
            }
            orderService.remove(order.getId());
        }
        DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.FALSE);
        DocType docType = docTypeService.selectOrAdd(param.getType(), Boolean.FALSE);
        Date now = new Date();
        //查找做单用户
        User user = userService.selectOne(new EntityWrapper<User>().eq("username", param.getCMaker()));
        if(Cools.isEmpty(user)){
            throw new CoolException("未查询到该用户");
        }
        // 单据主档
        order = new Order(
                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                param.getOrderNo(),    // 订单编号
                param.getCCode(),    // 订单编号
                DateUtils.convert(now),    // 单据日期
                docType.getDocId(),    // 单据类型
                null,    // 项目编号
@@ -202,9 +213,9 @@
                null,    // 初始票据号
                null,    // 票据号
                null,    // 客户编号
                null,    // 客户
                param.getCAccount(),    // 客户
                null,    // 联系方式
                null,    // 操作人员
                param.getCMaker(),    // 操作人员
                null,    // 合计金额
                null,    // 优惠率
                null,    // 优惠金额
@@ -221,7 +232,7 @@
                null,    // 物流单号
                1L,    // 订单状态
                1,    // 状态
                9527L,    // 添加人员
                user.getId(),    // 添加人员
                now,    // 添加时间
                9527L,    // 修改人员
                now,    // 修改时间
@@ -231,37 +242,24 @@
            throw new CoolException("生成单据主档失败,请联系管理员");
        }
        // 单据明细档
        List<DetlDto> list = new ArrayList<>();
        List<DetlDto> orderDetails = param.getOrderDetails();
        for (DetlDto detail : orderDetails) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
            } else {
                list.add(dto);
            }
            dto.setWeight(detail.getWeight());
        }
        for (DetlDto detlDto : list) {
            Mat mat = matService.selectByMatnr(detlDto.getMatnr());
        for (OpenOrderPakoutParam.Body body : param.getADDBody()){
            Mat mat = matService.selectByMatnr(body.getCInvCode());
            if (Cools.isEmpty(mat)) {
                throw new CoolException(detlDto.getMatnr() + "编号商品检索失败,请先添加商品");
                throw new CoolException(body.getCInvCode() + "编号商品检索失败,请先添加商品");
            }
            OrderDetl orderDetl = new OrderDetl();
            orderDetl.sync(mat);
            orderDetl.setBatch(detlDto.getBatch() == null ? "" : detlDto.getBatch());
            orderDetl.setAnfme(detlDto.getAnfme());
            orderDetl.setAnfme(body.getIQuantity());
            orderDetl.setQty(0.0D);
            orderDetl.setWorkQty(0.0D);
            orderDetl.setStatus(1);
            orderDetl.setOrderId(order.getId());
            orderDetl.setOrderNo(order.getOrderNo());
            orderDetl.setCreateBy(9527L);
            orderDetl.setCreateBy(user.getId());
            orderDetl.setCreateTime(now);
            orderDetl.setUpdateBy(9527L);
            orderDetl.setUpdateBy(user.getId());
            orderDetl.setUpdateTime(now);
            orderDetl.setStatus(1);
            orderDetl.setQty(0.0D);
            orderDetl.setWeight(detlDto.getWeight());
            orderDetl.setUuid(String.valueOf(System.currentTimeMillis()));
            if (!orderDetlService.insert(orderDetl)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
src/main/java/com/zy/asrs/service/impl/OrderCheckServiceImpl.java
@@ -3,24 +3,18 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.ExamineParam;
import com.zy.asrs.entity.param.OpenOrderPakinParam;
import com.zy.asrs.entity.param.OpenOrderPakoutParam;
import com.zy.asrs.mapper.OrderCheckMapper;
import com.zy.asrs.mapper.OrderDetlMapper;
import com.zy.asrs.mapper.OrderMapper;
import com.zy.asrs.service.*;
import com.zy.common.model.DetlDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -101,55 +95,55 @@
    }
    @Override
    public boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List<WrkDetl> wrkDetls) {
        try {
            List<DetlDto> detlDtos = new ArrayList<>();
            wrkDetls.forEach(wrkDetl -> {
                detlDtos.add(new DetlDto(wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme()));
            });
            String orderNo = "HAND" + snowflakeIdWorker.nextId();
            if (pakin) {
                // 生成入库单据
                OpenOrderPakinParam openParam = new OpenOrderPakinParam();
                openParam.setOrderNo(orderNo);
                openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
                openParam.setOrderType("手动入库单");
                openParam.setOrderDetails(detlDtos);
                openService.pakinOrderCreate(openParam);
            } else {
                // 生成出库单据
                OpenOrderPakoutParam openParam = new OpenOrderPakoutParam();
                openParam.setOrderNo(orderNo);
                openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
                openParam.setOrderType("手动出库单");
                openParam.setOrderDetails(detlDtos);
                openService.pakoutOrderCreate(openParam);
            }
            OrderCheck order = this.selectByNo(orderNo);
            if (null == order) {
                throw new CoolException("生成单据失败");
            }
            if (!this.updateSettle(order.getId(), 4L, null)) {
                throw new CoolException("修改单据状态失败");
            }
            for (DetlDto detlDto : detlDtos) {
                // 修改订单明细数量
                if (!orderDetlService.increase(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
                    throw new CoolException("修改单据明细数量失败");
                }
                // 修改订单作业数量
                if (!orderDetlService.increaseWorkQty(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
                    throw new CoolException("修改单据作业数量失败");
                }
            }
        } catch (Exception e) {
            log.error("saveHandlerOrder===>>", e);
            return false;
        }
        return true;
    }
//    @Override
//    public boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List<WrkDetl> wrkDetls) {
//        try {
//            List<DetlDto> detlDtos = new ArrayList<>();
//            wrkDetls.forEach(wrkDetl -> {
//                detlDtos.add(new DetlDto(wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme()));
//            });
//            String orderNo = "HAND" + snowflakeIdWorker.nextId();
//            if (pakin) {
//                // 生成入库单据
//                OpenOrderPakinParam openParam = new OpenOrderPakinParam();
//                openParam.setOrderNo(orderNo);
//                openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
//                openParam.setOrderType("手动入库单");
//                openParam.setOrderDetails(detlDtos);
//                openService.pakinOrderCreate(openParam);
//            } else {
//                // 生成出库单据
//                OpenOrderPakoutParam openParam = new OpenOrderPakoutParam();
//                openParam.setOrderNo(orderNo);
//                openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
//                openParam.setOrderType("手动出库单");
//                openParam.setOrderDetails(detlDtos);
//                openService.pakoutOrderCreate(openParam);
//            }
//
//            OrderCheck order = this.selectByNo(orderNo);
//            if (null == order) {
//                throw new CoolException("生成单据失败");
//            }
//            if (!this.updateSettle(order.getId(), 4L, null)) {
//                throw new CoolException("修改单据状态失败");
//            }
//            for (DetlDto detlDto : detlDtos) {
//                // 修改订单明细数量
//                if (!orderDetlService.increase(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
//                    throw new CoolException("修改单据明细数量失败");
//                }
//                // 修改订单作业数量
//                if (!orderDetlService.increaseWorkQty(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
//                    throw new CoolException("修改单据作业数量失败");
//                }
//            }
//        } catch (Exception e) {
//            log.error("saveHandlerOrder===>>", e);
//            return false;
//        }
//        return true;
//    }
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -1,23 +1,20 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.OpenOrderPakinParam;
import com.zy.asrs.entity.param.OpenOrderPakoutParam;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.OrderListDTO;
import com.zy.asrs.mapper.OrderDetlMapper;
import com.zy.asrs.mapper.OrderMapper;
import com.zy.asrs.service.*;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.common.model.DetlDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -87,55 +84,55 @@
    }
    @Override
    public boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List<WrkDetl> wrkDetls) {
        try {
            List<DetlDto> detlDtos = new ArrayList<>();
            wrkDetls.forEach(wrkDetl -> {
                detlDtos.add(new DetlDto(wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme()));
            });
            String orderNo = "HAND" + snowflakeIdWorker.nextId();
            if (pakin) {
                // 生成入库单据
                OpenOrderPakinParam openParam = new OpenOrderPakinParam();
                openParam.setOrderNo(orderNo);
                openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
                openParam.setOrderType("手动入库单");
                openParam.setOrderDetails(detlDtos);
                openService.pakinOrderCreate(openParam);
            } else {
                // 生成出库单据
                OpenOrderPakoutParam openParam = new OpenOrderPakoutParam();
                openParam.setOrderNo(orderNo);
                openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
                openParam.setOrderType("手动出库单");
                openParam.setOrderDetails(detlDtos);
                openService.pakoutOrderCreate(openParam);
            }
            Order order = this.selectByNo(orderNo);
            if (null == order) {
                throw new CoolException("生成单据失败");
            }
            if (!this.updateSettle(order.getId(), 4L, null)) {
                throw new CoolException("修改单据状态失败");
            }
            for (DetlDto detlDto : detlDtos) {
                // 修改订单明细数量
                if (!orderDetlService.increase(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
                    throw new CoolException("修改单据明细数量失败");
                }
                // 修改订单作业数量
                if (!orderDetlService.increaseWorkQty(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
                    throw new CoolException("修改单据作业数量失败");
                }
            }
        } catch (Exception e) {
            log.error("saveHandlerOrder===>>", e);
            return false;
        }
        return true;
    }
//    @Override
//    public boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List<WrkDetl> wrkDetls) {
//        try {
//            List<DetlDto> detlDtos = new ArrayList<>();
//            wrkDetls.forEach(wrkDetl -> {
//                detlDtos.add(new DetlDto(wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme()));
//            });
//            String orderNo = "HAND" + snowflakeIdWorker.nextId();
//            if (pakin) {
//                // 生成入库单据
//                OpenOrderPakinParam openParam = new OpenOrderPakinParam();
//                openParam.setOrderNo(orderNo);
//                openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
//                openParam.setOrderType("手动入库单");
//                openParam.setOrderDetails(detlDtos);
//                openService.pakinOrderCreate(openParam);
//            } else {
//                // 生成出库单据
//                OpenOrderPakoutParam openParam = new OpenOrderPakoutParam();
//                openParam.setOrderNo(orderNo);
//                openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
//                openParam.setOrderType("手动出库单");
//                openParam.setOrderDetails(detlDtos);
//                openService.pakoutOrderCreate(openParam);
//            }
//
//            Order order = this.selectByNo(orderNo);
//            if (null == order) {
//                throw new CoolException("生成单据失败");
//            }
//            if (!this.updateSettle(order.getId(), 4L, null)) {
//                throw new CoolException("修改单据状态失败");
//            }
//            for (DetlDto detlDto : detlDtos) {
//                // 修改订单明细数量
//                if (!orderDetlService.increase(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
//                    throw new CoolException("修改单据明细数量失败");
//                }
//                // 修改订单作业数量
//                if (!orderDetlService.increaseWorkQty(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
//                    throw new CoolException("修改单据作业数量失败");
//                }
//            }
//        } catch (Exception e) {
//            log.error("saveHandlerOrder===>>", e);
//            return false;
//        }
//        return true;
//    }
    @Override
    public void remove(Long orderId) {