浏览代码

新需求

傅行帆 5 年前
父节点
当前提交
a01d9a7476

+ 29
- 13
src/main/java/com/huiju/estateagents/redpack/controller/TaOrgAccountController.java 查看文件

@@ -1,18 +1,5 @@
1 1
 package com.huiju.estateagents.redpack.controller;
2 2
 
3
-import javax.servlet.http.HttpServletRequest;
4
-
5
-import org.slf4j.Logger;
6
-import org.slf4j.LoggerFactory;
7
-import org.springframework.beans.factory.annotation.Autowired;
8
-import org.springframework.web.bind.annotation.PathVariable;
9
-import org.springframework.web.bind.annotation.RequestBody;
10
-import org.springframework.web.bind.annotation.RequestMapping;
11
-import org.springframework.web.bind.annotation.RequestMethod;
12
-import org.springframework.web.bind.annotation.RequestParam;
13
-import org.springframework.web.bind.annotation.ResponseBody;
14
-import org.springframework.web.bind.annotation.RestController;
15
-
16 3
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
17 4
 import com.baomidou.mybatisplus.core.metadata.IPage;
18 5
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -24,6 +11,13 @@ import com.huiju.estateagents.redpack.entity.TaOrgOrder;
24 11
 import com.huiju.estateagents.redpack.entity.TaOrgRefundApplication;
25 12
 import com.huiju.estateagents.redpack.service.ITaOrgAccountService;
26 13
 import com.huiju.estateagents.redpack.service.ITaOrgOrderService;
14
+import lombok.extern.slf4j.Slf4j;
15
+import org.slf4j.Logger;
16
+import org.slf4j.LoggerFactory;
17
+import org.springframework.beans.factory.annotation.Autowired;
18
+import org.springframework.web.bind.annotation.*;
19
+
20
+import javax.servlet.http.HttpServletRequest;
27 21
 
28 22
 /**
29 23
  * <p>
@@ -33,6 +27,7 @@ import com.huiju.estateagents.redpack.service.ITaOrgOrderService;
33 27
  * @author fxf
34 28
  * @since 2020-06-03
35 29
  */
30
+@Slf4j
36 31
 @RestController
37 32
 @RequestMapping("/api")
38 33
 public class TaOrgAccountController extends BaseController {
@@ -244,4 +239,25 @@ public class TaOrgAccountController extends BaseController {
244 239
         }
245 240
         return responseBean;
246 241
     }
242
+
243
+    /**
244
+     * 微信统一下单接口
245
+     * @param taOrgOrder
246
+     * @param request
247
+     * @return
248
+     */
249
+    @RequestMapping(value = "/admin/unifiedOrder",method = RequestMethod.POST)
250
+    public ResponseBean wxUnifiedOrder(@RequestBody TaOrgOrder taOrgOrder,
251
+                                       HttpServletRequest request){
252
+        ResponseBean responseBean = new ResponseBean();
253
+        try {
254
+            taOrgOrder.setOrgId(getOrgId(request));
255
+            taOrgOrder.setUserId(getUserId(request));
256
+            responseBean = iTaOrgOrderService.payUnifiedOrder(taOrgOrder,request.getRemoteAddr());
257
+        } catch (Exception e) {
258
+            log.error("微信统一下单失败: {}" , e.getMessage());
259
+            return ResponseBean.error(e.getMessage(), ResponseBean.ERROR_MISSING_PARAMS);
260
+        }
261
+        return responseBean;
262
+    }
247 263
 }

+ 10
- 2
src/main/java/com/huiju/estateagents/redpack/service/ITaOrgOrderService.java 查看文件

@@ -1,13 +1,13 @@
1 1
 package com.huiju.estateagents.redpack.service;
2 2
 
3
-import java.time.LocalDate;
4
-
5 3
 import com.baomidou.mybatisplus.core.metadata.IPage;
