|
@@ -3,10 +3,11 @@ package com.caimei.modules.order.util;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.caimei.modules.order.constant.Constant;
|
|
|
-import com.caimei.modules.order.dao.NewOrderDao;
|
|
|
-import com.caimei.modules.order.dao.NewShopOrderDao;
|
|
|
-import com.caimei.modules.order.dao.PayShopDao;
|
|
|
+import com.caimei.modules.order.dao.*;
|
|
|
import com.caimei.modules.order.entity.*;
|
|
|
+import com.caimei.modules.order.service.CmReturnedPurchaseService;
|
|
|
+import com.caimei.modules.order.service.impl.CmReturnedPurchaseServiceImpl;
|
|
|
+import com.caimei.utils.AppUtils;
|
|
|
import com.caimei.utils.Disguiser;
|
|
|
import com.caimei.utils.MathUtil;
|
|
|
import com.caimei.utils.RedisService;
|
|
@@ -15,6 +16,7 @@ import com.caimei.utils.payUtil.RSA;
|
|
|
import com.caimei.utils.payUtil.SettlePostFormUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import okhttp3.*;
|
|
|
+import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
@@ -26,7 +28,7 @@ import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
-
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -36,11 +38,10 @@ import java.util.concurrent.atomic.AtomicReference;
|
|
|
@Component
|
|
|
public class OrderUtils {
|
|
|
|
|
|
- public static OkHttpClient client = new OkHttpClient.Builder()
|
|
|
- .connectTimeout(3, TimeUnit.SECONDS)
|
|
|
- .readTimeout(20, TimeUnit.SECONDS)
|
|
|
- .build();
|
|
|
-
|
|
|
+ @Resource
|
|
|
+ private OrderPayUtils orderPayUtil;
|
|
|
+ @Resource
|
|
|
+ private OrderUserInfoDao orderUserInfoDao;
|
|
|
@Resource
|
|
|
private NewOrderDao newOrderDao;
|
|
|
@Resource
|
|
@@ -49,6 +50,11 @@ public class OrderUtils {
|
|
|
private PayShopDao payShopDao;
|
|
|
@Resource
|
|
|
private NewShopOrderDao shopOrderDao;
|
|
|
+ @Resource
|
|
|
+ private CmReturnedPurchaseService cmReturnedPurchaseService;
|
|
|
+ @Resource
|
|
|
+ private CmDiscernReceiptDao receiptDao;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 计算子订单应付
|
|
@@ -61,11 +67,13 @@ public class OrderUtils {
|
|
|
AtomicReference<BigDecimal> organizeFee = new AtomicReference<>();
|
|
|
AtomicReference<BigDecimal> shopFee = new AtomicReference<>();
|
|
|
AtomicReference<BigDecimal> totalAmount = new AtomicReference<>();
|
|
|
+ shopOrder.setNewOrderProducts(products);
|
|
|
products.forEach(p -> {
|
|
|
// 商品总价 * 供应商成本比例 - 手续费 = 应付供应商
|
|
|
shopFee.set(MathUtil.add(MathUtil.mul(p.getTotalAmount(), p.getShopPercent(), 2), shopFee.get()));
|
|
|
// 商品总价 * 组织佣金比例 = 应付组织
|
|
|
organizeFee.set(MathUtil.add(MathUtil.mul(p.getTotalAmount(), p.getOrganizePercent(), 2), organizeFee.get()));
|
|
|
+ // 商品总价
|
|
|
totalAmount.set(MathUtil.add(p.getTotalAmount(), totalAmount.get()));
|
|
|
});
|
|
|
// 子订单总额 - 付供应商成本 - 付组织 = 应付采美
|
|
@@ -108,16 +116,28 @@ public class OrderUtils {
|
|
|
});
|
|
|
// 应付供应商
|
|
|
Double v = MathUtil.sub(shopFee.get(), totalCharge.get()).doubleValue();
|
|
|
+ // 线下已付采美
|
|
|
Double paidCm = shopOrder.getPayCmAmount();
|
|
|
+ // 线下已付供应商
|
|
|
Double paidShop = shopOrder.getPayedShopAmount();
|
|
|
+ // 线下由组织代收款,已收金额减已付采美和供应商则为已付组织
|
|
|
+ Double paidOrganize = MathUtil.sub(receiptTotal.get(), (MathUtil.add(paidCm, paidShop))).doubleValue();
|
|
|
if (onlineFlag.get()) {
|
|
|
- // 线上计算已付采美
|
|
|
+ // 线上已付采美
|
|
|
paidCm = payShopDao.findOnlinePayCm(shopOrder.getShopOrderId(), 3);
|
|
|
- // 线上计算已付供应商
|
|
|
- paidShop = payShopDao.findOnlinePayCm(shopOrder.getShopOrderId(), 5);
|
|
|
+ // 线上已付供应商
|
|
|
+ paidShop = payShopDao.findOnlinePayCm(shopOrder.getShopOrderId(), 1);
|
|
|
+ // 线上已付组织
|
|
|
+ paidOrganize = payShopDao.findOnlinePayCm(shopOrder.getShopOrderId(), 5);
|
|
|
shopOrder.setPayCmAmount(paidCm);
|
|
|
shopOrder.setPayedShopAmount(paidShop);
|
|
|
}
|
|
|
+ // 待付组织 = 应付 - 已付
|
|
|
+ Double wait = MathUtil.sub(organizeFee.get(), paidOrganize).doubleValue();
|
|
|
+
|
|
|
+ shopOrder.setWaitPayOrganize(wait);
|
|
|
+ shopOrder.setShouldPayOrganize(organizeFee.get().doubleValue());
|
|
|
+ shopOrder.setPaidOrganize(paidOrganize);
|
|
|
shopOrder.setBrokerage(organizeFee.get().doubleValue());
|
|
|
shopOrder.setWaitPayCmAmount(MathUtil.sub(cmFee, paidCm).doubleValue());
|
|
|
shopOrder.setWaitPayShop(MathUtil.sub(v, paidShop).doubleValue());
|
|
@@ -204,13 +224,11 @@ public class OrderUtils {
|
|
|
}
|
|
|
|
|
|
|
|
|
- public List<NewOrder> setOrderListValue(List<NewOrder> orderList) {
|
|
|
- orderList.forEach(o -> {
|
|
|
- List<NewShopOrder> shopOrders = shopOrderDao.findListByOrderId(o.getOrderId());
|
|
|
- shopOrders.forEach(this::getShouldPay);
|
|
|
- o.setNewShopOrders(shopOrders);
|
|
|
- });
|
|
|
- return orderList;
|
|
|
+ public NewOrder setOrderValue(NewOrder order) {
|
|
|
+ List<NewShopOrder> shopOrders = shopOrderDao.findListByOrderId(order.getOrderId());
|
|
|
+ shopOrders.forEach(this::getShouldPay);
|
|
|
+ order.setNewShopOrders(shopOrders);
|
|
|
+ return order;
|
|
|
}
|
|
|
|
|
|
public void splitAccount(List<AccountPayOrder.AccountPayOrderExt.SplitBillRule> splitBillRules, String orderRequestNo,
|
|
@@ -252,9 +270,9 @@ public class OrderUtils {
|
|
|
.append(accountPayOrder.getP6_ext()).append(Constant.SPLIT)
|
|
|
.append(Constant.XUNI);
|
|
|
String sign = Disguiser.disguiseMD5(builder.toString().trim());
|
|
|
- Map<String, String> bean = convertBean(accountPayOrder);
|
|
|
+ Map<String, String> bean = orderPayUtil.convertBean(accountPayOrder);
|
|
|
log.info("--------------------> 发送分账参数: " + bean);
|
|
|
- Map<String, String> map = postForm(bean, Constant.FZ, sign, Map.class);
|
|
|
+ Map<String, String> map = orderPayUtil.postForm(bean, Constant.FZ, sign, Map.class);
|
|
|
log.info("----------------分账返回数据: " + map.toString());
|
|
|
if (map != null) {
|
|
|
String code = map.get("rt5_retCode");
|
|
@@ -279,68 +297,58 @@ public class OrderUtils {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public Map<String, String> convertBean(Object bean) {
|
|
|
- Class clazz = bean.getClass();
|
|
|
- Field[] fields = clazz.getDeclaredFields();
|
|
|
- for (Field f : fields) {
|
|
|
- f.setAccessible(true);
|
|
|
- }
|
|
|
- try {
|
|
|
- Map<String, String> retMap = new LinkedHashMap<>();
|
|
|
- for (Field f : fields) {
|
|
|
- String key = f.toString().substring(f.toString().lastIndexOf(".") + 1);
|
|
|
- Object value = f.get(bean);
|
|
|
- if (value == null) {
|
|
|
- value = "";
|
|
|
- }
|
|
|
- retMap.put(key, (String) value);
|
|
|
+ /**
|
|
|
+ * 设置收货人信息
|
|
|
+ *
|
|
|
+ * @param newOrder
|
|
|
+ */
|
|
|
+ public void setReceiverVal(NewOrder newOrder) {
|
|
|
+ OrderUserInfo byOrderId = orderUserInfoDao.findByOrderId(newOrder.getOrderId());
|
|
|
+ newOrder.setClubName(byOrderId.getName());
|
|
|
+ newOrder.setAddress(byOrderId.getAddress());
|
|
|
+ newOrder.setReceiver(byOrderId.getShouHuoRen());
|
|
|
+ newOrder.setMobile(byOrderId.getMobile());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置退款金额
|
|
|
+ *
|
|
|
+ * @param newOrder
|
|
|
+ */
|
|
|
+ public void setRefundVal(NewOrder newOrder) {
|
|
|
+ CmReturnedPurchase cmReturnedPurchase = new CmReturnedPurchase();
|
|
|
+ cmReturnedPurchase.setOrderId(newOrder.getOrderId());
|
|
|
+ List<CmReturnedPurchase> dataList = cmReturnedPurchaseService.getReturnedPurchaseList(cmReturnedPurchase);
|
|
|
+ //退款总额(给买家)
|
|
|
+ Double refundFee = 0D;
|
|
|
+ for (CmReturnedPurchase bean : dataList) {
|
|
|
+ if (!"3".equals(bean.getStatus())) {
|
|
|
+ refundFee += bean.getRefundFee();
|
|
|
}
|
|
|
- return retMap;
|
|
|
- } catch (Exception e) {
|
|
|
- log.info("分账", e);
|
|
|
- throw new IllegalStateException("分账异常", e);
|
|
|
}
|
|
|
+ newOrder.setRefundFee(refundFee);
|
|
|
}
|
|
|
|
|
|
- public <T> T postForm(Map<String, String> params, String url, String sign, Class<T> clazz) {
|
|
|
- FormBody.Builder builder = new FormBody.Builder();
|
|
|
- for (Map.Entry<String, String> entry : params.entrySet()) {
|
|
|
- builder.add(entry.getKey(), entry.getValue());
|
|
|
+ /**
|
|
|
+ * 设置分账记录
|
|
|
+ *
|
|
|
+ * @param newOrder
|
|
|
+ */
|
|
|
+ public List<NewShopOrder> getSplitRecord(NewOrder newOrder) {
|
|
|
+ List<NewShopOrder> shopOrders = payShopDao.findSplitRecord(newOrder.getOrderId());
|
|
|
+ if (null != shopOrders && shopOrders.size() > 0) {
|
|
|
+ shopOrders.forEach(this::getShouldPay);
|
|
|
}
|
|
|
- builder.add("sign", sign);
|
|
|
-
|
|
|
- Request request = new Request.Builder() // okHttp post
|
|
|
- .url(url)
|
|
|
- .post(builder.build())
|
|
|
- .build();
|
|
|
+ return shopOrders;
|
|
|
+ }
|
|
|
|
|
|
- Response response = null;
|
|
|
- try {
|
|
|
- response = client.newCall(request).execute();
|
|
|
- } catch (IOException e) {
|
|
|
- throw new IllegalStateException("请求出错", e);
|
|
|
- }
|
|
|
- if (!response.isSuccessful()) {
|
|
|
- try {
|
|
|
- log.info(response.body().string());
|
|
|
- } catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- throw new RuntimeException("请求失败了: http response code: " + response.code());
|
|
|
- }
|
|
|
+ public List<ReceiptVo> getReceiptRecord(NewOrder newOrder) {
|
|
|
+ ReceiptVo receiptVo = new ReceiptVo();
|
|
|
+ receiptVo.setOrderId(newOrder.getOrderId().toString());
|
|
|
+ return receiptDao.findReceiptList(receiptVo);
|
|
|
+ }
|
|
|
|
|
|
- ResponseBody body = response.body();
|
|
|
- String content = null;
|
|
|
- try {
|
|
|
- content = body.string();
|
|
|
- } catch (IOException e) {
|
|
|
- throw new IllegalStateException("IO异常", e);
|
|
|
- }
|
|
|
- JSONObject res = JSON.parseObject(content);
|
|
|
- if (!res.getBooleanValue("rt4_success")) {
|
|
|
- log.error("error: " + res.getString("rt6_retMsg"));
|
|
|
- }
|
|
|
- /** rt4_success 为 true,需验签 **/
|
|
|
- return res.toJavaObject(clazz);
|
|
|
+ public List<OrderPayShopRecord> getPayRecords(NewOrder newOrder) {
|
|
|
+ return payShopDao.findPayShopRecordsByOrder(newOrder.getOrderId());
|
|
|
}
|
|
|
}
|