自动化立体仓库 - WMS系统
abc40d18cdfde0826bd7ae1377e9973cff3eefb8..642428dd870c2f288bb0f3a5fc94373a69a425cf
2 天以前 lsh
#
642428 对比 | 目录
2 天以前 lsh
#
1c9919 对比 | 目录
2 天以前 lsh
#
eb894e 对比 | 目录
9个文件已修改
277 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MatController.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/OrderGiftParam.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/OutLocBoxExcelListener.java 93 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/OutpandianBoxExeclListener.java 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/operateLog/operateLog.js 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/operateLog/operateLog.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/orderGift/orderGift.html 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MatController.java
@@ -35,6 +35,7 @@
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
@@ -359,10 +360,14 @@
    @PostMapping(value = "/out/loc/box/excel/import/auth")
    @ManagerAuth(memo = "导入箱号出库")
    @Transactional
    public R outLocBoxExcelImport(MultipartFile file) throws IOException {
        OutLocBoxExcelListener listener = new OutLocBoxExcelListener(getUserId());
    public R outLocBoxExcelImport(HttpServletRequest request, MultipartFile file) throws IOException {
        OutLocBoxExcelListener listener = new OutLocBoxExcelListener(request.getRemoteAddr(),getUserId());
        EasyExcel.read(file.getInputStream(), OutLocBoxExcel.class, listener).sheet().doRead();
        return R.ok("成功出库"+listener.getTotal()+"条商品数据");
        if (listener.getSign()){
            return R.ok("成功出库"+listener.getTotal()+"条商品数据."+listener.getErrorMsgOrderLoc());
        } else {
            return R.error("出库失败:"+listener.getErrorMsgOrderLoc());
        }
    }
@@ -387,10 +392,14 @@
    @PostMapping(value = "/out/loc/box/excel/import/auth1")
    @ManagerAuth(memo = "导入箱号盘点出库")
    @Transactional
    public R outLocBoxExcelImport1(MultipartFile file) throws IOException {
        OutpandianBoxExeclListener listener = new OutpandianBoxExeclListener(getUserId());
    public R outLocBoxExcelImport1(HttpServletRequest request,MultipartFile file) throws IOException {
        OutpandianBoxExeclListener listener = new OutpandianBoxExeclListener(request.getRemoteAddr(),getUserId());
        EasyExcel.read(file.getInputStream(), pandianExcel.class, listener).sheet().doRead();
        return R.ok("成功出库"+listener.getTotal()+"条商品数据");
        if (listener.getSign()){
            return R.ok("成功出库"+listener.getTotal()+"条商品数据."+listener.getErrorMsgOrderLoc());
        } else {
            return R.error("出库失败:"+listener.getErrorMsgOrderLoc());
        }
    }
    /*************************************** xm-select ***********************************************/
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -293,6 +293,46 @@
        }
    }
    @RequestMapping("/order/search/batch/new/auth")
    @ManagerAuth(memo = "出库确认")
    public R orderSearchByBatchNew(@RequestBody OrderGiftParam param){
        try{
//            String length = param.getLength();
//            String lengthS = length.split(" ")[0];
//            Double price = Double.valueOf(lengthS);
//            String grossWeight = param.getGrossWeight();
//            String grossWeightS = grossWeight.split(" ")[0];
//            Double volume = Double.valueOf(grossWeightS);
            String netWeight = param.getNetWeight();
            String netWeightS = netWeight.split(" ")[0];
            Double weight = Double.valueOf(netWeightS);
//            String splices = param.getSplices();
//            String splicesS = splices.split(" ")[0];
            List<OrderDetlGift> orderDetlGifts = orderDetlGiftService.selectList(new EntityWrapper<OrderDetlGift>()
                    .eq("order_no", param.getOrderNo())
//                    .eq("matnr", param.getSpecs())
                    .eq("batch", param.getBoxNo())
//                    .eq("model", param.getRollNo())
//                    .eq("price", price)
                    .eq("weight", weight));
//                    .eq("volume", volume)
//                    .eq("specs", splicesS));
            if (orderDetlGifts.isEmpty()){
                return R.error("查询信息异常,未匹配到明细").add("未匹配到明细");
            }
            if (orderDetlGifts.size()>1){
                return R.error("查询信息异常,存在多条明细").add("存在多条明细");
            }
            OrderDetlGift orderDetlGift = orderDetlGifts.get(0);
            orderDetlGift.setSource(1);
            orderDetlGiftService.updateById(orderDetlGift);
            orderDetlGift.setDeadTime(orderDetlGift.getSource$());
            return R.ok("确认成功").add(orderDetlGift);
        } catch (Exception e){
            return R.error("查询信息异常,未匹配到明细").add("未匹配到明细");
        }
    }
