本文最后更新于:1 小时前
写在前面 山西中维
2024年3月15日
三月十四号中午一点,我上午投递的 BOSS 回复我了。简单聊了一会儿,看出来他现在确实很需要人才,于是很爽快地约面十五号下午了。
今天上午一直没精神,快七点那会儿醒的,算这学期开学以来起的最早的了。周五上午两节课,看着电脑迷迷糊糊的,只是不知道背了些什么。醒得太早了,一早上竟然都提不起精神。十点多在 BOSS 上确认了下今天下午四点的面试,问公司能不能准时安排。好不容易挨过了上午,吃完饭就回到教室了,这会儿公司那边还没消息。像过去的一周一样,打开电脑充上电,刷着视频听着歌,一种久违的快乐涌上心头。对呀,我现在的生活多滋润:课程又少,逼事不多,一天到晚还是自由自在的。想到这里我就瞬间释然了,心里默默做了一个决定:日常实习就算了,接下来几个月,加把劲努努力,找个大厂暑期实习就好了。至于今天下午的面试,现在都还没消息呢!大抵是对我没啥信心,要不然我也别去了。大热天的倒两趟公交去那里面试,这不纯纯自讨苦吃?我这样想着,开开心心地跟我兄弟要约好打游戏了。
还没开始玩呢,扫了一眼平板上的信息,那家 BOSS 竟然回复我了。打开一看好家伙,公司那边是没问题的,要我再发一份简历给他,他转交给人事下午联系我。看来这面试是推脱不了了,那我就得硬着头皮上了。管他呢,现在才十二点半,离下午四点还早,玩个尽兴再说。看了两个视频就开始打游戏了,时间过得真快,半个多小时就过去了,时间来到了一点十五分。
哟,估计下午两点就得起身了,抓紧时间看会儿面试题吧。接下来的半个多小时里,我心不在焉的记忆着那些看过无数遍的知识点。很奇怪啊,虽然是要面对第一次线下面试,我的内心是丝毫不慌张的。过去两年多的大学生活历炼出了我这样的性格。都约好时间了,人家做好准备还叫我过去面试,不过是聊聊职业规划和目标、谈谈技术问题嘛,这可是我最拿手的。相较于视频远程面试,显然我是很倾向于这次线下面对面交流的。
磨蹭到了一点五十分,再不愿意也得动身出发了。我赶快掏出手机打开微信小程序,预定了校内天猫实体店的远程打印服务。打印简历彩色两份,拿好手机和平板装入手提包。想着也没什么别的要拿得了吧,简单整理了一下即刻动身了。谁曾想我没注意看手机电量,这个决定让我后悔了一下午。下了致远楼穿过求真楼,直奔天猫实体店。走到求真楼楼底下那会儿,山西中维的人事给我打了电话,确认了我是今天下午四点要来面试的。过了一会儿还加了微信,确认了面试地点是新岛科技园四层楼。拿到纸质版简历之后我就跑出校门了,这会儿是两点十分左右。看着校门外车水马龙的,暖阳透过云层洒在我的面颊,伴随着微风拂过,此时此刻我竟然感觉很清爽。好想在这里多呆一会儿,可惜我还有个该死的面试。我已经决意要打个出租了,打个车很快的,最慢半个小时也就到了。不慌不忙地在高德上叫了辆出租,虽然路上有点堵,但半小时后还是到了新岛科技园大门外。
1 路上还看到了山西大学坞城校区,上次来这里是去年在隔壁财经大学考试的时候经过了,再上次就是21年大一那会儿来这里吃过小火锅。
1 新岛科技园,其实就是个小区,给我一种有点熟悉又安静的感觉。
就在大门外下车吧,看着时间还早,不到三点的样子。走过门卫进了小区,确实是个好小区。小区不大,跟我家那边的小区差不多,安安静静的,大概全中国的小区都是这样子的吧。我看着地图来到了B楼底下,正想着怎么上楼呢,旁边餐厅门口的小伙热心地走过来问我要去哪。看着我低头看手机地图摸索,他肯定明白我是外来的,对这里不太熟悉。我跟他确认了这是新岛科技园B座,他指示了下要上四层还得绕到楼后边的楼梯口。很感谢这位大哥啊,节省了我不少时间。绕到楼后边果然发现了楼梯口,不过现在上去还为时过早,就在附近随便转转吧。转了一圈没啥意思,这会儿都已经三点了,还是为一个小时之后的面试做做准备吧。我来到小区中央的花园,找了个台阶就坐下了。
1 在小区里转了两圈,随便拍下来的,做个纪念,以后可能再不会来这了。
到了这时才发现手机只剩下百分之四十的电量了,赶紧把所有后台清空,定位也关了扔在一旁。抓紧这点时间看看面试题,但还是有些力不从心的。大中午的没睡个好觉,坐在这里口干舌燥的,更着急的是有点尿急还想上厕所呢。那没啥好办法,只能是等了。到了三点五十,我站起身来整理了下,重新来到了楼梯口。跟人事微信上打了招呼就上了四楼。到了门口人家把我叫进去了,领着我到了一间办公室开始填表。只是一些简单的个人信息和职业规划,表很快就填完了。我简单做了自我介绍,她也给我讲了下公司规模、业务方向,态度很诚恳。过了两分钟左右,她又领着我来到隔壁办公室,说待会儿有会部门的人来考察面试。
很快就有人进来了,是个年轻人。他介绍他是软件自研部门主管,就开始面试了。还是简单地做了下自我介绍,跟主管做了下技术上的探讨,这里就不多说了。他的考查方式很有特点,点到为止,光听你的回答就能看出你在这方面的理解力和水平了。有不会的他也会细致地讲解和纠正,还很愿意跟我分享公司的情况、入职注意事项啥的。最后的结果是他对我很满意,首先是计算机理论基础比较扎实,再一个是山西大学的学生,这个相较于其他学校的学生来讲,还是很有优势的。最后探讨了下薪资问题和就职时间问题,还把人事领进来聊了会儿,这场长达一个多小时的面试就结束了。
这次面试很愉快啊,下了楼就快六点了。等我出了小区,穿过两条街到了对面公交站点等公交的时候,手机就剩二十度电了。这站牌下人还挺多,车来车往的也很热闹,跟身旁候车的其他人一样,我的脸上也是写满了疲惫。我不熟悉这片的通勤路线,只是一边看着高德地图推荐的公交方案,一边留意着过往的车辆。连续来了好几趟公交,要么不是我要坐的,要么就是人满了挤不上去。等了有十五分钟左右,好歹上了一辆公交。上车的时候还刷错卡了,这躺车的乘车码竟然是晋中卡,我还拿着太原市卡刷车呢。过了几个站点,陆续上来好几拨人,我从前门口被挤到后门口,手机抓在手里都抬不起胳膊来,难受得要命。最关键的是我的手机还没电了,眼看着就剩十九度电了,还在一点一点往下掉。更麻烦的是我到现在还不太明白这趟车的行程是什么样的,只是看着高德地图上它是往财经大学方向开过去的,管他呢,丢不了。过了十五分钟,司机吆喝一声“财经大学有没有要下的”,我就立刻反应过来了。财经大学站点下了公交,附近就会有86路公交直达东山校区的,我赶紧在这个站点下了车。
下了公交穿过一条街,径直来到财经大学和山西大学坞城校区前的公交站点候车。这个地方感觉很熟悉,五个月前我来财大考取软考证书的时候就来过这里。等了七八分钟左右,86路公交就来了。坐上86路公交,我的心终于放平了。大约过了四十分钟,总算抵达东山小区南门口了。晚上这里很热闹啊,街对面都是摆摊的。这情景跟上次我考完试回来简直一模一样,不过这次我还拍了照录了视频。
1 等到回家已经晚了,坐上86路之后,又途径山西大学坞城校区。
排队刷脸进了校园,这会儿才七点半,比我预料的要快很多。不过我快要饿死了,一进校园就赶快往餐厅跑,连快递都顾不上取。来到餐厅本来打算先去二楼上个厕所的,无奈实在是太饿了,走到一楼看见稀饭窗口还有卖的就停下脚步了。买了一碗小米粥和三个饼,就开始狼吞虎咽起来。吃完饭出了餐厅就整八点了,这会儿手机竟然撑住了,还剩九度电量。稍作休整,直接去致远楼教室。
还是熟悉的位置啊,这地方感觉可真温馨。中午两点出了教室门,在外面跑跳了一下午,坐车太久了还有点晕车。跟好兄弟和小穆微信里聊下午的的事,总算能安心地玩一会儿了。我只感觉这几天的努力没有白费,就算今天的面试结果没有着落,我也不会后悔。只是这两天要好好休息下了,在接到公司的通知前,我得好好调养调养,一是为了在正式工作前修正一番,二是最近一段时间确实心力交瘁了,哪怕结果对我不利,我也好及时准备接下来的简历投递。特么的放假说早了,这哪里放假了,比上周一整周都累人。
这次的面试情况就是这样。
办公环境
2024年5月2日
一直想找个机会拍拍办公环境的,但是大家都在实在不好举起手机拍。不过上周周一早上来的比较早,办公室里也没多少人,就拍了几张。
职场经历 认识新同事
2024年3月19日
入职第一天
2024年4月1日
部门新招来一名实习生,大四的比我要大一岁,同龄人之间还是很好交流沟通的。
树宙又给我推了两个美食UP主,我慷慨地给他展示了我前两天炒的酸辣白菜。
2024年4月18日
时间过得真快啊,这就十八号了。
树宙真是个有趣的人,今天他主要是签名那一大摞文件,几乎没咋参与小程序测试。
一直到下班的前一刻,他还在鼓捣个人博客站点。个人博客搭建本来就很麻烦,肯定不是一帆风顺的,更何况他选择的主题跟我不一样,能帮到他的就很有限了。
下班了跟他边走边聊,发现他人很踏实很实在,我喜欢这个朋友。
不同于刚来单位的那些日子,身边没有同龄人跟我讲话,我比较难受。这下好了,树宙大我一岁,很幸运能遇到这个朋友。当然了,他也很崇拜我哈哈哈,经常问我说怎么学的这些东西。
今天又是愉快的一天,再过一天就是周末了,期待。
公司软著整理
2024年3月21日
终止进程:运行tomcat报错:Address localhost:1099 is already in use-CSDN博客
运行项目流程 :
登录 MySQL,连接本地数据库:
修改数据库连接配置:
IDEA 配置本地 Maven:
新建数据库:
执行 SQL 文件,向数据库中导入数据:
执行命令,打包项目:
直接执行启动类,运行项目:
启动 tomcat 服务器,部署项目:
服务器启动成功:
2024年3月25日
写代码,做项目,一定是一个一个地解决问题,不能急于求成。
网上拉的项目他不靠谱,要么没配置文件,要么没数据库文件。
1 2 3 4 5 6 7 8 9 10 java.sql .SQLException : com.mysql .cj .jdbc .Driver at com.alibaba .druid .util .JdbcUtils .createDriver (JdbcUtils.java :600 ) ~[druid-1.1.10.jar:1.1.10] at com.alibaba .druid .pool .DruidDataSource .init (DruidDataSource.java :817 ) ~[druid-1.1.10.jar:1.1.10] at java.base/jdk.internal .reflect .NativeMethodAccessorImpl .invoke0 (Native Method) ~[na:na] at java.base/jdk.internal .reflect .NativeMethodAccessorImpl .invoke (NativeMethodAccessorImpl.java :62 ) ~[na:na] at java.base/jdk.internal .reflect .DelegatingMethodAccessorImpl .invoke (DelegatingMethodAccessorImpl.java :43 ) ~[na:na] at java.base/java.lang .reflect .Method .invoke (Method.java :566 ) ~[na:na] at org.springframework .beans .factory .support .AbstractAutowireCapableBeanFactory .invokeCustomInitMethod (AbstractAutowireCapableBeanFactory.java :1920 ) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework .beans .factory .support .AbstractAutowireCapableBeanFactory .invokeInitMethods (AbstractAutowireCapableBeanFactory.java :1862 ) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework .beans .factory .support .AbstractAutowireCapableBeanFactory .initializeBean (AbstractAutowireCapableBeanFactory.java :1790 ) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
1 2 3 4 5 6 7 8 9 10 11 12 13 <dependency > <groupId > com.alibaba</groupId > <artifactId > druid-spring-boot-starter</artifactId > <version > 1.2.15</version > </dependency > <dependency > <groupId > mysql</groupId > <artifactId > mysql-connector-java</artifactId > <version > $ {mysql.version} </version > </dependency >
改了下 MySQL 依赖就能启动成功了
java.sql.SQLException: com.mysql.cj.jdbc.Driver-CSDN博客
特么的,好久没有在网上拉代码了,一如既往的恶心人啊。
哇呀呀,不是没 sql 脚本就是没没有填充数据,找个开源现成的项目就这么难
今天这任务完成不了了。
下午开了组会,汇报了工作,明天这工作就要完成了,嘿嘿嘿
2024年3月26日
公司软著归档基本完成了,这花费了一周多的时间。
本来启顺软著十六个就挺多了,趁着周末的空隙,我疯狂地找了很多可直接运行的管理系统项目代码。结果第二周来了又说讯网的十个软著只能给到我四个,剩下六个还得我做。我这一口气得做二十二个原创软著是吧,晚上回去也玩得不安稳,边看视频边找代码跑代码。
基本都是简单的管理系统,不过能跑起来应付检查就行,在这里放几个软著项目截图吧:
2024年4月11日
上次推送公司软著归档的时候,把打包文件和第三方依赖都推送上去了,导致项目体量大得惊人,足足有5G多。
我删除了每个项目里的 .idea、.git、target 目录和一些不需要用到的前端文件。总之一句话,只要删了不影响项目运行,就统统删除掉。
软著归档体量总算小点了,700MB多一点,推送并验收完成。
检察院可视化
2024年3月27日
今天开始做检察院可视化项目,拉取代码成功运行并熟悉核心业务逻辑。
后端 安装子模块出现问题:
关于pom.xml一直提示Could not transfer artifact(无法搬运)+无法解析maven依赖的问题,我在学习springboot的过程中遇到的一些问题-CSDN博客
这个问题我直接执行一键安装全部模块,然后单独安装每个子模块就可以
若依前端出现报错,解决方法:
若依报错解决_> ruoyi@3.8.6 dev > vue-cli-service serve info sta-CSDN博客
1 $env :NODE_OPTIONS="--openssl-legacy-provider"
执行这条命令,确实百分百永久解决问题
Java spring 注解 @PostConstruct 实战讲解-CSDN博客
运行出现报错 ,中午解决了
很好,问题已解决:
这个错误日志显示了一个java.lang.NoClassDefFoundError
异常,具体是找不到javax.xml.bind.DatatypeConverter
类。DatatypeConverter
是Java平台的一个类,用于在不同类型的Java数据类型和字符串之间进行转换,它属于Java的JAXB(Java Architecture for XML Binding)API的一部分。
这个异常通常发生在Java 9及以上版本的环境中,因为从Java 9开始,JAXB不再作为Java SE的一部分,而是被标记为模块化的JDK中的可选部分。如果你的应用是基于Java 9或更高版本,并且你没有显式地将JAXB添加到你的项目依赖中,就可能会遇到这个问题。
要解决这个问题,你有以下几个选项:
添加JAXB依赖 : 在你的项目构建文件(如Maven的pom.xml
或Gradle的build.gradle
)中,添加JAXB的依赖。例如,如果你使用Maven,可以添加如下依赖:
1 2 3 4 5 6 7 8 9 10 <dependency > <groupId > javax.xml.bind</groupId > <artifactId > jaxb-api</artifactId > <version > 2.3.1</version > </dependency > <dependency > <groupId > org.glassfish.jaxb</groupId > <artifactId > jaxb-runtime</artifactId > <version > 2.3.1</version > </dependency >
确保使用与你项目兼容的JAXB版本。
使用Java 8 : 如果你的项目没有特定的理由必须使用Java 9或更高版本,你可以考虑切换回Java 8,因为JAXB在Java 8中是内置的。
添加JVM参数 : 如果你使用的是Java 9或更高版本,并且不想修改项目依赖,你可以尝试通过添加JVM参数来启用JAXB模块。例如,你可以添加如下JVM参数:
1 2 3 shell复制代码 --add-modules java.se.ee
然而,请注意,这种方法并不是官方推荐的,并且可能在未来的Java版本中不再有效。
检查代码库 : 如果DatatypeConverter
是由某个库间接使用的,那么你可能需要更新这个库到支持Java 9及以上版本的版本,或者寻找一个替代库。
请根据你的具体情况选择最合适的解决方案。如果你正在使用Spring Boot,确保你的Spring Boot版本与你的Java版本兼容,因为Spring Boot通常会处理这类依赖问题。如果问题依然存在,可能需要进一步检查你的项目配置和依赖关系。
简单看一下这个检察院可视化项目吧(大同检察院可视化 ),就是一个大屏数据统计分析系统:
2024年3月28日
海红简要讲解了朔州检察院可视化项目核心业务逻辑,我自行查看数据库表字段属性,逐段 debug 分析:
入参:部门id(belongDeptId),排名(sortNum),日期(time),指标等级(indexLevel)
根据时间(time)获取 newTime;根据部门id(belongDeptId)获取父单位id(parentId);根据(newTime + parentId)更新指标等级(indexLevel);根据指标等级(indexLevel)拿到字典类型(dictType)
联表查询指标库(bus_index_library)、指标数据(bus_index_value)、部门表(bus_dept)
朔州市查询,部门就为朔州市院;各县市查询,部门为对应县市院。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <select id="selectRankingDetails" resultType="com.zw.business.domain.vo.ResultVo" > select d.index_value_id id, d.index_id indexId, belong_dept_id belongDeptId, sort_num sortNum, index_name indexName, index_until indexUntil, index_type indexType, index_value indexValue, index_parent_value indexParentValue,d.group_sort as groupSort, e.notification as notification ,e.index_order as indexOrder, e.index_logo as indexLogo from bus_index_value d left join bus_index_library e on d.index_id=e.index_id left join sys_dept f on belong_dept_id = dept_id where belong_dept_id = #{belongDeptId} <if test="indexIds != null and indexIds != ''" > and d.index_id in (${indexIds}) </if > <if test="sortNum != null and sortNum != ''" > and d.sort_num = #{sortNum} </if > <if test="newTime != null and newTime != ''" > and d.index_time like concat (#{newTime},'%' ) </if > <if test="valueLevel != null and valueLevel != ''" > and d.value_level = #{valueLevel} </if > <if test="indexLevel != null and indexLevel != ''" > and e.index_level = #{indexLevel} </if > <if test="isCore != null and isCore != ''" > and e.is_core = #{isCore} </if > <if test="isSort != null and isSort != ''" > and e.is_sort = #{isSort} </if > </select>
根据字典类型(dictType)查询获取字典标签(dictLabel),给所有记录设置字典标签 / 业务类型。
默认指标等级(index_level)是2,该指标等级对应的指标类型为:DICT_TYPE_INDEX_56,即字典类型。根据字典类型查询字典库(dict_library)获取到的字典标签列表,并按字典数据(dictValue)升序排序。
1 2 3 @Select("select dict_value as dictValue, dict_label dictLabel, remark as remark from sys_dict_data where dict_type = #{dictType} ORDER BY dict_value") public List<SysDictData> getIndexTypeList (String dictType) ;
根据字典数据(dictValue)升序排序获取的字典标签(dictLabel)。每个指标名称都有所属指标类型(即字典标签 dictLabel),用指标类型(index_type)关联(dictValue)。
1 2 Map<String, String> indexTypeMap = indexUtils.getIndexTypeMap(dictType); list.forEach(data -> data.setDictLabel(indexTypeMap.get(data.getIndexType())));
一次三表联查 + 单表查询,我们查询到了完整的数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 { "id" : "27777" , "indexParentValue" : 1.07 , "sortNum" : 1 , "belongDeptId" : 140600 , "indexTime" : "2023-09-02T00:00:00.000+0800" , "indexId" : "277" , "indexName" : "刑事“案-件比”" , "indexUntil" : "≤1.33" , "indexShort" : "刑事“案-件比”" , "indexType" : "0" , "indexTypeSecond" : "" , "indexTypeThird" : "" , "dictLabel" : "刑事检察" , "deptId" : 140600 , "deptName" : "朔州市院" , "sortNumStr" : "≤1.33" , "notification" : 1.33 , "indexOrder" : "1" , "isCore" : "0" , "isSort" : "0" , "indexLogo" : "0" , "groupSort" : "---" , "showId" : "1" }
删除了认证授权校验,方便接口测试
2024年3月29日
2024年4月12日
完成大同检察院可视化项目指标数据导入,以及对大同检察院可视化项目数据做最后核验
IDEA 书签
【效率提升】IDEA中书签功能的妙用_idea 书签-CSDN博客
Spring MySQL 配置:
MySQL 之 InvalidConnectionAttributeException,SQLNonTransientConnectionException_sqlnontransientconnectionexception: server shutdow-CSDN博客
MySQL 的这行配置还有点门道:
1 url: jdbc:mysql://122.9.51.171:3306/test_shuozhou?serverTimezone=UTC&allowMultiQueries=true&autoReconnect=true&useUnicode=true&failOverReadOnly=false&useSSL=false&characterEncoding=utf-8
Postman 测试文件上传接口:
Postman 上传文件 返回 500 报错 “Current request is not a multipart request” 解决_postman current request is not a multipart request-CSDN博客
Excel 表格修改后缀:
The supplied data appears to be in the OLE2 Format.-CSDN博客
直接修改 Excel 文件后缀 .xls 为 .xlsx,会报错,需要另存为新的 Excel 文件。
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘his-CSDN博客
部署项目 Failure obtaining db row lock: Table ‘XXX.qrtz_LOCKS‘ doesn‘t exist-CSDN博客
2024年4月16日
上午最后调整大同检察院的文档生成功能 ,还需要调整的地方蛮多的:
拿到数据以后就要根据文档模板路径填充数据,生成文档(模板生成条件 type 需要注意下):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 public class DocUtilNew { private static String newAnalysicFor48Path = DocPathVo.getNewAnalysicFor48Path(); private static String newSimpleFor48Path = DocPathVo.getNewSimpleFor48Path(); public static String replace48Doc (HashMap<String, Object> dataMap, Integer type) throws Exception { String frameWordPath = "" ; switch (type) { case 8 : frameWordPath = newAnalysicFor48Path; break ; case 9 : frameWordPath = newSimpleFor48Path; break ; } Map<String, String> doc = createDoc(); String docPathx = doc.get("absolutePath" ); ByteArrayOutputStream byteArrayOutputStream = readwriteWord(frameWordPath, dataMap); FileOutputStream outputStream = new FileOutputStream (docPathx); outputStream.write(byteArrayOutputStream.toByteArray()); byteArrayOutputStream.close(); outputStream.close(); return doc.get("fileName" ); } ......................................... }
新增48项指标模板文档路径,并读取配置文件获取模板文档路径:
1 2 newAnalysicFor48Path: D:/zw/uploadPath/template/dt48NewAnalysis.doc newSimpleFor48Path: D:/zw/uploadPath/template/dt48NewSimple.doc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 @SuppressWarnings("ALL") @Component public class DocPathVo { private static String newAnalysicFor48Path; private static String newSimpleFor48Path; public static String getNewAnalysicFor48Path () { return newAnalysicFor48Path; } @Value("${docPath.newAnalysicFor48Path}") public void setNewAnalysicFor48Path (String newAnalysicFor48Path) { DocPathVo.newAnalysicFor48Path = newAnalysicFor48Path; } public static String getNewSimpleFor48Path () { return newSimpleFor48Path; } @Value("${docPath.newSimpleFor48Path}") public void setNewSimpleFor48Path (String newSimpleFor48Path) { DocPathVo.newSimpleFor48Path = newSimpleFor48Path; } ......................................... }
至此,48项组合指标分析文档即大同检察院可视化文档生成功能 完成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @Override public String generateDocFor48 (String monthId, Integer type) throws Exception { HashMap<String, Object> dataMap; DocContextNew docContextNew = new DocContextNew (null ); switch (type) { case 8 : docContextNew = new DocContextNew (get48AnalysisData); break ; case 9 : docContextNew = new DocContextNew (get48SimpleData); break ; } dataMap = docContextNew.executeGetDataForDoc(monthId); return DocUtilNew.replace48Doc(dataMap, type); }
1 2 3 4 5 6 7 8 9 10 11 12 else if (DictDataConstant.FORTY_EIGHT_YEAR.equals(year)) { for (Integer type : docTypeFor48) { fileName = service.generateDocFor48(monthId, type); DocFile docFile = new DocFile (null , monthId, fileName, Long.valueOf(type)); docFile.setCreateTime(new Date ()); docFileMapper.insertDoc(docFile); logger.info(monthId + "月份" + type + "文件生成成功" ); } } else { return AjaxResult.error("文档生成失败,请检查选取月份指标数据!" ); }
执行生成2月份指标数据分析文档成功,生成文档如下(指标分析文档 + 与平均值差距文档,当前数据均为假数据):
新人入职培训 组织架构调整
2024年4月15日
今天,软件部内部做了新一轮的组织架构调整,整体划分为软件部一部、软件部二部和软件部三部。
各个小的部门,都分派一位能力较强的同事为组长。作为管理人员,组长手下组员有2-4名,直接负责他们的任务派发及验收、问题汇总以及工作汇报等。各个小组组长由软件部内部一名部长管理,直接负责与小组组长的对接,而部长负责直接与主管沟通。
还有个新的绩效考核规范,主要是为了督促员工认真工作,奖惩分明。
[1000_软件部共享文档清单 (yuque.com)](https://www.yuque.com/lingchen-e1frz/fcl824/vxf86clpsd3fk7n3# 《1000_软件部共享文档清单》)
闻喜智慧平台 给了git权限,拉取代码至本地,熟悉业务逻辑
一堆爆红 ,不好搞,目前也没人有时间教教我们,带着看业务逻辑和代码。只好是看看大屏运行效果和闻喜相关文档
关于pom.xml一直提示Could not transfer artifact(无法搬运)+无法解析maven依赖的问题,我在学习springboot的过程中遇到的一些问题-CSDN博客
maven中Could not transfer artifact xxx from/to xxx错误的最全解决方案-CSDN博客
学一学若依框架:RuoYi
已完成:
1、
已完成:
1、上午完成大同检察院项目核心功能核验,并推送合并至远程仓库。
2、学习闻喜智慧平台使用说明书和需求规格说明书,并巩固学习软件部后端开发规范。
3、查看闻喜后台管理平台和可视化大屏,学习其核心功能。
4、git 拉取闻喜后端代码,尝试运行。
待完成:
1、下午运行闻喜后端代码还有报错,正在跟赵杰商讨解决。
2、闻喜后端代码整体业务逻辑未掌握,需要有人帮忙讲解梳理下核心业务逻辑。
3、今日新人培训笔记待整理。
1 2 3 4 后端项目临时启动方案:1 .application.yml中添加配置spring.jpa.database-platform =org.hibernate.dialect.MySQL57Dialect2 .注释掉SequenceConfig和SequenceConfiguration中的Bean注入
2024年4月17日
今日闻喜易地搬迁项目自测整改计划 :
首页 :基础数据、人员类型、跟踪服务、党组织统计、融入服务、就业服务
融入服务:火灾 - 0,医疗 - 1,交通 - 2,盗窃 - 3,环境卫生 - 4,其他 - 5。
首次进入大屏,融入服务展示数据正常,单击“社区中心”后,“融入服务”返回数据为空,queryAcceptCount?communityId=-1
下午我们团队一直在做闻喜项目的自测整改工作,不会就问高工问小兵。我第一次能切实感受到团队分工合作,这也是入职以来很少有过的体验。我参与了现有功能的测试和问题反馈,这让我有前所未有的参与感与满足感。
四点多还有个新人培训,我听着挺认真的,突然小兵叫我们出来改Bug,哈哈哈哈。加班到七点半,今天的任务完成了,明天的事明天再说。
晚上回来取了快递:月球灯,半袖,竹笛,好玩的东西真不少呢。买包子的时候,老板看我小,五个素包子还另外给我送了一个肉包子。
干点啥好呢?树宙说他被主管叫去谈话了,因为下午下班前人事给了他一大摞纸张让他代签字。关于这事我就不细说了,主管给他说的意思就是给你安排了工作,不相干也得干。这没有办法了,这纯粹是体力活,没有成长不是本职工作更浪费时间。慢慢写吧,有时间就写点,不要干扰自己的工作进度和好心情。催的话就给她甩脸色,谁让你给我这么多的,反将一军。毕竟他们没把实习生当回事,咱也不需要把这任务当回事。
2024年4月18日
我在闻喜自测整改团队 的工作流程是这样的:
分别进入闻喜后台管理平台和闻喜大屏可视化页面,在测试环境下做数据校验核对和审查。
发现问题,就上禅道提Bug,由团队内部开发人员协同解决问题。
今日完成小程序端自测,现在还没给到能访问的小程序端。先看看后端管理平台吧,自己新增几条数据,目前暴露的错误还是蛮多的。
今天提交的问题更多了:
下班有点晚啊,七点半才能走,虽然我的工作早就干完了。不过没事,过了这周,下周就会慢慢调整回来的。
java: Compilation failed: internal java compiler error-CSDN博客
全新整洁的 Java 环境:
IDEA GoLand 问题 Contents have differences only in line separators-CSDN博客
1 2 3 4 5 6 7 8 9 “回车”一词有多重含义。在古汉语中,“回车”指的是调转车头,回转其车。而在计算机领域中,“回车”键是一个重要的按键,其英文标识为“Enter ”。 关于“回车键”的起源,可以追溯到机械英文打字机时代。在机械打字机上,有一个部件叫做“字车”,每打一个单词,“字车”就会前进一格。当打满一行字符后,打字者需要推动“字车”回到起始位置,同时滚筒会上卷一行,以便开始输入下一行。这个推动“字车”回到起始位置的动作就被称为“回车”。 后来,在电动英文打字机上,为了简化操作,人们增加了一个可以直接实现“回车”功能的按键,这个按键就被命名为“回车键”。在电脑键盘上,“回车键”上曾经使用过“CR ”、“RETURN ”的字样,后来才统一确定为“Enter ”。 至于为什么叫“回车”,从机械打字机的角度来看,这个名称直观地描述了“字车”回到起始位置的动作。在打印机中,有一个装置叫做Carriage ,负责带动打印头在纸张上移动。当打印完一行后,Carriage 需要回到行首以便开始下一行的打印,这个操作就被称为Carriage Return ,即回车。因此,“回车”这个名称在计算机领域中得以沿用,用于描述光标或打印头回到行首的动作。 在现代计算机中,回车键除了具有将光标移动到行首的功能外,还常常用于提交输入、执行命令或确认选择等操作。在编程和文本编辑中,回车键也扮演着重要的角色,用于结束一行代码或文本的输入。
自测 Bug 禅道提交 物业报修
牵扯了一系列问题:
1、用户登录小程序之后,没有提供默认昵称 和头像 :
2、该用户使用物业报修功能,提交表单:
3、小程序后台管理 报修管理 能正常看到提交的报修信息:
4、但尝试处理该报修信息时,显示用户昵称不能为空,无法处理:
[结果]
[期望]
用户登录小程序应该强制要求设置昵称,或者给到一个随机昵称
项目完工验收
2024年4月23日
软件开发全文档归档,开发、管理、实施、运维、服务巡检、信息安全、安全运维_软件开发文档管理-CSDN博客
项目管理/互联网/软件全套文档、产品文档、技术文档、测试文档、运维文档、项目文档_互联网公司项目管理过程文档-CSDN博客
Gitlab地址:http://192.168.4.89:8090
禅道地址:http://192.168.4.89:8003/zentao/user-login.html 禅道用户名:自己姓名全拼 初始密码:Sxzw@2021
今天学学后端项目开发规范
这代码生成器太方便了:
2024年4月24日
今天上午请假回学校上体育课,总算处理掉这学期的体育课期末考试了,下面两节课直接旷课不去了😁
中午完成了新人培训第一轮考试,明天再考一轮这培训就结束了。
下午主要配合树宙完成 ZW2022143 和 ZW2022152 项目完工会的资料整理,附上今天的工作汇报 吧:
完成软件项目完工资料清单测试方案、项目评分、需求变更文档和操作说明书的整理,等待验收中。
初步验收闻喜项目调整清单中优先级 P2 和部分 P3 已完成的调整内容,没有发现问题。
继续学习后端培训框架代码和开发规范手册,熟悉项目开发流程。
春季趣味运动会
2024年5月1日
昨天我们单位举办了今年的春季趣味运动会,大家都玩得很开心。
上午也没分配啥任务,我们跟主管一起坐车提前去体育馆布置场地,下午就开始进行运动会了。
参与运动员一共有三组,每组十二名运动员,外加三个裁判和俩领导,一共将近四十号人。开幕式由主持人讲话,介绍游戏规则。游戏项目有三个环节:第一关“心心相印”,大家两人一组背靠背挤着气球跑,谁跑得快用时最短得分就高。第二关“指压板”,踩过五米左右长的指压板,在终点处投进去手里的乒乓球,限制时间内投入越多球得分越高;第三关“接水游戏”,一条长龙嘴对嘴叼个水杯子传递水直到最后桌上的杯子。最后积攒的水越多分数越高。
每个游戏都很有意思,大家都很放松。五点半左右运动会结束,每个人都拿到了小礼品,闭幕式完成,运动会结束了。
再放一些有趣的抓拍镜头吧,都是赛场上认真比赛的运动员们的身影呵。
五一假期来咯,节日快乐。
电子名片
2024年5月6日
初始化 拉代码,跑通:
Projects · Dashboard · GitLab
把本地 Maven conf 下的 settings.xml 文件修改下:
1 2 3 4 5 6 7 8 9 10 11 12 13 <profile > <id > jdk-1.8</id > <activation > <activeByDefault > true</activeByDefault > <jdk > 1.8</jdk > </activation > <properties > <maven.compiler.source > 1.8</maven.compiler.source > <maven.compiler.target > 1.8</maven.compiler.target > <maven.compiler.compilerVersion > 1.8</maven.compiler.compilerVersion > </properties > </profile > </profiles >
困扰我半年多的问题终于解决了,怪不得每次都是默认 JDK 1.7。
这块出现报错,修改 JDK 版本为 8 即可:
1 2 3 4 5 6 7 8 private RSAPrivateKey getRSAPrivateKey() { try { return RSAPrivateCrtKeyImpl .new Key(Base64.decodeBase64 (this .tokenPrivateKey .getBytes () )); } catch (Exception e) { ExceptionHandler . throwCustomException("系统异常" ) ; } return null; }
启动完成,耗时15秒,swagger访问链接:http://192.168.152.1:35005/doc.html
访问 Nacos 注册中心/配置中心:
1 2 3 4 5 6 7 config: namespace: cloud-card-test namespace-config: cloud-card-test group: cloud-card server: 122.9 .50 .161 :8848 username: cloud-card password: Qq2132
动态评论 TODO:
没有通用的返回类,错误码
返回数据校验
Maven仓库介绍以及私服搭建 - yjry-th - 博客园 (cnblogs.com)
需求:
统计未读动态数量,计算和 ,核心代码优化前和优化后的区别,避免了在循环中写 SQL 语句 :
1 2 3 4 5 6 7 8 int notReadNum = 0 ; for (Long dynamicId : dynamicIdList) { int count = this .count(Wrappers.lambdaQuery(DynamicComments.class) .eq(!ValidateUtil.isNullOrEmpty(dynamicId), DynamicComments::getDynamicId, dynamicId) .eq(DynamicComments::getIsRead, DynamicTypeEnum.IS_NOT_READ)); notReadNum += count; }
1 2 3 4 5 6 7 8 9 10 int notReadNum = 0 ; List<DynamicComments> commentsList = this .lambdaQuery() .in(DynamicComments::getDynamicId, dynamicIdList) .eq(DynamicComments::getIsRead, DynamicTypeEnum.IS_NOT_READ) .list(); if (!ValidateUtil.isNullOrEmpty(commentsList)) { notReadNum = commentsList.size(); }
巩固学习了 MybatisPlus 语法,可以使用链式调用简化写法:
1 2 3 4 5 6 7 8 9 List<DynamicComments> dynamicCommentsList = this .list(this .lambdaQuery() .eq(DynamicComments::getDynamicId, dynamic.getId()) .orderByDesc(DynamicComments::getCreateTime)); List<DynamicComments> list = this .lambdaQuery() .eq(DynamicComments::getDynamicId, dynamic.getId()) .orderByDesc(DynamicComments::getCreateTime) .list();
看下最终的 service 层业务代码 吧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 public Integer getNotReadNumById (List<Dynamic> dynamicList) { if (!ValidateUtil.isNullOrEmpty(dynamicList)) { List<Long> dynamicIdList = dynamicList.stream() .map(Dynamic::getId) .collect(Collectors.toList()); if (ValidateUtil.isNullOrEmpty(dynamicIdList)) return 0 ; int notReadNum = 0 ; List<DynamicComments> commentsList = this .lambdaQuery() .in(DynamicComments::getDynamicId, dynamicIdList) .eq(DynamicComments::getIsRead, DynamicTypeEnum.IS_NOT_READ) .list(); if (!ValidateUtil.isNullOrEmpty(commentsList)) { notReadNum = commentsList.size(); } return notReadNum; } return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public List<DynamicCommentsDTO> listByDynamicId (AppUser appUser, Dynamic dynamic) { List<DynamicComments> dynamicCommentsList = this .lambdaQuery() .eq(DynamicComments::getDynamicId, dynamic.getId()) .orderByDesc(DynamicComments::getCreateTime) .list(); List<DynamicCommentsDTO> commentsDTOS = dynamicCommentsList.stream().map(dynamicComments -> { DynamicCommentsDTO dynamicCommentsDTO = new DynamicCommentsDTO (); dynamicCommentsDTO.setNickName(appUser.getNickName()); dynamicCommentsDTO.setAvatar(appUser.getAvatar()); dynamicCommentsDTO.setContent(dynamicComments.getContent()); dynamicCommentsDTO.setDynamicContent(dynamic.getContent()); dynamicCommentsDTO.setCreateTime(dynamicComments.getContent()); return dynamicCommentsDTO; }).collect(Collectors.toList()); if (ValidateUtil.isNullOrEmpty(commentsDTOS)) return Lists.newArrayList(); return commentsDTOS; }
2024年5月7日
这两段代码效果是一样的,可以学着写一写:
1 2 3 List<Enterprise> list = this .listByIds(ids);if (ValidateUtil.isNullOrEmpty(list)) return new HashMap <>();return list.stream().collect(Collectors.toMap(Enterprise::getId, Function.identity(), (a1, a2) -> a1));
1 2 3 4 5 6 7 8 9 10 Map<Integer, List<Enterprise>> groupedMap = list.stream() .collect(Collectors.groupBy(Enterprise::getId)); Map<Integer, Enterprise> resultMap = groupedMap.entrySet().stream() .collect(Collectors.toMap( Map.Entry::getKey, e -> e.getValue().isEmpty() ? null : e.getValue().get(0 ), LinkedHashMap::new ));
项目文档补充
2024年5月9日
这两天在完成山西中维项目文档补齐,大同智慧检务平台和朔州高质量分析平台 。
写在后面