重算末次管理时间的方法【Controller和Service层】

 1     /**
 2      * 功能描述:[重算末次管理时间页面跳转]
 3      * 创建者:shiyanjun
 4      * 创建时间: Apr 14, 2015 5:38:43 PM
 5      * @return
 6      */
 7     @RequestMapping(value = "/toUpdateLastMngDate", method = RequestMethod.GET)
 8     public String toUpdateLastMngDate() {
 9         return "ehr/toUpdateLastMngDate";
10     }
11     /**
12      * 功能描述:[对于没有接受过任何服务的档案,重置其末次管理时间]
13      *
14      * 创建者:shiyanjun
15      * 创建时间: Apr 10, 2015 18:05:52 PM
16      * @throws ParseException
17      */
18     @RequestMapping(value="/getNoServiceEhr", method=RequestMethod.POST)
19     public void getNoServiceEhr(HttpServletRequest request) throws ParseException{
20         /**
21          * 获取页面参数信息
22          */
23         String mngOrgCode = request.getParameter("mngOrgCode");
24         String mnOrgIncChild = request.getParameter("mnOrgIncChild");
25         /**
26          * 判断机构码是否存在
27          */
28         boolean bln = ehrBaseService.getOrgCode(mngOrgCode);
29         if(bln == false){
30             System.out.println("机构码不存在!");
31             return;
32         }
33         /**
34          * 组装查询SQL
35          */
36         StringBuilder querySql = new StringBuilder();
37         if(StringUtils.isNotBlank(mngOrgCode)){
38             if("true".equals(mnOrgIncChild)){
39                 querySql.append("SELECT EB.* FROM EHR_BASE EB WHERE EB.MNG_ORG_CODE LIKE ‘"+mngOrgCode+"%‘");
40             }else{
41                 querySql.append("SELECT EB.* FROM EHR_BASE EB WHERE EB.MNG_ORG_CODE = ‘"+mngOrgCode+"‘");
42             }
43             /**
44              * 设置每次读取档案的条数
45              */
46             int pageSize = 1000;
47             /**
48              * 重算档案的末次管理时间
49              */
50             ehrBaseService.updateLastMngDate(querySql.toString(),pageSize);
51         }
52     }

  1     /**
  2      * 功能描述:[对于没有提供过任何服务的档案,重置其末次管理时间]
  3      *
  4      * 创建者:shiyanjun
  5      * 创建时间: Apr 10, 2015 18:21:09 PM
  6      * @param querySql
  7      * @param pageSize
  8      * @throws ParseException
  9      */
 10     public void updateLastMngDate(String querySql,int pageSize) throws ParseException {
 11         long startTime = System.currentTimeMillis();
 12         /**
 13          * 将各项服务的表名称存到一个字符串数组中
 14          */
 15         String[] tableNames = new String[]{"SVC_FLW_COMMON","SVC_EXAM_1","SVC_ASM_OLD_A","SVC_FIRST_SOAP","SVC_FLW_CHRONIC",
 16                                             "SVC_ASM_YEAR","SVC_FLW_CHINA","SVC_ASM_OLD_S","SVC_FLW_MENTAL","PCF_MENTAL"};
 17         /**
 18          * 定义几个字符串缓冲区用于拼装SQL
 19          */
 20         StringBuilder builder = new StringBuilder();
 21         StringBuilder selectSql = new StringBuilder();
 22         StringBuilder countSql = new StringBuilder();
 23
 24         selectSql.append("SELECT COUNT(1) FROM(\n");
 25         countSql.append(selectSql).append(querySql).append(")");
 26         /**
 27          * 查询数据总数
 28          */
 29         int dataCount = queryForInt(countSql.toString());
 30         if(dataCount <= 0){
 31             logger.info("该机构档案为空!");
 32             System.out.println("该机构档案为空!");
 33             return;
 34         }
 35         /**
 36          * 根据数据总数dataCount和每次要查询的
 37          * 数据条数pageSize来计算要查询的次数qryCount
 38          */
 39         int qryCount = getQryCount(dataCount,pageSize);
 40
 41         /**
 42          * 将所有没有接受过指定服务的档案的末次管理时间设置为1900-01-01。
 43          */
 44         String dateStr = "1900-01-01";
 45         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
 46         Date date = format.parse(dateStr);
 47         /**
 48          * 定义变量用于记录下面的循环次数
 49          */
 50         int i,j,pageListSize;
 51         /**
 52          * 判断档案是否接受过指定的各项服务
 53          */
 54         boolean isService;
 55         String ehrId = null;
 56         EhrBase ehrBase = null;
 57         List<EhrBase> pageList = null;
 58         /**
 59          * 记录档案原始的末次管理时间
 60          */
 61         Date lastMngDate = null;
 62         /**
 63          * lastMngDateStr:转换成字符串后的末次管理时间,用于和重算之前的
 64          * 末次管理时间lastMngDate作对比,如果之前的末次管理时间和现在的一样就不必重算了。
 65          */
 66         String lastMngDateStr = null;
 67         /**
 68          * 记录每次查询并重算的数据条数。
 69          */
 70         int temp;
 71         /**
 72          * 思路:
 73          * 1.按查询次数循环,分页查询出数据;
 74          * 2.遍历此页数据,获取一份档案的有关信息;
 75          * 3.判断该档案是否接受过指定的各项服务;
 76          * 4.如果该档案没有接受过指定的各项服务,就将其末次管理时间设置为指定的日期;
 77          * 5.保存该档案,该档案末次管理时间重算完成;
 78          * 6.循环判断下一份档案;
 79          */
 80         for (i = 0; i < qryCount; i++) {
 81             temp = 0;
 82             pageList = new ArrayList<EhrBase>();
 83             System.out.println("第"+i+"/"+qryCount+"次查询");
 84             /**
 85              * 如果不是最后一次查询
 86              */
 87             if(i != (qryCount - 1)){
 88                 /**
 89                  * 先查询出一页数据
 90                  */
 91                 pageList = getPageList(querySql, i*pageSize, (i+1)*pageSize);
 92             }else{
 93                 /**
 94                  * 查询最后一页数据
 95                  */
 96                 pageList = getPageList(querySql, i*pageSize, dataCount);
 97             }
 98             pageListSize = pageList.size();
 99             /**
100              * 遍历此页数据
101              */
102             for (j = 0; j < pageListSize; j++) {
103 //                System.out.println(j);
104                 ehrBase = pageList.get(j);
105                 ehrId = ehrBase.getEhrId();
106                 lastMngDate = ehrBase.getLastMngDate();
107                 /**
108                  * 将档案的末次管理时间转换成指定的字符串格式
109                  */
110                 lastMngDateStr = dateFormat(format, lastMngDate);
111                 /**
112                  * 判断是否接受过服务
113                  */
114                 isService = isService(builder, tableNames, ehrId);
115                 /**
116                  * 如果该档案没有接受过指定的各项服务,并且其末次管理时间不是
117                  * 指定的日期, 就重置其末次管理时间。
118                  */
119                 if(isService == false && !dateStr.equals(lastMngDateStr)){
120                     ehrBase.setLastMngDate(date);
121                     ehrBaseDao.save(ehrBase);
122                     ++temp;
123                     /*System.out.println("没有接受任何服务的档案===="+temp+"====身份证号码:"+ehrBase.getIdNumber()+",原来的末次管理时间:"+lastMngDateStr);*/
124                 }
125             }
126             System.out.println("本次查询共重算"+temp+"条数据!");
127         }
128         long endTime = System.currentTimeMillis();
129         long time = (endTime-startTime)/1000;
130         System.out.println("重算完成:共耗时:"+time+"秒!");
131     }
132     /**
133      * 功能描述:[格式化日期]
134      * 创建者:shiyanjun
135      * 创建时间: Apr 13, 2015 3:27:52 PM
136      * @param format    指定的日期格式
137      * @param date        要格式化的日期
138      * @return
139      */
140     private String dateFormat(SimpleDateFormat format, Date date) {
141         return format.format(date);
142     }
143
144     /**
145      * 功能描述:[查询数据总数]
146      * 创建者:shiyanjun
147      * 创建时间: Apr 13, 2015 3:36:34 PM
148      * @param countSql
149      * @return
150      */
151     private int queryForInt(String countSql) {
152         return jdbcTemplate.queryForInt(countSql);
153     }
154     /**
155      * 功能描述:[根据EhrId判断档案是否接受过指定的服务]
156      * 创建者:shiyanjun
157      * 创建时间: Apr 10, 2015 14:58:24 PM
158      * @param builder        字符串缓冲区
159      * @param tableNames    数组,存有各项服务对应的表名称
160      * @param ehrId            档案标识
161      * @return
162      */
163     public boolean isService(StringBuilder builder, String[] tableNames, String ehrId){
164
165         for(String tableName : tableNames){
166             builder.append("SELECT COUNT(ID) FROM ").append(tableName).append(" WHERE EHR_ID = ‘"+ehrId+"‘");
167             int count = queryForInt(builder.toString());
168             clearBuilder(builder);//清空缓冲区,下次循环再次使用
169             if(count > 0){
170                 return true;//只要查出一条服务记录,就说明档案被使用过
171             }
172         }
173         return false;
174     }
175     /**
176      * 功能描述:[清空字符串缓冲区,以便于复用]
177      * 创建者:shiyanjun
178      * 创建时间: Apr 14, 2015 5:11:57 PM
179      * @param builder
180      */
181     private void clearBuilder(StringBuilder builder) {
182         builder.delete(0, builder.length());
183     }
184
185     /**
186      * 功能描述:[计算查询次数]
187      *
188      * 创建者:shiyanjun
189      * 创建时间: Apr 10, 2015 5:36:36 PM
190      * @param dataCount
191      * @param pageSize
192      * @return
193      */
194     public int getQryCount(int dataCount, int pageSize) {
195         int qryCount = 1;
196         if(dataCount >= pageSize){
197             if(dataCount % pageSize == 0){
198                 qryCount = dataCount/pageSize;
199             }else{
200                 qryCount = dataCount/pageSize + 1;
201             }
202         }
203         return qryCount;
204     }
205     /**
206      * 功能描述:[分页查询数据]
207      *
208      * 创建者:shiyanjun
209      * 创建时间: Apr 10, 2015 5:27:39 PM
210      * @param querySql
211      * @param startRowIndex
212      * @param pageSize
213      * @return
214      */
215     private List<EhrBase> getPageList(String querySql, int startRowIndex, int pageSize) {
216         String rownumSql = "";
217         if (Config.isOracle() || Config.isKingbase()) {
218             rownumSql = "ROWNUM AS NUM";
219         } else if (Config.isDb2()) {
220             rownumSql = "ROWNUMBER() OVER() AS NUM";
221         }
222         StringBuilder pageSql = new StringBuilder(" SELECT * FROM ( \n");
223         pageSql.append(" SELECT TEMP.*, ").append(rownumSql).append(" FROM ( \n");
224         pageSql.append(querySql);
225         pageSql.append(")\n");
226         pageSql.append("TEMP\n");
227         pageSql.append(" ) WHERE NUM <= ").append(pageSize).append(" AND NUM > ").append(startRowIndex).append(" \n");
228         //根据pageSql查询分页数据
229         List<EhrBase> pageList = jdbcTemplate.query(pageSql.toString(), new EhrBaseMapper());
230         return pageList;
231     }
232
233     /**
234      * 功能描述:[判断机构是否存在]
235      * 创建者:shiyanjun
236      * 创建时间: Apr 13, 2015 3:37:16 PM
237      * @param mngOrgCode
238      * @return
239      */
240     public boolean getOrgCode(String mngOrgCode) {
241         String querySql = "SELECT COUNT(1) FROM UMS_ORG WHERE ORG_CODE LIKE ‘"+mngOrgCode+"%‘";
242         if(mngOrgCode.length()>2 /*&& mngOrgCode.contains("12")*/){
243             int orgCodeCount = queryForInt(querySql);
244             if(orgCodeCount > 0){
245                 return true;
246             }
247         }
248         return false;
249     }