//    @RequestMapping("/wrkDetl/search/batch/auth")
//    @ManagerAuth(memo = "出库确认获取信息")
//    public R wrkDetlSearchByBatch(@RequestBody String batch){
src/main/java/com/zy/asrs/entity/param/OrderGiftParam.java
@@ -5,6 +5,7 @@
@Data
public class OrderGiftParam {
    private String orderNo;
    private String rollNo;
    private String boxNo;
    private String specs;
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -352,12 +352,12 @@
            int i=0;
            for (StockOutParam.LocDetl locDetl : locDetls) {
                i++;
                Mat mat = matService.selectByMatnr(locDetl.getMatnr());
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(locDetl.getMatnr() + "物料编码检索失败,请先添加商品");
                }
//                Mat mat = matService.selectByMatnr(locDetl.getMatnr());
//                if (Cools.isEmpty(mat)) {
//                    throw new CoolException(locDetl.getMatnr() + "物料编码检索失败,请先添加商品");
//                }
                OrderDetlGift orderDetl = new OrderDetlGift();
                orderDetl.sync(mat);
//                orderDetl.sync(mat);
                orderDetl.setSuppCode(String.valueOf(i));  // 行号
                orderDetl.setManu(locDetl.getLocNo());  //库位号
                orderDetl.setBatch(locDetl.getBatch()); //木箱编码
src/main/java/com/zy/asrs/utils/OutLocBoxExcelListener.java
@@ -2,6 +2,7 @@
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.BaseRes;
import com.core.common.Cools;
@@ -15,6 +16,9 @@
import com.zy.asrs.service.*;
import com.zy.common.entity.OutLocBoxExcel;
import com.zy.common.model.LocDto;
import com.zy.common.properties.SlaveProperties;
import com.zy.system.entity.OperateLog;
import com.zy.system.service.OperateLogService;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
@@ -29,15 +33,24 @@
public class OutLocBoxExcelListener extends AnalysisEventListener<OutLocBoxExcel> {
    private int total = 0;
    private String errorMsgOrderLoc = "";
    private String orderOneNo = null;
    private String cstmrName = null;
    private Long userId;
    private String remoteAddr;
    private boolean sign = true;
    List<String[]> OutLocBoxCs = new ArrayList<>();
    public OutLocBoxExcelListener() {
    }
    public OutLocBoxExcelListener(Long userId) {
        this.userId = userId;
    }
    public OutLocBoxExcelListener(String remoteAddr,Long userId) {
        this.remoteAddr = remoteAddr;
        this.userId = userId;
    }
@@ -96,6 +109,7 @@
        if (!Cools.isEmpty(OutLocBoxCs) && OutLocBoxCs.size() != 0) {
            LocDetlService locDetlService = SpringUtils.getBean(LocDetlService.class);
            LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
            SlaveProperties slaveProperties = SpringUtils.getBean(SlaveProperties.class);
            WorkService workService = SpringUtils.getBean(WorkService.class);
            List<LocDto> locDtos = new ArrayList<>();
            List<String[]> outLocBoxCList = new ArrayList<>();
@@ -105,26 +119,49 @@
                if (!outLocBoxCNew.contains(outLocBoxC[0])){
                    LocDetl locDetlSou = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("batch", outLocBoxC[0]));
                    if (Cools.isEmpty(locDetlSou)){
                        throw new CoolException("箱号:"+outLocBoxC[0]+" 未查询到数据!!!");
                        sign = false;
                        errorMsgOrderLoc = errorMsgOrderLoc + "[===》" +"箱号:"+outLocBoxC[0]+" 未查询到数据!!!《===]";
                        continue;
//                        throw new CoolException("箱号:"+outLocBoxC[0]+" 未查询到数据!!!");
                    }
                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlSou.getLocNo()));
                    if (Cools.isEmpty(locMast)){
                        throw new CoolException("箱号:"+outLocBoxC[0]+" 所在库位不满足出库条件!!!未查询到此箱号所在库位");
                        sign = false;
                        errorMsgOrderLoc = errorMsgOrderLoc + "[===》" +"箱号:"+outLocBoxC[0]+" 所在库位不满足出库条件!!!未查询到此箱号所在库位"+"《===]";
                        continue;
//                        throw new CoolException("箱号:"+outLocBoxC[0]+" 所在库位不满足出库条件!!!未查询到此箱号所在库位");
                    }
                    if (!locMast.getLocSts().equals("F")){
                        throw new CoolException("箱号:"+outLocBoxC[0]+" 所在库位不满足出库条件!!!库位状态不为F!!!库位状态:"+locMast.getLocSts$());
                        sign = false;
                        errorMsgOrderLoc = errorMsgOrderLoc + "[===》" +"箱号:"+outLocBoxC[0]+" 所在库位不满足出库条件!!!库位状态不为F!!!库位状态:"+locMast.getLocSts$()+"《===]";
                        continue;
//                        throw new CoolException("箱号:"+outLocBoxC[0]+" 所在库位不满足出库条件!!!库位状态不为F!!!库位状态:"+locMast.getLocSts$());
                    }
                    List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                            .eq("loc_no", locDetlSou.getLocNo()).eq("origin", locDetlSou.getOrigin()));
                    for (LocDetl locDetl:locDetls){
                        total++;
                        String[] locDetlNow=new String[4];
                        locDetlNow[0] = locDetl.getBatch();
                        locDetlNow[1] = outLocBoxC[1];
                        locDetlNow[2] = outLocBoxC[2];
                        locDetlNow[3] = outLocBoxC[3];
                        outLocBoxCList.add(locDetlNow);
                        outLocBoxCNew.add(outLocBoxC[0]);
                    // 目标库位 ===>> 浅库位
                    if (Utils.isShallowLoc(slaveProperties, locMast.getLocNo())) {
                        String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast.getLocNo());
                        LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLoc));
                        if (!Cools.isEmpty(locMast2)) {
                            if (locMast2.getLocSts().equals("P") || locMast2.getLocSts().equals("R")){
                                errorMsgOrderLoc = errorMsgOrderLoc + "[===》" +"箱号:"+outLocBoxC[0]+" 所在库位满足出库条件!!!但是深库位在出库中!!!因此会夹杂在前边订单执行!!!"+"《===]";
                            }
                        }
                    }
                    if (sign){
                        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                                .eq("loc_no", locDetlSou.getLocNo()).eq("origin", locDetlSou.getOrigin()));
                        for (LocDetl locDetl:locDetls){
                            total++;
                            String[] locDetlNow=new String[4];
                            locDetlNow[0] = locDetl.getBatch();
                            locDetlNow[1] = outLocBoxC[1];
                            locDetlNow[2] = outLocBoxC[2];
                            locDetlNow[3] = outLocBoxC[3];
                            outLocBoxCList.add(locDetlNow);
                            outLocBoxCNew.add(outLocBoxC[0]);
                        }
                    }
                }
            }
