Merge branch 'master' of https://gitee.com/op-souls/ghy-all
This commit is contained in:
commit
0c89bf08a8
|
|
@ -20,6 +20,7 @@ import com.ghy.order.domain.OrderGoods;
|
||||||
import com.ghy.order.domain.OrderMaster;
|
import com.ghy.order.domain.OrderMaster;
|
||||||
import com.ghy.order.request.AppOrderAssignRequest;
|
import com.ghy.order.request.AppOrderAssignRequest;
|
||||||
import com.ghy.order.request.AppOrderRequest;
|
import com.ghy.order.request.AppOrderRequest;
|
||||||
|
import com.ghy.order.request.SysOrderAssignRequest;
|
||||||
import com.ghy.order.service.OrderDetailService;
|
import com.ghy.order.service.OrderDetailService;
|
||||||
import com.ghy.order.service.OrderGoodsService;
|
import com.ghy.order.service.OrderGoodsService;
|
||||||
import com.ghy.order.service.OrderMasterService;
|
import com.ghy.order.service.OrderMasterService;
|
||||||
|
|
@ -86,6 +87,9 @@ public class OrderController extends BaseController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private GoodsStandardService goodsStandardService;
|
private GoodsStandardService goodsStandardService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 可派单商品数量
|
||||||
|
* */
|
||||||
@PostMapping("/can/assign")
|
@PostMapping("/can/assign")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult canAssign(@RequestBody AppOrderAssignRequest request){
|
public AjaxResult canAssign(@RequestBody AppOrderAssignRequest request){
|
||||||
|
|
@ -115,6 +119,32 @@ public class OrderController extends BaseController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 后台批量下单
|
||||||
|
* */
|
||||||
|
@PostMapping("/sys/order")
|
||||||
|
@ResponseBody
|
||||||
|
public AjaxResult sysOrder(@RequestBody SysOrderAssignRequest request){
|
||||||
|
try {
|
||||||
|
// 新增商品 -- 商品不关联师傅,状态为不展示在商城页面
|
||||||
|
|
||||||
|
// 选择消费者(消费者类型为渠道商、不需要) --
|
||||||
|
|
||||||
|
// 生成消费者下单地址
|
||||||
|
|
||||||
|
// 生成主单
|
||||||
|
|
||||||
|
// 生成财务单
|
||||||
|
|
||||||
|
// 生成财务细单 -- 平台扣点、提成
|
||||||
|
return AjaxResult.success("下单成功");
|
||||||
|
}catch (Exception e){
|
||||||
|
|
||||||
|
return AjaxResult.error("系统异常");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/assign")
|
@PostMapping("/assign")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
|
@ -133,6 +163,13 @@ public class OrderController extends BaseController {
|
||||||
if(!om.getWorkerId().equals(request.getWorkerId())){
|
if(!om.getWorkerId().equals(request.getWorkerId())){
|
||||||
boolean checkInTeam = workerService.checkInTeam(assignWorker.getWorkerId(), acceptWorker.getWorkerId());
|
boolean checkInTeam = workerService.checkInTeam(assignWorker.getWorkerId(), acceptWorker.getWorkerId());
|
||||||
Assert.isTrue(checkInTeam, "接单师傅不在本团队");
|
Assert.isTrue(checkInTeam, "接单师傅不在本团队");
|
||||||
|
}else {
|
||||||
|
// 自己接单 -- 计算剩余金额
|
||||||
|
BigDecimal realPay = fm.getPayMoney();
|
||||||
|
for (FinancialDetail financialDetail : financialDetailService.selectByFinancialMasterId(fm.getId())) {
|
||||||
|
realPay = realPay.subtract(financialDetail.getPayMoney());
|
||||||
|
}
|
||||||
|
request.setTotalPay(realPay);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断是否全部派完
|
// 判断是否全部派完
|
||||||
|
|
@ -310,7 +347,7 @@ public class OrderController extends BaseController {
|
||||||
BigDecimal deptTotal = payMoney.multiply(deptRate).add(deptMoney);
|
BigDecimal deptTotal = payMoney.multiply(deptRate).add(deptMoney);
|
||||||
|
|
||||||
FinancialDetail deptDetail = new FinancialDetail(deptId, financialDetailService.createCode(),
|
FinancialDetail deptDetail = new FinancialDetail(deptId, financialDetailService.createCode(),
|
||||||
financialMaster.getId(), financialMaster.getCode(), deptTotal, 3, null);
|
financialMaster.getId(), financialMaster.getCode(), deptTotal, FinancialDetailType.PLATFORM_FEE.getCode(), null);
|
||||||
financialDetailService.insertFinancialDetail(deptDetail);
|
financialDetailService.insertFinancialDetail(deptDetail);
|
||||||
|
|
||||||
/* 2 截留扣点 */
|
/* 2 截留扣点 */
|
||||||
|
|
@ -320,7 +357,7 @@ public class OrderController extends BaseController {
|
||||||
BigDecimal retainTotal = payMoney.multiply(retainRate).add(retainMoney);
|
BigDecimal retainTotal = payMoney.multiply(retainRate).add(retainMoney);
|
||||||
|
|
||||||
FinancialDetail retainDetail = new FinancialDetail(deptId, financialDetailService.createCode(),
|
FinancialDetail retainDetail = new FinancialDetail(deptId, financialDetailService.createCode(),
|
||||||
financialMaster.getId(), financialMaster.getCode(), retainTotal, 2, null);
|
financialMaster.getId(), financialMaster.getCode(), retainTotal, FinancialDetailType.PLATFORM_FEE.getCode(), null);
|
||||||
financialDetailService.insertFinancialDetail(retainDetail);
|
financialDetailService.insertFinancialDetail(retainDetail);
|
||||||
|
|
||||||
/* 3 分销扣点 */
|
/* 3 分销扣点 */
|
||||||
|
|
@ -334,7 +371,7 @@ public class OrderController extends BaseController {
|
||||||
// 一级分销
|
// 一级分销
|
||||||
if (customerPlaceId != null) {
|
if (customerPlaceId != null) {
|
||||||
FinancialDetail financialDetail = new FinancialDetail(deptId, financialDetailService.createCode(),
|
FinancialDetail financialDetail = new FinancialDetail(deptId, financialDetailService.createCode(),
|
||||||
financialMaster.getId(), financialMaster.getCode(), onePlaceMoney, 2, customerPlaceId);
|
financialMaster.getId(), financialMaster.getCode(), onePlaceMoney, FinancialDetailType.PLACE_FEE.getCode(), customerPlaceId);
|
||||||
financialDetailService.insertFinancialDetail(financialDetail);
|
financialDetailService.insertFinancialDetail(financialDetail);
|
||||||
} else {
|
} else {
|
||||||
deptPlaceTotal = deptPlaceTotal.add(onePlaceMoney);
|
deptPlaceTotal = deptPlaceTotal.add(onePlaceMoney);
|
||||||
|
|
@ -344,7 +381,7 @@ public class OrderController extends BaseController {
|
||||||
Long parentCustomerPlaceId = customer.getParentCustomerPlace();
|
Long parentCustomerPlaceId = customer.getParentCustomerPlace();
|
||||||
if (parentCustomerPlaceId != null) {
|
if (parentCustomerPlaceId != null) {
|
||||||
FinancialDetail financialDetail = new FinancialDetail(deptId, financialDetailService.createCode(),
|
FinancialDetail financialDetail = new FinancialDetail(deptId, financialDetailService.createCode(),
|
||||||
financialMaster.getId(), financialMaster.getCode(), twoPlaceMoney, 2, parentCustomerPlaceId);
|
financialMaster.getId(), financialMaster.getCode(), twoPlaceMoney, FinancialDetailType.PLACE_FEE.getCode(), parentCustomerPlaceId);
|
||||||
financialDetailService.insertFinancialDetail(financialDetail);
|
financialDetailService.insertFinancialDetail(financialDetail);
|
||||||
} else {
|
} else {
|
||||||
deptPlaceTotal = deptPlaceTotal.add(twoPlaceMoney);
|
deptPlaceTotal = deptPlaceTotal.add(twoPlaceMoney);
|
||||||
|
|
@ -353,7 +390,7 @@ public class OrderController extends BaseController {
|
||||||
// 平台分销
|
// 平台分销
|
||||||
deptPlaceTotal = deptPlaceTotal.add(threePlaceMoney);
|
deptPlaceTotal = deptPlaceTotal.add(threePlaceMoney);
|
||||||
FinancialDetail financialDetail = new FinancialDetail(deptId, financialDetailService.createCode(),
|
FinancialDetail financialDetail = new FinancialDetail(deptId, financialDetailService.createCode(),
|
||||||
financialMaster.getId(), financialMaster.getCode(), deptPlaceTotal, 2, null);
|
financialMaster.getId(), financialMaster.getCode(), deptPlaceTotal, FinancialDetailType.PLACE_FEE.getCode(), null);
|
||||||
financialDetailService.insertFinancialDetail(financialDetail);
|
financialDetailService.insertFinancialDetail(financialDetail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,6 @@ import com.ghy.worker.domain.WorkerCertification;
|
||||||
import com.ghy.worker.service.IWorkerCertificationService;
|
import com.ghy.worker.service.IWorkerCertificationService;
|
||||||
import com.ghy.worker.service.WorkerService;
|
import com.ghy.worker.service.WorkerService;
|
||||||
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
@ -55,7 +54,6 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/order/master")
|
@RequestMapping("/order/master")
|
||||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
|
||||||
public class OrderMasterController extends BaseController {
|
public class OrderMasterController extends BaseController {
|
||||||
|
|
||||||
private final String prefix = "order/master";
|
private final String prefix = "order/master";
|
||||||
|
|
@ -394,4 +392,29 @@ public class OrderMasterController extends BaseController {
|
||||||
public String checkOrderMasterCodeUnique(OrderMaster orderMaster) {
|
public String checkOrderMasterCodeUnique(OrderMaster orderMaster) {
|
||||||
return orderMasterService.checkOrderMasterCodeUnique(orderMaster);
|
return orderMasterService.checkOrderMasterCodeUnique(orderMaster);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消费者申请取消主订单
|
||||||
|
*
|
||||||
|
* @param orderMasterId 主订单ID
|
||||||
|
*/
|
||||||
|
@PostMapping("/cancel")
|
||||||
|
@ResponseBody
|
||||||
|
public AjaxResult cancel(Long orderMasterId) {
|
||||||
|
orderMasterService.cancel(orderMasterId);
|
||||||
|
return AjaxResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 师傅审核取消主订单申请
|
||||||
|
*
|
||||||
|
* @param orderMasterId 主订单ID
|
||||||
|
* @param agree 0=不同意 1=同意
|
||||||
|
*/
|
||||||
|
@PostMapping("/cancel/agree")
|
||||||
|
@ResponseBody
|
||||||
|
public AjaxResult cancelAgree(Long orderMasterId, Integer agree) {
|
||||||
|
orderMasterService.cancelAgree(orderMasterId, agree);
|
||||||
|
return AjaxResult.success();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
package com.ghy.web.controller.pay;
|
package com.ghy.web.controller.pay;
|
||||||
|
|
||||||
import com.ghy.payment.service.AdapayService;
|
|
||||||
import com.ghy.common.adapay.model.PayParam;
|
import com.ghy.common.adapay.model.PayParam;
|
||||||
import com.ghy.common.core.controller.BaseController;
|
import com.ghy.common.core.controller.BaseController;
|
||||||
import com.ghy.common.core.domain.AjaxResult;
|
import com.ghy.common.core.domain.AjaxResult;
|
||||||
import com.ghy.order.domain.OrderMaster;
|
import com.ghy.order.domain.OrderMaster;
|
||||||
import com.ghy.order.service.OrderMasterService;
|
import com.ghy.order.service.OrderMasterService;
|
||||||
import com.ghy.payment.domain.FinancialMaster;
|
import com.ghy.payment.domain.FinancialMaster;
|
||||||
|
import com.ghy.payment.service.AdapayService;
|
||||||
import com.ghy.payment.service.FinancialMasterService;
|
import com.ghy.payment.service.FinancialMasterService;
|
||||||
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
|
@ -50,7 +50,7 @@ public class AlipayController extends BaseController {
|
||||||
Map<String, Object> map;
|
Map<String, Object> map;
|
||||||
String payMoney = fm.getPayMoney().setScale(2, BigDecimal.ROUND_UNNECESSARY).toString();
|
String payMoney = fm.getPayMoney().setScale(2, BigDecimal.ROUND_UNNECESSARY).toString();
|
||||||
// TODO 这里需要补充商品标题和商品描述信息
|
// TODO 这里需要补充商品标题和商品描述信息
|
||||||
PayParam payParam = PayParam.createDelayPay(om.getCode() + "_" + System.currentTimeMillis(), "0.01", "商品标题", "商品描述信息");
|
PayParam payParam = PayParam.delayPayParam(om.getCode() + "_" + System.currentTimeMillis(), "0.01", "商品标题", "商品描述信息");
|
||||||
try {
|
try {
|
||||||
map = adapayService.alipayQrPay(om.getDeptId(), payParam, null, null, null);
|
map = adapayService.alipayQrPay(om.getDeptId(), payParam, null, null, null);
|
||||||
} catch (BaseAdaPayException e) {
|
} catch (BaseAdaPayException e) {
|
||||||
|
|
|
||||||
|
|
@ -36,16 +36,6 @@ public class PayController {
|
||||||
@Resource
|
@Resource
|
||||||
private FinancialMasterService financialMasterService;
|
private FinancialMasterService financialMasterService;
|
||||||
|
|
||||||
/**
|
|
||||||
* 确认支付
|
|
||||||
*
|
|
||||||
* @param orderMasterId 主订单ID
|
|
||||||
*/
|
|
||||||
public AjaxResult confirm(Long orderMasterId) throws BaseAdaPayException {
|
|
||||||
orderMasterService.confirm(orderMasterId);
|
|
||||||
return AjaxResult.success();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发起退款
|
* 发起退款
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ public class WxPayController extends BaseController {
|
||||||
|
|
||||||
@PostMapping("drawCash")
|
@PostMapping("drawCash")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult drawCash(@RequestBody JSONObject object){
|
public AjaxResult drawCash(@RequestBody JSONObject object) {
|
||||||
try {
|
try {
|
||||||
// 101 123dasda D0 1.00 C7D101
|
// 101 123dasda D0 1.00 C7D101
|
||||||
Long deptId = object.getLong("deptId");
|
Long deptId = object.getLong("deptId");
|
||||||
|
|
@ -50,7 +50,7 @@ public class WxPayController extends BaseController {
|
||||||
String remark = object.getStr("remark");
|
String remark = object.getStr("remark");
|
||||||
adapayService.drawCash(deptId, orderNo, cashType, cashAmt, memberId, remark, null);
|
adapayService.drawCash(deptId, orderNo, cashType, cashAmt, memberId, remark, null);
|
||||||
return AjaxResult.success("操作成功");
|
return AjaxResult.success("操作成功");
|
||||||
}catch (Exception e){
|
} catch (Exception e) {
|
||||||
return AjaxResult.error("操作失败");
|
return AjaxResult.error("操作失败");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -74,7 +74,7 @@ public class WxPayController extends BaseController {
|
||||||
List<DivMember> divMembers = new ArrayList<>();
|
List<DivMember> divMembers = new ArrayList<>();
|
||||||
divMembers.add(new DivMember("C7D101", String.valueOf(financialMaster.getPayMoney()), true));
|
divMembers.add(new DivMember("C7D101", String.valueOf(financialMaster.getPayMoney()), true));
|
||||||
// TODO 订单里需要补充支付金额、tittle、简要描述、分账信息、description
|
// TODO 订单里需要补充支付金额、tittle、简要描述、分账信息、description
|
||||||
PayParam payParam = new PayParam(orderMaster.getCode() + "_" + System.currentTimeMillis(),
|
PayParam payParam = PayParam.delayPayParam(orderMaster.getCode() + "_" + System.currentTimeMillis(),
|
||||||
String.valueOf(financialMaster.getPayMoney()), "工圈子居家设备", "工圈子居家设备购买付费");
|
String.valueOf(financialMaster.getPayMoney()), "工圈子居家设备", "工圈子居家设备购买付费");
|
||||||
map = adapayService.wxLitePay(orderMaster.getDeptId(), payParam, expend, null, null);
|
map = adapayService.wxLitePay(orderMaster.getDeptId(), payParam, expend, null, null);
|
||||||
} catch (BaseAdaPayException e) {
|
} catch (BaseAdaPayException e) {
|
||||||
|
|
@ -107,7 +107,7 @@ public class WxPayController extends BaseController {
|
||||||
WxpayExpend expend = new WxpayExpend();
|
WxpayExpend expend = new WxpayExpend();
|
||||||
expend.setOpenId(openId);
|
expend.setOpenId(openId);
|
||||||
Map<String, Object> map;
|
Map<String, Object> map;
|
||||||
PayParam payParam = new PayParam(orderMaster.getCode(), "0.01", "工圈子测试", "工圈子测试描述");
|
PayParam payParam = PayParam.delayPayParam(orderMaster.getCode(), "0.01", "工圈子测试", "工圈子测试描述");
|
||||||
map = adapayService.wxPubPay(orderMaster.getDeptId(), payParam, expend, null, null);
|
map = adapayService.wxPubPay(orderMaster.getDeptId(), payParam, expend, null, null);
|
||||||
return AjaxResult.success(map);
|
return AjaxResult.success(map);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,12 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'customerLogoUrl',
|
field: 'customerLogoUrl',
|
||||||
title: '头像'
|
title: '头像',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var actions = [];
|
||||||
|
actions.push('<img class="img-circle" src="' + row.customerLogoUrl + '" alt="消费者头像" />');
|
||||||
|
return actions.join('');
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
visible: editFlag == 'hidden' ? false : true,
|
visible: editFlag == 'hidden' ? false : true,
|
||||||
|
|
@ -146,7 +151,6 @@
|
||||||
formatter: function(value, row, index) {
|
formatter: function(value, row, index) {
|
||||||
if (row.customerId != 1) {
|
if (row.customerId != 1) {
|
||||||
var actions = [];
|
var actions = [];
|
||||||
actions.push("<a class='btn btn-success btn-xs " + resetPwdFlag + "' href='javascript:void(0)' onclick='resetPwd(" + row.customerId + ")'><i class='fa fa-edit'></i>重置密码</a> ");
|
|
||||||
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.customerId + '\')"><i class="fa fa-remove"></i>删除</a> ');
|
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.customerId + '\')"><i class="fa fa-remove"></i>删除</a> ');
|
||||||
return actions.join('');
|
return actions.join('');
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -169,9 +173,9 @@
|
||||||
/* 用户状态显示 */
|
/* 用户状态显示 */
|
||||||
function statusTools(row) {
|
function statusTools(row) {
|
||||||
if (row.status == 0) {
|
if (row.status == 0) {
|
||||||
return '<i class=\"fa fa-toggle-off text-info fa-2x\" onclick="enable(\'' + row.customerId + '\')"></i> ';
|
|
||||||
} else {
|
|
||||||
return '<i class=\"fa fa-toggle-on text-info fa-2x\" onclick="disable(\'' + row.customerId + '\')"></i> ';
|
return '<i class=\"fa fa-toggle-on text-info fa-2x\" onclick="disable(\'' + row.customerId + '\')"></i> ';
|
||||||
|
} else {
|
||||||
|
return '<i class=\"fa fa-toggle-off text-info fa-2x\" onclick="enable(\'' + row.customerId + '\')"></i> ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,6 @@
|
||||||
formatter: function(value, row, index) {
|
formatter: function(value, row, index) {
|
||||||
if (row.workerId != 1) {
|
if (row.workerId != 1) {
|
||||||
var actions = [];
|
var actions = [];
|
||||||
actions.push("<a class='btn btn-success btn-xs " + resetPwdFlag + "' href='javascript:void(0)' onclick='resetPwd(" + row.workerId + ")'><i class='fa fa-edit'></i>重置密码</a> ");
|
|
||||||
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.workerId + '\')"><i class="fa fa-remove"></i>删除</a> ');
|
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.workerId + '\')"><i class="fa fa-remove"></i>删除</a> ');
|
||||||
return actions.join('');
|
return actions.join('');
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -175,9 +174,9 @@
|
||||||
/* 用户状态显示 */
|
/* 用户状态显示 */
|
||||||
function statusTools(row) {
|
function statusTools(row) {
|
||||||
if (row.status == 0) {
|
if (row.status == 0) {
|
||||||
return '<i class=\"fa fa-toggle-on text-info fa-2x\" onclick="disable(\'' + row.workerId + '\')"></i> ';
|
|
||||||
} else {
|
|
||||||
return '<i class=\"fa fa-toggle-off text-info fa-2x\" onclick="enable(\'' + row.workerId + '\')"></i> ';
|
return '<i class=\"fa fa-toggle-off text-info fa-2x\" onclick="enable(\'' + row.workerId + '\')"></i> ';
|
||||||
|
} else {
|
||||||
|
return '<i class=\"fa fa-toggle-on text-info fa-2x\" onclick="disable(\'' + row.workerId + '\')"></i> ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,10 +21,6 @@ public class PayCallback {
|
||||||
*/
|
*/
|
||||||
@JSONField(name = "created_time")
|
@JSONField(name = "created_time")
|
||||||
private Long createdTime;
|
private Long createdTime;
|
||||||
/**
|
|
||||||
* 支付时间
|
|
||||||
*/
|
|
||||||
private long payTime;
|
|
||||||
/**
|
/**
|
||||||
* 必填,订单号
|
* 必填,订单号
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ public class PayParam {
|
||||||
* @param goodsDesc [必填项]商品描述信息,微信小程序和微信公众号该字段最大长度42个字符
|
* @param goodsDesc [必填项]商品描述信息,微信小程序和微信公众号该字段最大长度42个字符
|
||||||
* @return 支付参数
|
* @return 支付参数
|
||||||
*/
|
*/
|
||||||
public static PayParam createDelayPay(String orderNo, String payAmt, String goodsTittle, String goodsDesc) {
|
public static PayParam delayPayParam(String orderNo, String payAmt, String goodsTittle, String goodsDesc) {
|
||||||
PayParam payParam = new PayParam(orderNo, payAmt, goodsTittle, goodsDesc);
|
PayParam payParam = new PayParam(orderNo, payAmt, goodsTittle, goodsDesc);
|
||||||
payParam.setPayMode("delay");
|
payParam.setPayMode("delay");
|
||||||
return payParam;
|
return payParam;
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ import com.huifu.adapay.model.Payment;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class PaymentDTO extends Payment {
|
public class PaymentDTO extends Payment {
|
||||||
|
|
@ -20,8 +22,14 @@ public class PaymentDTO extends Payment {
|
||||||
*/
|
*/
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 手续费
|
||||||
|
*/
|
||||||
|
@JSONField(name = "fee_amt")
|
||||||
|
private String feeAmt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付时间
|
* 支付时间
|
||||||
*/
|
*/
|
||||||
private Long payTime;
|
private LocalDateTime payTime;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.ghy.common.enums;
|
||||||
public enum AdapayOrderType {
|
public enum AdapayOrderType {
|
||||||
|
|
||||||
PAY("PAY", "支付"),
|
PAY("PAY", "支付"),
|
||||||
|
REFUND("REFUND", "退款"),
|
||||||
DRAW_CASH("DRAW_CASH", "提现"),
|
DRAW_CASH("DRAW_CASH", "提现"),
|
||||||
PAYMENT_CONFIRM("PAYMENT_CONFIRM", "确认支付");
|
PAYMENT_CONFIRM("PAYMENT_CONFIRM", "确认支付");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,16 @@ import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单状态
|
* 订单状态
|
||||||
*
|
*
|
||||||
* @author clunt
|
* @author clunt
|
||||||
*/
|
*/
|
||||||
public enum OrderStatus implements IEnumType {
|
public enum OrderStatus implements IEnumType {
|
||||||
|
|
||||||
|
GOING_CANCEL(-2, "待上门时申请取消"),
|
||||||
|
SERVER_CANCEL(-3, "服务中申请取消"),
|
||||||
|
FINISH_CHECK_CANCEL(-4, "待确认时申请取消"),
|
||||||
|
|
||||||
RECEIVE(0, "待接单"),
|
RECEIVE(0, "待接单"),
|
||||||
PLAIN(1, "待排期"),
|
PLAIN(1, "待排期"),
|
||||||
GOING(2, "待上门"),
|
GOING(2, "待上门"),
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.ghy.order.request;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class SysOrderAssignRequest {
|
||||||
|
|
||||||
|
// 商品相关信息
|
||||||
|
private Long goodsDeptCategoryId;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -83,7 +83,7 @@ public interface OrderMasterService {
|
||||||
*
|
*
|
||||||
* @param orderMasterId 主订单ID
|
* @param orderMasterId 主订单ID
|
||||||
*/
|
*/
|
||||||
void confirm(Long orderMasterId) throws BaseAdaPayException;
|
void finish(Long orderMasterId) throws BaseAdaPayException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发起提现
|
* 发起提现
|
||||||
|
|
@ -93,4 +93,19 @@ public interface OrderMasterService {
|
||||||
* @param amount 提现金额
|
* @param amount 提现金额
|
||||||
*/
|
*/
|
||||||
void drawCash(Long deptId, String memberId, String amount) throws BaseAdaPayException;
|
void drawCash(Long deptId, String memberId, String amount) throws BaseAdaPayException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消费者申请取消主订单
|
||||||
|
*
|
||||||
|
* @param orderMasterId 主订单ID
|
||||||
|
*/
|
||||||
|
void cancel(Long orderMasterId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 师傅同意取消主订单
|
||||||
|
*
|
||||||
|
* @param orderMasterId 主订单ID
|
||||||
|
* @param agree 0=不同意 1=同意
|
||||||
|
*/
|
||||||
|
void cancelAgree(Long orderMasterId, Integer agree);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.ghy.order.service.impl;
|
package com.ghy.order.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.ghy.common.adapay.model.AdapayStatusEnum;
|
import com.ghy.common.adapay.model.AdapayStatusEnum;
|
||||||
import com.ghy.common.adapay.model.DivMember;
|
import com.ghy.common.adapay.model.DivMember;
|
||||||
|
|
@ -7,6 +8,7 @@ import com.ghy.common.adapay.model.PaymentDTO;
|
||||||
import com.ghy.common.constant.UserConstants;
|
import com.ghy.common.constant.UserConstants;
|
||||||
import com.ghy.common.core.text.Convert;
|
import com.ghy.common.core.text.Convert;
|
||||||
import com.ghy.common.enums.AdapayOrderType;
|
import com.ghy.common.enums.AdapayOrderType;
|
||||||
|
import com.ghy.common.enums.FinancialDetailType;
|
||||||
import com.ghy.common.enums.OrderStatus;
|
import com.ghy.common.enums.OrderStatus;
|
||||||
import com.ghy.common.utils.AdapayUtils;
|
import com.ghy.common.utils.AdapayUtils;
|
||||||
import com.ghy.order.domain.OrderMaster;
|
import com.ghy.order.domain.OrderMaster;
|
||||||
|
|
@ -29,9 +31,7 @@ import org.springframework.util.Assert;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -78,7 +78,8 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
@Override
|
@Override
|
||||||
public int updateOrderMaster(OrderMaster orderMaster) throws BaseAdaPayException {
|
public int updateOrderMaster(OrderMaster orderMaster) throws BaseAdaPayException {
|
||||||
if (orderMaster.getOrderStatus().equals(OrderStatus.FINISH.code())) {
|
if (orderMaster.getOrderStatus().equals(OrderStatus.FINISH.code())) {
|
||||||
confirm(orderMaster.getId());
|
logger.info("订单[ID={}]完成,进入确认分账", orderMaster.getId());
|
||||||
|
finish(orderMaster.getId());
|
||||||
}
|
}
|
||||||
return orderMasterMapper.updateOrderMaster(orderMaster);
|
return orderMasterMapper.updateOrderMaster(orderMaster);
|
||||||
}
|
}
|
||||||
|
|
@ -126,7 +127,7 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void confirm(Long orderMasterId) throws BaseAdaPayException {
|
public void finish(Long orderMasterId) throws BaseAdaPayException {
|
||||||
// 校验订单
|
// 校验订单
|
||||||
OrderMaster orderMaster = selectById(orderMasterId);
|
OrderMaster orderMaster = selectById(orderMasterId);
|
||||||
Assert.notNull(orderMaster, "找不到对应的订单");
|
Assert.notNull(orderMaster, "找不到对应的订单");
|
||||||
|
|
@ -136,48 +137,48 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
PaymentDTO payment = financialMasterService.selectPaymentById(financialMaster.getPaymentId());
|
PaymentDTO payment = financialMasterService.selectPaymentById(financialMaster.getPaymentId());
|
||||||
Assert.notNull(payment, "找不到支付记录");
|
Assert.notNull(payment, "找不到支付记录");
|
||||||
|
|
||||||
if (BigDecimal.ZERO.compareTo(financialMaster.getPayMoney()) < 0) {
|
if (BigDecimal.ZERO.compareTo(financialMaster.getPayMoney()) > -1) {
|
||||||
|
logger.info("订单[code={}]支付金额<=0,不需要分账", orderMaster.getCode());
|
||||||
// 支付金额<=0的话 不需要走下面的流程了
|
// 支付金额<=0的话 不需要走下面的流程了
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 用子财务单组成分账信息
|
// 用子财务单组成分账信息
|
||||||
List<FinancialDetail> financialDetails = financialDetailService.selectByFinancialMasterId(financialMaster.getId());
|
List<FinancialDetail> financialDetails = financialDetailService.selectByFinancialMasterId(financialMaster.getId());
|
||||||
// 分账账户
|
|
||||||
ArrayList<DivMember> divMembers = new ArrayList<>();
|
|
||||||
// 需要自动提现的账户
|
|
||||||
ArrayList<DivMember> autoDrawCashMembers = new ArrayList<>();
|
|
||||||
// 校验金额 主财务单的金额减去所有子财务单的金额是否=0
|
// 校验金额 主财务单的金额减去所有子财务单的金额是否=0
|
||||||
BigDecimal checkMoney = financialMaster.getPayMoney();
|
BigDecimal checkMoney = financialMaster.getPayMoney();
|
||||||
// 确认支付金额 = 主财务单付款金额 - 退款金额
|
// 确认支付金额 = 主财务单付款金额 - 退款金额
|
||||||
BigDecimal confirmAmt = financialMaster.getPayMoney();
|
BigDecimal confirmAmt = financialMaster.getPayMoney();
|
||||||
|
|
||||||
|
// key:memberId(分账账户ID) value:分账金额
|
||||||
|
HashMap<String, BigDecimal> memberMap = new HashMap<>();
|
||||||
|
|
||||||
for (FinancialDetail financialDetail : financialDetails) {
|
for (FinancialDetail financialDetail : financialDetails) {
|
||||||
checkMoney = checkMoney.subtract(financialDetail.getPayMoney());
|
checkMoney = checkMoney.subtract(financialDetail.getPayMoney());
|
||||||
String memberId, amount;
|
String memberId;
|
||||||
DivMember member;
|
|
||||||
switch (financialDetail.getFinancialDetailType()) {
|
switch (financialDetail.getFinancialDetailType()) {
|
||||||
case 0:
|
case 0:
|
||||||
// 上门师傅结单 分账同下
|
// 上门师傅结单 分账同下
|
||||||
case 1:
|
case 1:
|
||||||
// 大师傅/店铺提成
|
// 大师傅/店铺提成
|
||||||
memberId = AdapayUtils.getWorkerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId());
|
memberId = AdapayUtils.getWorkerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId());
|
||||||
amount = AdapayUtils.bigDecimalToString(financialDetail.getPayMoney());
|
memberMap.merge(memberId, financialDetail.getPayMoney(), BigDecimal::add);
|
||||||
member = new DivMember(memberId, amount, false);
|
|
||||||
divMembers.add(member);
|
|
||||||
autoDrawCashMembers.add(member);
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
// 平台提成 并且是手续费承担方
|
// 平台提成 并且是手续费承担方
|
||||||
amount = AdapayUtils.bigDecimalToString(financialDetail.getPayMoney());
|
memberMap.merge("0", financialDetail.getPayMoney(), BigDecimal::add);
|
||||||
divMembers.add(new DivMember("0", amount, true));
|
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
// 分销
|
// 分销
|
||||||
memberId = AdapayUtils.getCustomerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId());
|
Long payeeId = financialDetail.getPayeeId();
|
||||||
amount = AdapayUtils.bigDecimalToString(financialDetail.getPayMoney());
|
if (payeeId != null) {
|
||||||
member = new DivMember(memberId, amount, false);
|
memberId = AdapayUtils.getCustomerMemberId(payeeId, orderMaster.getDeptId());
|
||||||
divMembers.add(member);
|
// 如果有分销人 那这笔钱就是分销人的
|
||||||
autoDrawCashMembers.add(member);
|
memberMap.merge(memberId, financialDetail.getPayMoney(), BigDecimal::add);
|
||||||
|
} else {
|
||||||
|
// 如果没有分销人 那这笔钱就分到平台账户
|
||||||
|
memberMap.merge("0", financialDetail.getPayMoney(), BigDecimal::add);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
// 退款
|
// 退款
|
||||||
|
|
@ -190,13 +191,35 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
// 这里校验一次主财务单的金额减去所有子财务单的金额是否=0
|
// 这里校验一次主财务单的金额减去所有子财务单的金额是否=0
|
||||||
Assert.isTrue(BigDecimal.ZERO.compareTo(checkMoney) == 0, "订单异常,请稍后再试");
|
Assert.isTrue(BigDecimal.ZERO.compareTo(checkMoney) == 0, "订单异常,请稍后再试");
|
||||||
|
|
||||||
|
// 分账账户
|
||||||
|
ArrayList<DivMember> divMembers = new ArrayList<>();
|
||||||
|
// 需要自动提现的账户
|
||||||
|
ArrayList<DivMember> autoDrawCashMembers = new ArrayList<>();
|
||||||
|
for (Map.Entry<String, BigDecimal> entry : memberMap.entrySet()) {
|
||||||
|
String memberId = entry.getKey();
|
||||||
|
BigDecimal money = entry.getValue();
|
||||||
|
String amount = AdapayUtils.bigDecimalToString(money);
|
||||||
|
if ("0".equals(memberId)) {
|
||||||
|
// 0是平台账户 只参与分账 不自动提现
|
||||||
|
divMembers.add(new DivMember("0", amount, true));
|
||||||
|
} else {
|
||||||
|
DivMember member = new DivMember(memberId, amount, false);
|
||||||
|
divMembers.add(member);
|
||||||
|
autoDrawCashMembers.add(member);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info("订单[code={}]分账信息: {}", orderMaster.getCode(), JSON.toJSONString(divMembers));
|
||||||
JSONObject response = adapayService.paymentConfirm(orderMaster.getDeptId(), payment.getId(), payment.getOrderNo(),
|
JSONObject response = adapayService.paymentConfirm(orderMaster.getDeptId(), payment.getId(), payment.getOrderNo(),
|
||||||
AdapayUtils.bigDecimalToString(confirmAmt), divMembers, null, null);
|
AdapayUtils.bigDecimalToString(confirmAmt), divMembers, null, null);
|
||||||
|
logger.info("订单[code={}]分账结果: {}", orderMaster.getCode(), response.toJSONString());
|
||||||
|
|
||||||
boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
|
boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
|
||||||
// 如果确认支付失败 这里抛出异常
|
// 如果确认支付失败 这里抛出异常
|
||||||
Assert.isTrue(status, response.getString("error_msg"));
|
Assert.isTrue(status, response.getString("error_msg"));
|
||||||
|
|
||||||
// 走到这里确认支付和分账都成功了 异步进入自动提现流程
|
// 走到这里确认支付和分账都成功了 异步进入自动提现流程
|
||||||
|
logger.info("订单[code={}]开始自动提现", orderMaster.getCode());
|
||||||
autoDrawCashMembers.forEach(member -> executor.execute(() -> {
|
autoDrawCashMembers.forEach(member -> executor.execute(() -> {
|
||||||
String memberId = member.getMemberId();
|
String memberId = member.getMemberId();
|
||||||
String amount = member.getAmount();
|
String amount = member.getAmount();
|
||||||
|
|
@ -222,4 +245,90 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
|
boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
|
||||||
Assert.isTrue(status, response.getString("error_msg"));
|
Assert.isTrue(status, response.getString("error_msg"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void cancel(Long orderMasterId) {
|
||||||
|
OrderMaster orderMaster = selectById(orderMasterId);
|
||||||
|
Assert.notNull(orderMaster, "找不到对应的订单");
|
||||||
|
switch (orderMaster.getOrderStatus()) {
|
||||||
|
case 0: // 待接单状态可直接取消
|
||||||
|
case 1: // 待排期状态可直接取消
|
||||||
|
updateStatus(orderMasterId, OrderStatus.CANCEL.code());
|
||||||
|
// 发起退款
|
||||||
|
try {
|
||||||
|
refund(orderMaster);
|
||||||
|
} catch (BaseAdaPayException e) {
|
||||||
|
logger.error("订单[code={}]退款失败", orderMaster.getCode(), e);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2: // 待上门状态需要师傅同意才能取消
|
||||||
|
updateStatus(orderMasterId, OrderStatus.GOING_CANCEL.code());
|
||||||
|
break;
|
||||||
|
case 3: // 服务中状态需要师傅同意才能取消
|
||||||
|
updateStatus(orderMasterId, OrderStatus.SERVER_CANCEL.code());
|
||||||
|
break;
|
||||||
|
case 4: // 待确认状态需要师傅同意才能取消
|
||||||
|
updateStatus(orderMasterId, OrderStatus.FINISH_CHECK_CANCEL.code());
|
||||||
|
break;
|
||||||
|
default: // 其他状态不可取消
|
||||||
|
throw new IllegalArgumentException("这个订单不能取消了");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancelAgree(Long orderMasterId, Integer agree) {
|
||||||
|
OrderMaster orderMaster = selectById(orderMasterId);
|
||||||
|
Assert.notNull(orderMaster, "找不到对应的订单");
|
||||||
|
if (Integer.valueOf(1).equals(agree)) {
|
||||||
|
// 师傅同意取消订单
|
||||||
|
// 修改主订单状态为已取消
|
||||||
|
updateStatus(orderMasterId, OrderStatus.CANCEL.code());
|
||||||
|
// 发起退款
|
||||||
|
try {
|
||||||
|
refund(orderMaster);
|
||||||
|
} catch (BaseAdaPayException e) {
|
||||||
|
logger.error("订单[code={}]退款失败", orderMaster.getCode(), e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 师傅不同意取消订单
|
||||||
|
Integer orderStatus = orderMaster.getOrderStatus();
|
||||||
|
// 修改主订单状态为原来的状态
|
||||||
|
updateStatus(orderMasterId, Math.abs(orderStatus));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主订单发起退款
|
||||||
|
*
|
||||||
|
* @param orderMaster 主订单
|
||||||
|
*/
|
||||||
|
public void refund(OrderMaster orderMaster) throws BaseAdaPayException {
|
||||||
|
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMaster.getId());
|
||||||
|
// 支付状态
|
||||||
|
Integer payStatus = financialMaster.getPayStatus();
|
||||||
|
if (!payStatus.equals(1)) {
|
||||||
|
// 如果状态不是已支付 则不需要退款
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<FinancialDetail> financialDetails = financialDetailService.selectByFinancialMasterId(financialMaster.getId());
|
||||||
|
|
||||||
|
// 主订单实付金额 - 已退款金额 = 待退款金额
|
||||||
|
BigDecimal payMoney = financialMaster.getPayMoney();
|
||||||
|
for (FinancialDetail fd : financialDetails) {
|
||||||
|
if (FinancialDetailType.RETURN_FEE.getCode().equals(fd.getFinancialDetailType())) {
|
||||||
|
// 如果有退款子财务单 则减去子财务单的已退款金额
|
||||||
|
payMoney = payMoney.subtract(fd.getPayMoney());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BigDecimal.ZERO.compareTo(payMoney) > -1) {
|
||||||
|
logger.info("订单[code={}]待退款金额<=0,不需要退款", orderMaster.getCode());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String refundAmt = AdapayUtils.bigDecimalToString(payMoney);
|
||||||
|
JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), refundAmt);
|
||||||
|
logger.info("退款结果: " + response.toJSONString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,18 +47,18 @@ public interface FinancialMasterMapper {
|
||||||
/**
|
/**
|
||||||
* 支付成功
|
* 支付成功
|
||||||
*
|
*
|
||||||
* @param orderNo 订单号
|
* @param paymentId 支付ID
|
||||||
* @param payType 支付渠道
|
* @param payType 支付渠道
|
||||||
*/
|
*/
|
||||||
void paySucceeded(@Param(value = "orderNo") String orderNo, @Param(value = "payType") int payType);
|
void paySucceeded(@Param(value = "paymentId") String paymentId, @Param(value = "payType") int payType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付成功
|
* 支付成功
|
||||||
*
|
*
|
||||||
* @param orderNo 订单号
|
* @param orderMasterCode 主订单号
|
||||||
* @param payStatus 支付渠道
|
* @param payStatus 支付渠道
|
||||||
*/
|
*/
|
||||||
void updateOrderStatus(@Param(value = "orderNo") String orderNo, @Param(value = "payStatus") int payStatus);
|
void updateOrderStatus(@Param(value = "orderMasterCode") String orderMasterCode, @Param(value = "payStatus") int payStatus);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -46,10 +46,10 @@ public interface FinancialMasterService {
|
||||||
/**
|
/**
|
||||||
* 支付成功
|
* 支付成功
|
||||||
*
|
*
|
||||||
* @param orderNo 订单号
|
* @param paymentId 支付ID
|
||||||
* @param payChannel 支付渠道
|
* @param payChannel 支付渠道
|
||||||
*/
|
*/
|
||||||
void paySucceeded(String orderNo, String payChannel);
|
void paySucceeded(String paymentId, String payChannel);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建主财务单CODE
|
* 创建主财务单CODE
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,6 @@ import com.ghy.payment.domain.FinancialMaster;
|
||||||
import com.ghy.payment.mapper.FinancialMasterMapper;
|
import com.ghy.payment.mapper.FinancialMasterMapper;
|
||||||
import com.ghy.payment.mapper.PaymentMapper;
|
import com.ghy.payment.mapper.PaymentMapper;
|
||||||
import com.ghy.payment.service.FinancialMasterService;
|
import com.ghy.payment.service.FinancialMasterService;
|
||||||
import com.huifu.adapay.model.Payment;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -21,8 +19,6 @@ import java.time.format.DateTimeFormatterBuilder;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
import static com.ghy.common.adapay.PayChannel.ALIPAY;
|
|
||||||
import static com.ghy.common.adapay.PayChannel.WX;
|
|
||||||
import static java.time.temporal.ChronoField.*;
|
import static java.time.temporal.ChronoField.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -74,16 +70,17 @@ public class FinancialMasterServiceImpl implements FinancialMasterService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void paySucceeded(String orderNo, String payChannel) {
|
public void paySucceeded(String paymentId, String payChannel) {
|
||||||
|
int payType;
|
||||||
try {
|
try {
|
||||||
if(orderNo.contains("_")){
|
payType = PayTypeEnum.valueOf(payChannel.toUpperCase()).getCode();
|
||||||
orderNo = orderNo.split("_")[0];
|
|
||||||
}
|
|
||||||
financialMasterMapper.paySucceeded(orderNo, PayTypeEnum.valueOf(payChannel.toUpperCase()).getCode());
|
|
||||||
financialMasterMapper.updateOrderStatus(orderNo, PayStatus.PAID.getCode());
|
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
logger.warn("OrderNo[{}] Unknown payChannel [{}]!", orderNo, payChannel);
|
payType = -1;
|
||||||
|
logger.error("paymentId[{}] Unknown payChannel [{}]!", paymentId, payChannel);
|
||||||
}
|
}
|
||||||
|
FinancialMaster financialMaster = financialMasterMapper.selectByPaymentId(paymentId);
|
||||||
|
financialMasterMapper.updateOrderStatus(financialMaster.getOrderMasterCode(), PayStatus.PAID.getCode());
|
||||||
|
financialMasterMapper.paySucceeded(paymentId, payType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,9 @@ import com.ghy.payment.service.FinancialMasterService;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.Assert;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.HashSet;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付回调
|
* 支付回调
|
||||||
|
|
@ -27,36 +26,28 @@ public class PayCallbackService implements CallBackService {
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(PayCallbackService.class);
|
private static final Logger logger = LoggerFactory.getLogger(PayCallbackService.class);
|
||||||
|
|
||||||
// 用HashSet检索效率高
|
|
||||||
private final static HashSet<String> orderNoSet = new HashSet<>(1024);
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
FinancialMasterService financialMasterService;
|
FinancialMasterService financialMasterService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCallback(Event event) {
|
public void onCallback(Event event) {
|
||||||
logger.debug("pay callback is {}", event);
|
logger.info("支付回调: {}", event);
|
||||||
String data = event.getData();
|
String data = event.getData();
|
||||||
PayCallback payment = JSON.parseObject(data, PayCallback.class);
|
PayCallback payment = JSON.parseObject(data, PayCallback.class);
|
||||||
Assert.hasText(payment.getOrderNo(), "orderNo is blank !!!");
|
PaymentDTO dto = financialMasterService.selectPaymentById(payment.getId());
|
||||||
// 校验是否是本系统发出去的回调请求
|
// 校验是否是本系统发出去的支付请求
|
||||||
boolean ours = orderNoSet.remove(payment.getOrderNo());
|
if (dto != null) {
|
||||||
if (!ours) {
|
|
||||||
//如果内存里没有 就从数据库里找这条记录
|
|
||||||
PaymentDTO dto = financialMasterService.selectPaymentById(payment.getId());
|
|
||||||
ours = dto != null;
|
|
||||||
}
|
|
||||||
if (ours) {
|
|
||||||
// 更新交易记录
|
// 更新交易记录
|
||||||
PaymentDTO param = new PaymentDTO();
|
PaymentDTO param = new PaymentDTO();
|
||||||
param.setId(payment.getId());
|
param.setId(payment.getId());
|
||||||
|
param.setFeeAmt(payment.getFeeAmt());
|
||||||
param.setStatus(payment.getStatus());
|
param.setStatus(payment.getStatus());
|
||||||
param.setPayTime(payment.getPayTime());
|
param.setPayTime(LocalDateTime.now());
|
||||||
financialMasterService.updatePayment(param);
|
financialMasterService.updatePayment(param);
|
||||||
|
|
||||||
if (AdapayStatusEnum.succeeded.code.equals(payment.getStatus())) {
|
if (AdapayStatusEnum.succeeded.code.equals(payment.getStatus())) {
|
||||||
// 修改主财务单状态
|
// 更新主财务单状态
|
||||||
financialMasterService.paySucceeded(payment.getOrderNo(), payment.getPayChannel());
|
financialMasterService.paySucceeded(payment.getId(), payment.getPayChannel());
|
||||||
} else {
|
} else {
|
||||||
logger.warn("支付失败 : {}", payment);
|
logger.warn("支付失败 : {}", payment);
|
||||||
}
|
}
|
||||||
|
|
@ -67,21 +58,20 @@ public class PayCallbackService implements CallBackService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(JSONObject response) {
|
public void onResponse(JSONObject response) {
|
||||||
|
logger.info("发起支付 Response: {}", response.toJSONString());
|
||||||
// 保存一条支付记录
|
// 保存一条支付记录
|
||||||
PaymentDTO payment = response.toJavaObject(PaymentDTO.class);
|
PaymentDTO payment = response.toJavaObject(PaymentDTO.class);
|
||||||
payment.setStatus("pending");
|
String status = payment.getStatus();
|
||||||
financialMasterService.insertPayment(payment);
|
financialMasterService.insertPayment(payment);
|
||||||
|
|
||||||
if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) {
|
if (AdapayStatusEnum.succeeded.code.equals(status)) {
|
||||||
FinancialMaster update = new FinancialMaster();
|
FinancialMaster update = new FinancialMaster();
|
||||||
update.setOrderMasterCode(response.getString("order_no"));
|
update.setOrderMasterCode(payment.getOrderNo().split("_")[0]);
|
||||||
update.setPaymentId(response.getString("id"));
|
update.setPaymentId(payment.getId());
|
||||||
financialMasterService.updateFinancialMaster(update);
|
financialMasterService.updateFinancialMaster(update);
|
||||||
} else {
|
} else {
|
||||||
logger.warn("请求支付失败 : {}", response.toJSONString());
|
logger.warn("发起支付失败 : {}", response.toJSONString());
|
||||||
}
|
}
|
||||||
// 将记录保存到临时会话中
|
|
||||||
orderNoSet.add(response.getString("order_no"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public class PayReverseCallbackService implements CallBackService {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(JSONObject response) {
|
public void onResponse(JSONObject response) {
|
||||||
logger.debug("撤销支付 Response: {}", response.toString());
|
logger.debug("撤销支付 Response: {}", response.toString());
|
||||||
if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) {
|
if (AdapayStatusEnum.pending.code.equals(response.getString("status"))) {
|
||||||
String reverseId = response.getString("id");
|
String reverseId = response.getString("id");
|
||||||
String paymentId = response.getString("payment_id");
|
String paymentId = response.getString("payment_id");
|
||||||
String reverseAmt = response.getString("reverse_amt");
|
String reverseAmt = response.getString("reverse_amt");
|
||||||
|
|
|
||||||
|
|
@ -101,12 +101,12 @@
|
||||||
pay_type = #{payType},
|
pay_type = #{payType},
|
||||||
pay_time = SYSDATE(),
|
pay_time = SYSDATE(),
|
||||||
update_time = SYSDATE()
|
update_time = SYSDATE()
|
||||||
WHERE order_master_code = #{orderNo}
|
WHERE payment_id = #{paymentId}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<update id="updateOrderStatus">
|
<update id="updateOrderStatus">
|
||||||
UPDATE order_master SET pay_status = #{payStatus} , pay_time = SYSDATE(), update_time = SYSDATE()
|
UPDATE order_master SET pay_status = #{payStatus} , pay_time = SYSDATE(), update_time = SYSDATE()
|
||||||
WHERE code = #{orderNo}
|
WHERE code = #{orderMasterCode}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<insert id="insertFinancialMaster" parameterType="com.ghy.payment.domain.FinancialMaster" useGeneratedKeys="true" keyProperty="id">
|
<insert id="insertFinancialMaster" parameterType="com.ghy.payment.domain.FinancialMaster" useGeneratedKeys="true" keyProperty="id">
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@
|
||||||
UPDATE adapay_pay_log
|
UPDATE adapay_pay_log
|
||||||
<set>
|
<set>
|
||||||
<if test="status != null and status != ''">status = #{status},</if>
|
<if test="status != null and status != ''">status = #{status},</if>
|
||||||
<if test="payTime != null and payTime != ''">pay_time = #{payTime},</if>
|
<if test="payTime != null">pay_time = #{payTime},</if>
|
||||||
update_time = SYSDATE()
|
update_time = SYSDATE()
|
||||||
</set>
|
</set>
|
||||||
WHERE id = #{id}
|
WHERE id = #{id}
|
||||||
|
|
|
||||||
2
pom.xml
2
pom.xml
|
|
@ -40,6 +40,8 @@
|
||||||
<Adapay.version>1.2.10</Adapay.version>
|
<Adapay.version>1.2.10</Adapay.version>
|
||||||
<commons.codec.version>1.10</commons.codec.version>
|
<commons.codec.version>1.10</commons.codec.version>
|
||||||
<httpcomponents.version>4.5.13</httpcomponents.version>
|
<httpcomponents.version>4.5.13</httpcomponents.version>
|
||||||
|
<!-- 打包时跳过单元测试 -->
|
||||||
|
<skipTests>true</skipTests>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<!-- 依赖声明 -->
|
<!-- 依赖声明 -->
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue