码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-04-14 19:37:09      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
 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     }
View Code
技术分享
  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     }
View Code

 

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

标签:

原文地址:http://www.cnblogs.com/jun1019/p/4425753.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!