6 4
 import com.baomidou.mybatisplus.extension.service.IService;
7 5
 import com.huiju.estateagents.base.ResponseBean;
8 6
 import com.huiju.estateagents.redpack.entity.TaOrgOrder;
9 7
 import com.huiju.estateagents.redpack.entity.TaOrgRefundApplication;
10 8
 
9
+import java.time.LocalDate;
10
+
11 11
 /**
12 12
  * <p>
13 13
  * 组织订单表  服务类
@@ -43,4 +43,12 @@ public interface ITaOrgOrderService extends IService<TaOrgOrder> {
43 43
      * @return
44 44
      */
45 45
     IPage<TaOrgOrder> listByCondition(IPage<TaOrgOrder> pg, String orderType, Integer orgId, String tradeNo, Integer isOffline, String tradingStatus, String receivePhone, String itemType, LocalDate startDate, LocalDate endDate);
46
+
47
+    /**
48
+     * 微信支付
49
+     * @param taOrgOrder
50
+     * @param remoteAddr
51
+     * @return
52
+     */
53
+    ResponseBean payUnifiedOrder(TaOrgOrder taOrgOrder, String remoteAddr) throws Exception;
46 54
 }

+ 112
- 24
src/main/java/com/huiju/estateagents/redpack/service/impl/TaOrgOrderServiceImpl.java 查看文件

@@ -1,15 +1,5 @@
1 1
 package com.huiju.estateagents.redpack.service.impl;
2 2
 
3
-import java.time.LocalDate;
4
-import java.time.LocalDateTime;
5
-import java.util.ArrayList;
6
-import java.util.List;
7
-
8
-import org.apache.commons.collections.CollectionUtils;
9
-import org.springframework.beans.factory.annotation.Autowired;
10
-import org.springframework.stereotype.Service;
11
-import org.springframework.transaction.annotation.Transactional;
12
-
13 3
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
14 4
 import com.baomidou.mybatisplus.core.metadata.IPage;
15 5
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -18,21 +8,31 @@ import com.huiju.estateagents.center.taUser.entity.TaUser;
18 8
 import com.huiju.estateagents.center.taUser.mapper.TaUserMapper;
19 9
 import com.huiju.estateagents.common.CommConstant;
20 10
 import com.huiju.estateagents.common.CommonUtils;
21
-import com.huiju.estateagents.redpack.entity.TaOrgAccount;
22
-import com.huiju.estateagents.redpack.entity.TaOrgAccountBlocked;
23
-import com.huiju.estateagents.redpack.entity.TaOrgAccountCertificate;
24
-import com.huiju.estateagents.redpack.entity.TaOrgAccountDetailedList;
25
-import com.huiju.estateagents.redpack.entity.TaOrgOrder;
26
-import com.huiju.estateagents.redpack.entity.TaOrgOrderDetail;
27
-import com.huiju.estateagents.redpack.entity.TaOrgRefundApplication;
28
-import com.huiju.estateagents.redpack.mapper.TaOrgAccountBlockedMapper;
29
-import com.huiju.estateagents.redpack.mapper.TaOrgAccountCertificateMapper;
30
-import com.huiju.estateagents.redpack.mapper.TaOrgAccountDetailedListMapper;
31
-import com.huiju.estateagents.redpack.mapper.TaOrgAccountMapper;
32
-import com.huiju.estateagents.redpack.mapper.TaOrgOrderDetailMapper;
33
-import com.huiju.estateagents.redpack.mapper.TaOrgOrderMapper;
34
-import com.huiju.estateagents.redpack.mapper.TaOrgRefundApplicationMapper;
11
+import com.huiju.estateagents.common.wxpay.WXPay;
12
+import com.huiju.estateagents.common.wxpay.WXPayConstants;
13
+import com.huiju.estateagents.common.wxpay.WxConfig;
14
+import com.huiju.estateagents.entity.TaWxPayConfig;
15
+import com.huiju.estateagents.mapper.TaWxPayConfigMapper;
16
+import com.huiju.estateagents.redpack.entity.*;
17
+import com.huiju.estateagents.redpack.mapper.*;
35 18
 import com.huiju.estateagents.redpack.service.ITaOrgOrderService;
