贵州高速公路总公司——机电管理平台:项目总结
欢迎技术交流。 QQ:138986722
一:
在该项目中、生成工单号、工单共有A、B、C、D这几种类型从"000000001"开始自动增长、增长量为1。
专门有一张表来存储工单:
创建时间 | 工单号 | 工单类型 |
201110011200 | 000000001 | A |
201110111111 | 000000001 | B |
每次在页面加载的时候呢、就Ajax到后台获取工单:
public String queryPurchasingnum(String type) throws Exception { String sql = "select a.code,ROWNUM from (select * from tbnumber where type = ? order by code desc) a where rownum=1 "; List parList = new ArrayList(); parList.add(type); List list = daoSql.find(sql, parList); String pur = ""; if (list != null && list.size() > 0) { Object[] obj = (Object[]) list.get(0); String number = (Integer.parseInt(obj[0].toString()) + 1) + ""; int num = 9 - number.length(); for (int i = 0; i < num; i++) { number = "0" + number; } // 完整的采购单号 pur = type + number; } else { pur = type + "000000001"; } String sql1 = "insert into tbnumber values( ? , ? , ? )"; List parList1 = new ArrayList(); parList1.add(CurrentTime.getStringTime()); parList1.add(pur.substring(1)); parList1.add(type); daoSql.delOrUpdate(sql1, parList1); return pur; }
这条Sql写得:o(︶︿︶)o 唉、刚刚开始的时候、我直接查询
select code from tbnumber where type = '?' and rownum = 1
毫无疑问、这样死得很难看、后来换成了上面的那一条。但是现在想来上面的那条还不如这条:
select max(code) from tbnumber where type = ?
这边在查询出来并生成过后必须在添加到表里面去、因为有可能当用户A在操作的过程中、别的用户B又开始进来添加一个新的工单、如果这样的话、工单号会有冲突!
二:
在报表系统这边、主要是对sql的考验了~~~!!!这次我们并不采用什么插件、而是直接写sql然后接收返回数据、在前台Table显示!
在数据分页的时候、用的是我以前组长(他离职了)写的一个分页控件、然后它是有缺陷的、在分页的时候没有form提交表单、这样死得非常的难看!
这次sql拼装、我可是在次的认识到了自己到底菜到什么地步!
不过还好有度娘、谷爸、跟CSDN社区的朋友帮忙!
在没进公司之前呢、我就知道有个叫Oracle的数据库、然后公司用的就是它、要说我对Oracle不怎么了解还不如说我对数据库语言不怎么了解!
以前在学校的时候、顶天写个存储过程~~~!!!
然后就是增删改查、我甚至连group by 字句 跟having字句都没用过、!
在运用Oralce开发的过程中、慢慢的发现它非常之强大、可以写job、写Function!就好像在写java程序似的!
每每在我需要一个功能的时候、就需要去百度一下、比如将字符串转换成数字:cast(要转换的值 as 目标类型)!
o(︶︿︶)o 唉、这就是我、只有在用到的时候才逼自己去学、平常下来就只知道看小说、玩游戏、看电影!
我知道这样的话、自己在IT的这条路上是走不远的~~~!!!但每每下班回家之后就直接打开电脑看电影、玩游戏、看小说!
sum(case when a.property_type='"+A+"' then 1 else 0 end)
这样一条Sql我足足搞了两天时间、它只是用来做一个统计而已~~~!!!
然而因为group by分组不能实现、因为还有其它的字段需要分组、如果加上这个字段的话、分组就达不到效果了!
在有就是对时间的一个处理
for varStr in (select visitid
from tbvisitinfo tbv, tbsysuserinfo tbs
where tbv.plancreater = tbs.userid
and tbs.comid = varCode.Ecid
and to_date(tbv.plancreatertime,
'yyyy-mm-dd hh24:mi:ss') <=
sysdate - v_time / 24 / 60)
上面的v_time是一个分钟的变量、plancreatertime是创建时间!
意思就是当前时间减去v_time分钟过后如果小于或者等于创建时间、就进入这个循环中!
刚刚开始的时候用的是:
sysdate - interval '30' minute
但是后台发现'30' 这个参数不能用变量、就换成了上面的这种!
INSTR (源字符串, 目标字符串, 起始位置, 匹配序号) 参考资料
总之、如果我想继续在开发这条中走下去~~~那么我必须积极起来、主动起来~~~!!!
最重要的是、行动起来!!!