參照下述方法摸索JpaUtil我會遇到的問題::
任務:需要在數據循環的時候進行數據過濾,,項目中出現過期的合同也初始化到頁面了,,
1、 String c ;
a.parse( c ); 將String值轉換成指定格式的 Date
b.Format( a ); 將Date 指定格式轉換成String
一: 下面方法中傳值: String sssdgs= "000100000" ,String jyyf ="202001" ,String tbr ="aaaa"
問題: JpaUtil.find /JpaUtil.load 這種方法跟我其餘遇到的方法的使用方面不一樣,,這種方法特別的噁心
1、思路彙總 : 以下方法中,,使用 Calendar 獲取 當天時間,,並在當前時間上進行 年月日的加減及賦值
//獲取當天時間 Calendar c = Calendar.getInstance(); // 獲取年 int year = c.get(Calendar.YEAR); // 獲取月份,0表示1月份 int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DATE);
2、 使用 Calendar calendar = Calendar.getInstance(); ,獲取當前時間的 前一個月 / 前一年 ,有date日期類型的時間方面的問題可參考:
結構:
String jyyf ="202001";
Calendar calendar = Calendar.getInstance(); // 默認是當前日期
// 設置傳入的時間格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMM");
// 指定一個日期
Date date;
try {
date = dateFormat.parse(jyyf); // 頁面傳值202001 //(注意: jyyf的數據格式必須跟上述的“yyyyMM”一致,不一 致會報錯)
calendar.setTime(date); //將date的值賦給 calendar
calendar.add(Calendar.MONTH, -1); // 月份減一 ,得到前一個月
hbsj = dateFormat.format(calendar.getTime()) + ""; //將月份減一的值賦值給 hbsj, = 201912
calendar.setTime(date); //跟上面的不衝突,重新將date賦值給 calender // =202001
calendar.add(Calendar.YEAR, -1); // 年份減1 // = 201901
tbsj = dateFormat.format(calendar.getTime()) + ""; // 201901
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
****重點: 我在這裏遇到了許多問題,,關於時間格式轉換的,,腦子都快禿了,,搞得亂七八咋但是也算解決了,,後面有 空倒是可以優化優化
List<GdYhydxq> list = new ArrayList<GdYhydxq>();
String[] yhbsQBStrArray = SSSDGSQB.split(","); k//Split() 拼接,將值用 “,”分開,多選
// 開始日期
String endTime ="";
Calendar calendar2 = Calendar.getInstance(); // 默認是當前日期
// 對 calendar 設置時間的方法
// 設置傳入的時間格式
SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyyMM"); //yyyy-MM-dd hh:mm:ss
SimpleDateFormat dateFormat3 = new SimpleDateFormat("yyyyMMdd"); //yyyy-MM-dd hh:mm:ss
// 指定一個日期
Date date2;
String date3 =null; //開始時間
Date date4;
String date5 =null; //結束時間
Date date6;
String date7 =null;
Date date8;
String date9 =null;
try {
date2 = dateFormat2.parse(jyyf); // 頁面傳值202001說明:上述中 dateFormat2("yyyyMM"), 將 parse: date2可以是String類型,將String類型的 jyyf 轉換成date格式,String 的值必須 跟 dateFormat2一致,
date3 = dateFormat3.format(date2); // 頁面傳值20210101 //String說明: 上述中,dateFormat3("yyyyMMdd"); Format(): 只能是date格式的數據,,不允許String, 作用:指定數據顯示的 格 式,並將date格式的數據轉換成String
/ /date = (yyyyMMdd).parse(String)
date6 = dateFormat3.parse(date3);//String = (yyyy-MM-dd hh:mm:ss).format.(Date)
date7 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date6);
// 對 calendar 設置爲 date 所定的日期
calendar2.setTime(date2); //202001
calendar2.add(Calendar.MONTH, -1); // 得到前一個月 201912
endTime = dateFormat2.format(calendar2.getTime()) + ""; //hbsj= 202012
date4 = dateFormat3.parse(date3);
calendar2.setTime(date4); //20200101
calendar2.set(Calendar.DATE, 1); //set 設置calendar的天數值爲1,如果calendar爲20200105,那麼使用此方法後會將day這天初始化爲‘1’
calendar2.roll(Calendar.DATE, -1); //回滾一天 ,如果設置上述值爲1,那麼回滾了一天就會變成當月的最後一天,roll會在當前月的天數內進行循環操作
date5 =dateFormat3.format(calendar2.getTime()) + "";
date8 = dateFormat3.parse(date5);
date9 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date8);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Timestamp XHRQ =Timestamp.valueOf(date9);
Timestamp ZZRQ =Timestamp.valueOf(date7);
for (int i = 0; i < yhbsQBStrArray.length; i++) {
/*QueryParamList paramQueryParamList = new QueryParamList();
paramQueryParamList.addParam("sssdgs", yhbsQBStrArray[i]);
List<KhYhda> userlist = JPAUtil.load(KhYhda.class,
paramQueryParamList);*//* String xx ="2020-01-31";
String sql ="select * from kh_yhda where"
+ " yhbh in(select DISTINCT(yhbh) "
+ "from ht_htjbxx where sxrq<" + xx;
String jpql = "select kh from KhYhda kh where kh.yhbh in (select distinct ht.yhbh from HtHtjbxx ht where ht.sxrq < :xx)";
paramQueryParamList.addParam("xx",Timestamp.valueOf(xx));
PagedData pa = new PagedData();
pa.setDataList(JPAUtil.find(jpql, paramQueryParamList));
List<KhYhda> userlist = JPAUtil.load(KhYhda.class,null,jpql, paramQueryParamList,null);*/
QueryParamList paramQueryParamList = new QueryParamList();
String sqlP1 =" select kh from KhYhda kh where kh.yhbh in(select DISTINCT(ht.yhbh) from HtHtjbxx ht where ht.sxrq<:sxrq and zzrq> :zzrq and sssdgs=:sssdgs) ";
paramQueryParamList.addParam("sssdgs", yhbsQBStrArray[i]);
paramQueryParamList.addParam("sxrq", XHRQ);
paramQueryParamList.addParam("zzrq", ZZRQ);
List<Object> userlist = JPAUtil.find(sqlP1,paramQueryParamList );
在下方進行數據過濾操作,過程中遇到String 類型的 jyyf 無法轉換爲 timetamp 格式,出現報錯
/**
* 初始化添加用戶信息
*
* @param SSSDGSQB
* @return
*/
@Override
public String addretrieveSbCSH(String SSSDGSQB, String jyyf, String tbr) {
// TODO Auto-generated method stub// 獲取申報年份月份
String sbyf = "";
String sbyff = "";
String tbsj = "";
String hbsj = "";
/* String jyyf=""; */
//獲取當天時間
Calendar c = Calendar.getInstance();
// 獲取年
int year = c.get(Calendar.YEAR);
// 獲取月份,0表示1月份
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DATE);
//201901-201912
if (month + 1 < 10) {
sbyf = year + "0" + (month + 1);
} else {
sbyf = year + "" + (month + 1);
}
//20190101-10191231
if (day < 10) {
sbyff = sbyf + "0" + (day);
} else {
sbyff = sbyf + "" + (day);
}// 獲取同比時間 環比時間(同比就是比去年同期,比如今年8月比去年8月。環比就是比上個月,今年8月比今年7月)
Calendar calendar = Calendar.getInstance(); // 默認是當前日期
// 對 calendar 設置時間的方法
// 設置傳入的時間格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMM");
// 指定一個日期
Date date;
try {
date = dateFormat.parse(jyyf); // 頁面傳值202101
// 對 calendar 設置爲 date 所定的日期
calendar.setTime(date);
calendar.add(Calendar.MONTH, -1); // 得到前一個月
hbsj = dateFormat.format(calendar.getTime()) + ""; //hbsj= 202012
calendar.setTime(date);
calendar.add(Calendar.YEAR, -1); // 年份減1
tbsj = dateFormat.format(calendar.getTime()) + "";
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*
* if(month+2<10){ jyyf=year+"0"+(month+2); }else if(month+2>12){
* jyyf=(year+1)+"01"; }else{ jyyf=year+""+(month+2); }
*/List<GdYhydxq> list = new ArrayList<GdYhydxq>();
String[] yhbsQBStrArray = SSSDGSQB.split(",");
/*Date d3 = new Date();
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Calendar calendar3 = Calendar.getInstance();
String dateNowStr3 = sdf3.format(d3);
Timestamp a1 = Timestamp.valueOf(dateNowStr3);*/
// 開始日期
String endTime ="";
Calendar calendar2 = Calendar.getInstance(); // 默認是當前日期
// 對 calendar 設置時間的方法
// 設置傳入的時間格式
SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyyMM"); //yyyy-MM-dd hh:mm:ss
SimpleDateFormat dateFormat3 = new SimpleDateFormat("yyyyMMdd"); //yyyy-MM-dd hh:mm:ss
// 指定一個日期
Date date2;
String date3 =null; //開始時間
Date date4;
String date5 =null; //結束時間
Date date6;
String date7 =null;
Date date8;
String date9 =null;
try {
date2 = dateFormat2.parse(jyyf); // 頁面傳值202101
date3 = dateFormat3.format(date2); // 頁面傳值20210101
date6 = dateFormat3.parse(date3);
date7 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date6);
// 對 calendar 設置爲 date 所定的日期
calendar2.setTime(date2);
calendar2.add(Calendar.MONTH, -1); // 得到前一個月
endTime = dateFormat2.format(calendar2.getTime()) + ""; //hbsj= 202012
date4 = dateFormat3.parse(date3);
calendar2.setTime(date4);
calendar2.set(Calendar.DATE, 1);
calendar2.roll(Calendar.DATE, -1);
date5 =dateFormat3.format(calendar2.getTime()) + "";
date8 = dateFormat3.parse(date5);
date9 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date8);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Timestamp XHRQ =Timestamp.valueOf(date9);
Timestamp ZZRQ =Timestamp.valueOf(date7);
for (int i = 0; i < yhbsQBStrArray.length; i++) {
/*QueryParamList paramQueryParamList = new QueryParamList();
paramQueryParamList.addParam("sssdgs", yhbsQBStrArray[i]);
List<KhYhda> userlist = JPAUtil.load(KhYhda.class,
paramQueryParamList);*//* String xx ="2020-01-31";
String sql ="select * from kh_yhda where"
+ " yhbh in(select DISTINCT(yhbh) "
+ "from ht_htjbxx where sxrq<" + xx;
String jpql = "select kh from KhYhda kh where kh.yhbh in (select distinct ht.yhbh from HtHtjbxx ht where ht.sxrq < :xx)";
paramQueryParamList.addParam("xx",Timestamp.valueOf(xx));
PagedData pa = new PagedData();
pa.setDataList(JPAUtil.find(jpql, paramQueryParamList));
List<KhYhda> userlist = JPAUtil.load(KhYhda.class,null,jpql, paramQueryParamList,null);*/
QueryParamList paramQueryParamList = new QueryParamList();
String sqlP1 =" select kh from KhYhda kh where kh.yhbh in(select DISTINCT(ht.yhbh) from HtHtjbxx ht where ht.sxrq<:sxrq and zzrq> :zzrq and sssdgs=:sssdgs) ";
paramQueryParamList.addParam("sssdgs", yhbsQBStrArray[i]);
paramQueryParamList.addParam("sxrq", XHRQ);
paramQueryParamList.addParam("zzrq", ZZRQ);
List<Object> userlist = JPAUtil.find(sqlP1,paramQueryParamList );
if (userlist.size() > 0) {
for (int j = 0; j < userlist.size(); j++) { //userlist 中有1460條數據
//Object[] objs = (Object[])userlist.get(j);
KhYhda da = (KhYhda)userlist.get(j);
String yhbs = String.valueOf(da.getYhbs());
Long yhbs2 = da.getYhbs();
QueryParamList bsParamList = new QueryParamList();
//獲取khyhda中的數據批量新增用戶編號
bsParamList.addParam("gdXqYhbh", yhbs
+ "");
//頁面202101交易月份賦值給 GdYhydxq 中的gdXqJyyf
bsParamList.addParam("gdXqJyyf", jyyf + "");
List<GdYhydxq> bslist = JPAUtil.load(GdYhydxq.class,
bsParamList);
//判斷GdYhydxq中是否有重複數據有則跳過無則增加一條數據
if (bslist.size() > 0) {
continue;
}
//zk
/*QueryParamList csParamList = new QueryParamList();
csParamList.addParam("xhrq", userlist.get(j).getXhrq()
+ "");
List<KhYhda> cslist = JPAUtil.load(KhYhda.class,
csParamList);*/
/*Date d2 = new Date();
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String dateNowStr2 = sdf2.format(d2);
Timestamp a = Timestamp.valueOf(dateNowStr2);
Timestamp b =userlist.get(j).getXhrq();
System.out.println("555555555555555555555555555555555555");
System.out.println(a.getTime());
System.out.println(b.getTime());*/
/*if(da.getXhrq()!= null &&!"".equals(da.getXhrq())){
KhYhda da2 = (KhYhda)userlist.get(j);
Date d2 = new Date();
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String dateNowStr2 = sdf2.format(d2);
Timestamp a = Timestamp.valueOf(dateNowStr2); //當前時間
Timestamp b =da2.getXhrq(); //銷戶日期
if (a.getTime() >b.getTime() ) { //銷戶日期小於當前時間跳過
continue;
}
}*/
GdYhydxq gd = new GdYhydxq();
gd.setGdXqSbyf(sbyf); //201912 當前月份
gd.setGdXqJyyf(jyyf); //202101 頁面傳值月份
gd.setGdXqTbr(tbr); // ywny
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String dateNowStr = sdf.format(d);
gd.setGdXqTbrq(Timestamp.valueOf(dateNowStr));
gd.setGdXqJqzq("1"); // 月度
gd.setGdXqYhlx(da.getYhxzdm());
gd.setGdXqYhbhT(da.getYhbh());
gd.setGdXqYhbh(String.valueOf(da.getYhbs()) + "");
gd.setGdXqSdgs(da.getSssdgs());
QueryParamList lxrParamList = new QueryParamList();
//不能直接在addParam中轉換,需轉換後再放進去,噁心】】
lxrParamList.addParam("yhbs",yhbs2);
List<KhKhlxr> lxrlist = JPAUtil.load(KhKhlxr.class,
lxrParamList);
if (lxrlist.size() > 0) {
gd.setLxr(lxrlist.get(0).getLxrxm());
gd.setLxfs(lxrlist.get(0).getSjhm1());
}
gd.setGdXqYhmc(da.getYhmc());
// gd.setGdXqYdfl(userlist.get(j).getHyfldm());
// 默認爲(同比電量+環比電量)/2
// 申報電量 月均 最大月份 最大電量 確認狀況
gd.setQrqk("N");
gd.setSjly("X");
gd.setShjy("W");
gd.setSblx("01");//申報類型 正常申報
/* String sqlcx = "SELECT b.zdl AS zddl, b.dfyf AS dfyf, "+
"(SELECT sum(e.zdl) FROM (SELECT MAX(b.zdl) zdl FROM "+
" wbjc_jyyhsfqd b ,kh_yhda c WHERE b.DFYF = '"+ hbsj+"' AND b.YHBH= c.yhbh and c.yhbs = '" + userlist.get(j).getYhbs() + "' AND B.YHID IS NOT NULL GROUP BY b.JLDBH ) AS e ) AS hbdl, "+
"( SELECT sum(e.zdl) FROM (SELECT Max(b.zdl)zdl FROM wbjc_jyyhsfqd b ,kh_yhda c WHERE b.DFYF = '"+ tbsj+ "' "+
" AND b.YHBH= c.yhbh and c.yhbs = '" + userlist.get(j).getYhbs() + "' AND B.YHID IS NOT NULL GROUP BY b.JLDBH )AS e ) AS tbdl, "+
"( SELECT trim( ROUND( (SUM(IFNULL(b.zdl, 0)) / 130000 ),6))FROM wbjc_jyyhsfqd b ,kh_yhda c WHERE "+
" b.DFYF >= '"+ tbsj+ "' AND b.DFYF <= '"+ jyyf+ "' AND b.YHBH= c.yhbh and c.yhbs = '" + userlist.get(j).getYhbs() + "'AND B.YHID IS NOT NULL ) AS pjdl FROM wbjc_jyyhsfqd b,kh_yhda c WHERE "+
"( b.DFYF >= '"+ tbsj+ "' AND b.DFYF <= '"+ jyyf+ "'"+
") AND b.YHBH= c.yhbh and c.yhbs = '" + userlist.get(j).getYhbs() + "' AND B.YHID IS NOT NULL ORDER BY zdl DESC LIMIT 0,1";
*/
String sqlcx = "SELECT 'W' SHJY,c.YJSBDL SBDL, c.SQDL hbdl, c.TQDL tbdl, c.YJYDL pjdl,c.ZDYDYF dfyf, "+
" c.ZDDL zddl FROM kh_yhda a,wbjc_dsrw_dldf c where a.YHBH = c.YHBH AND a.yhbs = '"+da.getYhbs()+
"' AND c.SBYF='"+jyyf+"' AND a.SSSDGS='"+yhbsQBStrArray[i]+"' ORDER BY c.YJSBDL DESC";
DBTool dbTool = new DBTool("jdbcTemplate");
Record[] execute;
execute = dbTool.executeQuery(sqlcx, null);if (execute == null || execute.length <= 0) {
/*gd.setGdXqSbdl(new BigDecimal("0"));*/
gd.setYcdl(new BigDecimal("0")); //初始化爲0
} else {for (Record record : execute) {
if (null != record.getString("zddl")) {
gd.setZjsydl((new BigDecimal(record //最大實際用電量(萬kWh)
.getString("zddl")).divide(
new BigDecimal(1), 2,
RoundingMode.HALF_UP)));
}
if (null != record.getString("dfyf")) {
gd.setZdjyyf(record.getString("dfyf")); //最大用電量月份
}
if (null != record.getString("pjdl")) {
gd.setGdXqYjdl(new BigDecimal(record //月均用電量(萬kWh)
.getString("pjdl")));
}
if (null != record.getString("SBDL")) { //預測電量
gd.setYcdl((new BigDecimal(record
.getString("SBDL")).divide(
new BigDecimal(1), 2,
RoundingMode.HALF_UP)));
}
/*if (null != record.getString("SBDL")) {
gd.setGdXqSbdl((new BigDecimal(record
.getString("SBDL")).divide(
new BigDecimal(1), 2,
RoundingMode.HALF_UP)));
}*/
if (null != record.getString("tbdl")) {
gd.setTqdl((new BigDecimal(record
.getString("tbdl")).divide(
new BigDecimal(1), 2,
RoundingMode.HALF_UP)));
}
if (null != record.getString("hbdl")) {
gd.setSqdl((new BigDecimal(record
.getString("hbdl")).divide(
new BigDecimal(1), 2,
RoundingMode.HALF_UP)));
}
}
}// 賦值主鍵
gd.setGdXq(Integer.valueOf(SequenceUtil
.genStringEntitySequenceNo(GdYhydxq.class)));list.add(gd);
}
}
}if (list.size() > 0) {
JPAUtil.create(list);
return "1";
} else {
return "0";
}
}