大繼的基礎(chǔ)級(jí)業(yè)務(wù)實(shí)戰(zhàn)設(shè)計(jì)記錄(三)搜贤,充值

一谆沃,目的

提供一個(gè)擴(kuò)展比較好的,積分充值設(shè)計(jì)路,每個(gè)字段都經(jīng)過(guò)多種場(chǎng)景進(jìn)行考慮仪芒。由于文筆不好唁影,以下以代碼形式展示設(shè)計(jì)思路.

兼容多種業(yè)務(wù)場(chǎng)景

現(xiàn)金耕陷、銀行、支付寶据沈,微信支付等...

二哟沫,依賴模塊

積分:http://www.reibang.com/p/e0748147c6c6 [可以參考我之前寫的 ,不過(guò)寫得差锌介,大繼的基礎(chǔ)級(jí)業(yè)務(wù)實(shí)戰(zhàn)設(shè)計(jì)記錄(一)嗜诀,積分],
銀行孔祸,alipay,wechat

三隆敢,實(shí)戰(zhàn)代碼

1.現(xiàn)金請(qǐng)求

Cent beforeCent = centsRest.findTypeAndTypeId("WALLET","0");
        if(beforeCent == null){
            beforeCent.setNumber(0.0);
        }

        //正經(jīng)一點(diǎn)需要一個(gè)  cash 模塊。簡(jiǎn)化可用崔慧,只需要隨機(jī)給個(gè)UUID
        CentChargeRequest centChargeRequest = new CentChargeRequest();
        centChargeRequest.setChargeNumber(100.0);
        centChargeRequest.setFromType("cash");
        centChargeRequest.setFromTypeId(UUID.randomUUID().toString());
        centChargeRequest.setFromTypeIdName("test source");
        centChargeRequest.setFromTradeNo(UUID.randomUUID().toString());
        centChargeRequest.setSummary("充值測(cè)試");
        centChargeRequest.setFromUserId(0L);
        centChargeRequest.setCentType("WALLET");
        centChargeRequest.setCentTypeId("0");
        centChargeRequest.setFromResultCode("0");
        centChargeRequest.setCentUserId(0L);
        centsChargeRest.charge(centChargeRequest);

        Cent afterCent = centsRest.findTypeAndTypeId("WALLET","0");
        Assert.assertEquals(new Double(afterCent.getNumber() - 100.0),beforeCent.getNumber());

2.銀行請(qǐng)求(注:此實(shí)現(xiàn)需要在業(yè)務(wù)級(jí)模塊組合拂蝎,不要讓cent模塊直接依賴bank模塊)

Cent beforeCent = centsRest.findTypeAndTypeId("WALLET","0");
        if(beforeCent == null){
            beforeCent.setNumber(0.0);
        }

        /**
         * 依賴bank 模塊
         */
        Bank bank = new Bank();
        bank.setId(UUID.randomUUID().toString());
        bank.setCreateTime(new Date());
        bank.setEnable(true);
        bank.setEnName("ICBC");
        bank.setImage("image");
        bank.setName("中國(guó)工商銀行");
        bank.setUpdateTime(new Date());
        bank = banksRest.save(bank);

        BankCard bankCard = new BankCard();
        bankCard.setBankId(bank.getId());
        bankCard.setBranchId(null);
        bankCard.setBranchName("廣州石牌支行");
        bankCard.setCreateTime(new Date());
        bankCard.setEnable(true);
        bankCard.setId(UUID.randomUUID().toString());
        bankCard.setMobile("+08615818733***");
        bankCard.setRealName("大繼");
        bankCard.setType("儲(chǔ)蓄卡");
        bankCard.setNo("6222023602030330***");
        bankCard.setUpdateTime(new Date());
        bankCard.setUserId(0L);

        bankCard = banksCardRest.save(bankCard);



        //正經(jīng)一點(diǎn)需要一個(gè)  cash 模塊。簡(jiǎn)化可用惶室,只需要隨機(jī)給個(gè)UUID
        CentChargeRequest centChargeRequest = new CentChargeRequest();
        centChargeRequest.setChargeNumber(100.0);
        centChargeRequest.setFromType("bankcard");
        centChargeRequest.setFromTypeId(bankCard.getId());
        centChargeRequest.setFromTypeIdName(bankCard.getRealName());
        centChargeRequest.setFromTradeNo(UUID.randomUUID().toString());
        //需要加入對(duì)bank name描述
        centChargeRequest.setSummary("充值測(cè)試");
        centChargeRequest.setFromUserId(0L);
        centChargeRequest.setCentType("WALLET");
        centChargeRequest.setCentTypeId("0");
        centChargeRequest.setCentUserId(0L);
        centChargeRequest.setFromResultCode("0");
        centsChargeRest.charge(centChargeRequest);

        Cent afterCent = centsRest.findTypeAndTypeId("WALLET","0");
        Assert.assertEquals(new Double(afterCent.getNumber() - 100.0),beforeCent.getNumber());

3.其它可按上兩個(gè)例子進(jìn)行擴(kuò)展

4.充值實(shí)體温自,及積分變更記錄

  • 改進(jìn)了,之前設(shè)計(jì)過(guò)的積分設(shè)計(jì)
/**
 * 積分充值
 */
@Entity
@Table(name = "cent_charge_log",
        indexes = {@Index(columnList = "fromType,fromTradeNo",unique = true)})
