2018年5月工作中遇到的问题

举报
轻狂书生FS 发表于 2020/12/03 01:27:42 2020/12/03
【摘要】 1、客户报价管理: 客户名称显示逻辑,通过登陆用户ID在表upms_user_jskh查询到customer_ids和company_ids,然后通过查询的customer_ids和company_ids再去表crm_jskh里面查询客户名称。 2、修改用户管理: 1、用户管理页面:将新增用户按钮改成两个按钮分别为新增员工和新增客户,点击时跳出不同的页面。 2、在新...

1、客户报价管理:

客户名称显示逻辑,通过登陆用户ID在表upms_user_jskh查询到customer_ids和company_ids,然后通过查询的customer_ids和company_ids再去表crm_jskh里面查询客户名称。

2、修改用户管理:

1、用户管理页面:将新增用户按钮改成两个按钮分别为新增员工和新增客户,点击时跳出不同的页面。

2、在新增客户跳出的页面里添加:经营单位和结算单位下拉框

3、客户报价模板里面无法保存客户类型。

4、upms_user_jskh权限表,权限的商品库和报关模板字段在这个表里面。

5、报价模板存在表crm_quote_customer

6、5月7号下午---5月8号修改时,增加了非法字段导致报错,所以进行了修改

F:\IdeaProjects\wanli\zheng\zheng-crm\zheng-crm-web\src\main\java\com\zheng\crm\server\controller\

saleManage\CrmQuoteCustomerController.java

F:\IdeaProjects\wanli\zheng\zheng-crm\zheng-crm-rpc-service\src\main\java\com\zheng\crmSaleManage\dao\mapper\

CrmQuoteTemplateMapper.xml

 

F:\IdeaProjects\wanli\zheng\zheng-upms\zheng-upms-server\src\main\java\com\zheng\upms\server\controller\manage\

UpmsUserRoleController.java

F:\IdeaProjects\wanli\zheng\zheng-upms\zheng-upms-server\src\

main\webapp\WEB-INF\jsp\manage\userRole

7、

 

client reconnect to 192.168.31.102:20883:没有连接

