自动化立体仓库 - WMS系统
lsh
2025-05-27 07dad0e9ef89346439cfcfb5978b0f1cb8f1b512
新增PDA并板操作
14个文件已修改
5个文件已添加
675 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MobileController.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/AdjDetl.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/PickMatParam.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/PickMergeDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/PickMergeOrderDto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/WarehouseOutPickMergeParam.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/result/OrderNameListDto.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocDetlService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MobileService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderDetlService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/LocDto.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/AdjDetlMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/adjDetl/adjDetl.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -8,10 +8,7 @@
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.GDYKConfirmGoodsParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.param.OffSaleParam;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.MobileAdjustResult;
import com.zy.asrs.mapper.ManLocDetlMapper;
import com.zy.asrs.service.*;
@@ -23,6 +20,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.*;
/**
@@ -472,5 +470,166 @@
        return R.ok().add(vos);
    }
    //------------------------------------------------------------------------------------------------------------------------------------------------并板功能新增---------------------------------------------------------------------------------------------
    /**
     * 新增拣料途中并板功能
     */
    @RequestMapping("/barcode/list/pick")
    @ManagerAuth(memo = "拣料入库途中并板")
    @Transactional
    public R orderOutListOrderPick(@RequestBody String barcode) {
        ArrayList<WrkMast> wrkMastArrayList = new ArrayList<>();
        if (Cools.isEmpty(barcode) || barcode.isEmpty()) {
            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
                    .eq("wrk_sts", 14L)
                    .eq("io_type", 103));
            wrkMastArrayList.addAll(wrkMasts);
        } else {
            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
                    .like("barcode", barcode)
                    .eq("wrk_sts", 14L)
                    .eq("io_type", 103));
            wrkMastArrayList.addAll(wrkMasts);
        }
        return R.ok().add(wrkMastArrayList);
    }
    @RequestMapping("/pick/mat/list")
    @ManagerAuth(memo = "获取并板物料")
    public R pickMats(@RequestParam(required = false) String matnr, @RequestParam(required = false) String orderNo) {
        List<DocType> docTypes = docTypeService.selectList(new EntityWrapper<DocType>().eq("pakin", 1));
        ArrayList<Long> typeList = new ArrayList<>();
        for (DocType docType : docTypes) {
            typeList.add(docType.getDocId());
        }
        EntityWrapper<Order> wrapper = new EntityWrapper<>();
        wrapper.eq("status", 1);
        wrapper.in("doc_type", typeList);
        List<Order> orders = orderService.selectList(wrapper);
        ArrayList<Long> orderIds = new ArrayList<>();
        for (Order order : orders) {
            orderIds.add(order.getId());
        }
        //搜索明细
        EntityWrapper<OrderDetl> wrapper1 = new EntityWrapper<>();
        wrapper1.eq("status", 1);
        wrapper1.in("order_id", orderIds);
        wrapper1.orderBy("create_time", false);
        if (!Cools.isEmpty(matnr)) {
            wrapper1.like("matnr", matnr);
        }
        if (!Cools.isEmpty(orderNo)) {
            wrapper1.like("order_no", orderNo);
        }
        List<OrderDetl> list = orderDetlService.selectList(wrapper1);
        ArrayList<PickMatParam> maps = new ArrayList<>();
        for (OrderDetl orderDetl : list) {
            //剩余可用数量
            double count = orderDetl.getAnfme() - orderDetl.getWorkQty();
            if (count <= 0) {
                continue;
            }
            PickMatParam matParam = new PickMatParam();
            matParam.setMatnr(orderDetl.getMatnr());
            matParam.setMaktx(orderDetl.getMaktx());
            matParam.setBatch(orderDetl.getBatch());
            matParam.setOrderNo(orderDetl.getOrderNo());
            matParam.setOrderId(orderDetl.getOrderId());
            matParam.setCount(count);
            matParam.setUseCount(count);
            ////"outOrderNo", "luHao", "packing", "sPgNO", "proType","color"};
            matParam.setOutOrderNo(orderDetl.getOutOrderNo());
            matParam.setLuHao(orderDetl.getLuHao());
            matParam.setPacking(orderDetl.getPacking());
            matParam.setProType(orderDetl.getProType());
            matParam.setSPgNO(orderDetl.getSPgNO());
            matParam.setColor(orderDetl.getColor());
            maps.add(matParam);
        }
        return R.ok().add(maps);
    }
    @RequestMapping(value = "/order/list/orderNo")
    public R orderListorderNo(@RequestParam String orderNo) {
        //数量修改成为完成数量
        List<OrderDetl> orderDetl1 = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("orderNo", orderNo));
        List<OrderDetl> orderDetls= new ArrayList<OrderDetl>();
        for (OrderDetl o: orderDetl1) {
            BigDecimal c1 = new BigDecimal(o.getEnableQty()).setScale(2,BigDecimal.ROUND_HALF_UP);
            o.setAnfme(c1.doubleValue());
            if (o.getAnfme().equals(0.0)){
                continue;
            }
            orderDetls.add(o);
        }
        return R.ok(orderDetls);
    }
    @RequestMapping(value = "/order/list/all")
    @ManagerAuth
    public R orderList() {
        return R.ok(orderService.selectAllorderNo());
    }
    @RequestMapping(value = "/orderDetl/forOrderNo/mergePakin/v1")
    @ManagerAuth
    public R forOrderNoMergePakinV1(@RequestParam String orderNo) {
        List<DocType> docTypes = docTypeService.selectList(new EntityWrapper<DocType>().eq("pakin", 1));
        ArrayList<Long> docTypeIds = new ArrayList<>();
        for (DocType docType : docTypes) {
            docTypeIds.add(docType.getDocId());
        }
        if (docTypeIds.isEmpty()) {
            return R.error("单据类型不存在");
        }
        List<Order> orders = orderService.selectList(new EntityWrapper<Order>().in("doc_type", docTypeIds).in("settle", 0, 1, 2));
        if (orders.isEmpty()) {
            return R.error("未查询到订单");
        }
        ArrayList<Long> orderIds = new ArrayList<>();
        for (Order order : orders) {
            orderIds.add(order.getId());
        }
        List<OrderDetl> orderDetlList = orderDetlService.selectList(new EntityWrapper<OrderDetl>()
                .in("order_id", orderIds)
                .like("order_no", orderNo)
        );
        if (Cools.isEmpty(orderDetlList)){
            return R.error("未查询到此订单此物料数据");
        }
        ArrayList<OrderDetl> orderDetls = new ArrayList<>();
        for(OrderDetl orderDetl:orderDetlList){
            double count = orderDetl.getAnfme() - orderDetl.getWorkQty();
            if (count <= 0D) {
                continue;
            }
            orderDetl.setAnfme(count);
            orderDetls.add(orderDetl);
        }
        return R.ok(orderDetls);
    }
    /**
     * 拣料途中并板
     *
     * @param param
     * @return
     */
    @RequestMapping("/pda/WarehouseOutPickMerge/v1")
    @ManagerAuth
    public R WarehouseOutPickMergeV1(@RequestBody WarehouseOutPickMergeParam param) {
        return mobileService.WarehouseOutPickMergeV1(param,getUserId());
    }
}
src/main/java/com/zy/asrs/entity/AdjDetl.java
@@ -132,6 +132,21 @@
    @TableField("appe_time")
    private Date appeTime;
    /**
     * 订单号
     */
    @ApiModelProperty(value= "订单号")
    @TableField("order_no")
    private String orderNo;
    /**
     * 扩充
     * "outOrderNo", "luHao", "packing", "sPgNO", "proType","color"};
     */
    @ApiModelProperty(value= "扩充")
    @TableField("expand")
    private String expand;
    public AdjDetl() {}
    public AdjDetl(String locNo, String matnr, String batch, Double oriCtns, Double oriQty, Double oriWt, Double adjCtns, Double adjQty, Double adjWt, String memo, Long modiUser, Date modiTime, Long appeUser, Date appeTime) {
@@ -201,5 +216,40 @@
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
    }
    //"outOrderNo", "luHao", "packing", "sPgNO", "proType","color"};
    public String setExpand(LocDetl locDetl){
        if (Cools.isEmpty(locDetl.getOutOrderNo())){
            this.expand = " "+"_";
        }else {
            this.expand = locDetl.getOutOrderNo()+"_";
        }
        if (Cools.isEmpty(locDetl.getLuHao())){
            this.expand = this.expand+" "+"_";
        }else {
            this.expand = this.expand+locDetl.getLuHao()+"_";
        }
        if (Cools.isEmpty(locDetl.getPacking())){
            this.expand = this.expand+" "+"_";
        }else {
            this.expand = this.expand+locDetl.getPacking()+"_";
        }
        if (Cools.isEmpty(locDetl.getSPgNO())){
            this.expand = this.expand+" "+"_";
        }else {
            this.expand = this.expand+locDetl.getSPgNO()+"_";
        }
        if (Cools.isEmpty(locDetl.getProType())){
            this.expand = this.expand+" "+"_";
        }else {
            this.expand = this.expand+locDetl.getProType()+"_";
        }
        if (Cools.isEmpty(locDetl.getColor())){
            this.expand = this.expand+" "+"_";
        }else {
            this.expand = this.expand+locDetl.getColor()+"_";
        }
        return this.expand;
    }
}
src/main/java/com/zy/asrs/entity/param/PickMatParam.java
New file
@@ -0,0 +1,33 @@
package com.zy.asrs.entity.param;
import lombok.Data;
@Data
public class PickMatParam {
    private String matnr;
    private String maktx;
    private String batch;
    private String orderNo;
    private Long orderId;
    private Double count;
    private Double useCount;
    ////"outOrderNo", "luHao", "packing", "sPgNO", "proType","color"};
    private  String outOrderNo;
    private String luHao;
    private String packing;
    private String sPgNO;
    private String proType;
    private String color;
}
src/main/java/com/zy/asrs/entity/param/PickMergeDto.java
New file
@@ -0,0 +1,17 @@
package com.zy.asrs.entity.param;
import com.zy.asrs.entity.LocDetl;
import lombok.Data;
import java.util.List;
@Data
public class PickMergeDto {
    private Double originAnfme;
    private LocDetl locDetl;
    private List<PickMergeOrderDto> orders;
}
src/main/java/com/zy/asrs/entity/param/PickMergeOrderDto.java
New file
@@ -0,0 +1,16 @@
package com.zy.asrs.entity.param;
import lombok.Data;
@Data
public class PickMergeOrderDto {
    private String orderNo;
    private Double anfme;
    public PickMergeOrderDto(String orderNo, Double anfme) {
        this.orderNo = orderNo;
        this.anfme = anfme;
    }
}
src/main/java/com/zy/asrs/entity/param/WarehouseOutPickMergeParam.java
New file
@@ -0,0 +1,21 @@
package com.zy.asrs.entity.param;
import com.zy.asrs.entity.OrderDetl;
import lombok.Data;
import java.util.List;
@Data
public class WarehouseOutPickMergeParam {
    // 单据编号
    private String orderNo;
    // 库位编号
    private String locNo;
    //组托物料
    private List<OrderDetl> combMats;
}
src/main/java/com/zy/asrs/entity/result/OrderNameListDto.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.entity.result;
import lombok.Data;
@Data
public class OrderNameListDto {
    private String order_no;
}
src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -88,4 +88,8 @@
    List<Map<String, Object>> selectLocDetlUnilateralMoveShuttleMap(Integer crnNo);
    List<LocDetl> selectLocDetlUnilateralMoveShuttle(String matnr, String batch, String grade, Integer crnNo);
    /**
     * 修改库存明细数量,增加库存
     */
    boolean updateAnfmeAdd(Double anfme, String locNo, LocDetl locDetl);
}
src/main/java/com/zy/asrs/service/MobileService.java
@@ -1,12 +1,14 @@
package com.zy.asrs.service;
import com.alibaba.fastjson.JSONObject;
import com.core.common.R;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.param.OffSaleParam;
import com.zy.asrs.entity.param.WarehouseOutPickMergeParam;
import java.util.Date;
@@ -38,4 +40,5 @@
    void stockOut(OrderDetl orderDetl, BasDevp staNo, LocDetl locDetl,
                  Double curOutQty, Integer ioType, Long userId, Date now);
    R WarehouseOutPickMergeV1(WarehouseOutPickMergeParam param, Long userId);
}
src/main/java/com/zy/asrs/service/OrderDetlService.java
@@ -54,4 +54,6 @@
    OrderDetl selectItem(LocDto locDto);
    OrderDetl selectItem(WrkDetl wrkDetl);
    boolean increaseWorkQtyByOrderNo(String orderNo, OrderDetl orderDetl, Double workQty);
    boolean increaseQtyByOrderNo1(String orderNo, OrderDetl orderDetl, Double qty);
}
src/main/java/com/zy/asrs/service/OrderService.java
@@ -5,6 +5,7 @@
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.result.OrderNameListDto;
import java.util.List;
@@ -31,5 +32,6 @@
    Order selectOrderMoveStatus();
    Order selectOrderMoveStatusInitial();
    public List<OrderNameListDto> selectAllorderNo();
}
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -71,6 +71,20 @@
    }
    @Override
    public boolean updateAnfmeAdd(Double anfme, String locNo, LocDetl locDetl) {
        List<LocDetl> locDetls = this.baseMapper.selectItem3(locNo, locDetl.getMatnr());
        if (locDetls.isEmpty()) {
            return false;
        }
        for (LocDetl locDetl1 : locDetls) {
            if (MatCompareUtils.compare(locDetl1, locDetl)) {
                return baseMapper.updateAnfme(anfme, locNo, locDetl) > 0;
            }
        }
        return false;
    }
    @Override
    public boolean updateLocNo(String newLocNo, String oldLocNo) {
        return baseMapper.updateLocNo(newLocNo, oldLocNo) > 0;
    }