时间: 2024-08-28 19:26:11

重算末次管理时间的方法【Controller和Service层】的相关文章

系统管理模块_部门管理_改进_抽取添加与修改JSP页面中的公共代码_在显示层抽取BaseAction_合并Service层与Dao层

系统管理模块_部门管理_改进1:抽取添加与修改JSP页面中的公共代码 commons.jspf <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <meta http-equiv="Conten

线程管理四种方法

进程:程序在计算机的一次运行活动,一个程序就是一个进程,在iOS中一个app就是一个进程 线程:程序运行的最小单元,一个进程中至少有一个线程(主线程) 一. 通过NSObject的方法管理线程 这种方法会帮助我们自己主动开辟一个后台线程,不须要自己创建 參数:(1)在这个后台线程中运行的方法 參数:(2)用于传递參数,没有为nil [self performSelectorInBackground:@selector(banZhuanPlus) withObject:nil]; } 二.通过NS

绩效管理的改善方法与考核方法

绩效管理的改善方法与考核方法 作者:张国祥 2014年8月15日 说明:本文主要内容摘自笔者即将出版的专著<公司化运作指南>上篇管理体系建设第七章. 绩效是工作的有效成果.员工绩效就是员工工作的有效成果,企业绩效就是企业组织有效业绩的总和. 所谓绩效管理就是对绩效目标设立.达成.评价.运用.提升的循环管理过程. 企业管理本质上就是绩效管理.采用什么方法提高绩效管理水平因企业而异. 本文主要介绍绩效改善方法和考核方法. 一.绩效改善方法 绩效已经产生,怎么考核都无法改变结果.只有改变绩效产生的过

对高效管理时间的个人观点分享

近期好多朋友问我我是如何分配时间的,如何能让自己提高时间的利用率,完成自己每周预期想要完成的工作之类.想想自己的确看了比较多的书,尝试过许多方法才找到了现下比较适合自己的学习习惯,期间种种当算是比较复杂,写这篇文章也是希望可以给处于迷茫中,有点不知所措的朋友一些帮助. 开始之前先声明一下,网上关于时间管理方面的问题和回答有很多,然而为何我不让人家去自己百度而自己要写篇文章来给人家借鉴呢?这方面我也搜了许多,网上文章是多,但是很多都面向各行各业各个年龄段的所有人来写的,针对性比较弱,各种方法需要自

PHP获取当前日期和时间的方法

PHP获取当前日期和时间的方法 来源:wikiHow   时间:2014-12-04 14:49:45   阅读数:7240 分享到:0 [导读] PHP是用来创建网络中动态内容的常见语言,因此PHP中有许多相关的函数,允许你得到或输出一些需要的信息.获取当前日期和时间就是其中的函数,下面具体说说如何使用它们.        本文是PHP100中文网原创翻译,转载请看文末的转载要求,谢谢合作! PHP是用来创建网络中动态内容的常见语言,因此PHP中有许多相关的函数,允许你得到或输出一些需要的信息

