• 实用工具 小学数学练习 字帖生成 在线画板 函数绘制 拼音字母表 在线词典 黄历查询 中国历史 Excel函数 模拟请求 json格式化
  • 最新更新
  • 全站导航
  • 登陆/注册
  • 原创投稿
名师互学网
  • 知识解答知识解答
  • 合同文书合同文书
  • 教育问答教育问答
  • 最新资讯最新资讯
  • 学术期刊学术期刊
  • 资料下载资料下载
高考报名时间2022年11月1日还剩 天 距离2023年6月7日高考还有 天
  • 网站首页
  • 小学
  • 初中
  • 高中
  • 语言
  • 会计
  • 驾考
  • 学历
  • 司法
  • IT
  • 医护
  • 建筑
  • 作文
栏目分类:
  • 前沿技术
  • 软件开发
  • 系统运维
  • 产品运营
  • 生活办公
  • 面试经验
  • 考试题库
子分类:
  • 人工智能
  • 大数据
  • 云计算
  • 区块链
  • 物联网
  • 深度学习
  • 机器学习
  • NLP
  • 计算机视觉
  • 语音识别
  • 其他
  • 大数据系统
  • 数据可视化
  • 数据挖掘与分析
  • 其他
  • Docker/k8s
  • 虚拟化
  • 云平台
  • 其他
  • 基本原理
  • 数字货币
  • 智能合约
  • EOS应用
  • 其他
  • 通讯技术
  • 嵌入式开发
  • 单片机
  • 物联网应用
  • HarmonyOS
  • 其他
  • 后端开发
  • Web开发
  • 移动开发
  • 游戏开发
  • Python
  • Java
  • 架构设计
  • C/C++/C#
  • PHP
  • .Net
  • Go语言
  • R语言
  • asp
  • Html/CSS
  • 易语言
  • JavaScript
  • 汇编语言
  • Vue.js
  • React.JS
  • Ruby开发
返回
名师互学网
名师互学网用户登录
名师互学网
快速导航关闭
当前搜索
当前分类
前沿技术 软件开发 系统运维 产品运营 生活办公 面试经验 考试题库
子分类
人工智能 大数据 云计算 区块链 物联网 深度学习 机器学习 NLP 计算机视觉 语音识别 其他 大数据系统 数据可视化 数据挖掘与分析 其他 Docker/k8s 虚拟化 云平台 其他 基本原理 数字货币 智能合约 EOS应用 其他 通讯技术 嵌入式开发 单片机 物联网应用 HarmonyOS 其他 后端开发 Web开发 移动开发 游戏开发 Python Java 架构设计 C/C++/C# PHP .Net Go语言 R语言
实用工具
学习工具 小学数学练习 字帖生成 在线画板 函数绘制 拼音字母表 在线词典 黄历查询 亲戚关系计算 安全期计算 中国历史 Excel函数 模拟请求 json格式化 浏览器指纹
热门搜索
路由器设置 木托盘 宝塔面板 儿童python教程 心情低落 朋友圈 vim 双一流学科 专升本 我的学校 日记学校 西点培训学校 汽修学校 情书 化妆学校 塔沟武校 异形模板 西南大学排名 最精辟人生短句 6步教你追回被骗的钱 南昌大学排名 清朝十二帝 北京印刷学院排名 北方工业大学排名 北京航空航天大学排名 首都经济贸易大学排名 中国传媒大学排名 首都师范大学排名 中国地质大学(北京)排名 北京信息科技大学排名
名师互学网 > IT > 软件开发 > 后端开发 > Java

wms项目学习

Java 更新时间:2026-03-31 17:48:23 发布时间:1606天前 IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

wms项目学习

文章目录
  • 一、调用远端方法(大概是springcloud)
  • 二 、mybatis遇到的问题
    • 2.1、for each的collection
    • 2.2、mybatis和oracle自增主键
  • 三、初识VUE
  • 四、前后端分析神技断点
  • 五、IDEA查找快捷键

一、调用远端方法(大概是springcloud)

所需要的html文件

设置—>业务数据配置—>使用默认批次维护

