自动化立体仓库 - WMS系统
#
whycq
2025-01-08 d3cb0e841e6585aa84a45f18bb30965db8d1a6aa
src/main/java/com/zy/asrs/controller/OrderController.java
@@ -149,7 +149,8 @@
                now,    // 添加时间
                getUserId(),    // 修改人员
                now,    // 修改时间
                null    // 备注
                null,    // 备注
                null
        );
        if (!orderService.insert(order)) {
            throw new CoolException("保存订单主档失败");
@@ -159,9 +160,9 @@
            if (orderDetl.getBatch() == null) {
                orderDetl.setBatch("");
            }
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch());
            if (DetlDto.has(list, dto)) {
                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch());
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBomCode(),orderDetl.getThreeCode());
            if (DetlDto.has2(list, dto)) {
                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBomCode(),orderDetl.getThreeCode());
                item.setAnfme(item.getAnfme() + orderDetl.getAnfme());
                if (!orderDetlService.updateById(item)) {
                    throw new CoolException("保存订单明细档失败");
@@ -175,6 +176,7 @@
                orderDetl.setUpdateBy(getUserId());
                orderDetl.setUpdateTime(now);
                orderDetl.setStatus(1);
                orderDetl.setSource(param.getDocType().intValue());
                orderDetl.setQty(0.0D);
                if (!orderDetlService.insert(orderDetl)) {
                    throw new CoolException("保存订单明细档失败");
@@ -212,9 +214,9 @@
        // 2.重组数据
        List<DetlDto> list = new ArrayList<>();
        for (OrderDetl orderDetl : param.getOrderDetlList()) {
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch());
            if (DetlDto.has(list, dto)) {
                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch());
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBomCode(),orderDetl.getThreeCode());
            if (DetlDto.has2(list, dto)) {
                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBomCode(),orderDetl.getThreeCode());
                item.setAnfme(item.getAnfme() + orderDetl.getAnfme());
                if (!orderDetlService.updateById(item)) {
                    throw new CoolException("保存订单明细档失败");
@@ -228,6 +230,7 @@
                orderDetl.setUpdateBy(getUserId());
                orderDetl.setUpdateTime(now);
                orderDetl.setStatus(1);
                orderDetl.setSource(param.getDocType().intValue());
                orderDetl.setQty(0.0D);
                if (!orderDetlService.insert(orderDetl)) {
                    throw new CoolException("保存订单明细档失败");
@@ -395,16 +398,18 @@
            String maktx = dataFormatter.formatCellValue(row.getCell(1));
            // 商品编码
            String matnr = dataFormatter.formatCellValue(row.getCell(2));
            // 商品编码
            String batch = dataFormatter.formatCellValue(row.getCell(3));
            // 数量
            Double anfme = Double.parseDouble(dataFormatter.formatCellValue(row.getCell(3)));
            Double anfme = Double.parseDouble(dataFormatter.formatCellValue(row.getCell(4)));
            // 下单时间
            String timeStr = dataFormatter.formatCellValue(row.getCell(4));
            String timeStr = dataFormatter.formatCellValue(row.getCell(5));
            if (Cools.isEmpty(timeStr)) {
                timeStr = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(now);
            }
            // 单据类型
            Long orderType = Long.parseLong(dataFormatter.formatCellValue(row.getCell(5)));
            Long orderType = Long.parseLong(dataFormatter.formatCellValue(row.getCell(6)));
            Date time = null;
            try {
                time = DateUtils.convert(timeStr, DateUtils.yyyyMMddHHmmss_F);
@@ -457,7 +462,8 @@
                        now,    // 添加时间
                        userId,    // 修改人员
                        now,    // 修改时间
                        null    // 备注
                        null,    // 备注
                        null
                );
                if (!orderService.insert(order)) {
                    throw new CoolException("生成单据主档失败,请重新导入!");
@@ -468,7 +474,7 @@
            if (orderDetl == null) {
                orderDetl = new OrderDetl();
                orderDetl.sync(mat);
                orderDetl.setBatch(null);
                orderDetl.setBatch(batch);
                orderDetl.setAnfme(anfme);
                orderDetl.setOrderId(order.getId());
                orderDetl.setOrderNo(order.getOrderNo());
@@ -490,4 +496,141 @@
        return R.ok("导入成功");
    }
    /**
     * excel导入
     */
    @PostMapping(value = "/order/excel/import2/auth")
    @ManagerAuth(memo = "销售单Excel导入")
    @Transactional
    public R cstmrExcelImport2(MultipartFile file) throws IOException {
        InputStream inStream = file.getInputStream();
        String fileMime = file.getContentType();
        int excelVersion = 2007;
        if ("application/vnd.ms-excel".equals(fileMime)) {
            excelVersion = 2003;
        }
        Workbook book = null;
        try {
            if (excelVersion == 2003) {
                book = new HSSFWorkbook(inStream);
            }
            else {  // 当 excel 是 2007 时
                book = new XSSFWorkbook(inStream);
            }
        } catch (Exception e) {
            log.error("fail", e);
            return R.error("导入文件格式错误,请使用xls后缀的文件!");
        }
        Sheet sheet = book.getSheetAt(0);
        int totalRows = sheet.getLastRowNum() + 1;    // 总
        Long userId = getUserId();
        Date now = new Date();
        DataFormatter dataFormatter = new DataFormatter();
        for (int i = 1; i < totalRows; i++) {
            Row row = sheet.getRow(i);
            // 单据编号
            String uuid = dataFormatter.formatCellValue(row.getCell(0));
            // 销售单号
            String threeCode = dataFormatter.formatCellValue(row.getCell(1));
            // 部件号
            String unitNum = dataFormatter.formatCellValue(row.getCell(2));
            // 组件号
            String bomNum = dataFormatter.formatCellValue(row.getCell(3));
            // 批号
            String batch = dataFormatter.formatCellValue(row.getCell(4));
            // 商品编码
            String matnr = dataFormatter.formatCellValue(row.getCell(6));
            // 数量
            Double anfme = Double.parseDouble(dataFormatter.formatCellValue(row.getCell(7)));
            // 单据类型
            Long orderType = Long.parseLong(dataFormatter.formatCellValue(row.getCell(8)));
            // 下单时间
            String timeStr = dataFormatter.formatCellValue(row.getCell(9));
            Date time = null;
            try {
                time = DateUtils.convert(timeStr, DateUtils.yyyyMMddHHmmss_F);
            } catch (Exception e) {
                throw new CoolException("第" + i + "行下的那时间解析失败,请重新导入!");
            }
            Mat mat = matService.selectByMatnr(matnr);
            if (null == mat) {
                throw new CoolException(matnr + "商品编码的商品不存在,请重新导入!");
            }
            Order order = orderService.selectByNo(uuid);
            if (null == order) {
                order = new Order(
                        String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                        uuid,    // 订单编号
                        timeStr,    // 单据日期
                        orderType,    // 单据类型
                        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,    // 状态
                        userId,    // 添加人员
                        now,    // 添加时间
                        userId,    // 修改人员
                        now,    // 修改时间
                        null,    // 备注
                        threeCode
                );
                if (!orderService.insert(order)) {
                    throw new CoolException("生成单据主档失败,请重新导入!");
                }
            }
            OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), matnr, batch,bomNum,threeCode);
            if (orderDetl == null) {
                orderDetl = new OrderDetl();
                orderDetl.sync(mat);
                orderDetl.setBatch(batch);
                orderDetl.setAnfme(anfme);
                orderDetl.setOrderId(order.getId());
                orderDetl.setOrderNo(order.getOrderNo());
                orderDetl.setCreateBy(userId);
                orderDetl.setCreateTime(now);
                orderDetl.setUpdateBy(userId);
                orderDetl.setUpdateTime(now);
                orderDetl.setSource(30);
                orderDetl.setStatus(1);
                orderDetl.setBomCode(bomNum);
                orderDetl.setThreeCode(threeCode);
                orderDetl.setQty(0.0D);
                if (!orderDetlService.insert(orderDetl)) {
                    throw new CoolException("生成单据明细失败,请重新导入!");
                }
            } else {
                if(!orderDetlService.increaseAnfme2(order.getId(), matnr, batch, anfme,bomNum,threeCode)) {
                    throw new CoolException("生成单据明细失败,请重新导入!");
                }
            }
        }
        return R.ok("导入成功");
    }
}