19
+import lombok.extern.slf4j.Slf4j;
20
+import org.apache.commons.collections.CollectionUtils;
21
+import org.springframework.beans.factory.annotation.Autowired;
22
+import org.springframework.beans.factory.annotation.Value;
23
+import org.springframework.stereotype.Service;
24
+import org.springframework.transaction.annotation.Transactional;
25
+
26
+import java.io.ByteArrayOutputStream;
27
+import java.io.InputStream;
28
+import java.net.HttpURLConnection;
29
+import java.net.URL;
30
+import java.time.LocalDate;
31
+import java.time.LocalDateTime;
32
+import java.util.ArrayList;
33
+import java.util.HashMap;
34
+import java.util.List;
35
+import java.util.Map;
36 36
 
37 37
 /**
38 38
  * <p>
@@ -42,9 +42,13 @@ import com.huiju.estateagents.redpack.service.ITaOrgOrderService;
42 42
  * @author fxf
43 43
  * @since 2020-06-03
44 44
  */
45
+@Slf4j
45 46
 @Service
46 47
 public class TaOrgOrderServiceImpl extends ServiceImpl<TaOrgOrderMapper, TaOrgOrder> implements ITaOrgOrderService {
47 48
 
49
+    @Value("${pay-notify}")
50
+    private String payNotify;
51
+
48 52
     @Autowired
49 53
     private TaOrgAccountMapper taOrgAccountMapper;
50 54
 
@@ -69,6 +73,9 @@ public class TaOrgOrderServiceImpl extends ServiceImpl<TaOrgOrderMapper, TaOrgOr
69 73
     @Autowired
70 74
     private TaUserMapper taUserMapper;
71 75
 
76
+    @Autowired
77
+    private TaWxPayConfigMapper taWxPayConfigMapper;
78
+
72 79
     @Override
73 80
     public IPage<TaOrgOrder> listByCondition(IPage<TaOrgOrder> pg, String orderType, Integer orgId, String tradeNo, Integer isOffline, String tradingStatus, String receivePhone, String itemType, LocalDate startDate, LocalDate endDate) {
74 81
         IPage<TaOrgOrder> result = null;
@@ -84,6 +91,87 @@ public class TaOrgOrderServiceImpl extends ServiceImpl<TaOrgOrderMapper, TaOrgOr
84 91
         }
85 92
     }
86 93
 