接口调试工具ApiPost的发送超时时间设置方法

有部分使用ApiPost的同学反应:发送接口调试时,响应超时时间设置的太短导致接口访问失败,怎么设置呢? 就连百度也有很多人在搜: 今天就来说一说. ApiPost简介: ApiPost是一个支持团队协作,并可直接生成文档的API调试.管理工具.它支持模拟POST.GET.PUT等常见请求,是后台接口开发者或前端.接口测试人员不可多得的工具 . 官网:https://www.apipost.cn/ ApiPost的发送超时时间设置方法 对于老版本的ApiPost,这个超时时间的确是无法设置的.新

你时间总不够用?请收下这套最佳的分配时间的方法

有谁要是为了赚得更多的钱而加班加点. 更加卖力地去工作, 他就不会真正变得更加富有. 被牺牲掉的业余时间的价值必须从其更高收入中扣除, 而且被牺牲掉的这部分的价值通常比财务上得到的要高很多. 为了赚更多的钱而牺牲掉您的业余时间, 靠这种方法您不可能实现真正的富有. 真正的富有是指具有由少变多的本事, 而并非必须为此做出同样程度的牺牲. 真正的成功意味着: 您能够获得更高的收入, 但您的工作时间并没有增加, 甚至还减少了. 真正的自由不是指摆脱了工作的自由, 而是指在工作中的自由, 也就是说, 有

python操作日期和时间的方法

经常获得了一个用户提交的当前日期,我们需要以这个日期为依据返回它的前一天.后一天的日期或者转换操作等.用Python可以非常简单的解决这些关于日期计算的问题. 不管何时何地,只要我们编程时遇到了跟时间有关的问题,都要想到 datetime 和 time 标准库模块,今天我们就用它内部的方法,详解python操作日期和时间的方法. 1.将字符串的时间转换为时间戳 方法: a = "2013-10-10 23:40:00" #将其转换为时间数组 import time timeArray 

Linux修改时间的方法

Linux修改时间的方法 在命令行输入: date 显示当前时间 Fri Aug  3 14:15:16 CST 2007 date '+%x %X' 显示当前时间 2009年08月03日 14时15分00秒 date -s 按字符串方式修改时间 可以只修改日期,不修改时间,输入: date -s 2007-08-03 只修改时间,输入:date -s 14:15:00 同时修改日期时间,注意要加双引号,日期与时间之间有一空格,输入:date -s "2007-08-03 14:15:00&qu