写的代码小有成就+今日总结--购买产品---20200508

今日经验:
1、transPurchase.setDueRate(new BigDecimal(transPurchase2.getDueRate()));//将string转换为BigDecimal

2、Date formatBankTradeTime = DateUtil.strConvertToDate(transPurchase2.getBankTradeTime());// string转换为Date,引用DateUtil.工具类
3、DateUtil.工具类
  1 package com.qinjia.finance.base.util;
  2 
  3 import org.apache.commons.lang.StringUtils;
  4 
  5 import java.text.DateFormat;
  6 import java.text.ParseException;
  7 import java.text.SimpleDateFormat;
  8 import java.util.Calendar;
  9 import java.util.Date;
 10 import java.util.HashMap;
 11 import java.util.Map;
 12 
 13 
 14 /**
 15  * 日期相关操作
 16  */
 17 public class DateUtil {
 18 
 19 
 20     private static DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 21 
 22     public final static String STYLE_1 = "yyyy-MM-dd HH:mm:ss";
 23 
 24     public final static String STYLE_2 = "yyyy-MM-dd";
 25 
 26     public final static String STYLE_3 = "yyyyMMdd";
 27 
 28     public final static String STYLE_4 = "yyyyMMddhh";
 29 
 30     public final static String STYLE_5 = "yyyyMMddhhmmss";
 31 
 32     public final static String STYLE_6 = "yyyy年MM月dd日HH时mm分ss秒";
 33 
 34     public final static String STYLE_7 = "yyyy年MM月dd日HH时mm分";
 35 
 36     public final static String STYLE_8 = "yyyy年MM月dd日";
 37 
 38     public final static String STYLE_9 = "hhmmss";
 39 
 40     public final static String STYLE_10 = "yyyyMMddHHmmss";
 41 
 42     //ISO8601格式时间 例如2019-12-17T10:34:00+0800
 43     public final static String STYLE_11="yyyy-MM-dd'T'HH:mm:ssZZ";
 44 
 45     //ISO8601格式时间 例如2019-12-17T10:34:00+08:00
 46     public final static String STYLE_12="yyyy-MM-dd'T'HH:mm:ssXXX";
 47 
 48     private static Map<String, SimpleDateFormat> sdfMap=new HashMap<String, SimpleDateFormat>();
 49 
 50     static{
 51         sdfMap.put(STYLE_1, new SimpleDateFormat(STYLE_1));
 52         sdfMap.put(STYLE_2, new SimpleDateFormat(STYLE_2));
 53         sdfMap.put(STYLE_3, new SimpleDateFormat(STYLE_3));
 54         sdfMap.put(STYLE_4, new SimpleDateFormat(STYLE_4));
 55         sdfMap.put(STYLE_5, new SimpleDateFormat(STYLE_5));
 56         sdfMap.put(STYLE_6, new SimpleDateFormat(STYLE_6));
 57         sdfMap.put(STYLE_7, new SimpleDateFormat(STYLE_7));
 58         sdfMap.put(STYLE_8, new SimpleDateFormat(STYLE_8));
 59         sdfMap.put(STYLE_9, new SimpleDateFormat(STYLE_9));
 60         sdfMap.put(STYLE_10, new SimpleDateFormat(STYLE_10));
 61     }
 62 
 63     public static String getCurrentTime() {
 64         return sdfMap.get(STYLE_5).format(new Date());
 65     }
 66 
 67     /**
 68      *获取当前时间字符串yyyyMMddhhmmss
 69      */
 70     public static String getNowString() {
 71         return sdfMap.get(STYLE_10).format(new Date());
 72     }
 73     public static String getCurrentTime(String str) {
 74         return sdfMap.get(str).format(new Date());
 75     }
 76 
 77     public static String getCurrentTime(String str,String date) {
 78         return sdfMap.get(str).format(strConvertToDate(date));
 79     }
 80 
 81     /**
 82      * 获取当前时间
 83      * 方法描述
 84      * @return
 85      */
 86     public static String getNowDate(){
 87         return sdf.format(new Date());
 88     }
 89 
 90     /**
 91      * 字符串类型转化为日期类型
 92      * @param str
 93      * @return
 94      */
 95     public static Date strConvertToDate(String str){
 96         if(StringUtils.isNotEmpty(str)){
 97             try {
 98                 return sdf.parse(str);
 99             } catch (ParseException e) {
100                 // TODO Auto-generated catch block
101                 e.printStackTrace();
102             }
103         }
104         return null;
105     }
106 
107     /**
108      * 日期类型转化为制定的日期格式
109      * @param date
110      * @return
111      */
112     public static Date dateConvertToDate(Date date){
113         String str= sdf.format(date);
114         try {
115             return sdf.parse(str);
116         } catch (ParseException e) {
117             // TODO Auto-generated catch block
118             e.printStackTrace();
119         }
120         return date;
121     }
122     /**
123      * 比较时间大小
124      *
125      * @param beginDate 开始时间
126      * @param endDate   结束时间
127      * @return true begin大于end
128      */
129     public static boolean datecompare(Date beginDate,Date endDate){
130         try{
131             if(beginDate==null || endDate==null){
132                 return false;
133             }
134             if(beginDate.getTime()>=endDate.getTime()){
135                 return true;
136             }
137 
138         }catch(Exception e){
139             e.printStackTrace();
140         }
141         return false;
142     }
143     /**
144      * 判断number是不是在两者之间
145      * @author wu.yy
146      *
147      * @param number
148      * @param start
149      * @param end
150      * @return
151      */
152     public static boolean during(int number,int start,int end){
153         if(number>=start && number<end){
154             return true;
155         }
156         return false;
157     }
158     /**
159      * 根据不同的类别获取相应的统计格式
160      * @param lb 类别 kk_day 天 kk_month月 kk_jd季度 kk_year年kk_kk 卡口
161      * @param code 类别相应的编码值
162      * @param beginDate 开始时间
163      * @param endDate 结束时间
164      * @return map对象
165      */
166     public static Map<String, Object> getTimeByLb(String lb,String code,String beginDate,String endDate){
167         Map<String, Object> map = new HashMap<String, Object>();
168         if(StringUtils.isBlank(lb)){
169             map.put("code", "to_char(t.pass_time,'yyyy-mm-dd')");
170             map.put("beginDate", "trunc(sysdate-7)");
171             map.put("endDate", "trunc(sysdate-1)");
172         }else if("kk_day".equalsIgnoreCase(lb)){
173             map.put("code", "to_char(t.pass_time,'yyyy-mm-dd')");
174             if("0".equalsIgnoreCase(code)){
175                 map.put("beginDate", "trunc(sysdate-7)");
176                 map.put("endDate", "trunc(sysdate-1)");
177             }else if("1".equalsIgnoreCase(code)){
178                 map.put("beginDate", "trunc(add_months(sysdate,-1))");
179                 map.put("endDate", "trunc(sysdate-1)");
180             }else if("2".equalsIgnoreCase(code)){
181                 if(StringUtils.isNotBlank(beginDate)){
182                     map.put("beginDate","to_date('"+beginDate+"','yyyy-mm-dd')");
183                 }
184                 if(StringUtils.isNotBlank(endDate)){
185                     map.put("endDate", "to_date('"+endDate+"','yyyy-mm-dd')");
186                 }
187             }
188             return map;
189         }else if("kk_month".equalsIgnoreCase(lb)){
190             map.put("code", "to_char(t.pass_time,'yyyy-mm')");
191             if("0".equalsIgnoreCase(code)){
192                 map.put("beginDate", "trunc(add_months(sysdate,-3))");
193                 map.put("endDate", "trunc(sysdate-1)");
194             }else if("1".equalsIgnoreCase(code)){
195                 map.put("beginDate", "trunc(add_months(sysdate,-6))");
196                 map.put("endDate", "trunc(sysdate-1)");
197             }else if("2".equalsIgnoreCase(code)){
198                 map.put("beginDate", "trunc(add_months(sysdate,-12))");
199                 map.put("endDate", "trunc(sysdate-1)");
200             }else if("3".equalsIgnoreCase(code)){
201                 if(StringUtils.isNotBlank(beginDate)){
202                     map.put("beginDate","to_date('"+beginDate+"-01-01','yyyy-mm-dd')");
203                     map.put("endDate", "to_date('"+beginDate+"-12-31','yyyy-mm-dd')");
204                 }
205             }
206             return map;
207         }else if("kk_jd".equalsIgnoreCase(lb)){
208             map.put("code", "to_char(t.pass_time,'Q')");
209             map.put("bswq", beginDate);
210             if("0".equalsIgnoreCase(code)){
211                 if(StringUtils.isNotBlank(beginDate)){
212                     map.put("beginDate","to_date('"+beginDate+"-01-01','yyyy-mm-dd')");
213                     map.put("endDate", "to_date('"+beginDate+"-12-31','yyyy-mm-dd')");
214                 }
215             }
216             return map;
217         }else if("kk_year".equalsIgnoreCase(lb)){
218             map.put("code", "to_char(t.pass_time,'yyyy')");
219             map.put("bswy", beginDate);
220             if("0".equalsIgnoreCase(code)){
221                 if(StringUtils.isNotBlank(beginDate)){
222                     map.put("beginDate","to_date('"+beginDate+"-01-01','yyyy-mm-dd')");
223                 }
224                 if(StringUtils.isNotBlank(endDate)){
225                     map.put("endDate", "to_date('"+endDate+"-12-31','yyyy-mm-dd')");
226                 }
227             }
228             return map;
229         }else if("kk_kk".equalsIgnoreCase(lb)){
230             map.put("code", "pass_port_name");
231             if("0".equalsIgnoreCase(code)){
232                 map.put("beginDate", "trunc(sysdate-7)");
233                 map.put("endDate", "trunc(sysdate-1)");
234             }else if("1".equalsIgnoreCase(code)){
235                 map.put("beginDate", "trunc(add_months(sysdate,-1))");
236                 map.put("endDate", "trunc(sysdate-1)");
237             }else if("2".equalsIgnoreCase(code)){
238                 map.put("beginDate", "trunc(add_months(sysdate,-3))");
239                 map.put("endDate", "trunc(sysdate-1)");
240             }else if("3".equalsIgnoreCase(code)){
241                 map.put("beginDate", "trunc(add_months(sysdate,-6))");
242                 map.put("endDate", "trunc(sysdate-1)");
243             }else if("4".equalsIgnoreCase(code)){
244                 map.put("beginDate", "trunc(add_months(sysdate,-12))");
245                 map.put("endDate", "trunc(sysdate-1)");
246             }else if("5".equalsIgnoreCase(code)){
247                 if(StringUtils.isNotBlank(beginDate)){
248                     map.put("beginDate","to_date('"+beginDate+"-01-01','yyyy-mm-dd')");
249                 }
250                 if(StringUtils.isNotBlank(endDate)){
251                     map.put("endDate", "to_date('"+endDate+"-12-31','yyyy-mm-dd')");
252                 }
253             }else if("6".equalsIgnoreCase(code)){
254                 map.put("beginDate","to_date('"+beginDate+"-"+((Integer.parseInt(endDate)-1)*3+1)+"-01','yyyy-mm-dd')");
255                 map.put("endDate", "to_date('"+beginDate+"-"+(Integer.parseInt(endDate)*3)+"-"+getDayByMonth(String.valueOf(Integer.parseInt(endDate)*3))+"','yyyy-mm-dd')");
256             }else if("7".equalsIgnoreCase(code)){
257                 map.put("beginDate","to_date('"+beginDate+"-"+endDate+"-01','yyyy-mm-dd')");
258                 map.put("endDate", "to_date('"+beginDate+"-"+endDate+"-"+getDayByMonth(endDate)+"','yyyy-mm-dd')");
259             }else if("8".equalsIgnoreCase(code)){
260                 if(StringUtils.isNotBlank(beginDate)){
261                     map.put("beginDate","to_date('"+beginDate+"','yyyy-mm-dd')");
262                 }
263                 if(StringUtils.isNotBlank(endDate)){
264                     map.put("endDate", "to_date('"+endDate+"','yyyy-mm-dd')");
265                 }
266             }
267             return map;
268         }
269         return map;
270     }
271     /**
272      * 根据当前月份获取该月最后一天日期
273      * @param month 月份
274      * @return 该月最后一天日期
275      */
276     private static String getDayByMonth(String month){
277         if("2".equalsIgnoreCase(month)){
278             return "28";
279         }else if("1".equalsIgnoreCase(month) || "3".equalsIgnoreCase(month) || "5".equalsIgnoreCase(month) || "7".equalsIgnoreCase(month) || "8".equalsIgnoreCase(month) || "10".equalsIgnoreCase(month) || "12".equalsIgnoreCase(month)){
280             return "31";
281         }else{
282             return "30";
283         }
284     }
285 
286     /**
287      * 获取当前日期前一天
288      * @return date
289      */
290     public static Date getLastDay(){
291         Calendar calendar = Calendar.getInstance();
292         calendar.add(Calendar.DATE, -1);    //得到前一天
293         Date date = calendar.getTime();
294         return date;
295     }
296 
297     /**
298      * 获取当前日期前两天
299      * @return date
300      */
301     public static Date getLastTwoDay(){
302         Calendar calendar = Calendar.getInstance();
303         calendar.add(Calendar.DATE, -2);    //得到前一天
304         Date date = calendar.getTime();
305         return date;
306     }
307     
308     
309     /**
310      * 获取当前日期前n天
311      * @return date
312      */
313     public static Date getLast(int day){
314         Calendar calendar = Calendar.getInstance();
315         calendar.add(Calendar.DATE, -day);    //得到前一天
316         Date date = calendar.getTime();
317         return date;
318     }
319 
320     /**
321      * 获取当前日期后n天
322      * @return date
323      */
324     public static Date getLastDay(Date date1 ,int days){
325         Calendar calendar = Calendar.getInstance();
326         calendar.setTime(date1);
327         calendar.add(Calendar.DATE, -days);    //得到前一天
328         Date date = calendar.getTime();
329         return date;
330     }
331 
332     /**
333      * 格式化日期
334      * @param format
335      * @return
336      */
337     public static String formatDate(String format){
338         SimpleDateFormat sFormat = new SimpleDateFormat(format);
339         return sFormat.format(new Date());
340     }
341 
342     /**
343      * 格式化日期
344      * @param format
345      * @return
346      */
347     public static String formatDate(Date date,String format){
348         SimpleDateFormat sFormat = new SimpleDateFormat(format);
349         return sFormat.format(date);
350     }
351     /**
352      * 时间格式化为:yyyyMMddHHmmss
353      * @param date
354      * @return 返回已格式化的字符串
355      */
356     public static String getDateString(Date date){
357         SimpleDateFormat s = new SimpleDateFormat("yyyyMMddHHmmss");
358         return s.format(date);
359     }
360     /**
361      * 判断验证码是否失效
362      * @param date1 : 数据库中的时间
363      * @param code:数据字典中的子健code
364      * @return false 失效  true 未失效
365      * @throws HsException
366      */
367     public static Boolean isDateBig(String date1,String errortime) throws Exception{
368         SimpleDateFormat s = new SimpleDateFormat("yyyyMMddHHmmss");
369         Date date = s.parse(date1);//将已格式化的时间字符串转成时间格式
370         long dataBaseTame = date.getTime();//将具体时间转成毫秒数
371         //将修改时间加上数据字典中配置的参数
372         long secon =  Integer.parseInt(errortime)*1000 + dataBaseTame;
373         Date nowDate = new Date();//获取当前时间
374         long nowDateTime = nowDate.getTime();//将具体时间转成毫秒数
375         if(secon < nowDateTime){ //判断验证码是否已失效
376             return false;
377         }
378         return true;
379     }
380     /**
381      * 将yyyy年MM月dd天格式的时间字符串转为yyyymmdd格式
382      * @param date
383      * @return 返回已格式化的字符串
384      * @throws HsException
385      */
386     public static String changeDate(String str) throws Exception{
387         SimpleDateFormat s = new SimpleDateFormat("yyyy年MM月dd日");
388         Date date = s.parse(str);
389         return getDateString(date);
390     }
391     /**
392      * 将yyyy年MM月dd天格式的时间字符串转为yyyymmdd格式
393      * @param date
394      * @return 返回已格式化的字符串
395      * @throws HsException
396      */
397     public static String changeDates(String str) throws Exception{
398         SimpleDateFormat s = new SimpleDateFormat("yyyyMMdd");
399         SimpleDateFormat s1 = new SimpleDateFormat("yyyy年MM月dd日 ");
400         str = str.substring(0, 8);
401         Date date = s.parse(str);
402         return s1.format(date);
403     }
404 
405     /**
406      * 将yyyy-MM-dd HH:mm:ss 时间格式转换为 yyyyMMddHHmmss格式
407      * @param str 时间格式字符串,格式为yyyy-MM-dd HH:mm:ss
408      * @return
409      * @throws Exception
410      */
411     public static String changeDatesString(String str) throws Exception{
412         SimpleDateFormat sdfStyle1 = sdfMap.get(STYLE_1);
413         SimpleDateFormat sdfStyle10 = sdfMap.get(STYLE_10);
414         return sdfStyle10.format(sdfStyle1.parse(str));
415 
416     }
417     /**
418      * 判断用户输入密码错误不能登录时间是否已过
419      * @param date1 : 数据库中用户密码输入错误时间
420      * @param code:数据字典中的子健code
421      * @return false 锁定时间内 true 锁定时间外
422      * @throws HsException
423      */
424     public static Boolean isErrorTime(String date1,String code,String limtime) throws Exception{
425         SimpleDateFormat s = new SimpleDateFormat("yyyyMMddHHmmss");
426         Date date = s.parse(date1);//将已格式化的时间字符串转成时间格式
427         long dataBaseTame = date.getTime();//将具体时间转成毫秒数
428         //将修改时间加上数据字典中配置的参数
429         long secon =  Integer.parseInt(limtime)*1000 + dataBaseTame;
430         Date nowDate = new Date();//获取当前时间
431         long nowDateTime = nowDate.getTime();//将具体时间转成毫秒数
432         if(secon > nowDateTime){ //判断用户是否在锁定时间内
433             return false;
434         }
435         return true;
436     }
437 
438 
439     /**
440      * 获取当前日期前两天
441      * @return date
442      */
443     public static Date getLastMouth(Date date1 ,int mouth){
444         Calendar calendar = Calendar.getInstance();
445         calendar.setTime(date1);
446         calendar.add(Calendar.MONTH, mouth);    //得到前一天
447         Date date = calendar.getTime();
448         return date;
449     }
450 
451     /**
452      * 字符串类型转化为日期类型
453      * @param str
454      * @return
455      */
456     public static Date strConvertToDate2(String str1,String str){
457         if(StringUtils.isNotEmpty(str)){
458             try {
459                 return sdfMap.get(str1).parse(str);
460             } catch (ParseException e) {
461                 // TODO Auto-generated catch block
462                 e.printStackTrace();
463             }
464         }
465         return null;
466     }
467 
468     /**
469      * 将时间戳转换成时间格式
470      * example:1499137275926 to 20170704110115
471      * @param timeStamp
472      * @return
473      */
474     public static String timestampToDateStr(long timeStamp){
475         SimpleDateFormat sdf = sdfMap.get(STYLE_10);
476         Date date = new Date(timeStamp);
477         return sdf.format(date);
478     }
479 
480     /**
481      * 将 yyyyMMddHHmmss 时间格式转换为yyyy-MM-dd HH:mm:ss格式
482      * @param str 时间格式字符串,格式为yyyyMMddHHmmss
483      * @return
484      * @throws Exception
485      */
486     public static String dateFormat(String str) throws Exception{
487         SimpleDateFormat sdfStyle1 = sdfMap.get(STYLE_1);
488         SimpleDateFormat sdfStyle10 = sdfMap.get(STYLE_10);
489         return sdfStyle1.format(sdfStyle10.parse(str));
490     }
491 
492     /**
493      * 日期增加月份部分
494      *
495      * @param date
496      * @param amount
497      * @return
498      */
499     public static Date addMonth(Date date, int amount) {
500         return add(date, Calendar.MONTH, amount);
501     }
502 
503     /**
504      * 日期增加分钟部分
505      *
506      * @param date
507      * @param amount
508      * @return
509      */
510     public static Date addMiunte(Date date, int amount) {
511         return add(date, Calendar.MINUTE, amount);
512     }
513 
514     public static Date add(Date date, int field, int amount) {
515         if (date == null) {
516             date = new Date();
517         }
518 
519         Calendar cal = Calendar.getInstance();
520         cal.setTime(date);
521         cal.add(field, amount);
522 
523         return cal.getTime();
524     }
525     
526     
527     /**
528      * 判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致
529      *
530      * @param nowTime
531      *            当前时间
532      * @param startTime
533      *            开始时间
534      * @param endTime
535      *            结束时间
536      * @return
537      */
538     public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
539         if (nowTime.getTime() == startTime.getTime() || nowTime.getTime() == endTime.getTime()) {
540             return true;
541         }
542 
543         Calendar date = Calendar.getInstance();
544         date.setTime(nowTime);
545 
546         Calendar begin = Calendar.getInstance();
547         begin.setTime(startTime);
548 
549         Calendar end = Calendar.getInstance();
550         end.setTime(endTime);
551 
552         if (date.after(begin) && date.before(end)) {
553             return true;
554         } else {
555             return false;
556         }
557     }
558 
559     /**
560      * 返回两个日期的相隔天数
561      * @param startDate
562      * @param endDate
563      * @return
564      */
565     public static Long getDaysBetween(Date startDate, Date endDate) {
566         Calendar fromCalendar = Calendar.getInstance();
567         fromCalendar.setTime(startDate);
568         fromCalendar.set(Calendar.HOUR_OF_DAY, 0);
569         fromCalendar.set(Calendar.MINUTE, 0);
570         fromCalendar.set(Calendar.SECOND, 0);
571         fromCalendar.set(Calendar.MILLISECOND, 0);
572 
573         Calendar toCalendar = Calendar.getInstance();
574         toCalendar.setTime(endDate);
575         toCalendar.set(Calendar.HOUR_OF_DAY, 0);
576         toCalendar.set(Calendar.MINUTE, 0);
577         toCalendar.set(Calendar.SECOND, 0);
578         toCalendar.set(Calendar.MILLISECOND, 0);
579 
580         return (toCalendar.getTime().getTime() - fromCalendar.getTime().getTime()) / (1000 * 60 * 60 * 24);
581     }
582 
583 
584     /**
585      * 获取某月的最后一天
586      *
587      */
588     public static Date getLastDayOfMonth(int year,int month)
589     {
590         Calendar cal = Calendar.getInstance();
591         //设置年份
592         cal.set(Calendar.YEAR,year);
593         //设置月份
594         cal.set(Calendar.MONTH, month-1);
595         //获取某月最大天数
596         int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
597         //设置日历中月份的最大天数
598         cal.set(Calendar.DAY_OF_MONTH, lastDay);
599         return cal.getTime();
600     }
601 }
View Code: 那个工具类


 

  1  package com.qinjia.finance.service.impl;
  2   2 
  3   3 import com.alibaba.fastjson.JSON;
  4   4 import com.alibaba.fastjson.JSONObject;
  5   5 import com.qinjia.finance.base.util.DateUtil;
  6   6 import com.qinjia.finance.base.util.IdGenerator;
  7   7 import com.qinjia.finance.common.constant.CommonConstant;
  8   8 import com.qinjia.finance.common.util.BaoShengUtil;
  9   9 import com.qinjia.finance.dto.ProductBuyRes;
 10  10 import com.qinjia.finance.dto.ResponseDto;
 11  11 import com.qinjia.finance.entity.*;
 12  12 import com.qinjia.finance.enums.UriEnums;
 13  13 import com.qinjia.finance.mapper.*;
 14  14 import com.qinjia.finance.service.BsEventHandleService;
 15  15 import com.qinjia.finance.service.ProductService;
 16  16 import lombok.extern.log4j.Log4j2;
 17  17 import org.springframework.beans.BeanUtils;
 18  18 import org.springframework.beans.factory.annotation.Autowired;
 19  19 import org.springframework.stereotype.Service;
 20  20 import org.springframework.transaction.annotation.Transactional;
 21  21 import tk.mybatis.mapper.entity.Example;
 22  22 import javax.annotation.Resource;
 23  23 import java.math.BigDecimal;
 24  24 import java.util.Date;
 25  25 import java.util.List;
 26  26 
 27  27 /**
 28  28  * 5.3购买产品接口
 29  29  */
 30  30 @Service("productBuyService")
 31  31 @Log4j2
 32  32 public class ProductBuyServiceImpl implements ProductService, BsEventHandleService {
 33  33 
 34  34    @Autowired
 35  35    BaoShengUtil baoShengUtil;
 36  36    @Resource
 37  37    TransPurchaseMapper transPurchaseMapper;
 38  38    @Resource
 39  39    AcctMainMapper acctMainMapper;
 40  40    @Resource
 41  41     CustBaseInfoMapper custBaseInfoMapper;
 42  42    @Resource
 43  43     AcctSubMapper acctSubMapper;
 44  44    @Resource
 45  45     AcctEntryMapper acctEntryMapper;
 46  46 
 47  47 
 48  48 
 49  49    @Override
 50  50    public Object call(String serviceName, Object... object) throws Exception {
 51  51       //组装请求报文
 52  52       //发送宝生接口
 53  53       //组装mq消息,发送
 54  54       ResponseDto responseDto = baoShengUtil.messageSend(UriEnums.DBANKAPI_PROD_BUY.getUrl(),object[0]);
 55  55       responseDto.configData(ProductBuyRes.class);
 56  56       return responseDto;
 57  57    }
 58  58 
 59  59    @Override
 60  60    @Transactional(rollbackFor = Exception.class)
 61  61    public boolean handleMsg(JSONObject jsonObject) throws Exception {
 62  62        /** ###############  整体逻辑  #####################
 63  63          * 1、t_trans_purchase 表增加一条购买记录(无论交易成功还是失败)
 64  64          * 2、如果1交易成功,判断是否存在产品账户 t_acct_sub;同时定义全局全局变量:产品账户交易前金额(目的:交易流水记录用到)
 65  65          * 2.1.1、存在:修改产品账户金额:交易前金额+交易金额;同时赋值全局变量:产品账户交易前金额
 66  66         * 2.1.2、不存在:新增产品账户,产品账户金额:交易金额;全局变量:产品账户交易前金额(0.00)
 67  67          * 2.2、获取存管账户 t_acct_sub,更改相关交易金额
 68  68          * 3.1、t_acct_entry 增加记录:产品购买记录(余额+)
 69  69          * 3.2、t_acct_entry 增加记录:账户购买记录(余额-)
 70  70        */
 71  71       log.info("====处理产品购买信息====");
 72  72       //1、新增购买记录
 73  73       //新增交易流水信息
 74  74       String inParam = jsonObject.getString("inParam");
 75  75       String outParam = jsonObject.getString("outParam");
 76  76       TransPurchase transPurchase1 = JSON.parseObject(inParam, TransPurchase.class);
 77  77       ProductBuyRes transPurchase2 = JSON.parseObject(outParam, ProductBuyRes.class);
 78  78       //保存出参信息
 79  79       TransPurchase transPurchase = new TransPurchase();
 80  80       BeanUtils.copyProperties(transPurchase2,transPurchase);
 81  81         transPurchase.setId(Long.parseLong(IdGenerator.generateId()));
 82  82       transPurchase.setFundCode(CommonConstant.FUND_NO);   //资金方编号
 83  83       transPurchase.setAssetNo(CommonConstant.ASSET_NO);//资产方编号
 84  84       transPurchase.setTelephone(transPurchase1.getTelephone());
 85  85       transPurchase.setProductCode(transPurchase1.getProductCode());
 86  86       transPurchase.setTradeAmount(transPurchase1.getTradeAmount());
 87  87       transPurchase.setCreateTime(new Date());
 88  88       transPurchase.setUpdateTime(new Date());
 89  89         Date formatBankTradeTime = DateUtil.strConvertToDate(transPurchase2.getBankTradeTime());
 90  90         Date formatInterestBeginDate = DateUtil.strConvertToDate(transPurchase2.getInterestBeginDate());
 91  91         Date formatRedeemableDate = DateUtil.strConvertToDate(transPurchase2.getRedeemableDate());
 92  92         Date formatNextValueDate = DateUtil.strConvertToDate(transPurchase2.getNextValueDate());
 93  93         transPurchase.setRedeemableDate(formatRedeemableDate);
 94  94         transPurchase.setInterestBeginDate(formatInterestBeginDate);
 95  95         transPurchase.setInterestEndDate(transPurchase2.getInterestDueEndDate());
 96  96         transPurchase.setDueRate(new BigDecimal(transPurchase2.getDueRate()));
 97  97         transPurchase.setDueInterestAmount(new BigDecimal(transPurchase2.getDueInterestAmount()));
 98  98         transPurchase.setNextValueDate(formatNextValueDate);
 99  99         transPurchase.setBankTradeTime(formatBankTradeTime);
100 100       transPurchaseMapper.insertSelective(transPurchase);
101 101       //购买成功数据落库
102 102         if("FAIL".equals(transPurchase2.getTradeStatus())){
103 103             log.info("购买产品失败...");
104 104         }
105 105         if("PROCESSING".equals(transPurchase2.getTradeStatus())){
106 106             log.info("购买产品处理中...");
107 107         }
108 108         if ("SUCCESS".equals(transPurchase2.getTradeStatus())) {
109 109             //2.1
110 110             //2.1.1、根据thirdUserId获取主账号cust_id
111 111             Example example1 = new Example(CustBaseInfo.class);
112 112             example1.createCriteria().andEqualTo("thirdUserId", transPurchase1.getThirdUserId());
113 113             List<CustBaseInfo> custBaseInfoList = custBaseInfoMapper.selectByExample(example1);
114 114             CustBaseInfo custBaseInfo = new CustBaseInfo();
115 115             if (!custBaseInfoList.isEmpty()) {
116 116                 custBaseInfo = custBaseInfoList.get(0);
117 117             }
118 118 
119 119             //2.1.2 根据cust_id和产品代码查询t_acct_sub 获取产品账户
120 120             Example example5 = new Example(AccSub.class);
121 121             example5.createCriteria().andEqualTo("custId", custBaseInfo.getId())
122 122                     .andEqualTo("acctNo", transPurchase1.getProductCode());
123 123             List<AccSub> accSubListForProductPanDuan = acctSubMapper.selectByExample(example5);
124 124             AccSub accSubForNewOrUpdate = new AccSub();
125 125             //2.1.3、根据thirdUserId获取主账号id 和UserName
126 126             Example example = new Example(AcctMain.class);
127 127             example.createCriteria().andEqualTo("acctNo", transPurchase1.getThirdUserId());
128 128             List<AcctMain> acctMainList = acctMainMapper.selectByExample(example);
129 129             AcctMain acctMain = new AcctMain();
130 130             if (!acctMainList.isEmpty()) {
131 131                 acctMain = acctMainList.get(0);
132 132             }
133 133             BigDecimal productAccBalancePre = new BigDecimal(0);//定义变量:产品账户交易前余额
134 134             if (!accSubListForProductPanDuan.isEmpty()) {
135 135                 // 存在,修改金额:当前金额加交易金额
136 136                 accSubForNewOrUpdate = accSubListForProductPanDuan.get(0);
137 137                 //2.1.4、获取交易前产品账户余额
138 138                 productAccBalancePre = accSubForNewOrUpdate.getBalance();
139 139                 accSubForNewOrUpdate.setBalance(accSubForNewOrUpdate.getBalance().add(transPurchase1.getTradeAmount()));
140 140                 accSubForNewOrUpdate.setUpdateTime(new Date());
141 141                 //   2.1 、或修改产品账户
142 142                 acctSubMapper.updateByPrimaryKey(accSubForNewOrUpdate);
143 143             } else {
144 144                 //不存在,新增产品账户 当前金额为交易金额
145 145                 accSubForNewOrUpdate.setId(Long.parseLong(IdGenerator.generateId()));
146 146                 accSubForNewOrUpdate.setParentId(acctMain.getId());
147 147                 accSubForNewOrUpdate.setAcctType("20"); //指定产品账户
148 148                 accSubForNewOrUpdate.setAcctNo(transPurchase.getProductCode());//产品代码
149 149                 accSubForNewOrUpdate.setCustId(custBaseInfo.getId());
150 150                 accSubForNewOrUpdate.setUserName(acctMain.getUserName());
151 151                 accSubForNewOrUpdate.setFundCode(CommonConstant.FUND_NO);
152 152                 accSubForNewOrUpdate.setAssetNo(CommonConstant.ASSET_NO);
153 153                 accSubForNewOrUpdate.setBalance(transPurchase1.getTradeAmount());//当前金额为交易金额
154 154                 accSubForNewOrUpdate.setCreateTime(new Date());
155 155                 accSubForNewOrUpdate.setUpdateTime(new Date());
156 156                 // 2.1、或新增产品账户
157 157                 acctSubMapper.insertSelective(accSubForNewOrUpdate);
158 158             }
159 159             // 2.2、t_acct_sub 存管户余额减少
160 160             // 2.2.1 设置查询条件:thirdUserId,10存管账户 查找存管账户   条件为:example3,结果为accSub2
161 161             Example example3 = new Example(AccSub.class);
162 162             example3.createCriteria().andEqualTo("custId", custBaseInfo.getId())
163 163                     .andEqualTo("acctType", "10");//设置查询条件:thirdUserId,10存管账户
164 164             List<AccSub> accSubList = acctSubMapper.selectByExample(example3);
165 165             AccSub accSub2 = new AccSub();
166 166             BigDecimal accBalancePre = new BigDecimal(0);  //定义变量:存管账户交易前余额
167 167             if (!accSubList.isEmpty()) {
168 168                 accSub2 = accSubList.get(0);
169 169                 accBalancePre = accSub2.getBalance();
170 170                 accSub2.setBalance(accSub2.getBalance().subtract(transPurchase1.getTradeAmount()));//存管账户余额为当前余额减交易金额
171 171                 accSub2.setUpdateTime(new Date());
172 172                 // 2.2、t_acct_sub 存管户余额减少
173 173                 acctSubMapper.updateByPrimaryKey(accSub2);
174 174             }
175 175             //3 t_acct_entry账户金额变动日志表增加两条流水
176 176             //3.1、新增一条产品账户金额增加记录
177 177             AcctEntry acctEntry = new AcctEntry();
178 178             acctEntry.setId(Long.parseLong(IdGenerator.generateId()));
179 179             acctEntry.setSubAcctId(accSubForNewOrUpdate.getId());
180 180             acctEntry.setOppAcctId(Long.valueOf(2));//本账户是充值,则对手方为购买(提现)
181 181             acctEntry.setPreAmt(productAccBalancePre);//产品账户交易前金额
182 182             acctEntry.setTransAmt(transPurchase1.getTradeAmount());//交易金额
183 183             acctEntry.setPostAmt(acctEntry.getPreAmt().add(acctEntry.getTransAmt()));//交易后金额=交易前金额+交易金额
184 184             acctEntry.setTransType("CZ");//
185 185             acctEntry.setTransId(transPurchase.getId());
186 186             acctEntry.setBalance(acctEntry.getPostAmt());
187 187             acctEntry.setCreateTime(new Date());
188 188             acctEntry.setUpdateTime(new Date());
189 189             acctEntryMapper.insertSelective(acctEntry);
190 190 
191 191             AcctEntry acctEntry2 = new AcctEntry();
192 192             acctEntry2.setId(Long.parseLong(IdGenerator.generateId()));
193 193             acctEntry2.setSubAcctId(accSubForNewOrUpdate.getId());
194 194             acctEntry2.setOppAcctId(Long.valueOf(1));//本账户是购买,则对手方为充值
195 195             acctEntry2.setPreAmt(accBalancePre);
196 196             acctEntry2.setTransAmt(transPurchase1.getTradeAmount());
197 197             acctEntry2.setPostAmt(acctEntry2.getPreAmt().subtract(acctEntry2.getTransAmt()));//交易后金额=交易前金额-交易金额
198 198             acctEntry2.setTransType("SG");//交易类型 :SG申购
199 199             acctEntry2.setTransId(transPurchase.getId());
200 200             acctEntry2.setBalance(acctEntry2.getPostAmt());
201 201             acctEntry2.setCreateTime(new Date());
202 202             acctEntry2.setUpdateTime(new Date());
203 203             acctEntryMapper.insertSelective(acctEntry2);
204 204         }
205 205         return false;
206 206    }
207 207 
208 208    @Override
209 209    public UriEnums get() {
210 210       return UriEnums.DBANKAPI_PROD_BUY;
211 211    }
212 212 
213 213 }
214 214 
215 215 
216 216 ============================
View Code:购买产品

 



  1

 

posted on 2020-05-08 18:32  头发渐秃终不悔  阅读(156)  评论(0编辑  收藏  举报

导航