|
@@ -214,13 +214,13 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
log.info("【订单支付,线上/线下余额抵扣】>>>>>>>>>>>>>>>>>>>>>>>>>>新增用户余额收支记录(insert[cm_user_balance_record])orderId:" + orderId);
|
|
|
log.info("************************订单支付完成消息推送*********************");
|
|
|
//判断是否是二手订单和返佣订单
|
|
|
- if (0 == orderClubMapper.getsecondHandOrderFlag(orderId) && 0 == orderClubMapper.getrebateFlag(orderId) && !"6060".equals(orderClubMapper.getProductOrder(orderId))){
|
|
|
+ if (0 == orderClubMapper.getsecondHandOrderFlag(orderId) && 0 == orderClubMapper.getrebateFlag(orderId) && !"6060".equals(orderClubMapper.getProductOrder(orderId))) {
|
|
|
|
|
|
try {
|
|
|
String accessToken = weChatService.getAccessToken();
|
|
|
List<String> openidList = payOrderMapper.getOpenidListByPermission(orderClubMapper.getOpenidunionId(order.getUserId()));
|
|
|
openidList.removeIf(Objects::isNull);
|
|
|
- String name = StringUtils.strip(orderClubMapper.getOrderIds(orderId).toString().substring(0,11), "[]");
|
|
|
+ String name = StringUtils.strip(orderClubMapper.getOrderIds(orderId).toString().substring(0, 11), "[]");
|
|
|
String associateTitle = "订单支付成功!";
|
|
|
Double money = orderClubMapper.getpayTotalFee(orderId);
|
|
|
String orderno = order.getOrderNo();
|
|
@@ -236,7 +236,7 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
log.error("【订单发货通知】获取微信公众号access_token异常!", e);
|
|
|
}
|
|
|
}
|
|
|
- log.info("支付成功"+order.getUserId());
|
|
|
+ log.info("支付成功" + order.getUserId());
|
|
|
}
|
|
|
Map<String, Object> map = new HashMap<>(2);
|
|
|
map.put("order", order);
|
|
@@ -318,7 +318,7 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
}
|
|
|
totalCostPrice.set(MathUtil.add(costPrice, totalCostPrice.get()).doubleValue());
|
|
|
});
|
|
|
-
|
|
|
+ Integer onlinePay = order.getOnlinePayFlag();
|
|
|
// 返回数据
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
map.put("userName", userName);
|
|
@@ -326,17 +326,14 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
map.put("discernReceipt", discernReceiptList);
|
|
|
map.put("orderProductList", orderProductList);
|
|
|
//能否线上判断付供应商是否大于订单金额
|
|
|
-// orderCommonService.getDiscernReceiptAndSetOrder(order);
|
|
|
-// boolean payButton = order.isPayButton();
|
|
|
-
|
|
|
- //todo 线上支付优化,订单商品中有没设置分帐帐号的无法线上
|
|
|
+ if (order.getBalancePayFee() > 0 || totalCostPrice.get() > order.getPayTotalFee()) {
|
|
|
+ onlinePay = 1;
|
|
|
+ }
|
|
|
Integer num = orderCommonMapper.findSplitCode(orderId);
|
|
|
if (num > 0) {
|
|
|
- map.put("onlinePay", 2);
|
|
|
- }
|
|
|
- if (0 == num) {
|
|
|
- map.put("onlinePay", 1);
|
|
|
+ onlinePay = 1;
|
|
|
}
|
|
|
+ map.put("onlinePay", onlinePay);
|
|
|
return ResponseJson.success(map);
|
|
|
}
|
|
|
|
|
@@ -638,6 +635,89 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
return toPayOrder(payParam, headers);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public ResponseJson<Map<String, Object>> getCheckoutShopOrders(Integer shopOrderId) {
|
|
|
+ // 订单信息
|
|
|
+ ShopOrderVo shop = orderCommonMapper.getShopOrderByOrderId(shopOrderId);
|
|
|
+ OrderVo order = orderCommonMapper.getOrderByOrderId(shop.getOrderId());
|
|
|
+ Integer onlinePay = order.getOnlinePayFlag();
|
|
|
+ if (null == shop || null == order) {
|
|
|
+ return ResponseJson.error("订单不存在", null);
|
|
|
+ }
|
|
|
+ // 机构信息
|
|
|
+ String userName = baseMapper.getUserNameByUserId(order.getUserId());
|
|
|
+ // 支付记录
|
|
|
+ List<DiscernReceiptVo> discernReceiptList = orderCommonMapper.getShopOrderDiscernReceipt(shopOrderId);
|
|
|
+ if (!discernReceiptList.isEmpty()) {
|
|
|
+ AtomicDouble receiptAmount = new AtomicDouble(0d);
|
|
|
+ AtomicBoolean offlineFlag = new AtomicBoolean(false);
|
|
|
+ discernReceiptList.forEach(discernReceipt -> {
|
|
|
+ if (2 == discernReceipt.getPayWay()) {
|
|
|
+ offlineFlag.set(true);
|
|
|
+ }
|
|
|
+ if (3 == discernReceipt.getReceiptStatus()) {
|
|
|
+ receiptAmount.set(MathUtil.add(receiptAmount.get(), discernReceipt.getAssociateAmount()).doubleValue());
|
|
|
+ }
|
|
|
+ if (null != discernReceipt.getPayType()) {
|
|
|
+ discernReceipt.setPayTypeStr(ReceivablesType.getReceivablesType(discernReceipt.getPayType()));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (offlineFlag.get()) {
|
|
|
+ return ResponseJson.error("已经线下支付过,只能线下支付!", null);
|
|
|
+ }
|
|
|
+ shop.setReceiptAmount(receiptAmount.get());
|
|
|
+ }
|
|
|
+ // 总成本
|
|
|
+ AtomicDouble totalCostPrice = new AtomicDouble(0d);
|
|
|
+ // 商品数据
|
|
|
+ List<OrderProductVo> orderProductList = orderCommonMapper.getOrderProductByOrderId(shop.getOrderId());
|
|
|
+ // 子订单商品数据
|
|
|
+ List<OrderProductVo> orderProductByShopOrderId = orderCommonMapper.getOrderProductByShopOrderId(shopOrderId);
|
|
|
+ //过滤运费商品
|
|
|
+ orderProductList.removeIf(product -> product.getShopId() == 998);
|
|
|
+ // 是否有商品发票属性的限制
|
|
|
+ orderProductList.forEach(orderProduct -> {
|
|
|
+ // 商品含税未知 or 订单选择开企业发票,商品不含税不能开票
|
|
|
+ boolean productTaxFlag = (null == orderProduct.getIncludedTax()) || (null == orderProduct.getInvoiceType()) || (Integer.valueOf(2).equals(orderProduct.getIncludedTax()))
|
|
|
+ || (Integer.valueOf(2).equals(order.getInvoiceFlag()) && (Integer.valueOf(0).equals(orderProduct.getIncludedTax()) && Integer.valueOf(3).equals(orderProduct.getInvoiceType())));
|
|
|
+ if (productTaxFlag) {
|
|
|
+ order.setInvoiceStatus(true);
|
|
|
+ }
|
|
|
+ //当应付金额小于订单总成本时,不能走线上支付,总成本=商品成本 + 供应商运费 + 供应商税费
|
|
|
+ double costPrice = MathUtil.mul(orderProduct.getCostPrice(), orderProduct.getNum()).doubleValue();
|
|
|
+ if (Integer.valueOf(0).equals(orderProduct.getIncludedTax()) && !Integer.valueOf(3).equals(orderProduct.getInvoiceType())) {
|
|
|
+ //应付总税费
|
|
|
+ Double payableTax = MathUtil.mul(orderProduct.getSingleShouldPayTotalTax(), orderProduct.getNum()).doubleValue();
|
|
|
+ //成本+税费
|
|
|
+ costPrice = MathUtil.add(costPrice, payableTax).doubleValue();
|
|
|
+ }
|
|
|
+ List<ShopOrderVo> shopOrderList = orderCommonMapper.getShopOrderListByOrderId(order.getOrderId());
|
|
|
+ for (ShopOrderVo shopOrder : shopOrderList) {
|
|
|
+ // 付供应商运费
|
|
|
+ Double shopPostFee = shopOrder.getShopPostFee();
|
|
|
+ costPrice = MathUtil.add(costPrice, shopPostFee).doubleValue();
|
|
|
+ }
|
|
|
+ totalCostPrice.set(MathUtil.add(costPrice, totalCostPrice.get()).doubleValue());
|
|
|
+ });
|
|
|
+ //. 后台线上支付开关2.商品是否有分账账号 3. 订单是否进行过线下支付 4.是否使用了余额抵扣
|
|
|
+ // 5. 子订单支付金额减去手续费后是否不小于子订单成本 。 6. 各个子订单分摊后的最终子订单金额之和是否等于主订单应付金额。这6个要求的判断优先级同以上顺序。
|
|
|
+ Integer num = orderCommonMapper.findSplitCode(shop.getOrderId());
|
|
|
+ if (num > 0) {
|
|
|
+ onlinePay = 1;
|
|
|
+ }
|
|
|
+ if (order.getBalancePayFee() > 0 || totalCostPrice.get() > order.getPayTotalFee()) {
|
|
|
+ onlinePay = 1;
|
|
|
+ }
|
|
|
+ // 返回数据
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("userName", userName);
|
|
|
+ map.put("shopOrder", shop);
|
|
|
+ map.put("discernReceipt", discernReceiptList);
|
|
|
+ map.put("orderProductList", orderProductByShopOrderId);
|
|
|
+ map.put("onlinePay", onlinePay);
|
|
|
+ return ResponseJson.success(map);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 订单线上支付
|
|
|
*/
|
|
@@ -806,28 +886,28 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
log.info("【支付异步回调】>>>>>>>>>>>>>>订单(全部支付),修改订单状态:" + order.getStatus() + ",orderId:" + orderId);
|
|
|
log.info("************************订单支付完成消息推送*********************");
|
|
|
//判断是否是二手订单和返佣订单
|
|
|
- if (0 == orderClubMapper.getsecondHandOrderFlag(orderId) && 0 == orderClubMapper.getrebateFlag(orderId) && !orderClubMapper.getProductOrder(orderId).contains(6060)) {
|
|
|
- try {
|
|
|
- String accessToken = weChatService.getAccessToken();
|
|
|
- log.info(">>>>>>>>>>>>>>>>>"+order.getUserId()+">>>>>>>>>>>>>>"+orderClubMapper.getOpenidunionId(order.getUserId()));
|
|
|
- List<String> openidList = payOrderMapper.getOpenidListByPermission(orderClubMapper.getOpenidunionId(order.getUserId()));
|
|
|
- openidList.removeIf(Objects::isNull);
|
|
|
- String name = StringUtils.strip(orderClubMapper.getOrderIds(orderId).toString().substring(0,11), "[]");
|
|
|
- String associateTitle = "订单支付成功!";
|
|
|
- Double money = orderClubMapper.getpayTotalFee(orderId);
|
|
|
- String orderno = orderClubMapper.getOrderNo(orderId);
|
|
|
- String paytime = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date);
|
|
|
- String remarkText = "采美将尽快为您安排发货~";
|
|
|
- // 跳转到【小程序付款-选择支付方式页面】
|
|
|
- String pagePath = "pages/user/order/order-details?orderId=" + orderId;
|
|
|
- for (String openid : openidList) {
|
|
|
- // sendTemplateMsg(openid, 标题, 金额, 收款日期, 备注, 跳转链接)
|
|
|
- weChatService.sendTemplateMsgz(accessToken, openid, associateTitle, paytime, name, orderno, money, remarkText, pagePath);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("【订单发货通知】获取微信公众号access_token异常!", e);
|
|
|
+ if (0 == orderClubMapper.getsecondHandOrderFlag(orderId) && 0 == orderClubMapper.getrebateFlag(orderId) && !orderClubMapper.getProductOrder(orderId).contains(6060)) {
|
|
|
+ try {
|
|
|
+ String accessToken = weChatService.getAccessToken();
|
|
|
+ log.info(">>>>>>>>>>>>>>>>>" + order.getUserId() + ">>>>>>>>>>>>>>" + orderClubMapper.getOpenidunionId(order.getUserId()));
|
|
|
+ List<String> openidList = payOrderMapper.getOpenidListByPermission(orderClubMapper.getOpenidunionId(order.getUserId()));
|
|
|
+ openidList.removeIf(Objects::isNull);
|
|
|
+ String name = StringUtils.strip(orderClubMapper.getOrderIds(orderId).toString().substring(0, 11), "[]");
|
|
|
+ String associateTitle = "订单支付成功!";
|
|
|
+ Double money = orderClubMapper.getpayTotalFee(orderId);
|
|
|
+ String orderno = orderClubMapper.getOrderNo(orderId);
|
|
|
+ String paytime = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date);
|
|
|
+ String remarkText = "采美将尽快为您安排发货~";
|
|
|
+ // 跳转到【小程序付款-选择支付方式页面】
|
|
|
+ String pagePath = "pages/user/order/order-details?orderId=" + orderId;
|
|
|
+ for (String openid : openidList) {
|
|
|
+ // sendTemplateMsg(openid, 标题, 金额, 收款日期, 备注, 跳转链接)
|
|
|
+ weChatService.sendTemplateMsgz(accessToken, openid, associateTitle, paytime, name, orderno, money, remarkText, pagePath);
|
|
|
}
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("【订单发货通知】获取微信公众号access_token异常!", e);
|
|
|
}
|
|
|
+ }
|
|
|
log.info("支付成功2");
|
|
|
} else {
|
|
|
// 部分支付
|
|
@@ -1019,14 +1099,14 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
if (paySuccessCounter.equals(dbPayCounter)) {
|
|
|
return ResponseJson.error(-2, "支付失败", "付款次数异常");
|
|
|
} else if (dbPayCounter > paySuccessCounter) {
|
|
|
- if ( 1 == orderClubMapper.getReceiptStatus(orderId)) {
|
|
|
+ if (1 == orderClubMapper.getReceiptStatus(orderId)) {
|
|
|
if (0 == orderClubMapper.getsecondHandOrderFlag(orderId) && 0 == orderClubMapper.getrebateFlag(orderId)) {
|
|
|
try {
|
|
|
String accessToken = weChatService.getAccessToken();
|
|
|
- String unionid=orderClubMapper.getOpenidunionId(orderClubMapper.getUserId(orderId));
|
|
|
+ String unionid = orderClubMapper.getOpenidunionId(orderClubMapper.getUserId(orderId));
|
|
|
List<String> openidList = payOrderMapper.getOpenidListByPermission(unionid);
|
|
|
openidList.removeIf(Objects::isNull);
|
|
|
- String name = StringUtils.strip(orderClubMapper.getOrderIds(orderId).toString().substring(0,11), "[]");
|
|
|
+ String name = StringUtils.strip(orderClubMapper.getOrderIds(orderId).toString().substring(0, 11), "[]");
|
|
|
String associateTitle = "订单支付成功!";
|
|
|
Double money = orderClubMapper.getpayTotalFee(orderId);
|
|
|
String orderno = orderClubMapper.getOrderNo(orderId);
|
|
@@ -1203,7 +1283,6 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- *
|
|
|
* 分账详情
|
|
|
*/
|
|
|
private List<SplitAccountPo> setSplitAccountDetail(OrderVo order, PayParamBo payParam) {
|