@@ -173,9 +210,27 @@
            param.setOrderNo(orderOneNo);
            param.setCstmrName(cstmrName);
            if (total>0){
            if (sign && total>0){
                workService.startupFullTakeStoreOrder(param,9999L);
            }
            try {
                OperateLogService operateLogService = SpringUtils.getBean(OperateLogService.class);
                // 记录操作日志
                OperateLog operateLog = new OperateLog();
                operateLog.setAction("导入订单批量出库");
                operateLog.setIp(remoteAddr);
                operateLog.setUserId(userId);
                operateLog.setRequest("单号:"+orderOneNo+"、客户名:"+cstmrName);
                operateLog.setResponse(errorMsgOrderLoc.equals("")? "正常" : (sign && total>0)? "成功:"+errorMsgOrderLoc : "失败:"+errorMsgOrderLoc);
                operateLogService.insert(operateLog);
            } catch (Exception e){
                log.error("记录操作日志失败!"+e.getMessage());
            }
//            if (!sign || total<1){
//                throw new CoolException("失败:"+errorMsgOrderLoc);
//            }
        }
@@ -185,4 +240,12 @@
    public int getTotal() {
        return total;
    }
    public boolean getSign() {
        return sign;
    }
    public String getErrorMsgOrderLoc() {
        return errorMsgOrderLoc;
    }
}
src/main/java/com/zy/asrs/utils/OutpandianBoxExeclListener.java
@@ -15,6 +15,8 @@
import com.zy.asrs.service.WorkService;
import com.zy.common.entity.pandianExcel;
import com.zy.common.model.LocDto;
import com.zy.system.entity.OperateLog;
import com.zy.system.service.OperateLogService;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
@@ -26,13 +28,21 @@
    private int total = 0;
    private String errorMsgOrderLoc = "";
    private Long userId;
    private String remoteAddr;
    private boolean sign = true;
    List<String[]> OutLocBoxCs = new ArrayList<>();
    public OutpandianBoxExeclListener() {
    }
    public OutpandianBoxExeclListener(Long userId) {
        this.userId = userId;
    }
    public OutpandianBoxExeclListener(String remoteAddr,Long userId) {
        this.remoteAddr = remoteAddr;
        this.userId = userId;
    }
