peternameyakj
2024-07-30 f23b33bbb9eaff76cac5b69e3b793fc7910fb0fa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package project.wallet.consumer;
 
import java.sql.PreparedStatement;
import java.sql.SQLException;
 
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
 
public class WalletDaoImpl implements WalletDao {
    
    private JdbcTemplate jdbcTemplate;
 
    @Override
    public void update(final WalletMessage walletMessage) {
        if(walletMessage.getLockMoney()!=0d||walletMessage.getFreezeMoney()!=0d) {
            updateLockAndFreeze(walletMessage);
            return ;
        }
        String sql = "UPDATE T_WALLET SET MONEY=ROUND(MONEY+?,8) WHERE PARTY_ID=?";
        jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
 
            @Override
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                ps.setDouble(1, walletMessage.getMoney());
                ps.setString(2, walletMessage.getPartyId().toString());
            }
 
            @Override
            public int getBatchSize() {
                return 1;
            }
        });
 
    }
    
    /**
     * 附加锁定金额和冻结金额更新
     * @param walletMessage
     */
    public void updateLockAndFreeze(final WalletMessage walletMessage) {
        String sql = "UPDATE T_WALLET SET MONEY=ROUND(MONEY+?,8),LOCK_MONEY=ROUND(LOCK_MONEY+?,8),FREEZE_MONEY=ROUND(FREEZE_MONEY+?,8) WHERE PARTY_ID=?";
        jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
 
            @Override
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                ps.setDouble(1, walletMessage.getMoney());
                ps.setDouble(2, walletMessage.getLockMoney());
                ps.setDouble(3, walletMessage.getFreezeMoney());
                ps.setString(4, walletMessage.getPartyId().toString());
            }
 
            @Override
            public int getBatchSize() {
                return 1;
            }
        });
 
    }
 
    @Override
    public void update(final WalletExtendMessage walletExtendMessage) {
        if(walletExtendMessage.getLockVolumn() != 0 || walletExtendMessage.getFreezeVolumn() != 0) {
            updateLockAndFreeze(walletExtendMessage);
            return;
        }
        if (walletExtendMessage.getFrozenAmount() == 0) {
            String sql = "UPDATE T_WALLET_EXTEND SET AMOUNT=ROUND(AMOUNT+?,8) WHERE PARTY_ID=? AND WALLETTYPE=? ";
            jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
                @Override
                public void setValues(PreparedStatement ps, int i) throws SQLException {
                    ps.setDouble(1, walletExtendMessage.getVolumn());
                    ps.setString(2, walletExtendMessage.getPartyId().toString());
                    ps.setString(3, walletExtendMessage.getWalletType());
                }
                @Override
                public int getBatchSize() {
                    return 1;
                }
            });
        } else {
            String sql = "UPDATE T_WALLET_EXTEND SET AMOUNT = ROUND(AMOUNT + ?, 8), FROZEN_AMOUNT = ROUND(FROZEN_AMOUNT + ?, 8) WHERE PARTY_ID = ? AND WALLETTYPE = ? ";
            jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
                @Override
                public void setValues(PreparedStatement ps, int i) throws SQLException {
                    ps.setDouble(1, walletExtendMessage.getVolumn());
                    ps.setDouble(2, walletExtendMessage.getFrozenAmount());
                    ps.setString(3, walletExtendMessage.getPartyId().toString());
                    ps.setString(4, walletExtendMessage.getWalletType());
                }
                @Override
                public int getBatchSize() {
                    return 1;
                }
            });
        }
    }
    
    public void updateLockAndFreeze(final WalletExtendMessage walletExtendMessage) {
        String sql = "UPDATE T_WALLET_EXTEND SET AMOUNT=ROUND(AMOUNT+?,8),LOCK_AMOUNT=ROUND(LOCK_AMOUNT+?,8),FREEZE_AMOUNT=ROUND(FREEZE_AMOUNT+?,8) WHERE PARTY_ID=? AND WALLETTYPE=? ";
        jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
 
            @Override
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                ps.setDouble(1, walletExtendMessage.getVolumn());
                ps.setDouble(2, walletExtendMessage.getLockVolumn());
                ps.setDouble(3, walletExtendMessage.getFreezeVolumn());
                ps.setString(4, walletExtendMessage.getPartyId().toString());
                ps.setString(5, walletExtendMessage.getWalletType());
            }
 
            @Override
            public int getBatchSize() {
                return 1;
            }
        });
 
    }
 
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
 
}