急急急急急急,今天要求搞出来,求怎么判断跨年

Hao_Ren_123 2017-03-14 10:12:48
要求生产索引号550590033-04-2017-000002,2017我是截取当前时间判断的,现在要求如果跨年,也就是在2018-1-1 0:0:01分,新增加的索引自动实现550590033-04-2018-000001;
这是代码:
String number = "550590033";
String attrName = "syh";
DecimalFormat I6 = new DecimalFormat("000000");
String attrSyh = "";
Calendar cale = null;
cale = Calendar.getInstance();
int year = cale.get(Calendar.YEAR);// 获取当前年份
List<String> list =manager.selectMaxSyhById(channelId);
if(channelId==141){
int mindNum = 4;
if(list.size()==0){
//如果为空这新添加的内容为第一条索引
String str=I6.format(1);
attrSyh = number + "-0" + mindNum + "-" + year + "-"+str;
//插入索引
}else{
String maxSyh = list.get(0);
//截取字符串最后6位
String lsyh=maxSyh.substring(maxSyh.length()-6,maxSyh.length());
//转换成整数
int lsyhNum = Integer.parseInt(lsyh);
//索引加一
lsyhNum = lsyhNum+1;
//判断要拼进字符串的整数有几位
int count = digit(lsyhNum);
maxSyh = maxSyh.substring(0,maxSyh.length()-count);
String strb = String.valueOf(lsyhNum);
maxSyh = maxSyh+strb;
attrSyh=maxSyh;
}
map.put(attrName, attrSyh);
...全文
395 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hao_Ren_123 2017-03-16
  • 打赏
  • 举报
回复
不用了,已经搞出来了,我是查询出最大的索引号,在截取其中的550590033-04-2017-000002,把他变成整数后与当前时间对比,如果大于就证明是跨年,索引从1开始生成。但有个小bug,就是我把系统时间变成2018后,再改成2017,那个字段还是2018,但公司说无所谓了,所以也没有就深入修改。
逗泥丸的平方 2017-03-16
  • 打赏
  • 举报
回复
实在不行就留个变量盯一下呗.. 往工具类里放个静态变量也不是什么大不了的事情..
yyfhz 2017-03-14
  • 打赏
  • 举报
回复
只讲思路的话,那我觉得2L的已经很好了呀。 很显然的,需要有一个地方能存放最后一次使用的索引号 -- (一般可以放在数据库里), 然后当新的需求到来的时候,很久上一次使用的索引号及当前时间判断是否发生跨年;根据跨年与否生成新的索引号并缓存之。 --(为了防止并发冲突,这个方法可以用同步关键字加锁)
Hao_Ren_123 2017-03-14
  • 打赏
  • 举报
回复
我现在只想知道大概的思路,实现代码我会自己写,关键是我现在完全不知道怎么做
Hao_Ren_123 2017-03-14
  • 打赏
  • 举报
回复
这是一个web项目 manager是逻辑层的接口,channelId是请求发送过来的参数,digit是我自己写的判断数字是几位数的方法。map是我定义的Map<String,String>对象 这个是整个请求方法: @RequiresPermissions("content:o_save") @RequestMapping("/content/o_save.do") public String save(Content bean, ContentExt ext, ContentTxt txt, Boolean copyimg,Integer sendType,Integer selectImg,String weixinImg, Integer[] channelIds, Integer[] topicIds, Integer[] viewGroupIds, String[] attachmentPaths, String[] attachmentNames, String[] attachmentFilenames, String[] picPaths, String[] picDescs, Integer channelId, Integer typeId, String tagStr, Boolean draft, Integer cid, Integer modelId,HttpServletRequest request, ModelMap model) { WebErrors errors = validateSave(bean, channelId, request); if (errors.hasErrors()) { return errors.showErrorPage(model); } /**************索引******************/ Map<String,String> map = new HashMap<String,String>(); String number = "550590033"; String attrName = "syh"; DecimalFormat I6 = new DecimalFormat("000000"); String attrSyh = ""; Calendar cale = null; cale = Calendar.getInstance(); int year = cale.get(Calendar.YEAR);// 获取当前年份 List<String> list =manager.selectMaxSyhById(channelId); if(channelId==141){ int mindNum = 4; if(list.size()==0){ //如果为空这新添加的内容为第一条索引 String str=I6.format(1); attrSyh = number + "-0" + mindNum + "-" + year + "-"+str; //插入索引 }else{ String maxSyh = list.get(0); //截取字符串最后6位 String lsyh=maxSyh.substring(maxSyh.length()-6,maxSyh.length()); //截取索引好的年的字符 //转换成整数 int lsyhNum = Integer.parseInt(lsyh); //索引加一 lsyhNum = lsyhNum+1; //判断要拼进字符串的整数有几位 int count = digit(lsyhNum); maxSyh = maxSyh.substring(0,maxSyh.length()-count); String strb = String.valueOf(lsyhNum); maxSyh = maxSyh+strb; attrSyh=maxSyh; } map.put(attrName, attrSyh); }else if(channelId==136){ int mindNum = 5; if(list.size()==0){ //如果为空这新添加的内容为第一条索引 String str=I6.format(1); attrSyh = number + "-0" + mindNum + "-" + year + "-"+str; //插入索引 }else{ String maxSyh = list.get(0); //截取字符串最后6位 String lsyh=maxSyh.substring(maxSyh.length()-6,maxSyh.length()); //转换成整数 int lsyhNum = Integer.parseInt(lsyh); //索引加一 lsyhNum = lsyhNum+1; //判断要拼进字符串的整数有几位 int count = digit(lsyhNum); maxSyh = maxSyh.substring(0,maxSyh.length()-count); String strb = String.valueOf(lsyhNum); maxSyh = maxSyh+strb; attrSyh=maxSyh; } map.put("syh", attrSyh); }else if(channelId==159){ int mindNum = 6; if(list.size()==0){ //如果为空这新添加的内容为第一条索引 String str=I6.format(1); attrSyh = number + "-0" + mindNum + "-" + year + "-"+str; //插入索引 }else{ String maxSyh = list.get(0); //截取字符串最后6位 String lsyh=maxSyh.substring(maxSyh.length()-6,maxSyh.length()); //转换成整数 int lsyhNum = Integer.parseInt(lsyh); //索引加一 lsyhNum = lsyhNum+1; //判断要拼进字符串的整数有几位 int count = digit(lsyhNum); maxSyh = maxSyh.substring(0,maxSyh.length()-count); String strb = String.valueOf(lsyhNum); maxSyh = maxSyh+strb; attrSyh=maxSyh; } map.put(attrName, attrSyh); }else if(channelId==160){ int mindNum = 7; if(list.size()==0){ //如果为空这新添加的内容为第一条索引 String str=I6.format(1); attrSyh = number + "-0" + mindNum + "-" + year + "-"+str; //插入索引 }else{ String maxSyh = list.get(0); //截取字符串最后6位 String lsyh=maxSyh.substring(maxSyh.length()-6,maxSyh.length()); //转换成整数 int lsyhNum = Integer.parseInt(lsyh); //索引加一 lsyhNum = lsyhNum+1; //判断要拼进字符串的整数有几位 int count = digit(lsyhNum); maxSyh = maxSyh.substring(0,maxSyh.length()-count); String strb = String.valueOf(lsyhNum); maxSyh = maxSyh+strb; attrSyh=maxSyh; } map.put(attrName, attrSyh); } /**************索引******************/ /* if ("8".equals(model)){ String attr_syh1=""; String attr_syh=getAttrSyh(attr_syh1,channelId);//索引号 System.out.print(attr_syh); }*/ // 加上模板前缀 CmsSite site = CmsUtils.getSite(request); CmsUser user = CmsUtils.getUser(request); String tplPath = site.getTplPath(); if (!StringUtils.isBlank(ext.getTplContent())) { ext.setTplContent(tplPath + ext.getTplContent()); } bean.setAttr(map); String[] tagArr = StrUtils.splitAndTrim(tagStr, ",", MessageResolver .getMessage(request, "content.tagStr.split")); if(txt!=null&©img!=null&©img){ txt=copyContentTxtImg(txt, site); } bean = manager.save(bean, ext, txt,channelIds, topicIds, viewGroupIds, tagArr, attachmentPaths, attachmentNames, attachmentFilenames, picPaths, picDescs, channelId, typeId, draft,false, user, false); //微信消息发送 weiXinSvc.sendMessage(sendType, selectImg, weixinImg, bean, ext, txt); //处理附件 fileMng.updateFileByPaths(attachmentPaths,picPaths,ext.getMediaPath(),ext.getTitleImg(),ext.getTypeImg(),ext.getContentImg(),true,bean); log.info("save Content id={}", bean.getId()); cmsLogMng.operating(request, "content.log.save", "id=" + bean.getId() + ";title=" + bean.getTitle()); if (cid != null) { model.addAttribute("cid", cid); } model.addAttribute("message", "global.success"); return add(cid,modelId, request, model); }
奄灬苟且偷生 2017-03-14
  • 打赏
  • 举报
回复
哥哥啊,你是在逗我们吗?都运行不了,还调用其他的类,谁知道里面写的什么鬼
来来来,你先解释下这几个参数方法是干什么的
Hao_Ren_123 2017-03-14
  • 打赏
  • 举报
回复
应为我是获取的当前时间,如果写一个变量存储起来,当跨年的时候变量的值也随之改变,不能判断跨年 比如 int year = cale.get(Calendar.YEAR);// 获取当前年份 int temp = year; // temp = 2017 当时间变成2018年的时候 temp 的值也变成了2018,不能判断
不穿靴子的猫 2017-03-14
  • 打赏
  • 举报
回复
所以 重点是什么啊?没看懂= =
鱿鱼ing 2017-03-14
  • 打赏
  • 举报
回复
引用 1 楼 qq_30831935 的回复:
记录下上一次生产的年份 下一次生成生产索引号的时候判断下 当前年份和上次记录的年份是否相同 这是个弱鸡办法
年份
鱿鱼ing 2017-03-14
  • 打赏
  • 举报
回复
记录下上一次生产的年份 下一次生成生产索引号的时候判断下 当前年份和上次记录的月份是否相同 这是个弱鸡办法
galiniur0u 2017-03-14
  • 打赏
  • 举报
回复
楼主的需求是不是这样的,要创建一个序列号,序列号的值从1开始,每次递增。如果跨年,序列号重新开始从1递增。 楼主是不是可以这样声明一个static的变量public static int lastyear; 因为你每次都可以取到当前的年份int year = cale.get(Calendar.YEAR);// 获取当前年份 下面进行跨年判断,

if(lastyear == year - 1){
//说明已经跨年
}else{
//说明还是当前年份
}
//最后将lastyear置为当前年份
lastyear = year;
不知道符不符合楼主要求。仅供参考
土豆的老公 2017-03-14
  • 打赏
  • 举报
回复
用张表,单独存起来, 每次去查询。使用年份做为主键,查询不到结果时候,新建一条。 每次获取到的时候,就++。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