@@ -202,6 +216,8 @@
        return this.baseMapper.selectLocDetlUnilateralMoveShuttleN(matnr, batch, grade);
    }
    @Override
    public LocDetl selectItem(String locNo, WrkDetl wrkDetl) {
        List<LocDetl> locDetls = this.baseMapper.selectItem3(locNo, wrkDetl.getMatnr());
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -5,25 +5,24 @@
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.BaseRes;
import com.core.common.Cools;
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.CombParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.param.OffSaleParam;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.mapper.ManLocDetlMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MatCompareUtils;
import com.zy.common.model.DetlDto;
import com.zy.common.model.LocDto;
import com.zy.common.service.CommonService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.*;
/**
 * 移动端服务核心类
@@ -71,6 +70,8 @@
    private ManLocDetlService manLocDetlService;
    @Autowired
    private ManLocDetlMapper manLocDetlMapper;
    @Autowired
    private AdjDetlService adjDetlService;
    @Override
@@ -630,4 +631,235 @@
            throw new CoolException(locDetl.getLocNo() + "库位不是在库状态");
        }
    }
    /**
     * 拣料途中并板直接加到库存中
     * @param param
     * @param userId
     * @return
     */
    @Override
    @Transactional
    public R WarehouseOutPickMergeV1(WarehouseOutPickMergeParam param, Long userId) {
        //判断库位状态
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", param.getLocNo()));
        if (Cools.isEmpty(locMast)){
            return R.error("该库位不存在");
        }
        if (!locMast.getLocSts().equals("P")){
            return R.error("该库位状态为:"+locMast.getLocSts()+",不满足拣料途中并板条件!!!");
        }
        HashMap<String, OrderDetl> mapData = new HashMap<>();
        for (OrderDetl orderDetl : param.getCombMats()) {
            String key = orderDetl.getMatnr();
//            private static final String[] sameFields = {"matnr", "batch", "outOrderNo", "luHao", "packing", "sPgNO", "proType","color"};
            if (!Cools.isEmpty(orderDetl.getBatch())) {
                key += "_" + orderDetl.getBatch();
            }
            if (!Cools.isEmpty(orderDetl.getOutOrderNo())) {
                key += "_" + orderDetl.getOutOrderNo();
            }
            if (!Cools.isEmpty(orderDetl.getLuHao())) {
                key += "_" + orderDetl.getLuHao();
            }
            if (!Cools.isEmpty(orderDetl.getPacking())) {
                key += "_" + orderDetl.getPacking();
            }
            if (!Cools.isEmpty(orderDetl.getSPgNO())) {
                key += "_" + orderDetl.getSPgNO();
            }
            if (!Cools.isEmpty(orderDetl.getProType())) {
                key += "_" + orderDetl.getProType();
            }
            if (!Cools.isEmpty(orderDetl.getColor())) {
                key += "_" + orderDetl.getColor();
            }
            OrderDetl value = mapData.get(key);
            if(value == null){
                mapData.put(key, orderDetl);
            }else {
                value.setAnfme(value.getAnfme() + orderDetl.getAnfme());
                mapData.put(key, value);
            }
        }
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
        HashMap<String, PickMergeDto> locData = new HashMap<>();
        for (LocDetl locDetl : locDetls) {
            String matKey = locDetl.getMatnr();
            if (!Cools.isEmpty(locDetl.getBatch())) {
                matKey += "_" + locDetl.getBatch();
            }
            if (!Cools.isEmpty(locDetl.getOutOrderNo())) {
                matKey += "_" + locDetl.getOutOrderNo();
            }
            if (!Cools.isEmpty(locDetl.getLuHao())) {
                matKey += "_" + locDetl.getLuHao();
            }
            if (!Cools.isEmpty(locDetl.getPacking())) {
                matKey += "_" + locDetl.getPacking();
            }
            if (!Cools.isEmpty(locDetl.getSPgNO())) {
                matKey += "_" + locDetl.getSPgNO();
            }
            if (!Cools.isEmpty(locDetl.getProType())) {
                matKey += "_" + locDetl.getProType();
            }
            if (!Cools.isEmpty(locDetl.getColor())) {
                matKey += "_" + locDetl.getColor();
            }
            PickMergeDto dto = new PickMergeDto();
            dto.setOriginAnfme(locDetl.getAnfme());
            dto.setLocDetl(locDetl);
            dto.setOrders(new ArrayList<>());
            locData.put(matKey, dto);
        }
        for (Map.Entry<String, OrderDetl> entry : mapData.entrySet()) {
            OrderDetl orderDetl = entry.getValue();
            LocDetl locDetl = new LocDetl();
            locDetl.sync(orderDetl);
            locDetl.setLocNo(param.getLocNo());
            locDetl.setBarcode(locMast.getBarcode());
            Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr",locDetl.getMatnr()));
            locDetl.setMaktx(mat.getMaktx());
            String matKey = locDetl.getMatnr();
            if (!Cools.isEmpty(locDetl.getBatch())) {
                matKey += "_" + locDetl.getBatch();
            }
            if (!Cools.isEmpty(locDetl.getOutOrderNo())) {
                matKey += "_" + locDetl.getOutOrderNo();
            }
            if (!Cools.isEmpty(locDetl.getLuHao())) {
                matKey += "_" + locDetl.getLuHao();
            }
            if (!Cools.isEmpty(locDetl.getPacking())) {
                matKey += "_" + locDetl.getPacking();
            }
            if (!Cools.isEmpty(locDetl.getSPgNO())) {
                matKey += "_" + locDetl.getSPgNO();
            }
            if (!Cools.isEmpty(locDetl.getProType())) {
                matKey += "_" + locDetl.getProType();
            }
            if (!Cools.isEmpty(locDetl.getColor())) {
                matKey += "_" + locDetl.getColor();
            }
            PickMergeDto dto = locData.get(matKey);
            if (dto == null) {
                ArrayList<PickMergeOrderDto> orders = new ArrayList<>();
                orders.add(new PickMergeOrderDto(locDetl.getOrderNo(), locDetl.getAnfme()));
                dto = new PickMergeDto();
                dto.setOriginAnfme(0.0);
                dto.setLocDetl(locDetl);
                dto.setOrders(orders);
                locData.put(matKey, dto);
            }else {
                LocDetl detl = dto.getLocDetl();
                List<PickMergeOrderDto> orders = dto.getOrders();
                detl.setAnfme(detl.getAnfme() + locDetl.getAnfme());
                orders.add(new PickMergeOrderDto(locDetl.getOrderNo(), locDetl.getAnfme()));
                dto.setLocDetl(detl);
                dto.setOrders(orders);
                locData.put(matKey, dto);
            }
        }
        for (Map.Entry<String, PickMergeDto> entry : locData.entrySet()) {
            PickMergeDto dto = entry.getValue();
            Double originAnfme = dto.getOriginAnfme();
            LocDetl locDetl = dto.getLocDetl();
            List<PickMergeOrderDto> orders = dto.getOrders();
            Boolean b=false;
            for (LocDetl detl : locDetls) {
                b= MatCompareUtils.compare(detl, locDetl);
                if (b) break;
            }
            if (b){
                if (!locDetlService.updateAnfmeAdd(locDetl.getAnfme(),locDetl.getLocNo(),locDetl)) {
                    throw new CoolException("并板库存更新失败");
                }
            }else {
                locDetl.setZpallet(locDetl.getBarcode());
                if (!locDetlService.insert(locDetl)) {
                    throw new CoolException("并板库存插入失败");
                }
            }
            if (!orders.isEmpty()){
                for (PickMergeOrderDto orderDto : orders) {
                    Order order = orderService.selectByNo(orderDto.getOrderNo());
                    if (Cools.isEmpty(order)){
                        continue;
                    }
                    if (order.getSettle() == 1){
                        orderService.updateSettle(order.getId(), 2L, 9527L);
                    }
                    LocDto locDto = new LocDto(locDetl.getOrderNo(),locDetl.getMatnr(),locDetl.getBatch(),locDetl.getOutOrderNo(),locDetl.getLuHao(),locDetl.getPacking(),locDetl.getSPgNO(),locDetl.getProType(),locDetl.getColor());
                    OrderDetl orderDetl = orderDetlService.selectItem(locDto);
                    if (Cools.isEmpty(orderDetl)){
                        continue;
                    }
                    if (orderDetl.getAnfme() < (orderDetl.getWorkQty() + orderDto.getAnfme())) {
                        throw new CoolException("并板数量出错,订单剩余出库数量小于已出库数量与将并板数量之和!!!");
                    }
                    // 修改订单明细作业数量
                    if (!orderDetlService.increaseWorkQtyByOrderNo(orderDto.getOrderNo(), orderDetl, orderDto.getAnfme())) {
                        throw new CoolException("修改单据明细工作数量失败");
                    }
                    // 修改订单明细完成数量
                    if (!orderDetlService.increaseQtyByOrderNo1(orderDto.getOrderNo(), orderDetl, orderDto.getAnfme())) {
                        throw new CoolException("修改单据明细完成数量失败");
                    }
                    // 修改订单状态 作业中 ===>> 已完成
                    orderService.checkComplete(orderDto.getOrderNo());
                    try {
                        //处理库存信息
                        AdjDetl adjDetl = new AdjDetl();
                        adjDetl.setLocNo(locDetl.getLocNo());
                        adjDetl.setMatnr(locDetl.getMatnr());
                        adjDetl.setBatch(locDetl.getBatch());
                        adjDetl.setOriQty(originAnfme);
                        adjDetl.setAdjQty(locDetl.getAnfme());
                        adjDetl.setMemo("拣料途中并板");
                        adjDetl.setModiUser(userId);
                        adjDetl.setAppeUser(userId);
                        adjDetl.setAppeTime(new Date());
                        adjDetl.setModiTime(new Date());
                        adjDetl.setExpand(locDetl);//对扩充进行拼接
                        adjDetl.setOrderNo(order.getOrderNo());
                        if (!adjDetlService.save(adjDetl,userId)) {
                            throw new CoolException("保存库存调整记录失败");
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                        throw new CoolException("更新库存数据出错" + e.getMessage());
                    }
                }
            }
        }
        return R.ok();
    }
}
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java
@@ -247,4 +247,32 @@
            return null;
        }
    }
    @Override
    public boolean increaseWorkQtyByOrderNo(String orderNo, OrderDetl orderDetl, Double workQty) {
        List<OrderDetl> detlList = this.baseMapper.listByOrderNo(orderNo);
        if (detlList == null || detlList.isEmpty()) {
            return false;
        }
        for (OrderDetl orderDetl1 : detlList) {
            if (MatCompareUtils.compare(orderDetl1, orderDetl)) {
                return baseMapper.increaseWorkQty(orderDetl.getId(), workQty) > 0;
            }
        }
        return false;
    }
    @Override
    public boolean increaseQtyByOrderNo1(String orderNo, OrderDetl orderDetl, Double qty) {
        List<OrderDetl> detlList = this.baseMapper.listByOrderNo(orderNo);
        if (detlList == null || detlList.isEmpty()) {
            return false;
        }
        for (OrderDetl orderDetl1 : detlList) {
            if (MatCompareUtils.compare(orderDetl1, orderDetl)) {
                return baseMapper.increaseQtyById(orderDetl.getId(), qty) > 0;
            }
        }
        return false;
    }
}
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -5,8 +5,10 @@
import com.core.common.Cools;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.result.OrderNameListDto;
import com.zy.asrs.mapper.OrderDetlMapper;
import com.zy.asrs.mapper.OrderMapper;
import com.zy.asrs.service.*;
@@ -14,6 +16,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@@ -32,6 +35,8 @@
    private DocTypeService docTypeService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private OrderService orderService;
    @Override
    public Order selectByNo(String orderNo) {
@@ -165,4 +170,25 @@
        return this.baseMapper.selectOrderMoveStatusInitial();
    }
    @Override
    public List<OrderNameListDto> selectAllorderNo() {
        List<Order> list = orderService.selectList(new EntityWrapper<Order>().orderBy("create_time"));
        if (Cools.isEmpty(list)){
            return null;
        }
        ArrayList<OrderNameListDto> orderNameListDtos = new ArrayList<>();
        for (Order order :list){
            DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_id", order.getDocType()));
            if (docType.getPakin() == 1){
                OrderNameListDto orderNameListDto = new OrderNameListDto();
                orderNameListDto.setOrder_no(order.getOrderNo());
                orderNameListDtos.add(orderNameListDto);
            }
        }
        return orderNameListDtos;
    }
}
src/main/java/com/zy/common/model/LocDto.java
@@ -73,6 +73,34 @@
        this.anfme = anfme;
    }
    public LocDto(String orderNo,String matnr, String batch, String outOrderNo, String luHao, String packing, String sPgNO, String proType, String color) {
        this.matnr = matnr;
        this.orderNo = orderNo;
        if(!Cools.isEmpty(batch)){
            this.batch = batch;
        }
        if(!Cools.isEmpty(outOrderNo)){
            this.outOrderNo = outOrderNo;
        }
        if(!Cools.isEmpty(luHao)){
            this.luHao = luHao;
        }
        if(!Cools.isEmpty(packing)){
            this.packing = packing;
        }
        if(!Cools.isEmpty(sPgNO)){
            this.sPgNO = sPgNO;
        }
        if(!Cools.isEmpty(proType)){
            this.proType = proType;
        }
        if(!Cools.isEmpty(color)){
            this.color = color;
        }
    }
    public String getTitle() {
        return this.matnr + "(" + this.maktx + ")";
    }