wms_20191025uiwebsrcmainresourcestemplateswmsconfigwms_c_mat_batch.html




    
    默认虚拟批次
    <#include "/web_header.html">
    
    

${tag.getLocale("ADD_NEW")} ${tag.getLocale("MODIFY")} ${tag.getLocale("DELETE")} ${tag.getLocale("QUERY")}

重点放在这一行

可以看到就是表单提交数据,而此工程包又特别大,不是我以前小规模学习时的目录结构,所以此时需要用到IDEA全局搜索(我改为eclipse热键了,ctrl+h搜索关键字)。搜索/config/matBatch。终于找到了。

wms_20191025uiwebsrcmainjavacombydwebwmsconfigserviceWmsCMatBatchRemote.java

//这个注解十分重要,可以看到它带的值就是调用远端方法的项目名称  wms-service
//命名在这里也十分有意义,remote远程。此时是在ui目录下,他要使用远程的东西,所以建立了个类。
//就是一个简单的接口,面向接口编程思想就出来了,简单接口规范着该做什么事
@FeignClient(name = "wms-service")
public interface WmsCMatBatchRemote {

    //这又是我第一次接触的注解,没系统性学过,但看这个样子就是建立映射。
    @RequestMapping(value = "/wms-service/config/matBatch/list", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    R list(@RequestBody Map params);

}

而这个仅仅这个remote是不够完全表达的,他只表达是远端方法,还需描述控制信息再具体一点。

或者这样思考,你仅仅只是把接口规范定义在这,只是个死规定,放在这没用,该接口未被使用,定好的规范需要使用下才能体现出规范的意义。因此继续寻找,才找到了有controller层。

wms_20191025uiwebsrcmainjavacombydwebwmsconfigcontrollerWmsCMatBatchController.java

//又是看不懂的注解,但知道必须写,还是建立映射,看到后面就明白了
@RestController
@RequestMapping("config/matBatch")
public class WmsCMatBatchController {

//   使用了接口(规范)作为属性
    @Autowired
    private WmsCMatBatchRemote wmsCMatBatchRemote;

//    也仅仅是让接口执行下这个方法。
//    面向接口编程。直接让接口执行方法,而这个接口的实现类我根本不知道,我就是直接在这里调用执行。
//    具体如何操作,完全看以后是谁实现了这个接口,因为可以有多个实现类,所以替换性更强,即插即用(接口),
//    功能一样,但实现类不同,接口就起了个统一和适配的作用
    @RequestMapping("/list")
    public R list(@RequestParam Map params) {
        return wmsCMatBatchRemote.list(params);
    }

}

至此,ui这边关于查询一个数据的所有操作就完了,是的,就完成了。而他具体的实现方法在另一个工程目录下wms-services。

在wms-services下搜索关键字config/matBatch(ctrl+ h 切换目录搜即可)。

而这边也是直接找到一个匹配。也是controller,对等层的概念来了。

wms_20191025microserviceswms-servicesrcmainjavacombydwmsbusinessmodulesconfigcontrollerWmsCMatBatchController.java

//这个注解又出现了,现在就不怕了,就是按规范写,两边匹配
@RestController
@RequestMapping("config/matBatch")
public class WmsCMatBatchController {
    @Autowired
    private WmsCMatBatchService wmsCMatBatchService;

    @RequestMapping("/list")
    public R list(@RequestBody Map params) {
        PageUtils page = wmsCMatBatchService.queryPage(params);
        return R.ok().put("page", page);
    }

}

看到了service,激动,又到了熟悉的MVC模式了!

wms_20191025microserviceswms-servicesrcmainjavacombydwmsbusinessmodulesconfigserviceWmsCMatBatchService.java

public interface WmsCMatBatchService {
    //因为要显示在页面上,所以分页查询
    PageUtils queryPage(Map params);

}

IDEA向下寻找实现类。

wms_20191025microserviceswms-servicesrcmainjavacombydwmsbusinessmodulesconfigserviceimplWmsCMatBatchServiceImpl.java

@Service("wmsCMatBatchService")
public class WmsCMatBatchServiceImpl implements WmsCMatBatchService {

