Bladeren bron

新需求

魏超 4 jaren geleden
bovenliggende
commit
51244712ad

+ 10
- 0
src/main/java/com/huiju/estateagents/bo/request/SaveCzOrderRequestBO.java Bestand weergeven

@@ -15,4 +15,14 @@ public class SaveCzOrderRequestBO {
15 15
      * 充值金额
16 16
      */
17 17
     private Integer amount;
18
+
19
+    /**
20
+     * 支付方式
21
+     */
22
+    private String payType;
23
+
24
+    /**
25
+     * 套餐
26
+     */
27
+    private Integer packId;
18 28
 }

+ 27
- 0
src/main/java/com/huiju/estateagents/common/CommConstant.java Bestand weergeven

@@ -872,6 +872,11 @@ public class CommConstant {
872 872
      */
873 873
     public static final String ITEM_TYPE_REDPACKAGE = "RedPacket";
874 874
 
875
+    /**
876
+     * 小程序套餐
877
+     */
878
+    public static final String ITEM_TYPE_PACKAGE = "package";
879
+
875 880
     /**
876 881
      * 交易状态 成功
877 882
      */
@@ -911,4 +916,26 @@ public class CommConstant {
911 916
      * 需要替换财务联系人类型
912 917
      */
913 918
     public static final String CONCAT_TYPE_FINANCE = "finance,|,finance|finance";
919
+
920
+    /**
921
+     * 支付方式---微信支付
922
+     */
923
+    public static final String WX_PAY = "wxPay";
924
+
925
+    /**
926
+     * 支付方式---余额支付
927
+     */
928
+    public static final String ACCOUNT_BALANCE_PAY = "accountBalancePay";
929
+
930
+    /**
931
+     * 支付方式---对公打款
932
+     */
933
+    public static final String PUBLIC_MONEY_PAY = "publicMoneyPay";
934
+
935
+    /**
936
+     * 时长单位---年
937
+     */
938
+    public static final String YEAR = "year";
939
+
940
+
914 941
 }

+ 5
- 4
src/main/java/com/huiju/estateagents/miniPackage/controller/SysVipPackageController.java Bestand weergeven

@@ -43,7 +43,7 @@ public class SysVipPackageController extends BaseController {
43 43
      * @param pageSize
44 44
      * @return
45 45
      */
46
-    @RequestMapping(value="/sysVipPackage",method= RequestMethod.GET)
46
+    @RequestMapping(value="/admin/sysVipPackage",method= RequestMethod.GET)
47 47
     public ResponseBean sysVipPackageList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
48 48
                                           @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
49 49
         ResponseBean responseBean = new ResponseBean();
@@ -51,8 +51,7 @@ public class SysVipPackageController extends BaseController {
51 51
             //使用分页插件
52 52
 		    IPage<SysVipPackage> pg = new Page<>(pageNum, pageSize);
53 53
             QueryWrapper<SysVipPackage> queryWrapper = new QueryWrapper<>();
54
-            queryWrapper.orderByDesc("create_date");
55
-
54
+            queryWrapper.orderByAsc("pack_id");
56 55
             IPage<SysVipPackage> result = iSysVipPackageService.page(pg, queryWrapper);
57 56
             responseBean.addSuccess(result);
58 57
         }catch (Exception e){
@@ -113,11 +112,13 @@ public class SysVipPackageController extends BaseController {
113 112
      * @param sysVipPackage 实体对象
114 113
      * @return
115 114
      */
116
-    @RequestMapping(value="/sysVipPackage/{id}",method= RequestMethod.PUT)
115
+    @RequestMapping(value="/admin/sysVipPackage/{id}",method= RequestMethod.PUT)
117 116
     public ResponseBean sysVipPackageUpdate(@PathVariable Integer id,
118 117
                                         @RequestBody SysVipPackage sysVipPackage){
119 118
         ResponseBean responseBean = new ResponseBean();
120 119
         try {
120
+            sysVipPackage.setPrice(sysVipPackage.getPrice() * 100);
121
+            sysVipPackage.setPackId(id);
121 122
             if (iSysVipPackageService.updateById(sysVipPackage)){
122 123
                 responseBean.addSuccess(sysVipPackage);
123 124
             }else {

+ 3
- 3
src/main/java/com/huiju/estateagents/miniPackage/controller/SysVipPackageMainController.java Bestand weergeven

@@ -43,7 +43,7 @@ public class SysVipPackageMainController extends BaseController {
43 43
      * @param pageSize
44 44
      * @return
45 45
      */
46
-    @RequestMapping(value="/sysVipPackageMain",method= RequestMethod.GET)
46
+    @RequestMapping(value="/admin/sysVipPackageMain",method= RequestMethod.GET)
47 47
     public ResponseBean sysVipPackageMainList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
48 48
                                               @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
49 49
         ResponseBean responseBean = new ResponseBean();
@@ -51,7 +51,6 @@ public class SysVipPackageMainController extends BaseController {
51 51
             //使用分页插件
52 52
 		    IPage<SysVipPackageMain> pg = new Page<>(pageNum, pageSize);
53 53
             QueryWrapper<SysVipPackageMain> queryWrapper = new QueryWrapper<>();
54
-            queryWrapper.orderByDesc("create_date");
55 54
 
56 55
             IPage<SysVipPackageMain> result = iSysVipPackageMainService.page(pg, queryWrapper);
57 56
             responseBean.addSuccess(result);
@@ -113,11 +112,12 @@ public class SysVipPackageMainController extends BaseController {
113 112
      * @param sysVipPackageMain 实体对象
114 113
      * @return
115 114
      */
116
-    @RequestMapping(value="/sysVipPackageMain/{id}",method= RequestMethod.PUT)
115
+    @RequestMapping(value="/admin/sysVipPackageMain/{id}",method= RequestMethod.PUT)
117 116
     public ResponseBean sysVipPackageMainUpdate(@PathVariable Integer id,
118 117
                                         @RequestBody SysVipPackageMain sysVipPackageMain){
119 118
         ResponseBean responseBean = new ResponseBean();
120 119
         try {
120
+            sysVipPackageMain.setSerialNo(id);
121 121
             if (iSysVipPackageMainService.updateById(sysVipPackageMain)){
122 122
                 responseBean.addSuccess(sysVipPackageMain);
123 123
             }else {

+ 22
- 0
src/main/java/com/huiju/estateagents/miniPackage/controller/TaUserPackagesController.java Bestand weergeven

@@ -1,5 +1,7 @@
1 1
 package com.huiju.estateagents.miniPackage.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.bo.request.SaveCzOrderRequestBO;
19 22
 import com.huiju.estateagents.miniPackage.entity.TaUserPackages;
20 23
 import com.huiju.estateagents.miniPackage.service.ITaUserPackagesService;
21 24
 
@@ -147,4 +150,23 @@ public class TaUserPackagesController extends BaseController {
147 150
         }
148 151
         return responseBean;
149 152
     }
153
+
154
+    /**
155
+     * 创建充值订单
156
+     *
157
+     * @param requestBO
158
+     * @param request
159
+     * @return
160
+     */
161
+    @RequestMapping(value = "/admin/taUserPackages/saveOrder", method = RequestMethod.POST)
162
+    public ResponseBean saveBuyPackageOrder(@RequestBody SaveCzOrderRequestBO requestBO, HttpServletRequest request) {
163
+        ResponseBean responseBean = new ResponseBean();
164
+        try {
165
+            responseBean = iTaUserPackagesService.saveBuyPackageOrder(requestBO, 84, 2149, request.getRemoteAddr());
166
+        } catch (Exception e) {
167
+            logger.error("saveBuyPackageOrder -=- {}", e);
168
+            responseBean.addError(e.getMessage());
169
+        }
170
+        return responseBean;
171
+    }
150 172
 }

+ 6
- 1
src/main/java/com/huiju/estateagents/miniPackage/entity/SysVipPackage.java Bestand weergeven

@@ -1,6 +1,10 @@
1 1
 package com.huiju.estateagents.miniPackage.entity;
2 2
 
3 3
 import java.io.Serializable;
4
+
5
+import com.baomidou.mybatisplus.annotation.IdType;
6
+import com.baomidou.mybatisplus.annotation.TableId;
7
+
4 8
 import lombok.Data;
5 9
 import lombok.EqualsAndHashCode;
6 10
 import lombok.experimental.Accessors;
@@ -23,6 +27,7 @@ public class SysVipPackage implements Serializable {
23 27
     /**
24 28
      * 套餐ID
25 29
      */
30
+    @TableId(value = "pack_id", type = IdType.AUTO)
26 31
     private Integer packId;
27 32
 
28 33
     /**
@@ -58,7 +63,7 @@ public class SysVipPackage implements Serializable {
58 63
     /**
59 64
      * 对应系统角色
60 65
      */
61
-    private Integer ruleId;
66
+    private Integer roleId;
62 67
 
63 68
 
64 69
 }

+ 1
- 1
src/main/java/com/huiju/estateagents/miniPackage/entity/TaUserPackages.java Bestand weergeven

@@ -67,7 +67,7 @@ public class TaUserPackages implements Serializable {
67 67
     /**
68 68
      * 对应系统角色
69 69
      */
70
-    private Integer ruleId;
70
+    private Integer roleId;
71 71
 
72 72
     /**
73 73
      * 状态

+ 12
- 1
src/main/java/com/huiju/estateagents/miniPackage/service/ITaUserPackagesService.java Bestand weergeven

@@ -1,5 +1,7 @@
1 1
 package com.huiju.estateagents.miniPackage.service;
2 2
 
3
+import com.huiju.estateagents.base.ResponseBean;
4
+import com.huiju.estateagents.bo.request.SaveCzOrderRequestBO;
3 5
 import com.huiju.estateagents.miniPackage.entity.TaUserPackages;
4 6
 import com.baomidou.mybatisplus.extension.service.IService;
5 7
 
@@ -12,5 +14,14 @@ import com.baomidou.mybatisplus.extension.service.IService;
12 14
  * @since 2020-06-16
13 15
  */
14 16
 public interface ITaUserPackagesService extends IService<TaUserPackages> {
15
-
17
+    /**
18
+     * 购买套餐生成订单
19
+     * @param saveCzOrderRequestBO
20
+     * @param orgId
21
+     * @param userId
22
+     * @param ip
23
+     * @return
24
+     * @throws Exception
25
+     */
26
+    ResponseBean saveBuyPackageOrder(SaveCzOrderRequestBO saveCzOrderRequestBO, Integer orgId, Integer userId, String ip) throws Exception;
16 27
 }

+ 265
- 2
src/main/java/com/huiju/estateagents/miniPackage/service/impl/TaUserPackagesServiceImpl.java Bestand weergeven

@@ -1,10 +1,44 @@
1 1
 package com.huiju.estateagents.miniPackage.service.impl;
2 2
 
3
+import java.time.LocalDateTime;
4
+import java.util.HashMap;
5
+import java.util.List;
6
+import java.util.Map;
7
+
8
+import org.apache.commons.collections.CollectionUtils;
9
+import org.slf4j.Logger;
10
+import org.slf4j.LoggerFactory;
11
+import org.springframework.beans.factory.annotation.Autowired;
12
+import org.springframework.beans.factory.annotation.Value;
13
+import org.springframework.stereotype.Service;
14
+import org.springframework.transaction.annotation.Transactional;
15
+
16
+import com.alibaba.fastjson.JSONObject;
17
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
18
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
19
+import com.huiju.estateagents.base.ResponseBean;
20
+import com.huiju.estateagents.bo.request.SaveCzOrderRequestBO;
21
+import com.huiju.estateagents.center.taUser.entity.TaUser;
22
+import com.huiju.estateagents.center.taUser.mapper.TaUserMapper;
23
+import com.huiju.estateagents.common.CommConstant;
24
+import com.huiju.estateagents.common.CommonUtils;
25
+import com.huiju.estateagents.common.wxpay.WXPay;
26
+import com.huiju.estateagents.common.wxpay.WXPayConstants;
27
+import com.huiju.estateagents.common.wxpay.WxConfig;
28
+import com.huiju.estateagents.entity.TaOrg;
29
+import com.huiju.estateagents.mapper.TaOrderMapper;
30
+import com.huiju.estateagents.miniPackage.entity.SysVipPackage;
3 31
 import com.huiju.estateagents.miniPackage.entity.TaUserPackages;
32
+import com.huiju.estateagents.miniPackage.mapper.SysVipPackageMapper;
4 33
 import com.huiju.estateagents.miniPackage.mapper.TaUserPackagesMapper;
5 34
 import com.huiju.estateagents.miniPackage.service.ITaUserPackagesService;
6
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7
-import org.springframework.stereotype.Service;
35
+import com.huiju.estateagents.redpack.entity.TaOrgAccount;
36
+import com.huiju.estateagents.redpack.entity.TaOrgOrder;
37
+import com.huiju.estateagents.redpack.entity.TaOrgOrderDetail;
38
+import com.huiju.estateagents.redpack.mapper.TaOrgAccountMapper;
39
+import com.huiju.estateagents.redpack.mapper.TaOrgOrderDetailMapper;
40
+import com.huiju.estateagents.redpack.mapper.TaOrgOrderMapper;
41
+import com.huiju.estateagents.redpack.service.ITaOrgOrderService;
8 42
 
9 43
 /**
10 44
  * <p>
@@ -17,4 +51,233 @@ import org.springframework.stereotype.Service;
17 51
 @Service
18 52
 public class TaUserPackagesServiceImpl extends ServiceImpl<TaUserPackagesMapper, TaUserPackages> implements ITaUserPackagesService {
19 53
 
54
+    private final Logger logger = LoggerFactory.getLogger(TaUserPackagesServiceImpl.class);
55
+
56
+    @Value("${pay-notify}")
57
+    private String payNotify;
58
+
59
+    @Autowired
60
+    private ITaOrgOrderService iTaOrgOrderService;
61
+
62
+    @Autowired
63
+    private TaUserMapper taUserMapper;
64
+
65
+    @Autowired
66
+    private TaOrgAccountMapper taOrgAccountMapper;
67
+
68
+    @Autowired
69
+    private TaUserPackagesMapper taUserPackagesMapper;
70
+
71
+    @Autowired
72
+    private SysVipPackageMapper sysVipPackageMapper;
73
+
74
+    @Autowired
75
+    private TaOrgOrderMapper taOrgOrderMapper;
76
+
77
+    @Autowired
78
+    private TaOrgOrderDetailMapper taOrgOrderDetailMapper;
79
+
80
+    /**
81
+     * 购买套餐生成订单
82
+     * @param saveCzOrderRequestBO
83
+     * @param orgId
84
+     * @param userId
85
+     * @param ip
86
+     * @return
87
+     * @throws Exception
88
+     */
89
+    @Override
90
+    @Transactional
91
+    public ResponseBean saveBuyPackageOrder(SaveCzOrderRequestBO saveCzOrderRequestBO, Integer orgId, Integer userId, String ip) throws Exception {
92
+        ResponseBean responseBean = new ResponseBean();
93
+
94
+        SysVipPackage sysVipPackage = sysVipPackageMapper.selectById(saveCzOrderRequestBO.getPackId());
95
+        if (sysVipPackage == null){
96
+            responseBean.addError("配置不存在");
97
+            return responseBean;
98
+        }
99
+
100
+        // 获取下单人名称
101
+        TaUser taUser = taUserMapper.selectById(userId);
102
+        if (taUser == null) {
103
+            responseBean.addError("fail");
104
+            return responseBean;
105
+        }
106
+
107
+        //校验账户余额
108
+        if (CommConstant.ACCOUNT_BALANCE_PAY.equals(saveCzOrderRequestBO.getPayType())){
109
+            if (calculateAmountFlag(orgId, saveCzOrderRequestBO.getPackId())){
110
+                responseBean.addError("账户余额不足");
111
+                return responseBean;
112
+            }else {
113
+                //更新账户余额
114
+                TaOrgAccount taOrgAccount = assembleOrgAccount(orgId, saveCzOrderRequestBO.getAmount());
115
+                QueryWrapper<TaOrgAccount> taOrgAccountQueryWrapper = new QueryWrapper<>();
116
+                taOrgAccountQueryWrapper.eq("org_id", orgId);
117
+                taOrgAccountMapper.update(taOrgAccount, taOrgAccountQueryWrapper);
118
+            }
119
+        }
120
+
121
+        //构造订单记录
122
+        TaOrgOrder taOrgOrder = assembleTaOrgOrder(orgId, saveCzOrderRequestBO, taUser);
123
+        if (taOrgOrderMapper.insert(taOrgOrder) < 1){
124
+            responseBean.addError("插入订单记录失败");
125
+            return responseBean;
126
+        }
127
+
128
+        //构造订单详情记录
129
+        TaOrgOrderDetail taOrgOrderDetail = assembleTaOrgOrderDetail(taOrgOrder);
130
+        if (taOrgOrderDetailMapper.insert(taOrgOrderDetail) < 1){
131
+            responseBean.addError("插入订单详情记录失败");
132
+            return responseBean;
133
+        }
134
+
135
+        //构造会员套餐记录订单
136
+        TaUserPackages taUserPackages = assembleTaUserPackages(orgId, userId, saveCzOrderRequestBO, taOrgOrder.getOrderId());
137
+        if (taUserPackagesMapper.insert(taUserPackages) < 1){
138
+            responseBean.addError("插入会员套餐记录订单失败");
139
+            return responseBean;
140
+        }
141
+
142
+        //请求微信接口获取支付二维码
143
+        if (CommConstant.WX_PAY.equals(saveCzOrderRequestBO.getPayType())){
144
+            ResponseBean payResult = iTaOrgOrderService.payUnifiedOrder(taOrgOrder, ip, CommConstant.ITEM_TYPE_PACKAGE);
145
+            if (ResponseBean.CODE_SUCCESS != payResult.getCode()) {
146
+                return payResult;
147
+            }
148
+
149
+            JSONObject obj = new JSONObject();
150
+            obj.put("amount", sysVipPackage.getPrice());
151
+            obj.put("realAmount", sysVipPackage.getPrice());
152
+            obj.put("serviceFee", sysVipPackage.getPrice());
153
+            obj.put("mchPayRate", CommConstant.WXMCH_PAY_RATE_STRING);
154
+            obj.put("payQrCode", payResult.getData());
155
+            obj.put("orderInfo", taOrgOrder);
156
+            responseBean.addSuccess(obj);
157
+        }
158
+
159
+        return responseBean;
160
+
161
+    }
162
+
163
+    private TaOrgAccount assembleOrgAccount(Integer orgId, Integer amount){
164
+        QueryWrapper<TaOrgAccount> queryWrapper = new QueryWrapper<>();
165
+        queryWrapper.eq("org_id", orgId);
166
+        TaOrgAccount selectTaOrgAccount = taOrgAccountMapper.selectOne(queryWrapper);
167
+
168
+        TaOrgAccount taOrgAccount = new TaOrgAccount();
169
+        taOrgAccount.setOrgId(orgId);
170
+        taOrgAccount.setAvailableBalance(selectTaOrgAccount.getAvailableBalance() - amount);
171
+        taOrgAccount.setRealBalance(selectTaOrgAccount.getRealBalance() - amount);
172
+        taOrgAccount.setPurchaseAmount(selectTaOrgAccount.getPurchaseAmount() + amount);
173
+
174
+        return taOrgAccount;
175
+    }
176
+
177
+    private boolean calculateAmountFlag(Integer orgId, Integer packId){
178
+        //查询账户余额
179
+        QueryWrapper<TaOrgAccount> taOrgAccountQueryWrapper = new QueryWrapper<>();
180
+        taOrgAccountQueryWrapper.eq("org_id", orgId);
181
+        TaOrgAccount taOrgAccount = taOrgAccountMapper.selectOne(taOrgAccountQueryWrapper);
182
+
183
+        //查询套餐价格
184
+        SysVipPackage sysVipPackage = sysVipPackageMapper.selectById(packId);
185
+        if (taOrgAccount == null || taOrgAccount.getAvailableBalance() < sysVipPackage.getPrice()){
186
+            return true;
187
+        }
188
+
189
+        return false;
190
+    }
191
+
192
+    public TaOrgOrder assembleTaOrgOrder(Integer orgId, SaveCzOrderRequestBO saveCzOrderRequestBO, TaUser taUser){
193
+        SysVipPackage sysVipPackage = sysVipPackageMapper.selectById(saveCzOrderRequestBO.getPackId());
194
+
195
+        // 1.创建订单主表信息
196
+        TaOrgOrder taOrgOrder = new TaOrgOrder();
197
+        taOrgOrder.setOrgId(orgId);
198
+        //类型为套餐缩写TC
199
+        taOrgOrder.setTradeNo(CommonUtils.generateTradeNo("TC"));
200
+        taOrgOrder.setAmount(sysVipPackage.getPrice());
201
+        taOrgOrder.setRealAmount(sysVipPackage.getPrice());
202
+        taOrgOrder.setCreateDate(LocalDateTime.now());
203
+        taOrgOrder.setExpiryDate(LocalDateTime.now().plusMinutes(30));
204
+        taOrgOrder.setRemark("线上购买套餐");
205
+        taOrgOrder.setStatus(CommConstant.STATUS_NORMAL);
206
+        taOrgOrder.setTradingStatus(CommConstant.TRADING_STATUS_PROCESSING);
207
+        taOrgOrder.setIsOffline(false);
208
+        taOrgOrder.setUserId(taUser.getUserId());
209
+        taOrgOrder.setUserName(taUser.getUserName());
210
+
211
+        return taOrgOrder;
212
+    }
213
+
214
+    public TaOrgOrderDetail assembleTaOrgOrderDetail(TaOrgOrder taOrgOrder){
215
+        // 创建订单详情表信息
216
+        TaOrgOrderDetail taOrgOrderDetail = new TaOrgOrderDetail();
217
+        taOrgOrderDetail.setOrderId(taOrgOrder.getOrderId());
218
+        taOrgOrderDetail.setOrgId(taOrgOrder.getOrgId());
219
+        taOrgOrderDetail.setItemType(CommConstant.ITEM_TYPE_PACKAGE);
220
+        taOrgOrderDetail.setAmount(taOrgOrder.getAmount());
221
+        taOrgOrderDetail.setUnitPrice(taOrgOrder.getAmount());
222
+        taOrgOrderDetail.setRealAmount(taOrgOrder.getAmount());
223
+        taOrgOrderDetail.setQuantity(1);
224
+        taOrgOrderDetail.setStatus(CommConstant.STATUS_NORMAL);
225
+
226
+        return taOrgOrderDetail;
227
+    }
228
+
229
+    public TaUserPackages assembleTaUserPackages(Integer orgId, Integer userId, SaveCzOrderRequestBO saveCzOrderRequestBO, String orderId){
230
+        TaUserPackages taUserPackages = selectPackagesByUserId(userId);
231
+        SysVipPackage sysVipPackage = sysVipPackageMapper.selectById(saveCzOrderRequestBO.getPackId());
232
+
233
+        TaUserPackages assembleTaUserPackages = new TaUserPackages();
234
+        assembleTaUserPackages.setOrgId(orgId);
235
+        assembleTaUserPackages.setUserId(userId);
236
+        assembleTaUserPackages.setPackId(saveCzOrderRequestBO.getPackId());
237
+        assembleTaUserPackages.setCreateDate(LocalDateTime.now());
238
+        assembleTaUserPackages.setStartDate(taUserPackages == null ? LocalDateTime.now() : taUserPackages.getEndDate());
239
+        assembleTaUserPackages.setEndDate(calculateEndDate(saveCzOrderRequestBO));
240
+        assembleTaUserPackages.setOrderId(orderId);
241
+        assembleTaUserPackages.setRoleId(sysVipPackage.getRoleId());
242
+
243
+        return assembleTaUserPackages;
244
+    }
245
+
246
+    private TaUserPackages selectPackagesByUserId(Integer userId){
247
+        QueryWrapper<TaUserPackages> taUserPackagesQueryWrapper = new QueryWrapper<>();
248
+        taUserPackagesQueryWrapper.eq("user_id", userId);
249
+        taUserPackagesQueryWrapper.orderByDesc("end_date");
250
+        List<TaUserPackages> list = taUserPackagesMapper.selectList(taUserPackagesQueryWrapper);
251
+        if (CollectionUtils.isEmpty(list)){
252
+            return null;
253
+        }
254
+        return list.get(0);
255
+    }
256
+
257
+    /**
258
+     * 根据选择的套餐计算结束时间
259
+     * @param saveCzOrderRequestBO
260
+     * @return
261
+     */
262
+    private LocalDateTime calculateEndDate(SaveCzOrderRequestBO saveCzOrderRequestBO) {
263
+        LocalDateTime localDateTime = LocalDateTime.now();
264
+        SysVipPackage sysVipPackage = sysVipPackageMapper.selectById(saveCzOrderRequestBO.getPackId());
265
+
266
+        switch (sysVipPackage.getUnit()){
267
+            case CommConstant.YEAR:
268
+                localDateTime.plusYears(Long.valueOf(sysVipPackage.getAmount()));
269
+                break;
270
+            case CommConstant.MONTH:
271
+                localDateTime.plusMonths(Long.valueOf(sysVipPackage.getAmount()));
272
+                break;
273
+            case CommConstant.WEEK:
274
+                localDateTime.plusWeeks(Long.valueOf(sysVipPackage.getAmount()));
275
+                break;
276
+            default:
277
+                localDateTime.plusDays(Long.valueOf(sysVipPackage.getAmount()));
278
+        }
279
+
280
+        return localDateTime;
281
+    }
282
+
20 283
 }

+ 2
- 1
src/main/java/com/huiju/estateagents/redpack/controller/TaOrgAccountController.java Bestand weergeven

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
12 12
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
13 13
 import com.huiju.estateagents.base.BaseController;
14 14
 import com.huiju.estateagents.base.ResponseBean;
15
+import com.huiju.estateagents.common.CommConstant;
15 16
 import com.huiju.estateagents.common.NumberUtils;
16 17
 import com.huiju.estateagents.common.StringUtils;
17 18
 import com.huiju.estateagents.excel.handler.CustomCellWriteHandler;
@@ -355,7 +356,7 @@ public class TaOrgAccountController extends BaseController {
355 356
         try {
356 357
             taOrgOrder.setOrgId(getOrgId(request));
357 358
             taOrgOrder.setUserId(getUserId(request));
358
-            responseBean = iTaOrgOrderService.payUnifiedOrder(taOrgOrder,request.getRemoteAddr());
359
+            responseBean = iTaOrgOrderService.payUnifiedOrder(taOrgOrder,request.getRemoteAddr(), CommConstant.ITEM_TYPE_RECHARGE);
359 360
         } catch (Exception e) {
360 361
             log.error("微信统一下单失败: {}" , e.getMessage());
361 362
             return ResponseBean.error(e.getMessage(), ResponseBean.ERROR_MISSING_PARAMS);

+ 1
- 1
src/main/java/com/huiju/estateagents/redpack/service/ITaOrgOrderService.java Bestand weergeven

@@ -83,7 +83,7 @@ public interface ITaOrgOrderService extends IService<TaOrgOrder> {
83 83
      * @param remoteAddr
84 84
      * @return
85 85
      */
86
-    ResponseBean payUnifiedOrder(TaOrgOrder taOrgOrder, String remoteAddr) throws Exception;
86
+    ResponseBean payUnifiedOrder(TaOrgOrder taOrgOrder, String remoteAddr, String itemType) throws Exception;
87 87
 
88 88
     /**
89 89
      * 创建充值订单

+ 3
- 3
src/main/java/com/huiju/estateagents/redpack/service/impl/TaOrgOrderServiceImpl.java Bestand weergeven

@@ -180,7 +180,7 @@ public class TaOrgOrderServiceImpl extends ServiceImpl<TaOrgOrderMapper, TaOrgOr
180 180
      * @return
181 181
      */
182 182
     @Override
183
-    public ResponseBean payUnifiedOrder(TaOrgOrder taOrgOrder, String clientIp) throws Exception {
183
+    public ResponseBean payUnifiedOrder(TaOrgOrder taOrgOrder, String clientIp, String itemType) throws Exception {
184 184
         taOrgOrder = taOrgOrderMapper.selectById(taOrgOrder.getOrderId());
185 185
         //构建微信配置
186 186
         WxConfig config = getWxConfig(0);
@@ -205,7 +205,7 @@ public class TaOrgOrderServiceImpl extends ServiceImpl<TaOrgOrderMapper, TaOrgOr
205 205
         //终端IP
206 206
         data.put("spbill_create_ip", clientIp);
207 207
         //回调地址
208
-        data.put("notify_url", payNotify + CommConstant.ITEM_TYPE_RECHARGE);
208
+        data.put("notify_url", payNotify + itemType);
209 209
         // 此处指定为APP支付
210 210
         data.put("trade_type", "NATIVE");
211 211
         data.put("product_id", taOrgOrder.getOrderId());
@@ -278,7 +278,7 @@ public class TaOrgOrderServiceImpl extends ServiceImpl<TaOrgOrderMapper, TaOrgOr
278 278
         }
279 279
 
280 280
         // 3.请求微信接口获取支付二维码
281
-        ResponseBean payResult = payUnifiedOrder(taOrgOrder, ip);
281
+        ResponseBean payResult = payUnifiedOrder(taOrgOrder, ip, CommConstant.ITEM_TYPE_RECHARGE);
282 282
         if (ResponseBean.CODE_SUCCESS != payResult.getCode()) {
283 283
             return payResult;
284 284
         }

+ 25
- 1
src/main/java/com/huiju/estateagents/service/impl/TaRoleServiceImpl.java Bestand weergeven

@@ -5,14 +5,19 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5 5
 import com.huiju.estateagents.common.CommConstant;
6 6
 import com.huiju.estateagents.entity.*;
7 7
 import com.huiju.estateagents.mapper.*;
8
+import com.huiju.estateagents.miniPackage.entity.TaUserPackages;
9
+import com.huiju.estateagents.miniPackage.mapper.TaUserPackagesMapper;
8 10
 import com.huiju.estateagents.service.ITaRoleService;
9 11
 import org.springframework.beans.factory.annotation.Autowired;
12
+import org.springframework.dao.QueryTimeoutException;
10 13
 import org.springframework.stereotype.Service;
11 14
 
12 15
 import java.util.ArrayList;
13 16
 import java.util.List;
14 17
 import java.util.stream.Collectors;
15 18
 
19
+import io.swagger.models.auth.In;
20
+
16 21
 /**
17 22
  * <p>
18 23
  * 角色表 角色表,每个org的角色可以单独设置。但是都共有一个admin角色。这个角色在创建用户的时候创建好了 服务实现类
@@ -38,6 +43,9 @@ public class TaRoleServiceImpl extends ServiceImpl<TaRoleMapper, TaRole> impleme
38 43
     @Autowired
39 44
     TaRoleButtonMapper taRoleButtonMapper;
40 45
 
46
+    @Autowired
47
+    TaUserPackagesMapper taUserPackagesMapper;
48
+
41 49
     @Autowired
42 50
     private TaAdvancedControllerMapper taAdvancedControllerMapper;
43 51
 
@@ -46,7 +54,16 @@ public class TaRoleServiceImpl extends ServiceImpl<TaRoleMapper, TaRole> impleme
46 54
 
47 55
     @Override
48 56
     public List<TaRole> getRolesByUser(Integer userId) {
49
-        return taRoleMapper.getRolesByUser(userId);
57
+        List<TaRole> roles = new ArrayList<>();
58
+        roles.addAll(taRoleMapper.getRolesByUser(userId));
59
+
60
+        //查询会员套餐记录
61
+        List<Integer> roleList = selectRoleListByPackageUserId(userId);
62
+        QueryWrapper<TaRole> queryWrapper = new QueryWrapper<>();
63
+        queryWrapper.in("role_id", roleList);
64
+        roles.addAll(taRoleMapper.selectList(queryWrapper));
65
+
66
+        return roles;
50 67
     }
51 68
 
52 69
     @Override
@@ -92,4 +109,11 @@ public class TaRoleServiceImpl extends ServiceImpl<TaRoleMapper, TaRole> impleme
92 109
         taRole.setSysMenuList(sysMenuList);
93 110
         return taRole;
94 111
     }
112
+
113
+    public List<Integer> selectRoleListByPackageUserId(Integer userId){
114
+        QueryWrapper<TaUserPackages> taUserPackagesQueryWrapper = new QueryWrapper<>();
115
+        taUserPackagesQueryWrapper.eq("user_id", userId);
116
+        List<TaUserPackages> taUserPackagesList = taUserPackagesMapper.selectList(taUserPackagesQueryWrapper);
117
+        return taUserPackagesList.stream().map(TaUserPackages::getRoleId).collect(Collectors.toList());
118
+    }
95 119
 }

+ 38
- 0
src/main/java/com/huiju/estateagents/service/impl/WxPayServiceImpl.java Bestand weergeven

@@ -162,6 +162,9 @@ public class WxPayServiceImpl implements IWxPayService {
162 162
         }else if (type.equals(CommConstant.ITEM_TYPE_RECHARGE)){
163 163
             //账户充值
164 164
             accountRecharge(resultMap);
165
+        }else if (type.equals(CommConstant.ITEM_TYPE_PACKAGE)){
166
+            //购买套餐
167
+            buyPackage(resultMap);
165 168
         }
166 169
 
167 170
     }
@@ -200,6 +203,41 @@ public class WxPayServiceImpl implements IWxPayService {
200 203
         taOrgAccountMapper.updateById(taOrgAccount);
201 204
     }
202 205
 
206
+    /**
207
+     * 购买套餐
208
+     * @param resultMap
209
+     */
210
+    private void buyPackage(Map<String, String> resultMap){
211
+        log.info("修改订单为{},的支付状态",resultMap.get("out_trade_no"));
212
+        String tradeNo = resultMap.get("out_trade_no");
213
+        String transactionId = resultMap.get("transaction_id");
214
+        TaOrgOrder taOrgOrder = taOrgOrderMapper.selectOne(new QueryWrapper<TaOrgOrder>().eq("trade_no", tradeNo));
215
+        taOrgOrder.setPayDate(LocalDateTime.now());
216
+        taOrgOrder.setTradingStatus(CommConstant.SUCCESS);
217
+        taOrgOrder.setWxOrderId(transactionId);
218
+        taOrgOrderMapper.updateById(taOrgOrder);
219
+
220
+        //获取账户信息表
221
+        TaOrgAccount taOrgAccount = taOrgAccountMapper.selectOne(new QueryWrapper<TaOrgAccount>().eq("org_id", taOrgOrder.getOrgId()).eq("status", CommConstant.STATUS_NORMAL));
222
+        //添加账户流水
223
+        TaOrgAccountDetailedList taOrgAccountDetailedList = new TaOrgAccountDetailedList();
224
+        taOrgAccountDetailedList.setAccountId(taOrgAccount.getAccountId());
225
+        taOrgAccountDetailedList.setAmount(taOrgOrder.getAmount());
226
+        taOrgAccountDetailedList.setCreateDate(LocalDateTime.now());
227
+        taOrgAccountDetailedList.setOrderId(taOrgOrder.getOrderId());
228
+        taOrgAccountDetailedList.setOrgId(taOrgOrder.getOrgId());
229
+        taOrgAccountDetailedList.setSignType(1);
230
+        taOrgAccountDetailedList.setStatus(CommConstant.STATUS_NORMAL);
231
+        taOrgAccountDetailedList.setRemark("线上购买套餐");
232
+        taOrgAccountDetailedList.setUserId(taOrgOrder.getUserId());
233
+        taOrgAccountDetailedList.setUserName(taOrgOrder.getUserName());
234
+        taOrgAccountDetailedListMapper.insert(taOrgAccountDetailedList);
235
+        //添加账户金额
236
+        taOrgAccount.setAvailableBalance(taOrgAccount.getAvailableBalance() - taOrgOrder.getAmount());
237
+        taOrgAccount.setRealBalance(taOrgAccount.getRealBalance() - taOrgOrder.getAmount());
238
+        taOrgAccountMapper.updateById(taOrgAccount);
239
+    }
240
+
203 241
     /**
204 242
      * 微信退款
205 243
      * @param taOrder