@@ -88,23 +98,34 @@
                if (!outLocBoxCNew.contains(outLocBoxC[0])){
                    LocDetl locDetlSou = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("batch", outLocBoxC[0]));
                    if (Cools.isEmpty(locDetlSou)){
                        throw new CoolException("箱号:"+outLocBoxC[0]+" 未查询到数据!!!");
                        sign = false;
                        errorMsgOrderLoc = errorMsgOrderLoc + "[===》" +"箱号:"+outLocBoxC[0]+" 未查询到数据!!!"+"《===]";
                        continue;
//                        throw new CoolException("箱号:"+outLocBoxC[0]+" 未查询到数据!!!");
                    }
                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlSou.getLocNo()));
                    if (Cools.isEmpty(locMast)){
                        throw new CoolException("箱号:"+outLocBoxC[0]+" 所在库位不满足出库条件!!!未查询到此箱号所在库位");
                        sign = false;
                        errorMsgOrderLoc = errorMsgOrderLoc + "[===》" +"箱号:"+outLocBoxC[0]+" 所在库位不满足出库条件!!!未查询到此箱号所在库位"+"《===]";
                        continue;
//                        throw new CoolException("箱号:"+outLocBoxC[0]+" 所在库位不满足出库条件!!!未查询到此箱号所在库位");
                    }
                    if (!locMast.getLocSts().equals("F")){
                        throw new CoolException("箱号:"+outLocBoxC[0]+" 所在库位不满足出库条件!!!库位状态不为F!!!库位状态:"+locMast.getLocSts$());
                        sign = false;
                        errorMsgOrderLoc = errorMsgOrderLoc + "[===》" +"箱号:"+outLocBoxC[0]+" 所在库位不满足出库条件!!!库位状态不为F!!!库位状态:"+locMast.getLocSts$()+"《===]";
                        continue;
//                        throw new CoolException("箱号:"+outLocBoxC[0]+" 所在库位不满足出库条件!!!库位状态不为F!!!库位状态:"+locMast.getLocSts$());
                    }
                    List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                            .eq("loc_no", locDetlSou.getLocNo()).eq("origin", locDetlSou.getOrigin()));
                    for (LocDetl locDetl:locDetls){
                        total++;
                        String[] locDetlNow=new String[2];
                        locDetlNow[0] = locDetl.getBatch();
                        outLocBoxCList.add(locDetlNow);
                        outLocBoxCNew.add(outLocBoxC[0]);
                    if (sign){
                        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                                .eq("loc_no", locDetlSou.getLocNo()).eq("origin", locDetlSou.getOrigin()));
                        for (LocDetl locDetl:locDetls){
                            total++;
                            String[] locDetlNow=new String[2];
                            locDetlNow[0] = locDetl.getBatch();
                            outLocBoxCList.add(locDetlNow);
                            outLocBoxCNew.add(outLocBoxC[0]);
                        }
                    }
                }
            }
