魏超 vor 5 Jahren
Ursprung
Commit
7bbfc937fc

+ 25
- 0
src/main/java/com/huiju/estateagents/common/CommConstant.java Datei anzeigen

@@ -832,4 +832,29 @@ public class CommConstant {
832 832
      * 审核通过
833 833
      */
834 834
     public static final Integer STATUS_VERIFY_PASS = 4;
835
+
836
+    /**
837
+     * 充值操作
838
+     */
839
+    public static final String RECHARGE = "CZ";
840
+
841
+    /**
842
+     * 退款操作
843
+     */
844
+    public static final String REFUND = "TK";
845
+
846
+    /**
847
+     * 明细类型--充值
848
+     */
849
+    public static final String ITEM_TYPE_RECHARGE = "recharge";
850
+
851
+    /**
852
+     * 明细类型--退费
853
+     */
854
+    public static final String ITEM_TYPE_REFUND = "refund";
855
+
856
+    /**
857
+     * 明细类型--红包
858
+     */
859
+    public static final String ITEM_TYPE_REDPACKAGE = "redPackage";
835 860
 }

+ 9
- 0
src/main/java/com/huiju/estateagents/common/CommonUtils.java Datei anzeigen

@@ -1,5 +1,8 @@
1 1
 package com.huiju.estateagents.common;
2 2
 
3
+import java.text.SimpleDateFormat;
4
+import java.util.Date;
5
+import java.util.Random;
3 6
 import java.util.regex.Matcher;
4 7
 import java.util.regex.Pattern;
5 8
 
@@ -19,4 +22,10 @@ public class CommonUtils {
19 22
             return true;
20 23
         }
21 24
     }
25
+
26
+    public static String generateTradeNo(String tradeType){
27
+        String sdf = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
28
+        int randNum = (int) (new Random().nextDouble() * (9999 - 1000 + 1)) + 1000;// 获取5位随机数
29
+        return tradeType+sdf+randNum;
30
+    }
22 31
 }

+ 32
- 7
src/main/java/com/huiju/estateagents/redpack/controller/TaOrgAccountController.java Datei anzeigen

@@ -1,5 +1,7 @@
1 1
 package com.huiju.estateagents.redpack.controller;
2 2
 
3
+import javax.servlet.http.HttpServletRequest;
4
+
3 5
 import org.slf4j.Logger;
4 6
 import org.slf4j.LoggerFactory;
5 7
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +18,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
16 18
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
17 19
 import com.huiju.estateagents.base.BaseController;
18 20
 import com.huiju.estateagents.base.ResponseBean;
21
+import com.huiju.estateagents.common.StringUtils;
19 22
 import com.huiju.estateagents.redpack.entity.TaOrgAccount;
20 23
 import com.huiju.estateagents.redpack.service.ITaOrgAccountService;
21 24
 
@@ -28,7 +31,7 @@ import com.huiju.estateagents.redpack.service.ITaOrgAccountService;
28 31
  * @since 2020-06-03
29 32
  */
30 33
 @RestController
