自动化立体仓库 - WMS系统
zhangc
2025-03-01 42b021b392b9752c4520425d245213ed262c9059
src/main/java/com/zy/asrs/controller/OrderController.java
@@ -1,7 +1,7 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.enums.SqlLike;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
@@ -31,7 +31,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@RestController
@@ -217,6 +216,39 @@
//        return R.ok(orderDetlService.selectPage(new Page<>(curr, limit), wrapper));
    }
    //  入库订单明细
    @RequestMapping(value = "/order/detls/pakin/page/auth/v2")
    @ManagerAuth
    public R orderDetlsV2(@RequestParam(defaultValue = "1") Integer curr,
                          @RequestParam(defaultValue = "100") Integer limit,
                          @RequestParam(required = false) String orderByField,
                          @RequestParam(required = false) String orderByType,
                          @RequestParam Map<String, Object> param) {
        EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        Object o = param.get("orderType");
        if (o != null) {
            String[] split = o.toString().split(",");
            if (split[0].equals("39")) {
                wrapper.andNew().like("matnr", "401", SqlLike.RIGHT).or().like("matnr", "402", SqlLike.RIGHT).andNew().in("source", split);
            } else {
                wrapper.in("source", split);
            }
            param.remove("orderType");
        }
        convert(param, wrapper);
//        List<DocType> pakins = docTypeService.selectList(new EntityWrapper<DocType>().eq("pakin", 1));
//        List<Long> docIds = new ArrayList<>();
//        for (DocType pakin : pakins) {
//            if (pakin.getDocId() != 32) {
//                docIds.add(pakin.getDocId());
//            }
//        }
        return R.ok(orderDetlService.selectPage(new Page<>(curr, limit), wrapper));
    }
    @RequestMapping(value = "/order/detls/pakin")
    @ManagerAuth
    public R orderDetlsIn(@RequestParam(defaultValue = "1") Integer curr,
@@ -271,10 +303,11 @@
        List<DocType> pakins = docTypeService.selectList(new EntityWrapper<DocType>().eq("pakin", 1));
        List<Long> docIds = new ArrayList<>();
        for (DocType pakin : pakins) {
            if (pakin.getDocId() == 36) {
            if (pakin.getDocId() == 36 || pakin.getDocId() == 39) {
                docIds.add(pakin.getDocId());
            }
        }
        wrapper.like("matnr", "50", SqlLike.RIGHT);
        wrapper.in("source", docIds);
        return R.ok(orderDetlService.selectPage(new Page<>(curr, limit), wrapper));
    }
@@ -320,10 +353,46 @@
                docIds.add(pakin.getDocId());
            }
        }
        wrapper.notLike("matnr", "401", SqlLike.RIGHT).notLike("matnr", "402", SqlLike.RIGHT);
        wrapper.in("source", docIds);
        Page<OrderDetl> page = orderDetlService.selectPage(new Page<>(curr, limit), wrapper);
        for (OrderDetl record : page.getRecords()) {
            Double sumAnfme = agvLocDetlService.getSumAnfmeDb(record.getMatnr(), record.getThreeCode(), 1);
            record.setStock(sumAnfme == null ? 0 : sumAnfme);
        }
        return R.ok(page);
    }
    @RequestMapping(value = "/order/bcpDb/detls/pakin/page/auth/v2")
    @ManagerAuth
    public R bcpDbOrderDetlsV2(@RequestParam(defaultValue = "1") Integer curr,
                               @RequestParam(defaultValue = "100") Integer limit,
                               @RequestParam(required = false) String orderByField,
                               @RequestParam(required = false) String orderByType,
                               @RequestParam Map<String, Object> param) {
        EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        Object o = param.get("orderType");
        if (o != null) {
            String[] split = o.toString().split(",");
            wrapper.in("source", split);
            param.remove("orderType");
        }
        convert(param, wrapper);
//        return R.ok(orderDetlService.getPakoutPage(toPage(curr, limit, param, OrderDetl.class)));
//        List<DocType> pakins = docTypeService.selectList(new EntityWrapper<DocType>().eq("pakout", 1));
//        List<Long> docIds = new ArrayList<>();
//        for (DocType pakin : pakins) {
//            if (pakin.getDocId() == 33) {
//                docIds.add(pakin.getDocId());
//            }
//        }
        wrapper.like("order_no", "DC", SqlLike.RIGHT);
        //     wrapper.in("source", docIds);
        Page<OrderDetl> page = orderDetlService.selectPage(new Page<>(curr, limit), wrapper);
        for (OrderDetl record : page.getRecords()) {
            Double sumAnfme = agvLocDetlService.getSumAnfmeDb2(record.getMatnr(), record.getThreeCode(), 1);
            record.setStock(sumAnfme == null ? 0 : sumAnfme);
        }
        return R.ok(page);
@@ -423,7 +492,7 @@
            if (param.getDocType() != 32) {
                orderDetl.setProcessSts(3);
            }
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch());
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getThreeCode().trim(), orderDetl.getProcessSts());
            if (DetlDto.has(list, dto)) {
                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getThreeCode().trim(), orderDetl.getDeadTime());
                Double anfme = item.getAnfme();
@@ -603,7 +672,7 @@
                List<DetlDto> dbList = new ArrayList<>();
                for (OrderDetl orderDetl : param.getOrderDetlList()) {
                    if (orderDetl.getProcessSts() != 1) continue;
                    DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch());
                    DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getThreeCode().trim(), orderDetl.getProcessSts());
                    if (DetlDto.has(dbList, dto)) {
                        OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getThreeCode().trim(), orderDetl.getDeadTime());
                        item.setAnfme(item.getAnfme() + orderDetl.getAnfme());