    @Autowired
    WmsCMatBatchDao wmsCMatBatchDao;

    @Override
    public PageUtils queryPage(Map params) {
        List lgorts = Arrays.asList(((String) params.get("LGORT")).split(","));
        params.put("LGORTES",lgorts);
        String pageNo = (params.get("pageNo") != null && !params.get("pageNo").equals(""))
                ? params.get("pageNo").toString()
                : "1";
        String pageSize = (params.get("pageSize") != null && !params.get("pageSize").equals(""))
                ? params.get("pageSize").toString()
                : "15";
        int start = 0;
        int end = 6000;
        if (params.get("pageSize") != null && !params.get("pageSize").equals("")) {
            start = (Integer.valueOf(pageNo) - 1) * Integer.valueOf(pageSize);
            end = Integer.valueOf(pageNo) * Integer.valueOf(pageSize);
        }
        params.put("start", start);
        params.put("end", end);
        List> list = wmsCMatBatchDao.getCMatBatchList(params);
        int count = wmsCMatBatchDao.getCMatBatchCount(params);
        Page page = new Query>(params).getPage();
        page.setRecords(list);
        page.setTotal(count);
        page.setSize(Integer.valueOf(pageSize));
        page.setCurrent(Integer.valueOf(pageNo));
        if (page.getRecords().size() == 0 && page.getCurrent() != 1) {
            pageNo = "1";
            if (params.get("pageSize") != null && !params.get("pageSize").equals("")) {
                start = (Integer.valueOf(pageNo) - 1) * Integer.valueOf(pageSize);
                end = Integer.valueOf(pageNo) * Integer.valueOf(pageSize);
            } else {
                end = count;
            }
            params.put("start", start);
            params.put("end", end);
            list = wmsCMatBatchDao.getCMatBatchList(params);
            page = new Query>(params).getPage();
            page.setRecords(list);
            page.setTotal(count);
            page.setSize(Integer.valueOf(pageSize));
            page.setCurrent(Integer.valueOf(pageNo));
        }
        return new PageUtils(page);
    }

wms_20191025microserviceswms-servicesrcmainjavacombydwmsbusinessmodulesconfigdaoWmsCMatBatchDao.java

@Mapper
public interface WmsCMatBatchDao {

    List> getCMatBatchList(Map param);

    int getCMatBatchCount(Map params);
    
}

找到这里,该项目集成了mybatis,所以SQL语句是在xml里。

wms_20191025microserviceswms-servicesrcmainresourcesmapperconfigWmsCMatBatchDao.xml





    
        select count(1) from WMS_C_MATERIAL_BATCH a
        where 1 = 1
        
            AND a.WERKS = #{werks}
        
        
            AND a.WH_NUMBER  = #{WH_NUMBER}
        
        
            AND a.LGORT = #{lgort}
        
        
            AND a.MATNR = #{matnr}
        
    
    

先不用细看这个sql语句在干什么,反正都是我写的,测试页是正确。

这节主要是想讲清一个映像图。ui和 wms-service两个项目。

  • todo 画映像图。

controller承上启下作用;业务选择和映射。

controller理解,两端都有对等层。

controller命名重复了,不担心,因为这是不同module下的。

然后,再按照这个流程把增删改查等业务加上,最终的dao.xml为





    
        select count(1) from WMS_C_MATERIAL_BATCH a
        where 1 = 1
        
            AND a.WERKS = #{werks}
        
        
            AND a.WH_NUMBER  = #{WH_NUMBER}
        
        
            AND a.LGORT = #{lgort}
        
        
            AND a.MATNR = #{matnr}
        
    

    
        
            select nvl(max(id),0)+1 from WMS_C_MATERIAL_BATCH
        