31
-@RequestMapping("/")
34
+@RequestMapping("/channel")
32 35
 public class TaOrgAccountController extends BaseController {
33 36
 
34 37
     private final Logger logger = LoggerFactory.getLogger(TaOrgAccountController.class);
@@ -43,14 +46,16 @@ public class TaOrgAccountController extends BaseController {
43 46
      * @param pageSize
44 47
      * @return
45 48
      */
46
-    @RequestMapping(value="/taOrgAccount",method= RequestMethod.GET)
49
+    @RequestMapping(value="/api/taOrgAccount",method= RequestMethod.GET)
47 50
     public ResponseBean taOrgAccountList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
48
-                                         @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
51
+                                         @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize,
52
+                                         @RequestParam(value ="miniAppName", required = false) String miniAppName){
49 53
         ResponseBean responseBean = new ResponseBean();
50 54
         try {
51 55
             //使用分页插件
52 56
 		    IPage<TaOrgAccount> pg = new Page<>(pageNum, pageSize);
53 57
             QueryWrapper<TaOrgAccount> queryWrapper = new QueryWrapper<>();
58
+            queryWrapper.eq(!StringUtils.isEmpty(miniAppName), "miniapp_name", miniAppName);
54 59
             queryWrapper.orderByDesc("create_date");
55 60
 
56 61
             IPage<TaOrgAccount> result = iTaOrgAccountService.page(pg, queryWrapper);
@@ -68,7 +73,7 @@ public class TaOrgAccountController extends BaseController {
68 73
      * @param taOrgAccount 实体对象
69 74
      * @return
70 75
      */
71
-    @RequestMapping(value="/taOrgAccount",method= RequestMethod.POST)
76
+    @RequestMapping(value="/api/taOrgAccount",method= RequestMethod.POST)
72 77
     public ResponseBean taOrgAccountAdd(@RequestBody TaOrgAccount taOrgAccount){
73 78
         ResponseBean responseBean = new ResponseBean();
74 79
         try {
@@ -90,7 +95,7 @@ public class TaOrgAccountController extends BaseController {
90 95
      * @param id  实体ID
91 96
      */
92 97
     @ResponseBody
93
-    @RequestMapping(value="/taOrgAccount/{id}", method= RequestMethod.DELETE)
98
+    @RequestMapping(value="/api/taOrgAccount/{id}", method= RequestMethod.DELETE)
94 99
     public ResponseBean taOrgAccountDelete(@PathVariable Integer id){
95 100
         ResponseBean responseBean = new ResponseBean();
96 101
         try {
@@ -113,7 +118,7 @@ public class TaOrgAccountController extends BaseController {
113 118
      * @param taOrgAccount 实体对象
114 119
      * @return
115 120
      */
116
-    @RequestMapping(value="/taOrgAccount/{id}",method= RequestMethod.PUT)
121
+    @RequestMapping(value="/api/taOrgAccount/{id}",method= RequestMethod.PUT)
117 122
     public ResponseBean taOrgAccountUpdate(@PathVariable Integer id,
118 123
                                         @RequestBody TaOrgAccount taOrgAccount){
119 124
         ResponseBean responseBean = new ResponseBean();
@@ -135,7 +140,7 @@ public class TaOrgAccountController extends BaseController {
135 140
      * 根据id查询对象
136 141
      * @param id  实体ID
137 142
      */
138
-    @RequestMapping(value="/taOrgAccount/{id}",method= RequestMethod.GET)
143
+    @RequestMapping(value="/api/taOrgAccount/{id}",method= RequestMethod.GET)
139 144
     public ResponseBean taOrgAccountGet(@PathVariable Integer id){
140 145
         ResponseBean responseBean = new ResponseBean();
141 146
         try {
@@ -147,4 +152,24 @@ public class TaOrgAccountController extends BaseController {
147 152
         }
148 153
         return responseBean;
149 154
     }
155
+
156
+    /**
157
+     * 系统账户充值
158
+     * @param id  实体ID
159
+     */
160
+    @RequestMapping(value="/taOrgAccount/recharge/{id}",method= RequestMethod.PUT)
161
+    public ResponseBean taOrgAccountDetailedListGet(@PathVariable String id, @RequestBody TaOrgAccount taOrgAccount,
162
+                                                    HttpServletRequest request){
163
+        ResponseBean responseBean = new ResponseBean();
164
+        try {
165
+            Integer orgId = getOrgId(request);
166
+            Integer userId = getUserId(request);
167
+            iTaOrgAccountService.rechargeAccount(id, taOrgAccount, 26, 2149);
168
+        }catch (Exception e){
169
+            e.printStackTrace();
170
+            logger.error("taOrgAccountDetailedListDelete -=- {}",e.toString());
171
+            responseBean.addError(e.getMessage());
172
+        }
173
+        return responseBean;
174
+    }
150 175
 }

+ 13
- 0
src/main/java/com/huiju/estateagents/redpack/entity/TaOrgAccount.java Datei anzeigen

@@ -2,8 +2,10 @@ package com.huiju.estateagents.redpack.entity;
2 2
 
3 3
 import java.time.LocalDateTime;
4 4
 import java.io.Serializable;
5
+import java.util.List;
5 6
 
6 7
 import com.baomidou.mybatisplus.annotation.IdType;
8
+import com.baomidou.mybatisplus.annotation.TableField;
7 9
 import com.baomidou.mybatisplus.annotation.TableId;
8 10
 
9 11
 import lombok.Data;
@@ -77,4 +79,15 @@ public class TaOrgAccount implements Serializable {
77 79
     private String miniappName;
78 80
 
79 81
 
82
+    /**
83
+     * 充值凭证
84
+     */
85
+    @TableField(exist = false)
86
+    private List<String> certificateList;
87
+
88
+    /**
89
+     * 充值金额
90
+     */
91
+    @TableField(exist = false)
92
+    private Integer rechargeAmount;
80 93
 }

+ 1
- 1
src/main/java/com/huiju/estateagents/redpack/entity/TaOrgAccountCertificate.java Datei anzeigen

@@ -57,7 +57,7 @@ public class TaOrgAccountCertificate implements Serializable {
57 57
     /**
58 58
      * 凭证说明
59 59
      */
60
-    private String desc;
60
+    private String remark;
61 61
 
62 62
     /**
63 63
      * 凭证地址

+ 1
- 1
src/main/java/com/huiju/estateagents/redpack/entity/TaOrgAccountDetailedList.java Datei anzeigen

@@ -57,7 +57,7 @@ public class TaOrgAccountDetailedList implements Serializable {
57 57
     /**
58 58
      * 说明
59 59
      */
60
-    private String desc;
60
+    private String remark;
61 61
 
62 62
     /**
63 63
      * 消费时间

+ 9
- 1
src/main/java/com/huiju/estateagents/redpack/service/ITaOrgAccountService.java Datei anzeigen

@@ -1,6 +1,7 @@
1 1
 package com.huiju.estateagents.redpack.service;
2 2
 
3 3
 import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.base.ResponseBean;
4 5
 import com.huiju.estateagents.redpack.entity.TaOrgAccount;
5 6
 
6 7
 /**
@@ -12,5 +13,12 @@ import com.huiju.estateagents.redpack.entity.TaOrgAccount;
12 13
  * @since 2020-06-03
13 14
  */
14 15
 public interface ITaOrgAccountService extends IService<TaOrgAccount> {
15
-
16
+    /**
17
+     * 账户充值接口
18
+     * @param accountId
19
+     * @param taOrgAccount
20
+     * @param orgId
21
+     * @return
22
+     */
23
+    ResponseBean rechargeAccount(String accountId, TaOrgAccount taOrgAccount, Integer orgId, Integer userId);
16 24
 }

+ 200
- 0
src/main/java/com/huiju/estateagents/redpack/service/impl/TaOrgAccountServiceImpl.java Datei anzeigen

@@ -1,12 +1,36 @@
1 1
 package com.huiju.estateagents.redpack.service.impl;
2 2
 
3
+import java.time.LocalDateTime;
4
+import java.util.ArrayList;
5
+import java.util.Collections;
6
+import java.util.List;
7
+
8
+import org.apache.commons.collections.CollectionUtils;
9
+import org.springframework.beans.factory.annotation.Autowired;
3 10
 import org.springframework.stereotype.Service;
11
+import org.springframework.transaction.annotation.Transactional;
4 12
 
13
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5 14
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
15
+import com.huiju.estateagents.base.ResponseBean;
16
+import com.huiju.estateagents.center.taUser.entity.TaUser;
17
+import com.huiju.estateagents.center.taUser.mapper.TaUserMapper;
18
+import com.huiju.estateagents.common.CommConstant;
19
+import com.huiju.estateagents.common.CommonUtils;
6 20
 import com.huiju.estateagents.redpack.entity.TaOrgAccount;
21
+import com.huiju.estateagents.redpack.entity.TaOrgAccountCertificate;
22
+import com.huiju.estateagents.redpack.entity.TaOrgAccountDetailedList;
23
+import com.huiju.estateagents.redpack.entity.TaOrgOrder;
24
+import com.huiju.estateagents.redpack.entity.TaOrgOrderDetail;
25
+import com.huiju.estateagents.redpack.mapper.TaOrgAccountCertificateMapper;
26
+import com.huiju.estateagents.redpack.mapper.TaOrgAccountDetailedListMapper;
7 27
 import com.huiju.estateagents.redpack.mapper.TaOrgAccountMapper;
28
+import com.huiju.estateagents.redpack.mapper.TaOrgOrderDetailMapper;
29
+import com.huiju.estateagents.redpack.mapper.TaOrgOrderMapper;
8 30
 import com.huiju.estateagents.redpack.service.ITaOrgAccountService;
9 31
 
32
+import io.swagger.models.auth.In;
33
+
10 34
 /**
11 35
  * <p>
12 36
  * 系统账户表  服务实现类
@@ -18,4 +42,180 @@ import com.huiju.estateagents.redpack.service.ITaOrgAccountService;
18 42
 @Service
19 43
 public class TaOrgAccountServiceImpl extends ServiceImpl<TaOrgAccountMapper, TaOrgAccount> implements ITaOrgAccountService {
20 44
 
45
+    @Autowired
46
+    private TaOrgAccountMapper taOrgAccountMapper;
47
+
48
+    @Autowired
49
+    private TaOrgOrderMapper taOrgOrderMapper;
50
+
51
+    @Autowired
52
+    private TaOrgOrderDetailMapper taOrgOrderDetailMapper;
53
+
54
+    @Autowired
55
+    private TaOrgAccountCertificateMapper taOrgAccountCertificateMapper;
56
+
57
+    @Autowired
58
+    private TaOrgAccountDetailedListMapper taOrgAccountDetailedListMapper;
59
+
60
+    @Autowired
61
+    private TaUserMapper taUserMapper;
62
+
63
+    @Override
64
+    @Transactional(rollbackFor = {RuntimeException.class})
65
+    public ResponseBean rechargeAccount(String accountId, TaOrgAccount taOrgAccount, Integer orgId, Integer userId) {
66
+        ResponseBean responseBean = new ResponseBean();
67
+
68
+        //更新系统账户充值金额
69
+        TaOrgAccount rechargeAccount = assembleRechargeAccount(accountId, taOrgAccount);
70
+        int rechargeAccountInsertResult = taOrgAccountMapper.updateById(rechargeAccount);
71
+
72
+        //新增订单记录
73
+        TaOrgOrder taOrgOrder = assembleTaOrgOrder(orgId, taOrgAccount.getRechargeAmount(), userId);
74
+        int taOrgOrderInsertResult = taOrgOrderMapper.insert(taOrgOrder);
75
+
76
+        //新增关联订单明细
77
+        TaOrgOrderDetail taOrgOrderDetail = assembleTaOrgOrderDetail(taOrgOrder.getOrderId(), orgId, taOrgAccount.getRechargeAmount());
78
+        int taOrgOrderDetailInsertResult = taOrgOrderDetailMapper.insert(taOrgOrderDetail);
79
+
80
+        //新增账户消费流水记录
81
+        TaOrgAccountDetailedList taOrgAccountDetailedList = assembleAccountDetailList(orgId, taOrgAccount, taOrgOrder.getOrderId(), userId);
82
+        int taOrgAccountDetailedListInsertResult = taOrgAccountDetailedListMapper.insert(taOrgAccountDetailedList);
83
+
84
+        //插入凭证记录
85
+        if (CollectionUtils.isNotEmpty(taOrgAccount.getCertificateList())){
86
+            List<TaOrgAccountCertificate> taOrgAccountCertificateList = assembleAccountCertificate(orgId, taOrgAccount, taOrgAccountDetailedList.getSerialNo(), taOrgOrder.getOrderId(), userId);
87
+            taOrgAccountCertificateList.forEach(e -> {
88
+                taOrgAccountCertificateMapper.insert(e);
89
+            });
90
+        }
91
+
92
+        if (rechargeAccountInsertResult < 1 ||
93
+                taOrgOrderInsertResult < 1 ||
94
+                taOrgOrderDetailInsertResult < 1 ||
95
+                taOrgAccountDetailedListInsertResult < 1){
96
+            responseBean.addError("充值失败");
97
+            return responseBean;
98
+        }
99
+
100
+        return responseBean;
101
+    }
102
+
103
+    /**
104
+     * 构造充值账户
105
+     * @param accountId
106
+     * @param taOrgAccount
107
+     * @return
108
+     */
109
+    private TaOrgAccount assembleRechargeAccount(String accountId, TaOrgAccount taOrgAccount){
110
+        QueryWrapper<TaOrgAccount> selectOneQuery = new QueryWrapper<>();
111
+        selectOneQuery.eq("account_id", accountId);
112
+        TaOrgAccount selectOneAccount = taOrgAccountMapper.selectOne(selectOneQuery);
113
+
114
+        TaOrgAccount rechargeAccount = new TaOrgAccount();
115
+        rechargeAccount.setAccountId(accountId);
116
+        if (selectOneAccount.getAvailableBalance() == 0){
117
+            rechargeAccount.setAvailableBalance(taOrgAccount.getRechargeAmount());
118
+        }else{
119
+            rechargeAccount.setAvailableBalance(selectOneAccount.getAvailableBalance() + taOrgAccount.getRechargeAmount());
120
+        }
121
+
122
+        if (selectOneAccount.getRealBalance() == 0){
123
+            rechargeAccount.setRealBalance(taOrgAccount.getRechargeAmount());
124
+        }else{
125
+            rechargeAccount.setRealBalance(selectOneAccount.getRealBalance() + taOrgAccount.getRechargeAmount());
126
+        }
127
+        rechargeAccount.setModifyDate(LocalDateTime.now());
128
+
129
+        return rechargeAccount;
130
+    }
131
+
132
+    public List<TaOrgAccountCertificate> assembleAccountCertificate(Integer orgId, TaOrgAccount taOrgAccount, Integer accountSerialNo, String orderId, Integer userId){
133
+        TaUser taUser = selectUserById(userId);
134
+        List<TaOrgAccountCertificate> taOrgAccountCertificateList = new ArrayList<>();
135
+
136
+        taOrgAccount.getCertificateList().forEach(e -> {
137
+            TaOrgAccountCertificate taOrgAccountCertificate = new TaOrgAccountCertificate();
138
+            taOrgAccountCertificate.setOrgId(orgId);
139
+            taOrgAccountCertificate.setAccountId(taOrgAccount.getAccountId());
140
+            taOrgAccountCertificate.setAccountSerialNo(accountSerialNo);
141
+            taOrgAccountCertificate.setOrderId(orderId);
142
+            taOrgAccountCertificate.setConsumptionType(CommConstant.ITEM_TYPE_RECHARGE);
143
+            taOrgAccountCertificate.setRemark("线下充值缴费");
144
+            taOrgAccountCertificate.setUrl(e);
145
+            taOrgAccountCertificate.setCreateDate(LocalDateTime.now());
146
+            taOrgAccountCertificate.setUserId(userId);
147
+            taOrgAccountCertificate.setUserName(taUser.getUserName());
148
+            taOrgAccountCertificateList.add(taOrgAccountCertificate);
149
+        });
150
+
151
+        return taOrgAccountCertificateList;
152
+    }
153
+    /**
154
+     * 构造订单
155
+     * @param orgId
156
+     * @param amount
157
+     * @param userId
158
+     * @return
159
+     */
160
+    private TaOrgOrder assembleTaOrgOrder(Integer orgId, Integer amount, Integer userId){
161
+
162
+        TaUser taUser = selectUserById(userId);
163
+        TaOrgOrder taOrgOrder = new TaOrgOrder();
164
+        taOrgOrder.setOrgId(orgId);
165
+        taOrgOrder.setTradeNo(CommonUtils.generateTradeNo(CommConstant.RECHARGE));
166
+        taOrgOrder.setAmount(amount);
167
+        taOrgOrder.setCreateDate(LocalDateTime.now());
168
+        taOrgOrder.setExpiryDate(LocalDateTime.now());
169
+        taOrgOrder.setRemark("线下充值缴费");
170
+        taOrgOrder.setTradingStatus(String.valueOf(CommConstant.STATUS_NORMAL));
171
+        taOrgOrder.setIsOffline(true);
172
+        taOrgOrder.setUserId(userId);
173
+        taOrgOrder.setUserName(taUser.getUserName());
174
+
175
+        return taOrgOrder;
176
+    }
177
+
178
+    private TaOrgOrderDetail assembleTaOrgOrderDetail(String orderId, Integer orgId, Integer amount){
179
+        TaOrgOrderDetail taOrgOrderDetail = new TaOrgOrderDetail();
180
+
181
+        taOrgOrderDetail.setOrderId(orderId);
182
+        taOrgOrderDetail.setOrgId(orgId);
183
+        taOrgOrderDetail.setItemType(CommConstant.ITEM_TYPE_RECHARGE);
184
+        taOrgOrderDetail.setAmount(amount);
185
+
186
+        return taOrgOrderDetail;
187
+    }
188
+
189
+    /**
190
+     * 构造消费流水记录
191
+     * @param orgId
192
+     * @param taOrgAccount
193
+     * @param orderId
194
+     * @param userId
195
+     * @return
196
+     */
197
+    private TaOrgAccountDetailedList assembleAccountDetailList(Integer orgId, TaOrgAccount taOrgAccount, String orderId, Integer userId){
198
+
199
+        TaUser taUser = selectUserById(userId);
200
+        TaOrgAccountDetailedList taOrgAccountDetailed = new TaOrgAccountDetailedList();
201
+        taOrgAccountDetailed.setAccountId(taOrgAccount.getAccountId());
202
+        taOrgAccountDetailed.setOrgId(orgId);
203
+        taOrgAccountDetailed.setAmount(taOrgAccount.getRechargeAmount());
204
+        //1收入,-1支出
205
+        taOrgAccountDetailed.setSignType(CommConstant.STATUS_NORMAL);
206
+        taOrgAccountDetailed.setRemark("线下充值缴费");
207
+        taOrgAccountDetailed.setOrderId(orderId);
208
+        taOrgAccountDetailed.setUserId(userId);
209
+        taOrgAccountDetailed.setUserName(taUser.getUserName());
210
+
211
+        return taOrgAccountDetailed;
212
+    }
213
+
214
+    public TaUser selectUserById(Integer userId){
215
+        //获取操作人
216
+        QueryWrapper<TaUser> taUserQueryWrapper = new QueryWrapper<>();
217
+        taUserQueryWrapper.eq("user_id", userId);
218
+        TaUser taUser = taUserMapper.selectOne(taUserQueryWrapper);
219
+        return taUser;
220
+    }
21 221
 }