123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668 |
- package com.caimei.modules.order.util;
- import com.alibaba.fastjson.JSON;
- import com.caimei.modules.order.constant.Constant;
- 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.NewOrderService;
- import com.caimei.utils.*;
- import com.caimei.utils.payUtil.MyBeanUtils;
- import com.caimei.utils.payUtil.RSA;
- import com.caimei.utils.payUtil.SettlePostFormUtil;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.stereotype.Component;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.math.BigDecimal;
- import java.text.SimpleDateFormat;
- import java.util.*;
- import java.util.concurrent.CountDownLatch;
- import java.util.concurrent.atomic.AtomicReference;
- import java.util.stream.Collectors;
- import static sun.management.snmp.jvminstr.JvmThreadInstanceEntryImpl.ThreadStateMap.Byte1.other;
- /**
- * @author zzj
- */
- @Slf4j
- @Component
- public class OrderUtils {
- @Resource
- private OrderPayUtils orderPayUtil;
- @Resource
- private OrderUserInfoDao orderUserInfoDao;
- @Resource
- private NewOrderDao newOrderDao;
- @Resource
- private RedisService redisService;
- @Resource
- private PayShopDao payShopDao;
- @Resource
- private NewShopOrderDao shopOrderDao;
- @Resource
- private CmReturnedPurchaseDao returnDao;
- @Resource
- private NewOrderProductDao newOrderProductDao;
- @Resource
- private CmDiscernReceiptDao receiptDao;
- @Resource
- private NewOrderService newOrderService;
- @Resource
- private CmDiscernReceiptDao cmDiscernReceiptDao;
- /**
- * 计算子订单应付
- *
- * @param shopOrder
- */
- public NewShopOrder getShouldPay(NewShopOrder shopOrder) {
- setShopOrderStatus(shopOrder);
- List<NewOrderProduct> products = payShopDao.findPayOrderProducts(shopOrder.getShopOrderId());
- shopOrder.setShopOrderNos(payShopDao.findShopOrderNos(shopOrder.getOrderId()));
- AtomicReference<BigDecimal> organizeFee = new AtomicReference<>();
- AtomicReference<BigDecimal> shopFee = new AtomicReference<>();
- AtomicReference<BigDecimal> totalAmount = new AtomicReference<>();
- products.forEach(p -> {
- // 商品总价 * 供应商成本比例 - 手续费 = 应付供应商
- shopFee.set(MathUtil.add(MathUtil.mul(p.getTotalAmount(), MathUtil.div(p.getShopPercent(), 100), 2), shopFee.get()));
- // 商品总价 * 组织佣金比例 = 应付组织
- organizeFee.set(MathUtil.add(MathUtil.mul(p.getTotalAmount(), MathUtil.div(p.getOrganizePercent(), 100), 2), organizeFee.get()));
- // 商品总价
- totalAmount.set(MathUtil.add(p.getTotalAmount(), totalAmount.get()));
- /**
- * 确认收货信息
- */
- if (NewOrderStatus.hasReceived(shopOrder.getShopStatus())) {
- Integer receivedNum = newOrderProductDao.getReceivedNum(p.getOrderProductId());
- p.setReceivedNum(receivedNum);
- }
- });
- shopOrder.setNewOrderProducts(products);
- // 子订单总额 - 付供应商成本 - 付组织 = 应付采美
- Double cmFee = MathUtil.sub(totalAmount.get(), MathUtil.add(shopFee.get(), organizeFee.get())).doubleValue();
- List<CmReceiptOrderRelation> relations = payShopDao.findOrderRelations(shopOrder.getOrderId());
- // 线上手续费
- AtomicReference<Double> totalCharge = new AtomicReference<>();
- // 子订单总收款
- AtomicReference<Double> receiptTotal = new AtomicReference<>();
- // 线上标记
- AtomicReference<Boolean> onlineFlag = new AtomicReference<Boolean>(false);
- relations.forEach(r -> {
- double charge = 0;
- // 线上手续费
- if (1 == r.getPayWay()) {
- onlineFlag.set(true);
- if (12 == r.getPayType()) {
- // 企业网银
- charge = 10;
- } else if (8 == r.getPayType() || 13 == r.getPayType() || 15 == r.getPayType()) {
- // 微信
- charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.0065, 2).doubleValue(), 0.01);
- } else if (29 == r.getPayType()) {
- // 快捷支付借记卡
- charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.003, 2).doubleValue(), 0.1);
- } else if (30 == r.getPayType()) {
- // 快捷支付贷记卡
- charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.006, 2).doubleValue(), 0.1);
- } else if (17 == r.getPayType()) {
- // 个人网银
- charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.002, 2).doubleValue(), 0.1);
- } else if (14 == r.getPayType()) {
- // 支付宝
- charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.0025, 2).doubleValue(), 0.01);
- }
- }
- totalCharge.set(MathUtil.add(totalCharge.get(), charge).doubleValue());
- receiptTotal.set(MathUtil.add(r.getAssociateAmount(), receiptTotal.get()).doubleValue());
- });
- // 应付供应商
- Double v = MathUtil.sub(shopFee.get(), totalCharge.get()).doubleValue();
- Double shopPostFee = 0d;
- if (!onlineFlag.get() && shopOrder.getShopPostFee() > 0) {
- shopPostFee = shopOrder.getShopPostFee();
- // 线下收付款,有供应商运费 付供应商 = 付供应商 + 供应商运费
- v = v + shopOrder.getShopPostFee();
- }
- // 线下已付采美
- Double paidCm = shopOrder.getPayCmAmount();
- // 线下已付供应商
- Double paidShop = shopOrder.getPayedShopAmount();
- // 线下由组织代收款,已收金额减已付采美和供应商则为已付组织
- Double paidOrganize = MathUtil.sub(receiptTotal.get(), (MathUtil.add(paidCm, paidShop))).doubleValue();
- Double waitSettleShop = 0d;
- Double waitSettleCm = 0d;
- Double waitSettleOrganize = 0d;
- Double settleShop = 0d;
- Double settleCm = 0d;
- Double settleOrganize = 0d;
- Double shouldSettleShop = 0d;
- Double shouldSettleCm = 0d;
- Double shouldSettleOrganize = 0d;
- if (onlineFlag.get()) {
- /** 减0.1%分账手续费
- * 最低手续费 0.01,计算金额与原金额相等时 - 0.01
- */
- Double splitCmFee = MathUtil.div(cmFee, 1.001, 2).doubleValue();
- if (cmFee.equals(splitCmFee)) {
- cmFee = cmFee - 0.01;
- } else {
- cmFee = splitCmFee;
- }
- Double splitShop = MathUtil.div(v, 1.001, 2).doubleValue();
- if (v.equals(splitShop)) {
- v = v - 0.01;
- } else {
- v = splitShop;
- }
- // 线上已付采美
- paidCm = payShopDao.findOnlinePayCm(shopOrder.getShopOrderId(), 3);
- // 线上已付供应商
- paidShop = payShopDao.findOnlinePayCm(shopOrder.getShopOrderId(), 1);
- // 线上已付组织
- paidOrganize = payShopDao.findOnlinePayCm(shopOrder.getShopOrderId(), 5);
- shopOrder.setPayCmAmount(paidCm);
- shopOrder.setPayedShopAmount(paidShop);
- // 未结供应商 = 应付 - 已结
- settleShop = payShopDao.findSettleSum(shopOrder.getShopOrderId(), 1);
- waitSettleShop = MathUtil.sub(v, settleShop).doubleValue();
- settleCm = payShopDao.findSettleSum(shopOrder.getShopOrderId(), 2);
- waitSettleCm = MathUtil.sub(cmFee, settleCm).doubleValue();
- settleOrganize = payShopDao.findSettleSum(shopOrder.getShopOrderId(), 3);
- waitSettleOrganize = MathUtil.sub(organizeFee.get(), settleOrganize).doubleValue();
- shouldSettleShop = v;
- shouldSettleCm = cmFee;
- shouldSettleOrganize = organizeFee.get().doubleValue();
- }
- shopOrder.setWaitSettleShop(waitSettleShop);
- shopOrder.setWaitSettleCm(waitSettleCm);
- shopOrder.setWaitSettleOrganize(waitSettleOrganize);
- shopOrder.setSettleShopAmount(settleShop);
- shopOrder.setSettleCmAmount(settleCm);
- shopOrder.setSettleOrganizeAmount(settleOrganize);
- shopOrder.setShouldSettleShop(shouldSettleShop);
- shopOrder.setShouldSettleOrganize(shouldSettleOrganize);
- shopOrder.setShouldSettleCm(shouldSettleCm);
- // 待付组织 = 应付 - 已付
- Double wait = MathUtil.sub(organizeFee.get(), paidOrganize).doubleValue();
- shopOrder.setWaitPayOrganize(wait);
- shopOrder.setShouldPayOrganize(organizeFee.get().doubleValue());
- shopOrder.setPaidOrganize(paidOrganize);
- shopOrder.setPayedShopAmount(paidShop);
- shopOrder.setPayCmAmount(paidCm);
- shopOrder.setBrokerage(organizeFee.get().doubleValue());
- shopOrder.setWaitPayCmAmount(MathUtil.sub(cmFee, paidCm).doubleValue());
- // 待付不加供应商运费
- shopOrder.setWaitPayShop(MathUtil.sub(v, MathUtil.add(paidShop, shopPostFee)).doubleValue());
- shopOrder.setShouldPayCmAmount(cmFee);
- shopOrder.setShouldPayShopAmount(v);
- shopOrder.setReceiptTotalFee(receiptTotal.get());
- return shopOrder;
- }
- /**
- * @param P2_orderId 结算合利宝订单Id
- * @param settleAmount 结算金额
- * @param P3_customerNumber 结算帐号
- * @param shopOrderId 子订单Id
- * @param settleFlag 结算类型
- * @throws Exception
- */
- @Transactional(readOnly = false, rollbackFor = Exception.class)
- public void settleOrder(String P2_orderId, Double settleAmount, String P3_customerNumber, Integer shopOrderId, Integer settleFlag) throws Exception {
- //子订单id,结算金额
- Map<String, String> sPara = new HashMap<String, String>();
- sPara.put("P1_bizType", "MerchantSettlement");
- sPara.put("P2_orderId", P2_orderId);
- sPara.put("P3_customerNumber", P3_customerNumber);
- sPara.put("P4_amount", settleAmount.toString());
- sPara.put("P5_summary", "订单结算");
- sPara.put("signType", "RSA");
- StringBuffer sb = new StringBuffer();
- sb.append(Constant.SPLIT).append("MerchantSettlement").append(Constant.SPLIT).append(P2_orderId).append(Constant.SPLIT)
- .append(P3_customerNumber).append(Constant.SPLIT).append(settleAmount).append(Constant.SPLIT).append("订单结算")
- .append(Constant.SPLIT).append("RSA");
- String sign = RSA.sign(sb.toString(), RSA.getPrivateKey(Constant.signKey_setttlement));
- sPara.put("sign", sign);
- log.info("发送结算参数-----------------------》" + sPara);
- SettleResult settleResult = SettlePostFormUtil.postForm(sPara, Constant.JS, sign, SettleResult.class);
- if (!"0000".equals(settleResult.getRt2_retCode())) {
- log.info("settleResult----------------->" + settleResult.toString());
- throw new Exception("结算失败!");
- } else {
- String assemblyRespOriSign = "";
- assemblyRespOriSign = MyBeanUtils.getSignedByPresetParameter(settleResult, SettleResult.NEED_SIGN_PARAMS);
- assemblyRespOriSign += Constant.JIESUAN;
- String checkSign = Disguiser.disguiseMD5(assemblyRespOriSign.trim());
- if (!checkSign.equals(settleResult.getSign())) {
- log.info("settleResult----------------->" + settleResult.toString());
- throw new Exception("结算验签失败!");
- } else {
- SettleRecord settleRecord = new SettleRecord();
- //存结算表,改子订单结算状态
- if (1 == settleFlag) {
- //成本结算
- settleRecord.setSettleType(settleFlag);
- settleRecord.setSettleAmount(settleAmount);
- settleRecord.setSplitCode(P3_customerNumber);
- settleRecord.setShopOrderId(shopOrderId);
- payShopDao.insertSettleRecord(settleRecord);
- // 修改cm_split_account settlestatus
- payShopDao.updateSettleStatus(shopOrderId, 1);
- //计算供应商成本,结算金额,修改结算状态
- Double shouldPayShopAmount = payShopDao.findShouldPayShopAmount(shopOrderId);
- Double settleSum = payShopDao.findSettleSum(shopOrderId, 1);
- if (shouldPayShopAmount > settleSum) {
- //成本>结算金额,部分结算
- payShopDao.updateShopOrderSettleStatus(shopOrderId, 2);
- } else {
- //成本=结算金额 全部结算
- payShopDao.updateShopOrderSettleStatus(shopOrderId, 3);
- }
- } else {
- // 佣金结算 3采美 5 联合丽格 6冷链非
- Integer newFlag = 0;
- if (3 == settleFlag) {
- newFlag = 2;
- } else if (5 == settleFlag) {
- newFlag = 3;
- } else if (6 == settleFlag) {
- newFlag = 4;
- }
- settleRecord.setSettleType(newFlag);
- settleRecord.setSettleAmount(settleAmount);
- settleRecord.setSplitCode(P3_customerNumber);
- settleRecord.setShopOrderId(shopOrderId);
- payShopDao.insertSettleRecord(settleRecord);
- // 最后佣金结算修改cm_split_account settlestatus
- payShopDao.updateSettleStatus(shopOrderId, settleFlag);
- }
- }
- }
- }
- public NewOrder setOrderPostInfo(NewOrder order) {
- NewShopOrder shopOrder = shopOrderDao.findColdChain(order.getOrderId());
- if (null != shopOrder) {
- order.setPostageInfo("2".equals(shopOrder.getShopPostFlag()) ?"到付": "0".equals(shopOrder.getShopPostFlag())?"包邮":"¥" + shopOrder.getShopPostFee());
- } else {
- /**
- * 没有运费订单
- */
- order.setPostageInfo("¥ 0.00");
- }
- if(null!=order.getNewShopOrders()){
- for (NewShopOrder newShopOrder : order.getNewShopOrders()) {
- BigDecimal add = MathUtil.add(newShopOrder.getReceiptAmount(),cmDiscernReceiptDao.findShoOrderIDReceipt(newShopOrder.getShopOrderId()));
- double v = add.doubleValue();
- newShopOrder.setReceiptAmount(v);
- BigDecimal sub = MathUtil.sub(
- // newShopOrder.getWaitPayShop()
- newShopOrder.getRealPay() != null ? newShopOrder.getRealPay() : newShopOrder.getNeedPayAmount()
- , newShopOrder.getReceiptAmount());
- newShopOrder.setRestAmount(sub.doubleValue());
- String shopPostFlag = newShopOrder.getShopPostFlag()!=null?newShopOrder.getShopPostFlag():"2";
- String PostageInfo = shopPostFlag.equals("2") ? "到付" : shopPostFlag.equals("0") ? "包邮" : "¥" + newShopOrder.getShopPostFee();
- //支付凭证
- List<Voucher> vouchers = newOrderService.findVoucher(newShopOrder.getShopOrderId());
- newShopOrder.setPostageInfo(PostageInfo);
- newShopOrder.setVouchers(vouchers);
- if ("1".equals( newShopOrder.getShopStatus() )) {
- if ( "1".equals(newShopOrder.getReceiptStatus()) && "1".equals( newShopOrder.getSendOutStatus())){
- newShopOrder.setShopStatus("11");
- } else if ( "1".equals( newShopOrder.getReceiptStatus()) && "2".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("12");
- } else if ( "1".equals( newShopOrder.getReceiptStatus()) && "3".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("13");
- } else if ( "2".equals( newShopOrder.getReceiptStatus()) && "1".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("21");
- } else if ( "2".equals( newShopOrder.getReceiptStatus()) && "2".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("22");
- } else if ( "2".equals( newShopOrder.getReceiptStatus()) && "3".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("23");
- } else if ( "3".equals( newShopOrder.getReceiptStatus()) && "1".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("31");
- } else if ( "3".equals( newShopOrder.getReceiptStatus()) && "2".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("32");
- } else if ( "3".equals( newShopOrder.getReceiptStatus()) && "3".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("33");
- }
- }
- }
- }
- return order;
- }
- public NewOrder setOrderValue(NewOrder order) {
- List<NewShopOrder> shopOrders = shopOrderDao.findListByOrderId(order.getOrderId());
- shopOrders.forEach(this::getShouldPay);
- order.setNewShopOrders(shopOrders);
- order.setAlreadyReceipt(shopOrders.get(0).getReceiptTotalFee());
- Double totalPayShop = shopOrders.stream().mapToDouble(NewShopOrder::getShouldPayShopAmount).sum();
- Double totalPayCm = shopOrders.stream().mapToDouble(NewShopOrder::getShouldPayCmAmount).sum();
- order.setPayableAmount(MathUtil.add(totalPayShop, totalPayCm).doubleValue());
- Double totalPaidShop = shopOrders.stream().mapToDouble(NewShopOrder::getPayedShopAmount).sum();
- Double totalPaidCm = shopOrders.stream().mapToDouble(NewShopOrder::getPayCmAmount).sum();
- order.setPaidAmount(MathUtil.add(totalPaidCm, totalPaidShop).doubleValue());
- setRefundVal(order);
- setOrderPostInfo(order);
- // 设置基础信息
- shopOrders.forEach(shopOrder -> {
- shopOrder.setReceiver(order.getReceiver());
- shopOrder.setMobile(order.getMobile());
- shopOrder.setAddress(order.getAddress());
- });
- return order;
- }
- public void splitAccount(List<AccountPayOrder.AccountPayOrderExt.SplitBillRule> splitBillRules, String orderRequestNo,
- String mbOrderId, NewShopOrder shopOrder, List<SplitAccountPo> splitBillDetail) {
- if (null != splitBillRules && splitBillRules.size() > 0) {
- //第三方分账接口
- try {
- AccountPayOrder accountPayOrder = new AccountPayOrder();
- accountPayOrder.setP1_bizType("AccountPaySub");
- accountPayOrder.setP2_signType("MD5");
- String format1 = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss.SSS").format(new Date());
- accountPayOrder.setP3_timestamp(format1);
- String substring = format1.substring(20);
- // fz+当前微秒时间+原唯一订单号
- accountPayOrder.setP4_orderId("FZ" + substring + orderRequestNo);
- //付款账户子订单绑定商户号
- accountPayOrder.setP5_customerNumber(shopOrder.getSplitCode());
- AccountPayOrder.AccountPayOrderExt accountPayOrderExt = new AccountPayOrder.AccountPayOrderExt();
- //收款账户商编 填写splitBillRules时候不填写MerchantNo,Amount并且即使填写这两个参数不生效!!
- //accountPayOrderExt.setInMerchantNo(splitMoneyVo.getName());
- //accountPayOrderExt.setAmount(splitMoneyVo.getSplitMoney());
- accountPayOrderExt.setOrderType(AccountPayOrderType.TRANSFER);
- // todo
- accountPayOrderExt.setServerCallbackUrl(Constant.prodSplit);
- accountPayOrderExt.setGoodsName("分账");
- if (null != splitBillRules && splitBillRules.size() > 0) {
- accountPayOrderExt.setSplitBillRules(splitBillRules);
- }
- String ext = JSON.toJSONString(accountPayOrderExt);
- log.info("分账规则串json串:" + ext);
- accountPayOrder.setP6_ext(ext);
- // 生成签名
- StringBuilder builder = new StringBuilder();
- builder.append(Constant.SPLIT)
- .append(accountPayOrder.getP1_bizType()).append(Constant.SPLIT)
- .append(accountPayOrder.getP2_signType()).append(Constant.SPLIT)
- .append(accountPayOrder.getP3_timestamp()).append(Constant.SPLIT)
- .append(accountPayOrder.getP4_orderId()).append(Constant.SPLIT)
- .append(accountPayOrder.getP5_customerNumber()).append(Constant.SPLIT)
- .append(accountPayOrder.getP6_ext()).append(Constant.SPLIT)
- .append(Constant.XUNI);
- String sign = Disguiser.disguiseMD5(builder.toString().trim());
- Map<String, String> bean = orderPayUtil.convertBean(accountPayOrder);
- log.info("--------------------> 发送分账参数: " + bean);
- 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");
- if (!"0000".equals(code)) {
- String msg = map.get("rt6_retMsg");
- log.info("【手动分账】>>>>>>>>>>手动分账失败>>>>>>>msg:" + msg);
- } else {
- for (SplitAccountPo splitAccount : splitBillDetail) {
- splitAccount.setMbOrderId(mbOrderId);
- splitAccount.setOrderRequestNo(orderRequestNo);
- splitAccount.setPayStatus(1);
- // 保存分账详情
- newOrderDao.insertSplitAccount(splitAccount);
- }
- redisService.remove("OGFZMDS");
- log.info("【手动分账】>>>>>>>>>>此订单分账结束");
- }
- }
- } catch (Exception e) {
- log.error("【手动分账】>>>>>>>>>>错误信息", e);
- }
- }
- }
- /**
- * 设置子订单状态
- * shopStatus 0:待确认 1:已确认 2:交易完成 3:订单完成 4:已关闭 5:交易全退
- *
- * payStatus (付款供应商)付款状态:1待付款、2部分付款、3已付款
- * sendOutStatus 发货状态:1待发货、2部分发货、3已发货
- * receiptStatus 收款状态:1待收款、2部分收款、3已收款
- */
- public void setShopOrderStatus(NewShopOrder newShopOrder) {
- // 11, 待付待收待发
- if (("1".equals(newShopOrder.getShopStatus()) || "2".equals(newShopOrder.getShopStatus()) || "3".equals(newShopOrder.getShopStatus())) && "1".equals(newShopOrder.getOrderStatusFlag()) && "1".equals(newShopOrder.getRefundStatus())) {
- if ( "1".equals(newShopOrder.getReceiptStatus()) && "1".equals( newShopOrder.getSendOutStatus())){
- newShopOrder.setShopStatus("11");
- } else if ( "1".equals( newShopOrder.getReceiptStatus()) && "2".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("12");
- } else if ( "1".equals( newShopOrder.getReceiptStatus()) && "3".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("13");
- } else if ( "2".equals( newShopOrder.getReceiptStatus()) && "1".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("21");
- } else if ( "2".equals( newShopOrder.getReceiptStatus()) && "2".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("22");
- } else if ( "2".equals( newShopOrder.getReceiptStatus()) && "3".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("23");
- } else if ( "3".equals( newShopOrder.getReceiptStatus()) && "1".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("31");
- } else if ( "3".equals( newShopOrder.getReceiptStatus()) && "2".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("32");
- } else if ( "3".equals( newShopOrder.getReceiptStatus()) && "3".equals( newShopOrder.getSendOutStatus())) {
- newShopOrder.setShopStatus("33");
- }
- }
- if (!"1".equals(newShopOrder.getOrderStatusFlag()) || !"1".equals(newShopOrder.getRefundStatus())) {
- newShopOrder.setShopStatus("5");
- }
- }
- /**
- * 设置收货人信息
- *
- * @param newOrder
- */
- public void setReceiverVal(NewOrder newOrder) {
- List<String> notes = newOrderDao.findNotes(newOrder.getOrderId());
- if (null != notes && notes.size() > 0) {
- newOrder.setNotes(notes);
- }
- OrderUserInfo byOrderId = orderUserInfoDao.findByOrderId(newOrder.getOrderId());
- String address = byOrderId.getProvince() + byOrderId.getCity() + byOrderId.getTown() + byOrderId.getAddress();
- newOrder.setAddress(address);
- newOrder.setReceiver(byOrderId.getShouHuoRen());
- newOrder.setMobile(byOrderId.getMobile());
- }
- /**
- * 设置退款金额
- *
- * @param newOrder
- */
- public void setRefundVal(NewOrder newOrder) {
- newOrder.setRefundFee(returnDao.findSumReturn(newOrder.getOrderId()));
- }
- /**
- * 设置分账记录
- *
- * @param newOrder
- */
- public List<SplitRecord> getSplitRecord(NewOrder newOrder) {
- return payShopDao.findSplitRecord(newOrder.getOrderId());
- }
- public List<ReceiptVo> getReceiptRecord(NewOrder newOrder) {
- ReceiptVo receiptVo = new ReceiptVo();
- receiptVo.setOrderId(newOrder.getShopOrderId().toString());
- receiptVo.setOrganizeId(4);
- return receiptDao.findReceiptList(receiptVo);
- }
- public List<OrderPayShopRecord> getPayRecords(NewOrder newOrder) {
- return payShopDao.findPayShopRecordsByOrder(newOrder.getShopOrderId());
- }
- public Boolean setDeliverStatus(List<NewOrderProduct> orderProducts) {
- AtomicReference<Boolean> flag = new AtomicReference<>(true);
- String orderStatus = newOrderDao.findStatus(orderProducts.get(0).getOrderProductId());
- if (orderStatus.length() < 2) {
- return false;
- }
- Map<Integer, Integer> shops = new HashMap<>();
- orderProducts.forEach(o -> {
- boolean b = shops.containsKey(o.getShopOrderId());
- if (b) {
- Integer num = shops.get(o.getShopOrderId());
- shops.put(o.getShopOrderId(), o.getDeliveryNum() + num);
- } else {
- shops.put(o.getShopOrderId(), o.getDeliveryNum());
- }
- });
- // 统计本次发货
- AtomicReference<Integer> totalDeliver = new AtomicReference<>(0);
- AtomicReference<Integer> orderId = new AtomicReference<>();
- shops.forEach((key, value) -> {
- NewShopOrder shopOrder = shopOrderDao.get(key);
- Integer outStoreNum = shopOrder.getOutStoreNum();
- int deliver = outStoreNum + value;
- int total = shopOrder.getItemCount() + shopOrder.getPresentNum();
- // 已发货+本次发货 > 子订单商品总数 + 赠品数
- if (deliver > total) {
- flag.set(false);
- return;
- }
- totalDeliver.set(totalDeliver.get() + value);
- // 2 部分发货 3全部发货
- int status = deliver < total ? 2 : 3;
- shopOrder.setOutStoreNum(outStoreNum + value);
- shopOrder.setSendOutStatus(Integer.toString(status));
- shopOrder.setOutStoreTimes(shopOrder.getOutStoreTimes() + 1);
- shopOrder.setPaying(0);
- shopOrderDao.update(shopOrder);
- orderId.set(shopOrder.getOrderId());
- });
- if (!flag.get()) {
- return flag.get();
- }
- Integer count = newOrderDao.findCountDeliver(orderId.get());
- Integer orderDeliverStatus = 3;
- if (count > totalDeliver.get()) {
- orderDeliverStatus = 2;
- }
- orderStatus = orderStatus.substring(0, 1) + orderDeliverStatus.toString();
- //同步更新主订单的发货状态
- newOrderDao.updateOrderStatus(orderDeliverStatus, orderStatus, orderId.get());
- return true;
- }
- public ResponseJson addReceiptRecord(Double amount, Integer orderId) {
- Double wait = newOrderDao.findWaitPay(orderId);
- if (amount > wait) {
- return ResponseJson.error("支付金额大于待付!");
- }
- ReceiptVo receiptVo = new ReceiptVo();
- // 31 线下凭证
- receiptVo.setPayType(31);
- receiptVo.setPayWay(2);
- receiptVo.setNewReceiptType(2);
- receiptVo.setReceiptType(1);
- receiptVo.setReceiptStatus(3);
- receiptVo.setReceiptAmount(amount.toString());
- receiptDao.insertOrderReceipt(receiptVo);
- OrderRelationRecord record = new OrderRelationRecord();
- record.setReceiptAmount(amount);
- record.setRelationType(2);
- record.setReceiptId(receiptVo.getId());
- record.setOrderId(orderId);
- receiptDao.insertOrderRelation(record);
- // 根据金额修改cm_order状态
- Integer status = 2;
- if (0 == wait - amount) {
- status = 3;
- }
- String orderStatus = newOrderDao.findOrderStatus(orderId);
- String substring = orderStatus.substring(orderStatus.length() - 1);
- orderStatus = status + substring;
- newOrderDao.updateReceiptStatus(status, orderStatus, orderId);
- return ResponseJson.success();
- }
- public List<SettleRecord> getSettleRecord(NewOrder newOrder) {
- List<SettleRecord> settleRecord = payShopDao.findSettleRecord(newOrder.getOrderId());
- settleRecord.forEach(s -> {
- double payCm = 0d;
- double payShop = 0d;
- double payOrg = 0d;
- payShop = 1 == s.getSettleType() ? s.getSettleAmount() : 0d;
- payCm = 2 == s.getSettleType() ? s.getSettleAmount() : 0d;
- payOrg = 3 == s.getSettleType() ? s.getSettleAmount() : 0d;
- s.setShouldSettleCm(payCm);
- s.setShouldSettleShop(payShop);
- s.setShouldSettleOrganize(payOrg);
- });
- return settleRecord;
- }
- public void setPayShopPostInfo(OrderPayShopDetail detail) {
- NewOrder order = newOrderDao.get(detail.getShopOrders().get(0).getOrderId().toString());
- NewShopOrder shopOrder = shopOrderDao.findColdChain(detail.getShopOrders().get(0).getOrderId());
- if (null != shopOrder) {
- order.setPostageInfo("2".equals(shopOrder.getShopPostFlag()) ?"到付": "0".equals(shopOrder.getShopPostFlag())?"包邮":"¥" + shopOrder.getShopPostFee());
- } else {
- /**
- * 没有运费订单
- */
- order.setPostageInfo("¥ 0.00");
- }
- }
- public void setShopPostInfo(NewShopOrder s) {
- NewOrder order = newOrderDao.get(s.getOrderId().toString());
- NewShopOrder shopOrder = shopOrderDao.findColdChain(s.getOrderId());
- if (null != shopOrder) {
- order.setPostageInfo("2".equals(shopOrder.getShopPostFlag()) ?"到付": "0".equals(shopOrder.getShopPostFlag())?"包邮":"¥" + shopOrder.getShopPostFee());
- } else {
- /**
- * 没有运费订单
- */
- order.setPostageInfo("¥ 0.00");
- }
- }
- public void setSettleStatus(NewOrder newOrder) {
- List<Integer> status = shopOrderDao.findSettleStatus(newOrder.getOrderId());
- if (!status.contains(3) && !status.contains(2)) {
- newOrder.setSettleStatus(1);
- }
- if (status.contains(2) || status.contains(3)) {
- newOrder.setSettleStatus(2);
- }
- if (!status.contains(1) && !status.contains(2)) {
- newOrder.setSettleStatus(3);
- }
- }
- }
|