        insert into WMS_C_MATERIAL_BATCH (ID,WERKS,WH_NUMBER,LGORT,MATNR,DEFAULT_BATCH)
        values (#{id},#{werks},#{whNumber},#{lgortList},#{matnr},#{defaultBatch})
    

    
        update WMS_C_MATERIAL_BATCH set WERKS = #{werks},WH_NUMBER= #{whNumber},
                                        LGORT= #{lgortList},MATNR = #{matnr},DEFAULT_BATCH=#{defaultBatch}
                                        WHERe ID = #{id}
    

    
        delete from WMS_C_MATERIAL_BATCH a
            where a.id = #{id}
    

二 、mybatis遇到的问题 2.1、for each的collection

遇到这样一个问题,因为查询的时候可以选择多个库位。

看给后台传的参数,看到LGORT是两个,塞到了param里面,传给后台,此时要理解这两个数据人为看起来是两个,其实在计算机web世界里就是一个带逗号的字符串,是一个数据,key:“LGORT”。value:“0030,0038”。

再看回WmsCMatBatchServiceImpl,我们需要将这一个字符串拆开形成两个数据,才方便底层Dao.xml方便获取进行构造。所以就有了

public PageUtils queryPage(Map params) {
        List lgorts = Arrays.asList(((String) params.get("LGORT")).split(","));
        params.put("LGORTES",lgorts);
    //下省略
}

底层DAO.xml


                                <#list tag.getUserAuthWerks("WMS_C_MATERIAL_BATCH") as factory>
                                    
                                
                            
                        
${tag.getLocale("ADD_NEW")} ${tag.getLocale("MODIFY")} ${tag.getLocale("DELETE")} ${tag.getLocale("QUERY")}

和它所对应的js文件 wms_c_mat_batch.js 里的vue操作

var vm = new Vue({
    el:'#rrapp',
    data:{
        WERKS: "",
        WH_NUMBER: "",
        lgortList:[],//目标库位
        warehourse:""
    },
    created: function(){
        this.WERKS=$("#werks").find("option").first().val();
    },
    watch:{
        WERKS:{
            handler:function(newVal,oldVal){
                //工厂变化的时候,更新库存下拉框
                //查询工厂仓库
                $.ajax({
                    url:baseUrl + "common/getWhDataByWerks",
                    data:{"WERKS":newVal},
                    success:function(resp){
                        vm.warehourse = resp.data;
                        vm.WH_NUMBER = resp.data[0].WH_NUMBER;
                    }
                });
                getLgortList(newVal);
            }
        }
    },
    methods: {
        refresh:function(){
            $("#searchForm").submit();
        },
        reload: function (event) {
            $("#searchForm").submit();
        },
        getPlantNoFuzzy:function(){
            getPlantNoSelect("#werks",null,null);
        },
        getMaterialNoFuzzy:function(){
        
        getMaterialNoSelect($("#werks").val(),"#matnr","",null,null);
    }}
});

el

  可以看到el的值就是相关html中的一个标签。我们知道HTML是个DOM树结构,后续的页面的渲染和内容需要提前定义一个带id的块元素(div),方便以后插入。VUE这个el也是这个作用,就是为了说明,接下来的vue操作都在这个限定的div内。

data

  data这些数据都可以在相关html中找到。其赋值都可以走ajax后台操作。

以v-model形式出现。代表占据了一个html的控件元素。例如WERKS和WH_NUMBER,其都代表select控件。占住这个位置。

以v-for形式出现。代表从这个可以从这个值(列表)中遍历(in语法)取值。例如lgortList和warehourse。

created

  初始化时做的事情。

watch

  **监控vue中data,如果发了变化,就会触发。**有了这点就很方便前端,一处改变,另一处也随之改变。

methods

  VUE定义的一些方法。这些方法可以在hmtl调用,也可在js中调用。

看了VUE这些操作。我就感觉其本质还是一个js,只不过它封装了js,变成VUE自己的语法。VUE为了方便前端操作,封装了js。猜测是这样,实际原理以后学的时候再回看。

四、前后端分析神技断点

  在项目继续进行的时候,因为是维护以前人写的代码,并在其基础上开发新功能。还是那句话,前人如果不把代码写规范,后者看和改起来会很难受的。我就遇到了这种情况。F12网络分析其前端传的是什么参数,然后后台经过好大一部分操作,我也不知道把参数变成什么样了,这让我在底层写SQL语句的Dao.xml很难受,不知道怎么去取。如果一步步分析,他以前为了满足其他需求在这里把参数进行疯狂的变化。

  如果逐步分析,那肯定浪费时间。此时就需要用到神技**Debug。Debug最重要的技能变量跟踪**,代替了我们人工自己手动跟踪!我以前说过,所以的编程解题思路的万能方法就是变量跟踪,而此时Debug可以进行变量跟踪,并且它一定是如实的汇报,我们手工变量跟踪还有可能疏忽出错,但机器Debug肯定不会。

比如这种情况。它首先将前端所有name属性的值封装成一个ARRLIST传到后端。工厂的键为RECWERKS,仓库号的键为WHNUMBER,库位键为RLGORT。

经过前后台前期一顿操作,我也不知道此时参数变为什么了。

因此就要借助断点。进行变量跟踪。

工厂的键变为WERKS,仓库号的键为WH_NUMBER,库位键为LGORT。接下来我的dao.xml就知道怎么取了。

可以F6逐步跟踪。当查到问题原因了可直接F8结束此次断点,往下执行。

因为大学测试程序也没接触过Debug,没想到这么好用。Debug高级操作以后再学,现在先明白基础的F6逐步。

五、IDEA查找快捷键

以前用的Eclipse,现在转成用IDEA是真的香。但热键是还是应用原来的Eclipse。

大项目查找文件和关键字是很常见的,因为跨module查找是经常的。

Ctrl h + 关键字 全局搜索(可改变directory,到不同module下找)

Ctrl f 当前页搜索关键字

Ctrl shift r 全局搜索文件

ctrl l 跳转当前页面行数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/424456.html

上一篇 Vue资源

下一篇 Java进阶项目教程分享,动力节点Java项目DQ在线聊天项目实战

Java相关栏目本月热门文章

  • 1【Linux驱动开发】设备树详解(二)设备树语法详解
  • 2别跟客户扯细节
  • 3Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
  • 4【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
  • 5【分页】常见两种SpringBoot项目中分页技巧
  • 6一文带你搞懂OAuth2.0
  • 7我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
  • 8【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成
  • 9JavaSE - 封装、static成员和内部类
  • 10树莓派mjpg-streamer实现监控及拍照功能调试
  • 11用c++写一个蓝屏代码
  • 12从JDK8源码中看ArrayList和LinkedList的区别
  • 13idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目
  • 14在openwrt使用C语言增加ubus接口(包含C uci操作)
  • 15Spring 解决循环依赖
  • 16SpringMVC——基于MVC架构的Spring框架
  • 17Andy‘s First Dictionary C++ STL set应用
  • 18动态内存管理
  • 19我的创作纪念日
  • 20Docker自定义镜像-Dockerfile
热门相关搜索
路由器设置 木托盘 宝塔面板 儿童python教程 心情低落 朋友圈 vim 双一流学科 专升本 我的学校 日记学校 西点培训学校 汽修学校 情书 化妆学校 塔沟武校 异形模板 西南大学排名 最精辟人生短句 6步教你追回被骗的钱 南昌大学排名 清朝十二帝 北京印刷学院排名 北方工业大学排名 北京航空航天大学排名 首都经济贸易大学排名 中国传媒大学排名 首都师范大学排名 中国地质大学(北京)排名 北京信息科技大学排名 中央民族大学排名 北京舞蹈学院排名 北京电影学院排名 中国戏曲学院排名 河北政法职业学院排名 河北经贸大学排名 天津中德应用技术大学排名 天津医学高等专科学校排名 天津美术学院排名 天津音乐学院排名 天津工业大学排名 北京工业大学耿丹学院排名 北京警察学院排名 天津科技大学排名 北京邮电大学(宏福校区)排名 北京网络职业学院排名 北京大学医学部排名 河北科技大学排名 河北地质大学排名 河北体育学院排名
学习工具
代数计算器
三角函数
解析几何
立体几何
知识解答
教育知识
百科知识
生活知识
常识知识
写作必备
作文大全
作文素材
句子大全
实用范文
关于我们
关于我们
联系我们
网站地图
交流群

名师互学网交流群

名师互学网客服

名师互学网客服

名师互学网 版权所有 (c)2021-2022 ICP备案号:晋ICP备2021003244-6号

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号