src/main/resources/application.yml
@@ -1,5 +1,5 @@
server:
  port: 8080
  port: 8085
  servlet:
    context-path: /@pom.build.finalName@
@@ -10,7 +10,7 @@
    enabled: false
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=xgmFlasrs
    url: jdbc:sqlserver://127.0.0.1:50948;databasename=xgmFlasrs
    username: sa
    password: sa@123
  mvc:
src/main/resources/mapper/AdjDetlMapper.xml
@@ -20,6 +20,7 @@
        <result column="modi_time" property="modiTime" />
        <result column="appe_user" property="appeUser" />
        <result column="appe_time" property="appeTime" />
        <result column="order_no" property="orderNo" />
    </resultMap>
src/main/webapp/static/js/adjDetl/adjDetl.js
@@ -23,6 +23,7 @@
//             {field: 'adjId', align: 'center',title: '序号'}
            {field: 'locNo', align: 'center',title: '库位号'}
            ,{field: 'matnrOld', align: 'center',title: '原品号'}
            ,{field: 'orderNo', align: 'center',title: '订单号'}
            ,{field: 'matnr', align: 'center',title: '当前品号'}
            ,{field: 'batch', align: 'center',title: '批号'}
            // ,{field: 'oriCtns', align: 'center',title: '原箱数'}
@@ -31,7 +32,7 @@
            // ,{field: 'adjCtns', align: 'center',title: '变更箱数'}
            ,{field: 'adjQty', align: 'center',title: '变更数量'}
            // ,{field: 'adjWt', align: 'center',title: '变更重量'}
            ,{field: 'memo', align: 'center',title: '备注',hide:true}
            ,{field: 'memo', align: 'center',title: '变更类型'}
            ,{field: 'modiUser$', align: 'center',title: '修改人员'}
            ,{field: 'modiTime$', align: 'center',title: '修改时间'}
            // ,{field: 'appeUser', align: 'center',title: '创建者'}