@@ -151,17 +172,35 @@
                    locDetls122.add(locDetl);
                }
            }
            StockOutParam param122 = new StockOutParam();
            param122.setOutSite(122);
            param122.setLocDetls(locDetls122);
            if (total>0 && locDetls122.size()>0){
                workService.locCheckOut(param122,9999L);
            if (sign){
                StockOutParam param122 = new StockOutParam();
                param122.setOutSite(122);
                param122.setLocDetls(locDetls122);
                if (total>0 && locDetls122.size()>0){
                    workService.locCheckOut(param122,9999L);
                }
                StockOutParam param171 = new StockOutParam();
                param171.setOutSite(171);
                param171.setLocDetls(locDetls171);
                if (total>0  && locDetls171.size()>0){
                    workService.locCheckOut(param171,9999L);
                }
            }
            StockOutParam param171 = new StockOutParam();
            param171.setOutSite(171);
            param171.setLocDetls(locDetls171);
            if (total>0  && locDetls171.size()>0){
                workService.locCheckOut(param171,9999L);
            try {
                OperateLogService operateLogService = SpringUtils.getBean(OperateLogService.class);
                // 记录操作日志
                OperateLog operateLog = new OperateLog();
                operateLog.setAction("导入箱号批量盘点出库");
                operateLog.setIp(remoteAddr);
                operateLog.setUserId(userId);
                operateLog.setRequest("");
                operateLog.setResponse(errorMsgOrderLoc.equals("")? "正常" : (sign && total>0)? "成功:"+errorMsgOrderLoc : "失败:"+errorMsgOrderLoc);
                operateLogService.insert(operateLog);
            } catch (Exception e){
                log.error("记录操作日志失败!"+e.getMessage());
            }
        }
@@ -172,4 +211,12 @@
        return total;
    }
    public boolean getSign() {
        return sign;
    }
    public String getErrorMsgOrderLoc() {
        return errorMsgOrderLoc;
    }
}
src/main/webapp/static/js/operateLog/operateLog.js
@@ -19,13 +19,13 @@
        cellMinWidth: 50,
        cols: [[
            // {type: 'checkbox'}
            {field: 'id', title: 'ID', sort: true,align: 'center', width: 80}
            ,{field: 'userId$', align: 'center',title: '用户'}
            ,{field: 'action', align: 'center',title: '操作内容'}
            ,{field: 'ip', align: 'center',title: '客户端IP'}
            ,{field: 'request', align: 'center',title: '请求数据'}
            ,{field: 'response', align: 'center',title: '响应数据'}
            ,{field: 'createTime$', align: 'center',title: '添加时间'}
            {field: 'id', title: 'ID', sort: true,align: 'center', width: 80,hide : true}
            ,{field: 'userId$', align: 'center',title: '用户',hide : false}
            ,{field: 'action', align: 'center',title: '操作内容',hide : false}
            ,{field: 'ip', align: 'center',title: '客户端IP',hide : true}
            ,{field: 'request', align: 'center',title: '请求数据',hide : true}
            ,{field: 'response', align: 'center',title: '响应数据',hide : false}
            ,{field: 'createTime$', align: 'center',title: '添加时间',hide : false}
            // ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:100}
        ]],
src/main/webapp/views/operateLog/operateLog.html
@@ -30,6 +30,11 @@
            </div>
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="action" placeholder="操作内容" autocomplete="off">
        </div>
    </div>
    <!-- 日期范围 -->
    <div class="layui-inline" style="width: 300px">
        <div class="layui-input-inline">
src/main/webapp/views/orderGift/orderGift.html
@@ -126,9 +126,7 @@
</div>
<!-- 表格操作列 -->
<script type="text/html" id="operate">
    {{# if (d.settle == 0 || d.settle == 1) { }}
        <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">删除</a>
    {{# } }}
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">删除</a>
    {{# if (d.settle == 0 || d.settle == 1 || d.settle == 2) { }}
        <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">完结</a>
    {{# } }}