94
+    /**
95
+     * 微信支付
96
+     *
97
+     * @param taOrgOrder
98
+     * @param clientIp
99
+     * @return
100
+     */
101
+    @Override
102
+    public ResponseBean payUnifiedOrder(TaOrgOrder taOrgOrder, String clientIp) throws Exception {
103
+        taOrgOrder = taOrgOrderMapper.selectById(taOrgOrder.getOrderId());
104
+        //构建微信配置
105
+        WxConfig config = getWxConfig(0);
106
+        WXPay wxpay = new WXPay(config);
107
+
108
+        //获取支付的钱数并且判断是自动锁房还是手动锁房,自动锁房需要锁定房源,手动锁房跳过
109
+        String payPrice = String.valueOf(taOrgOrder.getAmount());
110
+
111
+        //生成商户订单
112
+//        String tradeNo = CommonUtils.generateTradeNo("CJ");
113
+//        taOrgOrder.setTradeNo(tradeNo);
114
+
115
+        //下单
116
+        Map<String, String> data = new HashMap<String, String>();
117
+        data.put("body", "微信支付");
118
+        //商品号唯一
119
+        data.put("out_trade_no", taOrgOrder.getTradeNo());
120
+        data.put("device_info", "");
121
+        data.put("fee_type", "CNY");
122
+        //金额 后台计算
123
+        data.put("total_fee", payPrice);
124
+        //终端IP
125
+        data.put("spbill_create_ip", clientIp);
126
+        //回调地址
127
+        data.put("notify_url", payNotify+CommConstant.ITEM_TYPE_RECHARGE);
128
+        // 此处指定为APP支付
129
+        data.put("trade_type", "NATIVE");
130
+        Map<String, String> resp = wxpay.unifiedOrder(data);
131
+        log.info("下单成功:{}", resp);
132
+        if (resp.get("result_code").equalsIgnoreCase(WXPayConstants.FAIL)){
133
+            throw new Exception(resp.get("err_code_des"));
134
+        }
135
+
136
+        return ResponseBean.success(resp.get("code_url"));
137
+    }
138
+
139
+    /**
140
+     * 获取每个小程序独立的微信账户
141
+     * @param orgId
142
+     * @return
143
+     */
144
+    private WxConfig getWxConfig(Integer orgId) throws Exception {
145
+        //根据orgId获取支付配置
146
+        QueryWrapper<TaWxPayConfig> taWxPayConfigQueryWrapper = new QueryWrapper<>();
147
+        taWxPayConfigQueryWrapper.eq("org_id",orgId);
148
+        TaWxPayConfig taWxPayConfig = taWxPayConfigMapper.selectOne(taWxPayConfigQueryWrapper);
149
+        if (null == taWxPayConfig){
150
+            throw new Exception("请先完善支付信息");
151
+        }
152
+        log.info("正在配置orgId为{}的微信支付参数,商户号为{}",orgId,taWxPayConfig.getMchId());
153
+        //把库里的值赋值给微信
154
+        URL urlConet = new URL(taWxPayConfig.getApiPath());
155
+        HttpURLConnection con = (HttpURLConnection)urlConet.openConnection();
156
+        con.setRequestMethod("GET");
157
+        con.setConnectTimeout(4 * 1000);
158
+        InputStream inStream = con .getInputStream();
159
+        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
160
+        byte[] buffer = new byte[2048];
161
+        int len = 0;
162
+        while( (len=inStream.read(buffer)) != -1 ){
163
+            outStream.write(buffer, 0, len);
164
+        }
165
+        inStream.close();
166
+
167
+        WxConfig config = new WxConfig();
168
+        config.setAppid(taWxPayConfig.getAppid());
169
+        config.setMachId(taWxPayConfig.getMchId());
170
+        config.setCertData(outStream.toByteArray());
171
+        config.setKey(taWxPayConfig.getMchKey());
172
+        return config;
173
+    }
174
+
87 175
     @Override
88 176
     @Transactional(rollbackFor = {RuntimeException.class})