@@ -693,7 +762,7 @@
        List<DetlDto> list = new ArrayList<>();
        for (OrderDetl orderDetl : param.getOrderDetlList()) {
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getAnfme(), orderDetl.getProcessSts());
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getThreeCode(), orderDetl.getProcessSts());
            if (DetlDto.has(list, dto)) {
                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getThreeCode().trim(), orderDetl.getDeadTime());
                Double anfme = item.getAnfme();
@@ -1032,13 +1101,13 @@
            } else {
                odNo += "_O";
            }
            Date date = new Date();
            Order order = orderService.selectByNo(odNo);
            if (null == order) {
                order = new Order(
                        String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                        odNo,    // 订单编号
                        null,    // 单据日期
                        DateUtils.convert(date),    // 单据日期
                        docType.getDocId(),    // 单据类型
                        null,    // 项目编号
                        null,    //
@@ -1121,7 +1190,7 @@
                    order2 = new Order(
                            String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                            dbUuid,    // 订单编号
                            null,    // 单据日期
                            DateUtils.convert(date),    // 单据日期
                            33L,    // 单据类型
                            null,    // 项目编号
                            null,    //
@@ -1199,7 +1268,7 @@
                        order3 = new Order(
                                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                                dbUuid,    // 订单编号
                                null,    // 单据日期
                                DateUtils.convert(date),    // 单据日期
                                35L,    // 单据类型
                                null,    // 项目编号
                                null,    //
@@ -1320,6 +1389,165 @@
    }
    /**
     * excel导入
     */
    @PostMapping(value = "/order/excel/import3/auth")
    @ManagerAuth(memo = "单据Excel导入")
    @Transactional
    public R cstmrExcelImport3(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++) {
            Integer proSts = 0;
            Row row = sheet.getRow(i);
            //单据类型
            String docName = dataFormatter.formatCellValue(row.getCell(0)).trim();
            //单据编号
            String uuid = dataFormatter.formatCellValue(row.getCell(1)).trim();
            //物料号
            String matnr = dataFormatter.formatCellValue(row.getCell(2)).trim();
            //销售单号
            String csocode = dataFormatter.formatCellValue(row.getCell(3)).trim();
            //自由项
            String isocode = dataFormatter.formatCellValue(row.getCell(4)).trim();
            // 数量
            if (Cools.isEmpty(dataFormatter.formatCellValue(row.getCell(5)))) {
                continue;
            }
            Double anfme = Double.parseDouble(dataFormatter.formatCellValue(row.getCell(5)));
            Mat mat = matService.selectByMatnr(matnr);
            if (null == mat) {
                throw new CoolException(matnr + "商品编码的商品不存在,请重新导入!");
            }
            DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", docName));
            String odNo = uuid;
            if (docType.getPakin() == 1) {
                odNo += "_I";
            } else {
                odNo += "_O";
            }
            if (docName.contains("调拨单")) {
                odNo = "DB" + odNo;
            } else if (docName.contains("加工单")) {
                odNo = "JG" + odNo;
            } else {
                if (docType.getPakin() == 1) {
                    odNo += "_I";
                } else {
                    odNo += "_O";
                }
            }
            Date date = new Date();
            Order order = orderService.selectByNo(odNo);
            if (null == order) {
                order = new Order(
                        String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                        odNo,    // 订单编号
                        DateUtils.convert(date),    // 单据日期
                        docType.getDocId(),    // 单据类型
                        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    // 备注
                );
                if (!orderService.insert(order)) {
                    throw new CoolException("生成单据主档失败,请重新导入!");
                }
            } else {
                //  有原订单在的情况
                DocType orderType = docTypeService.selectById(order.getDocType());
                if (!orderType.getDocName().equals(docName)) {
                    throw new CoolException("新订单:" + uuid + " 与系统内的订单号相同,单据类型不同。请确认新订单单据类型!");
                }
                order.setSettle(order.getSettle() == 1L ? 1L : 2L);
                orderService.updateById(order);
            }
            OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), matnr, null, csocode, isocode);
            if (orderDetl == null) {
                orderDetl = new OrderDetl();
                orderDetl.sync(mat);
                orderDetl.setSource(docType.getDocId().intValue());
                orderDetl.setBatch(null);
                orderDetl.setAnfme(anfme);
                orderDetl.setOrderId(order.getId());
                orderDetl.setOrderNo(order.getOrderNo());
                orderDetl.setCreateBy(userId);
                orderDetl.setCreateTime(now);
                orderDetl.setUpdateBy(userId);
                orderDetl.setUpdateTime(now);
                orderDetl.setThreeCode(csocode);
                orderDetl.setDeadTime(isocode);
                orderDetl.setStatus(1);
                orderDetl.setQty(0.0D);
                orderDetl.setProcessSts(proSts);
                if (!orderDetlService.insert(orderDetl)) {
                    throw new CoolException("生成单据明细失败,请重新导入!");
                }
            } else {
                if (anfme < 0) {
                    throw new CoolException("订单数量不允许为负数!");
                }
                if (!orderDetlService.increaseAnfme(order.getId(), matnr, null, anfme, csocode, isocode)) {
                    throw new CoolException("生成单据明细失败,请重新导入!");
                }
            }
        }
        return R.ok("导入成功");
    }
//    @RequestMapping(value = "/order/sync")
//    @Transactional
//    public R sync() {