client(url: dubbo://192.168.31.102:20883/com.zheng.crm.rpc.api.CrmJskhContactsService:crm服务没有启动

8、在UpmsUserJskhMapper.xml文件里:

F:\IdeaProjects\wanli\zheng\zheng-upms\zheng-upms-rpc-service\src\main\java\com\zheng\upms\dao\mapper\UpmsUserJskhMapper.xml

 

<update id="updateData" parameterType="java.util.Map">

                 <if test="customer_text != null and ‘’!= customer_text ">   //取消红色部分

                 <![CDATA[t.customer_text = #{customer_text},]]>

                  </if>

</update>

 

修改的问题:

用户管理,经营单位,结算单位、供应商、数据库、报关模板 批量勾选取消全部 保存后无效。

9、 使用select2实现多功能下拉框                         **

下面是使用select2的初始化、动态赋值,实现标签化多选、以及遇到的问题:

1,从http://select2.github.io/examples.html 处下载select2源码,把dist目录中css、js引用到html中,

2,在页面中新建:<div id="test_select2"></div>,

3,初始化select2很简单,$('#test_select2').select2();就行,这是没有任何属性和值的最简单初始化,下面介绍几个常用的属性:

var itemList =[{id:1,text:'测试1'}{}{}{{}{}{}{}];

//类似的json数组格式,可以单独用jquery的ajax获取服务器的数据。

$('#test_select2').select2({

    placeholder : '输入话题关键字',

    tags : true,

    multiple : true,

    height: '40px',

    maximumSelectionLength : 3,

    allowClear : true,

    language: "zh-CN",

    data : itemList // itemList是[{}{}{}{}]格式的数组

    });  

10、 String 和List<String> 的互相转换                  **

String 转换成List<String> :

       private List<String> stringToList(String strs){

                String str[] = strs.split(",");

                return Arrays.asList(str);

        }

List<String > 转换成 String :

        迭代List的每个子项,将他们用“,”隔开,拼接最好是用StringBuilder 或者StringBuffer

11、MyBatis框架:$和#的区别:                          ***

${param}传递的参数会被当成sql语句中的一部分,比如传递表名,字段名

例子:(传入值为id)

order by ${param} 

则解析成的sql为:

order by id

 

#{parm}传入的数据都当成一个字符串,会对自动传入的数据加一个双引号

例子:(传入值为id)

select * from table where name = #{param}

则解析成的sql为:

select * from table where name = "id"

为了安全,能用#的地方就用#方式传参,这样可以有效的防止sql注入攻击

12、 maven项目中采用jetty插件启动每次修改代码都会自动重启的问题解决

<reload>默认值为 automatic,它与大于 0 的 scanIntervalSeconds 节点一起作用,实现自动热部署的工作。设为 manual 的好处是,当你改变文件内容并保存时,不会马上触发自动扫描和重部署的动作,你还可以继续的修改,直至你在 Console 或命令行中敲回车键(Enter)的时候才触发重新加载的动作。这样可以更加的方便调试修改。

13、 mybaits错误解决:There is no getter for property named 'id' in class 'java.lang.String'

在使用mybaitis传参数的时候,如果仅传入一个类型为String的参数,那么在 xml文件中应该使用_parameter来代替参数名。

14、为报价管理的供应商添加权限:

部分代码如下:

   Subject subject = SecurityUtils.getSubject();

   Map<String,Object> userMap = new HashMap<>();

   userMap.put("username",subject.getPrincipal());

   userMap.put("usertype",100);

   List<Map<String,Object>> userList = upmsUserService.selectJskh(userMap);

   Map<String,Object> map = userList.get(0);

   String supplierStr =(String)map.get("supplier_ids");

   List<Map<String,Object>> list = crmSupplierService.selectSupplierName(supplierStr);

15、 MyBatis框架传参问题: ***

常用的两种方案:

第一种方案:

DAO层的函数方法 

    Public User selectUser(String name,String area);

对应的Mapper.xml  

    <select id="selectUser" resultMap="BaseResultMap">

         select * from user_user_t where user_name = #{0} and user_area=#{1}

    </select>

其中,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。

 

第二种方案:如果只有一个参数可以不使用@param注解,否则必须要加,为了养成良好的习惯,建议都加

Dao层的函数方法

    Public User selectUser(@param(“userName”)String name,@param(“userArea”)String area);

对应的Mapper.xml

   <select id=" selectUser" resultMap="BaseResultMap">

       select * from user_user_t where user_name = #{userName,jdbcType=VARCHAR} 

                          and user_area=#{userArea,jdbcType=VARCHAR}

   </select>

个人觉得这种方法比较好,能让开发者看到dao层方法就知道该传什么样的参数,比较直观,个人推荐用第二种方案。

16、下拉列表和单选按钮默认选中判断:   ***

 

①、下拉列表默认选中:

  <select id="staffStauts" name="staffStauts" class="form-control">

       <option value="0" <c:if test="${staff.staffStauts==0}">selected</c:if>>在职</option>

       <option value="1" <c:if test="${staff.staffStauts==1}">selected</c:if>>离职</option>

  </select>

②、单选按钮默认选中:

     <div class="radio radio-inline radio-success">

                <input id="locked_0" type="radio" name="locked" value="0" 

                                                            <c:if test="${user.locked==0}">checked</c:if>>

                 <label for="locked_0">正常 </label>

     </div>

     <div class="radio radio-inline">

                 <input id="locked_1" type="radio" name="locked" value="1" 

                                                             <c:if test="${user.locked==1}">checked</c:if>>

                 <label for="locked_1">锁定 </label>

     </div>

17、 JS和JSP的区别     *

1、JSP全名为Java Server Pages,其根本是一个简化的servlet设计,他实现了Html语法中的java扩张(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。

       jsp 要先翻译,注意是翻译成servlet才能执行:比如 test.jsp 要变成 test_jsp.java 然后编译成test_jsp.class

而 test_jsp.java 本身就是一个servlet。所以 jsp只是servlet的一个变种,方便书写html内容才出现的。servlet是根本,所有jsp能做的,servlet全能做。

2、简单地说——JS是在客户端执行的,需要浏览器支持Javascript。JSP是在服务器端执行的,需要服务器上部署支持Servlet的服务器程序。JS代码是能够直接从服务器上download得到,对外是可见的,jsp(和翻译后的servlet)代码是对外不可见的。

联系:

JS与JavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。JSP在HTML中用<%%>里面实现。JS在html中用<Script></Script>实现

18、Invoke remote method timeout. method: selectUpmsUserByUsername:RPC服务链接超时

     出现的原因:①、网络不好;②、就是指定的服务没有开启。


19、前台如何解析List<Map<String,Object>>数据:**

后台:

 

前台jQuery解析:

20、jQuery遍历函数:

21、 Java获取系统时间的四种方法

 

 1、Date day=new Date();    

      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

      System.out.println(df.format(day));   

      通过Date类来获取当前时间    

 

2、SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");         

      System.out.println(df.format(System.currentTimeMillis()));   

       通过System类中的currentTimeMillis方法来获取当前时间 

 

3、Calendar c = Calendar.getInstance();//可以对每个时间域单独修改   工厂模式

        int year = c.get(Calendar.YEAR);  

        int month = c.get(Calendar.MONTH);   

        int date = c.get(Calendar.DATE);    

        int hour = c.get(Calendar.HOUR_OF_DAY);   

        int minute = c.get(Calendar.MINUTE);   

        int second = c.get(Calendar.SECOND);    

        System.out.println(year + "/" + month + "/" + date + " "

           +hour + ":" +minute + ":" + second);    

        通过Calendar类来获取当前时间   

 

4、 Date date = new Date();    

       String year = String.format("%tY", date);   

       String month = String.format("%tB", date);   

        String day = String.format("%te", date);    

       System.out.println("今天是:"+year+"-"+month+"-"+day);   

       通过Date类来获取当前时间   

总结:设置时间格式可通过调用SimpleDateFormat类进行设置和通过String中的format方法来设置。可通过Date类和System中的currentTimeMillis来获取!

22、ResultMap和ResultType在使用中的区别

 

1、resultType:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,而resultType中的内容就是pojo在本项目中的位置。

2、 resultMap:当使用resultMap做SQL语句返回结果类型处理时,通常需要在mapper.xml中定义resultMap进行pojo和相应表字段的对应。

23、 mybatis异常:Could not find result map java.util.Map 问题分析及解决

 

错误写法

  <select id="queryXXXCount" resultMap="java.util.Map" >

正确写法:

  <select id="queryXXXCount" resultType="java.util.Map">

 

注意:

 mybatis报出的异常日志栈信息定位不是那么准(找错误发生的地方不能直接根据异常栈信息直接定位到问题方法)

 此次根据这次异常栈信息找到的就是正常的方法,但是触发了有问题的那个mybatis

 

 在问题调试、查找过程中:根据svn提交信息将新提交的代码进行核对、注释掉,并进行实际调试才能准确定位此类问题。

 

24、JS获取当前时间戳的方法

 

JavaScript 获取当前时间戳:

第一种方法:

var timestamp = Date.parse(new Date());

结果:1280977330000

第二种方法:

var timestamp = (new Date()).valueOf();

结果:1280977330748

第三种方法:

var timestamp=new Date().getTime();

结果:1280977330748

第一种:获取的时间戳是把毫秒改成000显示,

第二种和第三种是获取了当前毫秒的时间戳。

 

25、用js将从后台得到的时间戳(毫秒数)转换为想要的日期格式

 

得到后台从数据库中拿到的数据我们希望格式是  

 2016年10月25日 17时37分30秒 或者 2016/10/25 17:37:30

然而我们前台得到的却是一段数字(时间戳,毫秒数)

 1477386005     

我们要将时间戳转化为我们想要的格式。

核心方法 :

1477386005是我从后台得到时间戳 (注意:有的时候得到的时间戳是已经乘以1000的)

var unixTimestamp = new Date( 1477386005*1000 ) ;

commonTime = unixTimestamp.toLocaleString();

alert(commonTime);

这时候的结果是:

但是我希望转换为我自己想要的格式,就在本页面重写一下  toLocaleString()方法即可。

Date.prototype.toLocaleString = function() {

return this.getFullYear() + "年" + (this.getMonth() + 1) + "月" + this.getDate() + "日 " + this.getHours() + "点" + this.getMinutes() + "分" + this.getSeconds() + "秒";

};

   结果为:

或者其他想要的格式:

 

Date.prototype.toLocaleString = function() {

return this.getFullYear() + "/" + (this.getMonth() + 1) + "/" + this.getDate() + "/ " + this.getHours() + ":" + this.getMinutes() + ":" + this.getSeconds();

};

结果为:

26、错误问题:

解决方法:重新安装服务

27、 Unknown return value type: java.lang.Integer

原因之一: 没有写@responseBody注解

28、如何在服务器端的程序中判断时间是否是新的一天。

    思想:在数据库里专门建一个表存放时间,在使用过程中获取当前系统时间后去数据库里查询是否有这个时间,有则不是新一天。没有查到则是新一天,并把这一天存到数据库中。

29、项目中逻辑编写:

要记住:在Controller层是能写一些简单的逻辑代码,主要的逻辑代码需要一定要在Service里面写。这样才符合SSM框架SVM模式的设计理念,同时在Service层里面有事务可以保证访问数据库的安全性。

文章来源: blog.csdn.net,作者:轻狂书生FS,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/LookForDream_/article/details/86634290

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。