zoukankan      html  css  js  c++  java
  • 写的代码小有成就+今日总结--购买产品---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
  • 相关阅读:
    RabbitMQ链接不上异常
    设计模式之禅之六大设计原则-迪米特原则
    <十二>面向对象分析之UML核心元素之节点和设备
    <十一>面向对象分析之UML核心元素之组件
    <十>面向对象分析之UML核心元素之关系
    <九>面向对象分析之UML核心元素之设计类,类,属性,方法,可见性
    <八>面向对象分析之UML核心元素之分析类
    <七>面向对象分析之UML核心元素之包
    <六>面向对象分析之UML核心元素之业务实体
    Spring Cloud(七):使用SVN存储分布式配置中心文件和实现refresh
  • 原文地址:https://www.cnblogs.com/toufajiantuzhongbuhui/p/12852370.html
Copyright © 2011-2022 走看看