89 177
     public ResponseBean refundOrder(String id, TaOrgRefundApplication refundApplication, Integer userId) {

+ 49
- 1
src/main/java/com/huiju/estateagents/service/impl/WxPayServiceImpl.java 查看文件

@@ -9,6 +9,12 @@ import com.huiju.estateagents.eContract.entity.TaContractBusiness;
9 9
 import com.huiju.estateagents.eContract.mapper.TaContractMapper;
10 10
 import com.huiju.estateagents.entity.*;
11 11
 import com.huiju.estateagents.mapper.*;
12
+import com.huiju.estateagents.redpack.entity.TaOrgAccount;
13
+import com.huiju.estateagents.redpack.entity.TaOrgAccountDetailedList;
14
+import com.huiju.estateagents.redpack.entity.TaOrgOrder;
15
+import com.huiju.estateagents.redpack.mapper.TaOrgAccountDetailedListMapper;
16
+import com.huiju.estateagents.redpack.mapper.TaOrgAccountMapper;
17
+import com.huiju.estateagents.redpack.mapper.TaOrgOrderMapper;
12 18
 import com.huiju.estateagents.service.ITaRaiseRecordService;
13 19
 import com.huiju.estateagents.service.IWxPayService;
14 20
 import lombok.extern.slf4j.Slf4j;
@@ -17,7 +23,6 @@ import org.springframework.beans.factory.annotation.Value;
17 23
 import org.springframework.stereotype.Service;
18 24
 import org.springframework.transaction.annotation.Transactional;
19 25
 
20
-import javax.xml.ws.soap.Addressing;
21 26
 import java.io.ByteArrayOutputStream;
22 27
 import java.io.InputStream;
23 28
 import java.net.HttpURLConnection;
@@ -65,6 +70,15 @@ public class WxPayServiceImpl implements IWxPayService {
65 70
     @Autowired
66 71
     private TaContractMapper taContractMapper;
67 72
 
73
+    @Autowired
74
+    private TaOrgOrderMapper taOrgOrderMapper;
75
+
76
+    @Autowired
77
+    private TaOrgAccountDetailedListMapper taOrgAccountDetailedListMapper;
78
+
79
+    @Autowired
80
+    private TaOrgAccountMapper taOrgAccountMapper;
81
+
68 82
     /**
69 83
      * 微信支付-统一下单
70 84
      *
@@ -145,10 +159,44 @@ public class WxPayServiceImpl implements IWxPayService {
145 159
         //house类型的支付成功的回调,处理业务逻辑 修改订单状态等
146 160
         if (type.equals(CommConstant.ORDER_TARGET_TYPE_HOUSE)) {
147 161
             wxHouseNotify(resultMap);
162
+        }else if (type.equals(CommConstant.ITEM_TYPE_RECHARGE)){
163
+            //账户充值
164
+            accountRecharge(resultMap);
148 165
         }
149 166
 
150 167
     }
151 168
 
169
+    /**
170
+     * 账户充值
171
+     * @param resultMap
172
+     */
173
+    private void accountRecharge(Map<String, String> resultMap) {
174
+        log.info("修改订单为{},的支付状态",resultMap.get("out_trade_no"));
175
+        String tradeNo = resultMap.get("out_trade_no");
176
+        String transactionId = resultMap.get("transaction_id");
177
+        TaOrgOrder taOrgOrder = taOrgOrderMapper.selectOne(new QueryWrapper<TaOrgOrder>().eq("trade_no", tradeNo));
178
+        taOrgOrder.setPayDate(LocalDateTime.now());
179
+        taOrgOrder.setTradingStatus(CommConstant.SUCCESS);
180
+        taOrgOrder.setWxOrderId(transactionId);
181
+        taOrgOrderMapper.updateById(taOrgOrder);
182
+        //获取账户信息表
183
+        TaOrgAccount taOrgAccount = taOrgAccountMapper.selectOne(new QueryWrapper<TaOrgAccount>().eq("org_id", taOrgOrder.getOrgId()).eq("status", CommConstant.STATUS_NORMAL));
184
+        //添加账户流水
185
+        TaOrgAccountDetailedList taOrgAccountDetailedList = new TaOrgAccountDetailedList();
186
+        taOrgAccountDetailedList.setAccountId(taOrgAccount.getAccountId());
187
+        taOrgAccountDetailedList.setAmount(taOrgOrder.getAmount());
188
+        taOrgAccountDetailedList.setCreateDate(LocalDateTime.now());
189
+        taOrgAccountDetailedList.setOrderId(taOrgOrder.getOrderId());
190
+        taOrgAccountDetailedList.setOrgId(taOrgOrder.getOrgId());
191
+        taOrgAccountDetailedList.setSignType(1);
192
+        taOrgAccountDetailedList.setStatus(CommConstant.STATUS_NORMAL);
193
+        taOrgAccountDetailedListMapper.insert(taOrgAccountDetailedList);
194
+        //添加账户金额
195
+        taOrgAccount.setAvailableBalance(taOrgAccount.getAvailableBalance() + taOrgOrder.getAmount());
196
+        taOrgAccount.setPurchaseAmount(taOrgAccount.getPurchaseAmount() + taOrgOrder.getAmount());
197
+        taOrgAccountMapper.updateById(taOrgAccount);
198
+    }
199
+
152 200
     /**
153 201
      * 微信退款
154 202
      * @param taOrder

+ 5
- 2
src/main/java/com/huiju/estateagents/third/service/impl/TaThirdPartyMiniappConfigServiceImpl.java 查看文件

@@ -10,6 +10,7 @@ import com.github.binarywang.wxpay.service.WxPayService;
10 10
 import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
11 11
 import com.huiju.estateagents.base.ResponseBean;
12 12
 import com.huiju.estateagents.common.CommConstant;
13
+import com.huiju.estateagents.common.CommonUtils;
13 14
 import com.huiju.estateagents.common.MD5Utils;
14 15
 import com.huiju.estateagents.drainage.entity.TaDrainage;
15 16
 import com.huiju.estateagents.drainage.mapper.TaDrainageMapper;
@@ -357,12 +358,13 @@ public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPar
357 358
 		//获取收红包人的openid
358 359
 		TaMpPerson parentMpPerson = taMpPersonMapper.selectById(parentMpMiniapp.getMpPersonId());
359 360
 		//发送红包
361
+		String tradeNo = CommonUtils.generateTradeNo("HB");
360 362
 		WxPayService wxPayService = getWxPayService();
361 363
 		WxPaySendRedpackRequest build = WxPaySendRedpackRequest.newBuilder()
362 364
 //				.consumeMchId(wxPayService.getConfig().getMchId())
363 365
 				.actName(taRedPacketClient.getActivityName())//活动名称
364 366
 				.clientIp(String.valueOf(InetAddress.getLoopbackAddress()))//Ip地址
365
-				.mchBillNo("HB123456")//商户订单号
367
+				.mchBillNo(tradeNo)//商户订单号
366 368
 //				.msgAppid(mpAppid)
367 369
 				.remark(taRedPacketClient.getRemark())//备注
368 370
 				.reOpenid(parentMpPerson.getMpOpenid())//接受红包的用户openid
@@ -379,7 +381,7 @@ public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPar
379 381
 			String resultCode = wxPaySendRedpackResult.getResultCode();
380 382
 			if (resultCode.equals("SUCCESS")){
381 383
 				//插入订单表并扣钱反更新
382
-				saveRedpacketOrder("HB123456",wxPaySendRedpackResult,parentMpMiniapp,taRedPacketHelp,orgId,mpAppid);
384
+				saveRedpacketOrder(tradeNo,wxPaySendRedpackResult,parentMpMiniapp,taRedPacketHelp,orgId,mpAppid);
383 385
 			}else {
384 386
 				return;
385 387
 			}
@@ -392,6 +394,7 @@ public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPar
392 394
 		//先扣钱
393 395
 		TaOrgAccount taOrgAccount = taOrgAccountMapper.selectOne(new QueryWrapper<TaOrgAccount>().eq("org_id", orgId).eq("status", CommConstant.STATUS_NORMAL));
394 396
 		taOrgAccount.setRealBalance(taOrgAccount.getRealBalance() - wxPaySendRedpackResult.getTotalAmount());
397
+		taOrgAccount.setPurchaseAmount(taOrgAccount.getPurchaseAmount() + wxPaySendRedpackResult.getTotalAmount());
395 398
 		taOrgAccountMapper.updateById(taOrgAccount);
396 399
 		TaRedPacketMoney taRedPacketMoney = taRedPacketmonetMapper.selectById(taRedPacketHelp.getActivityId());
397 400
 		taRedPacketMoney.setBalance(taRedPacketMoney.getBalance()-wxPaySendRedpackResult.getTotalAmount());