|
@@ -25,12 +25,14 @@ import java.util.Map;
|
25
|
25
|
|
26
|
26
|
@Slf4j
|
27
|
27
|
@Service
|
28
|
|
-@Transactional(rollbackFor = Exception.class)
|
29
|
28
|
public class WxPayServiceImpl implements IWxPayService {
|
30
|
29
|
|
31
|
30
|
@Value("${pay-notify}")
|
32
|
31
|
private String payNotify;
|
33
|
32
|
|
|
33
|
+ @Value("${pay-refund}")
|
|
34
|
+ private String payRefund;
|
|
35
|
+
|
34
|
36
|
@Autowired
|
35
|
37
|
private TaWxPayConfigMapper taWxPayConfigMapper;
|
36
|
38
|
|
|
@@ -57,6 +59,7 @@ public class WxPayServiceImpl implements IWxPayService {
|
57
|
59
|
* @return
|
58
|
60
|
*/
|
59
|
61
|
@Override
|
|
62
|
+ @Transactional(rollbackFor = Exception.class)
|
60
|
63
|
public ResponseBean payUnifiedOrder(TaOrder taOrder, String clientIp) throws Exception {
|
61
|
64
|
//构建微信配置
|
62
|
65
|
WxConfig config = getWxConfig(taOrder.getOrgId());
|
|
@@ -126,6 +129,88 @@ public class WxPayServiceImpl implements IWxPayService {
|
126
|
129
|
|
127
|
130
|
}
|
128
|
131
|
|
|
132
|
+ /**
|
|
133
|
+ * 微信退款
|
|
134
|
+ * @param taOrder
|
|
135
|
+ * @param orgId
|
|
136
|
+ * @param userId
|
|
137
|
+ * @throws Exception
|
|
138
|
+ */
|
|
139
|
+ @Override
|
|
140
|
+ public void payRefund(TaOrder taOrder, Integer orgId, Integer userId) throws Exception {
|
|
141
|
+ //构建微信配置
|
|
142
|
+ WxConfig config = getWxConfig(taOrder.getOrgId());
|
|
143
|
+ WXPay wxpay = new WXPay(config);
|
|
144
|
+
|
|
145
|
+ //获取支付的钱数并且判断是自动锁房还是手动锁房,自动锁房需要锁定房源,手动锁房跳过
|
|
146
|
+ String payPrice = getRefundPrice(taOrder);
|
|
147
|
+ if (null == payPrice){
|
|
148
|
+ throw new Exception("此认筹单异常请联系置业顾问!");
|
|
149
|
+ }
|
|
150
|
+
|
|
151
|
+ //退款单
|
|
152
|
+ Map<String, String> data = new HashMap<String, String>();
|
|
153
|
+ //商品号唯一
|
|
154
|
+ data.put("transaction_id", taOrder.getTransactionId());
|
|
155
|
+ data.put("out_refund_no", taOrder.getRefundNo());
|
|
156
|
+ data.put("fee_type", "CNY");
|
|
157
|
+ //金额 后台计算
|
|
158
|
+ data.put("total_fee", payPrice);
|
|
159
|
+ data.put("refund_fee", payPrice);
|
|
160
|
+ //退款原因
|
|
161
|
+ data.put("refund_desc", taOrder.getRefundReason());
|
|
162
|
+ //回调地址
|
|
163
|
+ data.put("notify_url", payRefund+taOrder.getTargetType());
|
|
164
|
+ Map<String, String> resp = wxpay.refund(data);
|
|
165
|
+ log.info("退款下单成功:{}", resp);
|
|
166
|
+ if (resp.get("result_code").equalsIgnoreCase(WXPayConstants.FAIL)){
|
|
167
|
+ throw new Exception(resp.get("err_code_des"));
|
|
168
|
+ }
|
|
169
|
+
|
|
170
|
+ //更新退款状态并插入退款订单并更新认筹单的退款原因
|
|
171
|
+ updateRefundOrderStatus(taOrder);
|
|
172
|
+ }
|
|
173
|
+
|
|
174
|
+ /**
|
|
175
|
+ * 插入退款订单并更新认筹单的退款原因
|
|
176
|
+ * @param taOrder
|
|
177
|
+ */
|
|
178
|
+ private void updateRefundOrderStatus(TaOrder taOrder) {
|
|
179
|
+ //插入退款单
|
|
180
|
+ taOrder.setCreateDate(LocalDateTime.now());
|
|
181
|
+ taOrderMapper.insert(taOrder);
|
|
182
|
+ //更新认筹单退款原因
|
|
183
|
+ TaRaiseRecord taRaiseRecord = taRaiseRecordMapper.selectById(taOrder.getTargetId());
|
|
184
|
+ taRaiseRecord.setRefundReason(taOrder.getRefundReason());
|
|
185
|
+ taRaiseRecordMapper.updateById(taRaiseRecord);
|
|
186
|
+ }
|
|
187
|
+
|
|
188
|
+ /**
|
|
189
|
+ * 获取退款金额
|
|
190
|
+ * @param taOrder
|
|
191
|
+ * @return
|
|
192
|
+ */
|
|
193
|
+ private String getRefundPrice(TaOrder taOrder) throws Exception {
|
|
194
|
+ if (taOrder.getTargetType().equals(CommConstant.ORDER_TARGET_TYPE_HOUSE)){
|
|
195
|
+ TaRaiseRecord taRaiseRecord = taRaiseRecordMapper.selectById(taOrder.getTargetId());
|
|
196
|
+ if (null == taRaiseRecord){
|
|
197
|
+ throw new Exception("此认筹单不存在!请联系置业顾问!");
|
|
198
|
+ }
|
|
199
|
+ //获取订单中的价格
|
|
200
|
+ TaOrder refundOrder = taOrderMapper.selectById(taRaiseRecord.getOrderId());
|
|
201
|
+ //退款单号
|
|
202
|
+ taOrder.setRefundNo("T"+refundOrder.getTradeNo());
|
|
203
|
+ taOrder.setParentOrderId(refundOrder.getOrderId());
|
|
204
|
+ taOrder.setOrgId(refundOrder.getOrgId());
|
|
205
|
+ taOrder.setPayTime(refundOrder.getPayTime());
|
|
206
|
+ taOrder.setPersonId(refundOrder.getPersonId());
|
|
207
|
+ taOrder.setTradeNo(refundOrder.getTradeNo());
|
|
208
|
+ taOrder.setTotalFee(refundOrder.getTotalFee());
|
|
209
|
+ return String.valueOf(refundOrder.getTotalFee());
|
|
210
|
+ }
|
|
211
|
+ return null;
|
|
212
|
+ }
|
|
213
|
+
|
129
|
214
|
/**
|
130
|
215
|
* 处理认筹房源的相关数据
|
131
|
216
|
* @param resultMap
|