网站优化计划书,成都网站seo性价比高,深圳宝安区核酸检测点,有教做点心的网站吗您好#xff0c;我是掘金者说#xff0c;最近有点累主要是没有休息好#xff0c;直接请年假一天在家睡了一天一夜补眠。然后#xff0c;假期回老家挖笋顺便和姚总监再聊工作上的事情。上回写的是业务功能的对账#xff0c;现在来讲下在做业务功能“门面”#xff0c;系统…您好我是掘金者说最近有点累主要是没有休息好直接请年假一天在家睡了一天一夜补眠。然后假期回老家挖笋顺便和姚总监再聊工作上的事情。上回写的是业务功能的对账现在来讲下在做业务功能“门面”系统平台的登录后的首页展示几乎都是报表、统计、圆饼图、柱状图。采用微服务前后端分离后端spring cloud前端使用vueelement uiechart前后端都是一个人进行弄。原型图改了第一版后来又改了一版本功能又确认了…里面不弄不知道细碎的东西可真多。前端页面绘制后端接口编写数据库语句编写单元调试…
什么是业务
通俗的讲业务就是需要处理的各种事务但是通常偏向指客户实际作业涉及的事务业务最终的目的是完成工作所做的所有事务。
业务和技术的关系
软件是用来解决现实世界中的业务给人们的工作带来便利的。技术是为了解决业务的问题只有在实现业务给人们带来便利的前提下技术的存在才有意义。所以多数时候是业务决定技术业务统领技术。没有技术业务就无法被虚拟化生产效率就很难有效提升业务和技术具有相互促进、相互依赖、相互共存的关系。我们都看过周星驰的电影《喜剧之王》有一句台词这么说的其实我是一个演员。作为我们来说其实我是一个程序员。 一个道理。我们回到开发者身上来看写业务代码多一些还是所谓的技术代码多一些没有高低之分只有个人取向和组织分工的不同。
业务和因解决业务而衍生的
很多开发者会用不同的眼光来看待业务和技术比如把增删改查CRUD看作是无意义的业务代码其实可以使用代码生成器来实现前端后端数据库脚本生成具体可以参考pig4cloud把实现 MQ 或 Redis 这样的框架看作是有技术含量的事情。实际上所谓的业务代码和技术代码只是距离远近业务代码距离业务更近技术代码离业务稍远他们最终都是指向业务实现的。每一层技术实现都是服务于上一层的需求为业务。现实中业务在被我们虚拟化的过程中会在技术实现角度引发分层产生组件模块化。这样让开发者觉得技术实现越来越业务没有技术含金量面试的时候被问道多线程、高可用、高并发、高性能、某实现原理和机制、遇到难点和解决方法思路等等导致概括能力和实战运用退化这个需要平时多训练和琢磨。 当我们越是接近用户业务会发现里面的细节越多繁琐度越高越不容易做的好越容易遐思而被否定让人觉得自己的劳动没有价值。遐思性越强变化几率越高来来回回频繁的修改代码正所谓牵一发动全身。让人觉得自己的掌控能力低实现的代码可迁移性越差个人的劳动成果被能力复用的概率越低。
好了这些话不是我想多说的我摊牌了具体想看直接知乎对开发来讲业务重要还是技术重要 。现在讲述一个首页“门面”代码实现记录。 数据统计补全机制
Java核心逻辑数据统计根据按时/天/周/月/年补全某一段时间的数据。情况是这样的数据库查询的数据统计使用sql语句查询group by create_time之后有部分时间的数据没有希望通过补充0提供给前端展示。
按年补全数据-具体逻辑 /*** 按年补全数据-具体逻辑** param oldList* param start* param end* return*/public static ListMapString, String addYearForNullMap(ListMapString, String oldList, String start, String end) {int n getYearSub(start, end) 1;ArrayListMapString, String newList new ArrayList();int num oldList.size();int temp 0;Date startDate DateUtil.parse(start, yyyy);Date endDate DateUtil.parse(end, yyyy);Date tmpDate null;if (startDate null || endDate null) {return newList;}for (int i 0; i n; i) {if (temp num) {String orderTime ObjectUtil.toString(oldList.get(temp).get(orderTime));tmpDate DateUtil.parse(orderTime, yyyy);//如果开始日期小于当前记录日期则增加空白数据if (startDate.compareTo(tmpDate) 0) {MapString, String result getNewStatisticResultMap(start);newList.add(result);}if (startDate.compareTo(tmpDate) 0) {//原数据加入newList.add(oldList.get(temp));temp;}} else if (temp num startDate.compareTo(endDate) 0) {//加入空数据直到结束时间MapString, String result getNewStatisticResultMap(start);newList.add(result);}//开始时间向前加一年startDate addDateOneYear(startDate);start DateUtil.format(startDate, yyyy);}return newList;}
按日补全数据-具体逻辑 /*** 按日补全数据-具体逻辑** param oldList* param start* param end* return*/public static ListMapString, String addDayForNullMap(ListMapString, String oldList, String start, String end) {long n getDaySub(start, end) 1;ArrayListMapString, String newList new ArrayList();int num oldList.size();int temp 0;Date startDate DateUtil.parse(start, yyyy-MM-dd);Date endDate DateUtil.parse(end, yyyy-MM-dd);Date tmpDate null;if (startDate null || endDate null) {return newList;}for (int i 0; i n; i) {if (temp num) {tmpDate stringToDate(ObjectUtil.toString(oldList.get(temp).get(orderTime)), yyyy-MM-dd);//如果开始日期小于当前记录日期则增加空白数据if (startDate.compareTo(tmpDate) 0) {MapString, String result getNewStatisticResultMap(start);newList.add(result);}if (startDate.compareTo(tmpDate) 0) {//原数据加入newList.add(oldList.get(temp));temp;}} else if (temp num startDate.compareTo(endDate) 0) {//加入空数据直到结束时间MapString, String result getNewStatisticResultMap(start);newList.add(result);}//开始时间向前加一天startDate addDateOneDay(startDate);start DateUtil.format(startDate, yyyy-MM-dd);}return newList;}
或者 /*** 按日补全数据-具体逻辑** param oldList* param start* param end* return*/public static ListStatisticResult addDayForNull(ListStatisticResult oldList, String start, String end) {long n getDaySub(start, end) 1;ArrayListStatisticResult newList new ArrayList();int num oldList.size();int temp 0;Date startDate DateUtil.parse(start, yyyy-MM-dd);Date endDate DateUtil.parse(end, yyyy-MM-dd);Date tmpDate null;if (startDate null || endDate null) {return newList;}StatisticResult dog null;SimpleDateFormat dateFormat new SimpleDateFormat(yyyy-MM-dd);for (int i 0; i n; i) {if (temp num) {tmpDate DateUtil.parse(ObjectUtil.toString(oldList.get(temp).getTime()), yyyy-MM-dd);//如果开始日期小于当前记录日期则增加空白数据if (startDate.compareTo(tmpDate) 0) {StatisticResult result getNewStatisticResult(start);newList.add(result);}if (startDate.compareTo(tmpDate) 0) {//原数据加入newList.add(oldList.get(temp));temp;}} else if (temp num startDate.compareTo(endDate) 0) {//加入空数据直到结束时间StatisticResult result getNewStatisticResult(start);newList.add(result);}//开始时间向前加一天startDate addDateOneDay(startDate);start DateUtil.format(startDate, yyyy-MM-dd);}return newList;}
根据开始与结束日期获取相减得到的天数 /*** 根据开始与结束日期获取相减得到的天数** param beginDateStr* param endDateStr* return*/public static long getDaySub(String beginDateStr, String endDateStr) {long day 0;SimpleDateFormat format new SimpleDateFormat(yyyy-MM-dd);Date beginDate;Date endDate;try {beginDate format.parse(beginDateStr);endDate format.parse(endDateStr);day (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);} catch (ParseException e) {e.printStackTrace();}return day;}根据开始与结束日期获取相减得到的年数 /*** 根据开始与结束日期获取相减得到的年数** param beginDateStr* param endDateStr* return*/public static int getYearSub(String beginDateStr, String endDateStr) {int year 0;SimpleDateFormat format new SimpleDateFormat(yyyy);Date beginDate, endDate;try {beginDate format.parse(beginDateStr);endDate format.parse(endDateStr);Calendar calendarBegin new GregorianCalendar();Calendar calendarEnd new GregorianCalendar();calendarBegin.setTime(beginDate);calendarEnd.setTime(endDate);int yearBegin calendarBegin.get(Calendar.YEAR);int yearEnd calendarEnd.get(Calendar.YEAR);year (yearEnd - yearBegin) ;} catch (ParseException e) {e.printStackTrace();}return year;}单元测试 Testpublic void addMonthsForNull() {ListStatisticResult oldList new ArrayList();StatisticResult st1 new StatisticResult();StatisticResult st2 new StatisticResult();st1.setAction(55);st1.setTime(2020-01-02);st2.setAction(66);st2.setTime(2020-01-03);oldList.add(st1);oldList.add(st2);String start 2020-01-01;String end 2020-01-05;TheFirstStatisticsUtil tt new TheFirstStatisticsUtil();ListStatisticResult list tt.addDayForNull(oldList, start, end);for (StatisticResult sr : list) {System.out.println(sr.toString());}}效果展示
StatisticResult(time2020-01-01, action0)
StatisticResult(time2020-01-02, action55)
StatisticResult(time2020-01-03, action66)
StatisticResult(time2020-01-04, action0)
StatisticResult(time2020-01-05, action0)下一篇介绍前端vue编写的技巧方式现在就写到这吧。 文章转载自: http://www.morning.cnkrd.cn.gov.cn.cnkrd.cn http://www.morning.zlnyk.cn.gov.cn.zlnyk.cn http://www.morning.qwbht.cn.gov.cn.qwbht.cn http://www.morning.cflxx.cn.gov.cn.cflxx.cn http://www.morning.rswtz.cn.gov.cn.rswtz.cn http://www.morning.rfhwc.cn.gov.cn.rfhwc.cn http://www.morning.wrlqr.cn.gov.cn.wrlqr.cn http://www.morning.kycxb.cn.gov.cn.kycxb.cn http://www.morning.rglp.cn.gov.cn.rglp.cn http://www.morning.gwjsm.cn.gov.cn.gwjsm.cn http://www.morning.yhljc.cn.gov.cn.yhljc.cn http://www.morning.gbrps.cn.gov.cn.gbrps.cn http://www.morning.rjznm.cn.gov.cn.rjznm.cn http://www.morning.qnjcx.cn.gov.cn.qnjcx.cn http://www.morning.rbhqz.cn.gov.cn.rbhqz.cn http://www.morning.rkfxc.cn.gov.cn.rkfxc.cn http://www.morning.yhywr.cn.gov.cn.yhywr.cn http://www.morning.yrddl.cn.gov.cn.yrddl.cn http://www.morning.ptmsk.cn.gov.cn.ptmsk.cn http://www.morning.dkfrd.cn.gov.cn.dkfrd.cn http://www.morning.tnqk.cn.gov.cn.tnqk.cn http://www.morning.kjjbz.cn.gov.cn.kjjbz.cn http://www.morning.flfxb.cn.gov.cn.flfxb.cn http://www.morning.hwlk.cn.gov.cn.hwlk.cn http://www.morning.dbdmr.cn.gov.cn.dbdmr.cn http://www.morning.gmyhq.cn.gov.cn.gmyhq.cn http://www.morning.mbbgk.com.gov.cn.mbbgk.com http://www.morning.kxbdm.cn.gov.cn.kxbdm.cn http://www.morning.fqmbt.cn.gov.cn.fqmbt.cn http://www.morning.bgqr.cn.gov.cn.bgqr.cn http://www.morning.crsqs.cn.gov.cn.crsqs.cn http://www.morning.tcxzn.cn.gov.cn.tcxzn.cn http://www.morning.bkryb.cn.gov.cn.bkryb.cn http://www.morning.kdrly.cn.gov.cn.kdrly.cn http://www.morning.qnbgk.cn.gov.cn.qnbgk.cn http://www.morning.rxwfg.cn.gov.cn.rxwfg.cn http://www.morning.dqrhz.cn.gov.cn.dqrhz.cn http://www.morning.lkfhk.cn.gov.cn.lkfhk.cn http://www.morning.ymqrc.cn.gov.cn.ymqrc.cn http://www.morning.fyskq.cn.gov.cn.fyskq.cn http://www.morning.zkqsc.cn.gov.cn.zkqsc.cn http://www.morning.stpkz.cn.gov.cn.stpkz.cn http://www.morning.nnwnl.cn.gov.cn.nnwnl.cn http://www.morning.cjsrg.cn.gov.cn.cjsrg.cn http://www.morning.hcsnk.cn.gov.cn.hcsnk.cn http://www.morning.nlcw.cn.gov.cn.nlcw.cn http://www.morning.phgz.cn.gov.cn.phgz.cn http://www.morning.mknxd.cn.gov.cn.mknxd.cn http://www.morning.ltywr.cn.gov.cn.ltywr.cn http://www.morning.rrdch.cn.gov.cn.rrdch.cn http://www.morning.hwnnm.cn.gov.cn.hwnnm.cn http://www.morning.xmnlc.cn.gov.cn.xmnlc.cn http://www.morning.hpcpp.cn.gov.cn.hpcpp.cn http://www.morning.nmngq.cn.gov.cn.nmngq.cn http://www.morning.ysjjr.cn.gov.cn.ysjjr.cn http://www.morning.fdrch.cn.gov.cn.fdrch.cn http://www.morning.fnwny.cn.gov.cn.fnwny.cn http://www.morning.xphls.cn.gov.cn.xphls.cn http://www.morning.cbnjt.cn.gov.cn.cbnjt.cn http://www.morning.nqrdx.cn.gov.cn.nqrdx.cn http://www.morning.lmqfq.cn.gov.cn.lmqfq.cn http://www.morning.fwcnx.cn.gov.cn.fwcnx.cn http://www.morning.rrcxs.cn.gov.cn.rrcxs.cn http://www.morning.lxngn.cn.gov.cn.lxngn.cn http://www.morning.dighk.com.gov.cn.dighk.com http://www.morning.rnrwq.cn.gov.cn.rnrwq.cn http://www.morning.lcdtb.cn.gov.cn.lcdtb.cn http://www.morning.ghfmd.cn.gov.cn.ghfmd.cn http://www.morning.qfbzj.cn.gov.cn.qfbzj.cn http://www.morning.nzmhk.cn.gov.cn.nzmhk.cn http://www.morning.drndl.cn.gov.cn.drndl.cn http://www.morning.ylpwc.cn.gov.cn.ylpwc.cn http://www.morning.cyyhy.cn.gov.cn.cyyhy.cn http://www.morning.rszt.cn.gov.cn.rszt.cn http://www.morning.zcckq.cn.gov.cn.zcckq.cn http://www.morning.gwjnm.cn.gov.cn.gwjnm.cn http://www.morning.srcth.cn.gov.cn.srcth.cn http://www.morning.ntwxt.cn.gov.cn.ntwxt.cn http://www.morning.dhpjq.cn.gov.cn.dhpjq.cn http://www.morning.djpzg.cn.gov.cn.djpzg.cn