public class CentChargeLog {
    @Id
    @Column(length = 37)
    private String id;
    /**
     * 充值的積分賬號(hào)
     */
    @Column(length = 37)
    private String centId;
    /**
     * 充值的積分類型
     */
    @Column(length = 32)
    private String centType;
    /**
     * 充值的積分類型ID
     */
    @Column(length = 37)
    private String centTypeId;
    @Column
    private Long centUserId;
    /**
     * 充值數(shù)量
     */
    @Column
    private Double number;
    /**
     * 充值來(lái)源皇钞,可以是微信悼泌,支付寶,銀行等第三方夹界,或本系統(tǒng)現(xiàn)金
     */
    @Column(length = 64)
    private String fromType;
    /**
     * 充值來(lái)源ID 馆里,微信支付有openId,現(xiàn)金使用管理員ID,銀行使用銀行卡號(hào)
     */
    @Column
    private String fromTypeId;
    /**
     * 充值來(lái)源ID名稱
     */
    @Column
    private String fromTypeIdName;
    /**
     * 充值來(lái)源交易號(hào)
     * 需要事務(wù)保證唯一
     */
    @Column(length = 64)
    private String fromTradeNo;
    /**
     * 來(lái)源交易結(jié)果
     */
    @Column
    private String fromResultCode;
    /**
     * 所屬于用戶掉盅,需要對(duì)集合描述為空并用own進(jìn)行描述
     */
    @Column
    private Long fromUserId;
    /**
     * 狀態(tài)
     */
    @Column(length = 16)
    private String status;
    /**
     * 更新時(shí)間
     */
    @Column
    private Date updateTime;
    /**
     * 創(chuàng)建時(shí)間
     */
    @Column
    private Date createTime;
    ...
}
/**
 * 單體積分變更記錄也拜。
 * 所有積分賬變化都需要記錄到這個(gè)表以舒。
 * 滿足可查性需求.
 * 如A轉(zhuǎn)賬B趾痘,這里會(huì)產(chǎn)生兩個(gè)記錄。
 */
@Entity
@Table(name = "cent_changed_log",
        indexes = {@Index(columnList = "centId"),@Index(columnList = "fromType,fromTypeId")})
public class CentChangedLog {
    @Id
    @Column(length = 37)
    private String id;
    /**
     * 用設(shè)計(jì)簡(jiǎn)化蔓钟,積分賬號(hào)直接光聯(lián)查詢.
     */
    @Column(length = 37)
    private String centId;
    /**
     * 變更主體
     * 用設(shè)計(jì)簡(jiǎn)化永票,直接使用積分類別查詢.
     */
    @Column(length = 37)
    private String centType;
    /**
     * 變更主體
     * 用設(shè)計(jì)簡(jiǎn)化,直接使用積分類別查詢.
     */
    @Column
    private String centTypeId;
    /**
     * 變更描述
     */
    @Column
    private String summary;
    /**
     * 改變數(shù)量
     * 變更點(diǎn)數(shù) 正數(shù)滥沫,或負(fù)數(shù)來(lái)表達(dá)加或減.
     */
    @Column
    private Double changedNumber;
    /**
     * 手續(xù)費(fèi)
     */
    @Column
    private Double changedFee;
    /**
     * 原交易數(shù)
     * 在需要手續(xù)費(fèi)的情況下這個(gè)侣集,原交易數(shù)來(lái)記錄,支付全額
     * 例如: 100 -> b   扣掉2元手費(fèi)兰绣, 在changeNumber里會(huì)寫 98, 這個(gè)original則保留原始的數(shù)據(jù)世分。便于查詢.
     */
    @Column
    private Double changedOriginalNumber;
    /**
     * 變更后最終余額
     */
    @Column
    private Double changedLeftNumber;
    /**
     * 變更類型,
     * 如果是轉(zhuǎn)賬積分號(hào)缀辩,充值等記錄類型來(lái)源
     */
    @Column(length = 32)
    private String fromType;
    /**
     * 如果是充值就是充值 ID
     */
    @Column(length = 37)
    private String fromTypeId;
    @Column
    private String fromTypeIdName;
    @Column
    private Long fromUserId;
    @Column
    private Long userId;
    /**
     * 為以后特殊情況保留臭埋,正常都是 SUCCESS
     */
    @Column
    private String status;
    @Column
    private Date updateTime;
    @Column
    private Date createTime;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末踪央,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瓢阴,更是在濱河造成了極大的恐慌畅蹂,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荣恐,死亡現(xiàn)場(chǎng)離奇詭異液斜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)叠穆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門少漆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人硼被,你說(shuō)我怎么就攤上這事检疫。” “怎么了祷嘶?”我有些...
    開(kāi)封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵屎媳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我论巍,道長(zhǎng)烛谊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任嘉汰,我火速辦了婚禮丹禀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鞋怀。我一直安慰自己双泪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布密似。 她就那樣靜靜地躺著焙矛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪残腌。 梳的紋絲不亂的頭發(fā)上村斟,一...
    開(kāi)封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音抛猫,去河邊找鬼蟆盹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闺金,可吹牛的內(nèi)容都是我干的逾滥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼败匹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寨昙!你這毒婦竟也來(lái)了面哥?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤毅待,失蹤者是張志新(化名)和其女友劉穎尚卫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體尸红,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吱涉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了外里。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怎爵。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盅蝗,靈堂內(nèi)的尸體忽然破棺而出鳖链,到底是詐尸還是另有隱情,我是刑警寧澤墩莫,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布芙委,位于F島的核電站,受9級(jí)特大地震影響狂秦,放射性物質(zhì)發(fā)生泄漏灌侣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一裂问、第九天 我趴在偏房一處隱蔽的房頂上張望侧啼。 院中可真熱鬧,春花似錦堪簿、人聲如沸痊乾。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)哪审。三九已至,卻和暖如春甜孤,著一層夾襖步出監(jiān)牢的瞬間协饲,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工缴川, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人描馅。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓把夸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親铭污。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恋日,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容