package com.goafanti.order.service.impl; import java.math.BigDecimal; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.goafanti.common.bo.Error; import com.goafanti.common.constant.AFTConstants; import com.goafanti.common.constant.ErrorConstants; import com.goafanti.common.dao.TFundingRecordsMapper; import com.goafanti.common.dao.TOrderMapper; import com.goafanti.common.error.BusinessException; import com.goafanti.common.model.Admin; import com.goafanti.common.model.TFundingRecords; import com.goafanti.common.model.TOrder; import com.goafanti.common.model.User; import com.goafanti.common.utils.DateUtils; import com.goafanti.common.utils.DecimalCalculate; import com.goafanti.core.mybatis.BaseMybatisDao; import com.goafanti.core.mybatis.JDBCIdGenerator; import com.goafanti.core.mybatis.page.Pagination; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.order.bo.FundingListBo; import com.goafanti.order.bo.OperatorActive; import com.goafanti.order.bo.OrderDetailBo; import com.goafanti.order.enums.AuditState; import com.goafanti.order.enums.IntentionSate; import com.goafanti.order.enums.LiquidationSate; import com.goafanti.order.enums.OrderAction; import com.goafanti.order.enums.OrderChannel; import com.goafanti.order.enums.OrderState; import com.goafanti.order.enums.PayChannel; import com.goafanti.order.enums.PaymentState; import com.goafanti.order.enums.TradingState; import com.goafanti.order.enums.TransactionMode; import com.goafanti.order.enums.TransactionSubject; import com.goafanti.order.service.OrderService; @Service public class OrderServiceImpl extends BaseMybatisDao implements OrderService { @Autowired private TOrderMapper tOrderMapper; @Autowired private JDBCIdGenerator idGenerator; @Autowired private TFundingRecordsMapper tFundingRecordsMapper; private final BigDecimal DEFAULT_FIRST_PAYMENT = new BigDecimal(0);// 默认首付价格 private final BigDecimal DEFAULT_COMMODITY_PRICE = new BigDecimal(0);// 默认单价 private final String DEFAULT_PLATFORM_ID = "0";// 平台默认id private final double DEFAULT_BROKERAGE_PROPORTION = 0; //佣金比例 private final double DEFAULT_COMMODITY_DISCOUNT = 1; //折扣比例 private final String DEFAULT_COMMODITY_MODE = "NO_MODE"; //暂无规格 @Override public OrderDetailBo selectCommodityDetail(String commodityId, Integer commodityType) { OrderDetailBo bo = tOrderMapper.selectCommodityDetail(commodityId,commodityType); bo.setOrderNo(String.valueOf(idGenerator.generateId())); bo.setCreateTime(DateUtils.formatDate(new Date(),AFTConstants.YYYYMMDDHHMMSS)); bo.setCommodityType(commodityType); if(StringUtils.isBlank(bo.getFirstPayment())) bo.setFirstPayment(String.valueOf(DEFAULT_FIRST_PAYMENT.doubleValue())); return bo; } @Override public int addIntention(Long orderNo, String commodityId, String commodityMode, Integer commodityQuantity,Integer commodityType, String createTime,String remarks) throws ParseException { OrderDetailBo bo = tOrderMapper.selectCommodityDetail(commodityId,commodityType); BigDecimal commodityPrice = StringUtils.isBlank(bo.getCommodityPrice()) ? DEFAULT_COMMODITY_PRICE : new BigDecimal(DecimalCalculate.mul(Double.valueOf(bo.getCommodityPrice()),DEFAULT_COMMODITY_DISCOUNT)); BigDecimal orderAmount = new BigDecimal(DecimalCalculate.mul(commodityPrice.doubleValue(),Double.valueOf(String.valueOf(commodityQuantity)))); TOrder tOrder = new TOrder(); tOrder.setOrderNo(orderNo); tOrder.setCommodityId(commodityId); tOrder.setCreater(TokenManager.getUserToken().getNickname()); tOrder.setCreateTime(DateUtils.parseDate(createTime, AFTConstants.YYYYMMDDHHMMSS)); tOrder.setBuyerId(TokenManager.getUserId()); tOrder.setSellerId(StringUtils.isBlank(bo.getSellerId()) ? DEFAULT_PLATFORM_ID : bo.getSellerId()); tOrder.setCommodityMode(StringUtils.isBlank(commodityMode)?DEFAULT_COMMODITY_MODE: commodityMode); tOrder.setCommodityType(commodityType); tOrder.setCommodityQuantity(commodityQuantity); tOrder.setBrokerageProportion(new BigDecimal(DEFAULT_BROKERAGE_PROPORTION)); tOrder.setBrokerageAmount(new BigDecimal(DecimalCalculate.mul(commodityPrice.doubleValue(), DEFAULT_BROKERAGE_PROPORTION))); tOrder.setFirstPayment(DEFAULT_FIRST_PAYMENT); tOrder.setCommodityPrice(commodityPrice); tOrder.setOrderAmount(orderAmount); tOrder.setOrderRemarks(remarks); tOrder.setDeleteSign(Boolean.FALSE); tOrder.setOrderChannel(OrderChannel.APP.getCode()); setOrderState(OrderAction.ADD_INTENTION, new BigDecimal(0), tOrder, false); tOrderMapper.insert(tOrder); return 1; } /** * 订单状态流转 * @param orderStatus * @param intentionStatus * @param tradingStatus * @param paymentStatus * @param liquidationStatus * @param actionType */ public void setOrderState(OrderAction orderAction,BigDecimal changeAmount,TOrder tOrder,boolean confirm){ if(orderAction == OrderAction.ADD_INTENTION){ //添加意向订单 if(tOrder.getOrderStatus() != null || tOrder.getIntentionStatus() != null || tOrder.getTradingStatus() != null || tOrder.getPaymentStatus() != null || tOrder.getLiquidationStatus() != null || tOrder.getActuallyBrokerageAmount() != null || tOrder.getActuallyFirstPayment() != null) { throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"添加意向订单")); } tOrder.setOrderStatus(OrderState.INTENTION.getCode()); tOrder.setIntentionStatus(IntentionSate.WAIT_SELLER_CONFIRM.getCode()); tOrder.setTradingStatus(TradingState.WAIT_FOR_TRADE.getCode()); tOrder.setPaymentStatus(PaymentState.WAIT_PAY_FIRST_BALANCE.getCode()); tOrder.setLiquidationStatus(LiquidationSate.WAIT_FOR_PAY.getCode()); tOrder.setActuallyFirstPayment(new BigDecimal(0)); tOrder.setActuallyTotalPayment(new BigDecimal(0)); tOrder.setActuallyBrokerageAmount(new BigDecimal(0)); }else if(orderAction == OrderAction.CONFIRM_INTENTION){ //确认意向订单 (用户确认) if(tOrder.getOrderStatus() != OrderState.INTENTION.getCode() || tOrder.getIntentionStatus() != IntentionSate.WAIT_SELLER_CONFIRM.getCode() || tOrder.getTradingStatus() != TradingState.WAIT_FOR_TRADE.getCode() || tOrder.getPaymentStatus() != PaymentState.WAIT_PAY_FIRST_BALANCE.getCode() || tOrder.getLiquidationStatus() != LiquidationSate.WAIT_FOR_PAY.getCode()){ throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"确认意向订单")); } if(confirm){ tOrder.setOrderStatus(OrderState.WAIT_FOR_PAY.getCode()); tOrder.setIntentionStatus(IntentionSate.SELLER_CONFIRM.getCode()); tOrder.setTradingStatus(TradingState.ON_TRADE.getCode()); }else{ tOrder.setOrderStatus(OrderState.CANCELLED.getCode()); tOrder.setIntentionStatus(IntentionSate.SELLER_REFUSE.getCode()); tOrder.setTradingStatus(TradingState.TRADE_FAILED.getCode()); } }else if(orderAction == OrderAction.CONFIRM_PAY_FOR_FIRST){ // 支付首付(审核员先审核流水) if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_PAY.getCode() || tOrder.getIntentionStatus() != IntentionSate.SELLER_CONFIRM.getCode() || tOrder.getTradingStatus() != TradingState.ON_TRADE.getCode() || tOrder.getPaymentStatus() != PaymentState.WAIT_PAY_FIRST_BALANCE.getCode() || tOrder.getLiquidationStatus() != LiquidationSate.WAIT_FOR_PAY.getCode()){ throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"")); } int boundary = DecimalCalculate.compareTo( DecimalCalculate.add(tOrder.getActuallyFirstPayment().doubleValue(),changeAmount.doubleValue()), tOrder.getFirstPayment().doubleValue()); if(boundary == 1){ throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"支付首付款")); }else if(boundary == -1){ //首付待付清 () tOrder.setActuallyTotalPayment( new BigDecimal(DecimalCalculate.add(tOrder.getActuallyTotalPayment().doubleValue(), changeAmount.doubleValue()))); tOrder.setActuallyFirstPayment( new BigDecimal(DecimalCalculate.add(tOrder.getActuallyFirstPayment().doubleValue(), changeAmount.doubleValue()))); tOrder.setPaymentStatus(PaymentState.WAIT_PAY_FIRST_BALANCE.getCode()); tOrder.setLiquidationStatus(LiquidationSate.PART_PAY.getCode()); }else if(boundary == 0){ //首付已结清 tOrder.setActuallyTotalPayment( new BigDecimal(DecimalCalculate.add(tOrder.getActuallyTotalPayment().doubleValue(), changeAmount.doubleValue()))); tOrder.setActuallyFirstPayment( new BigDecimal(DecimalCalculate.add(tOrder.getActuallyFirstPayment().doubleValue(),changeAmount.doubleValue()))); tOrder.setPaymentStatus(PaymentState.ALREADY_FIRST_PAY.getCode()); tOrder.setLiquidationStatus(LiquidationSate.PART_PAY.getCode()); } }else if(orderAction == OrderAction.CONFIRM_PAY_FOR_LAST){ //支付尾款 (审核员先审核流水) if(tOrder.getOrderStatus() != OrderState.WAIT_FOR_PAY.getCode() || tOrder.getIntentionStatus() != IntentionSate.SELLER_CONFIRM.getCode() || tOrder.getTradingStatus() != TradingState.ON_TRADE.getCode() || tOrder.getPaymentStatus() != PaymentState.ALREADY_FIRST_PAY.getCode() || tOrder.getLiquidationStatus() != LiquidationSate.PART_PAY.getCode()){ throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"支付尾款")); } int boundary = DecimalCalculate.compareTo( DecimalCalculate.add(tOrder.getActuallyTotalPayment().doubleValue(),changeAmount.doubleValue()), tOrder.getOrderAmount().doubleValue()); if(boundary == 1){ throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"支付尾款")); }else if(boundary == -1){ tOrder.setActuallyTotalPayment( new BigDecimal(DecimalCalculate.add(tOrder.getActuallyTotalPayment().doubleValue(), changeAmount.doubleValue()))); tOrder.setPaymentStatus(PaymentState.WAIT_PAY_LAST_BALANCE.getCode()); tOrder.setLiquidationStatus(LiquidationSate.PART_PAY.getCode()); }else if(boundary == 0){ tOrder.setOrderStatus(OrderState.COMPLETED.getCode()); tOrder.setActuallyTotalPayment( new BigDecimal(DecimalCalculate.add(tOrder.getActuallyTotalPayment().doubleValue(), changeAmount.doubleValue()))); tOrder.setPaymentStatus(PaymentState.ALREADY_LAST_PAY.getCode()); tOrder.setLiquidationStatus(LiquidationSate.FULL_PAY.getCode()); tOrder.setTradingStatus(TradingState.TRADE_SUCCESS.getCode()); } }else if(orderAction == OrderAction.APPLY_FOR_WITHDRAW){ //提现申请 (用户申请) if(tOrder.getOrderStatus() != OrderState.COMPLETED.getCode() || tOrder.getIntentionStatus() != IntentionSate.SELLER_CONFIRM.getCode() || tOrder.getTradingStatus() != TradingState.TRADE_SUCCESS.getCode() || tOrder.getPaymentStatus() != PaymentState.ALREADY_LAST_PAY.getCode() || tOrder.getLiquidationStatus() != LiquidationSate.FULL_PAY.getCode()){ throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"等待提现")); } tOrder.setLiquidationStatus(LiquidationSate.WAIT_FOR_WITHDRAW.getCode()); }else if(orderAction == OrderAction.CONFIRM_WITHDRAW){ //提现确认 (审核员先审核流水) if(tOrder.getOrderStatus() != OrderState.COMPLETED.getCode() || tOrder.getIntentionStatus() != IntentionSate.SELLER_CONFIRM.getCode() || tOrder.getTradingStatus() != TradingState.TRADE_SUCCESS.getCode() || tOrder.getPaymentStatus() != PaymentState.ALREADY_LAST_PAY.getCode() || tOrder.getLiquidationStatus() != LiquidationSate.WAIT_FOR_WITHDRAW.getCode()){ throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"确认提现")); } tOrder.setLiquidationStatus(LiquidationSate.PAY_SETTLE.getCode()); }else if(orderAction == OrderAction.APPLY_FOR_CANCEL){ //取消订单(用户取消) boolean flag = true; if(tOrder.getOrderStatus() == OrderState.CANCELLED.getCode()) flag = false; if(tOrder.getIntentionStatus() == IntentionSate.SELLER_REFUSE.getCode() || tOrder.getIntentionStatus() == IntentionSate.BUYER_CANCELLED.getCode() || tOrder.getIntentionStatus() == IntentionSate.EXPIRED.getCode()){ flag = false; } if(tOrder.getTradingStatus() == TradingState.TRADE_FAILED.getCode()) flag = false; if(tOrder.getPaymentStatus() == PaymentState.WAIT_FOR_REFUND.getCode() || tOrder.getPaymentStatus() == PaymentState.ALREADY_REFUND.getCode()) flag = false; if(tOrder.getLiquidationStatus() == LiquidationSate.WAIT_FOR_WITHDRAW.getCode() || tOrder.getLiquidationStatus() == LiquidationSate.WAIT_FOR_REFUND.getCode() || tOrder.getLiquidationStatus() == LiquidationSate.REFUND_SETTLE.getCode()){ flag = false; } if(!flag) throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"取消订单")); tOrder.setOrderStatus(OrderState.CANCELLED.getCode()); tOrder.setIntentionStatus(IntentionSate.BUYER_CANCELLED.getCode()); if(tOrder.getTradingStatus() != TradingState.TRADE_SUCCESS.getCode()) tOrder.setTradingStatus(TradingState.TRADE_FAILED.getCode()); if(tOrder.getActuallyTotalPayment().doubleValue() > 0){ //需要退款 tOrder.setPaymentStatus(PaymentState.WAIT_FOR_REFUND.getCode()); tOrder.setLiquidationStatus(LiquidationSate.WAIT_FOR_REFUND.getCode()); } }else if(orderAction == OrderAction.REFUND_CONFIRM){ //退款确认(审核员) if(tOrder.getOrderStatus() != OrderState.CANCELLED.getCode() || tOrder.getIntentionStatus() != IntentionSate.BUYER_CANCELLED.getCode() || tOrder.getPaymentStatus() != PaymentState.WAIT_FOR_REFUND.getCode() || tOrder.getLiquidationStatus() != LiquidationSate.WAIT_FOR_REFUND.getCode()){ throw new BusinessException(new Error(ErrorConstants.NOT_ACCORD_WITH_NEXT,"确认退款")); } tOrder.setPaymentStatus(PaymentState.ALREADY_REFUND.getCode()); tOrder.setLiquidationStatus(LiquidationSate.REFUND_SETTLE.getCode()); } } /** * 添加流水记录 * @param orderNo 订单编号 * @param creater 创建人 * @param payeeId 收款人 * @param payerId 付款人 * @param remarks 附言 * @param transactionSubject 交易科目 * @param payChannel 支付渠道 * @param transactionMode 支付方式 * @param FundAudit 流水审核 * @return */ public int addFundRecord(Long orderNo,String creater,String payeeId,String payerId,String remarks,TransactionSubject transactionSubject,PayChannel payChannel, BigDecimal transactionAmount,TransactionMode transactionMode,AuditState auditState){ TFundingRecords records = new TFundingRecords(); records.setId(UUID.randomUUID().toString()); records.setConfirmSign(auditState.getCode()); records.setCreater(creater); records.setDeleteSign(Boolean.FALSE); records.setOrderNo(orderNo); records.setTransactionAmount(transactionAmount); records.setPayeeId(payeeId); records.setPayerId(payerId); records.setRemarks(remarks); records.setTransactionAmount(transactionAmount); records.setTransactionMode(transactionMode.getCode()); records.setTransactionSubject(transactionSubject.getCode()); records.setTransactionChannel(payChannel.getCode()); records.setCreateTime(new Date()); tFundingRecordsMapper.insert(records); return 1; } /** * 设置按钮状态 * @param tOrder * @return */ private OperatorActive setOperatorActive(TOrder tOrder){ OperatorActive active = new OperatorActive(); if (TokenManager.getToken() instanceof User) { active.setConfirmPayForFirst(false); active.setConfirmPayForLast(false); active.setConfirmRefund(false); active.setConfirmWithdraw(false); if (TokenManager.getUserId().equals(tOrder.getBuyerId())) { // 买方 active.setConfirmIntention(false); active.setRefuseIntention(false); active.setApplyForWithdraw(false); if (tOrder.getOrderStatus() == OrderState.WAIT_FOR_PAY.getCode() && tOrder.getIntentionStatus() == IntentionSate.SELLER_CONFIRM.getCode() && tOrder.getTradingStatus() == TradingState.ON_TRADE.getCode() && tOrder.getPaymentStatus() == PaymentState.WAIT_PAY_FIRST_BALANCE.getCode() && tOrder.getLiquidationStatus() == LiquidationSate.WAIT_FOR_PAY.getCode()) { active.setPayForFirst(true); } else { active.setPayForFirst(false); } if (tOrder.getOrderStatus() == OrderState.WAIT_FOR_PAY.getCode() && tOrder.getIntentionStatus() == IntentionSate.SELLER_CONFIRM.getCode() && tOrder.getTradingStatus() == TradingState.ON_TRADE.getCode() && tOrder.getPaymentStatus() == PaymentState.ALREADY_FIRST_PAY.getCode() && tOrder.getLiquidationStatus() == LiquidationSate.PART_PAY.getCode()) { active.setPayForLast(true); } else { active.setPayForLast(false); } boolean flag = true; if (tOrder.getOrderStatus() == OrderState.CANCELLED.getCode()) flag = false; if (tOrder.getIntentionStatus() == IntentionSate.SELLER_REFUSE.getCode() || tOrder.getIntentionStatus() == IntentionSate.BUYER_CANCELLED.getCode() || tOrder.getIntentionStatus() == IntentionSate.EXPIRED.getCode()) { flag = false; } if (tOrder.getTradingStatus() == TradingState.TRADE_FAILED.getCode()) flag = false; if (tOrder.getPaymentStatus() == PaymentState.WAIT_FOR_REFUND.getCode() || tOrder.getPaymentStatus() == PaymentState.ALREADY_REFUND.getCode()) flag = false; if (tOrder.getLiquidationStatus() == LiquidationSate.WAIT_FOR_WITHDRAW.getCode() || tOrder.getLiquidationStatus() == LiquidationSate.WAIT_FOR_REFUND.getCode() || tOrder.getLiquidationStatus() == LiquidationSate.REFUND_SETTLE.getCode()) { flag = false; } active.setApplyForCancel(flag); } else if (TokenManager.getUserId().equals(tOrder.getSellerId())) { //卖方 active.setPayForFirst(false); active.setPayForLast(false); active.setApplyForCancel(false); if (tOrder.getOrderStatus() == OrderState.INTENTION.getCode() && tOrder.getIntentionStatus() == IntentionSate.WAIT_SELLER_CONFIRM.getCode() && tOrder.getTradingStatus() == TradingState.WAIT_FOR_TRADE.getCode() && tOrder.getPaymentStatus() == PaymentState.WAIT_PAY_FIRST_BALANCE.getCode() && tOrder.getLiquidationStatus() == LiquidationSate.WAIT_FOR_PAY.getCode()) { active.setConfirmIntention(true); active.setRefuseIntention(true); } else { active.setConfirmIntention(false); active.setRefuseIntention(false); } if (tOrder.getOrderStatus() == OrderState.COMPLETED.getCode() && tOrder.getIntentionStatus() == IntentionSate.SELLER_CONFIRM.getCode() && tOrder.getTradingStatus() == TradingState.TRADE_SUCCESS.getCode() && tOrder.getPaymentStatus() == PaymentState.ALREADY_LAST_PAY.getCode() && tOrder.getLiquidationStatus() == LiquidationSate.FULL_PAY.getCode()) { active.setApplyForWithdraw(true); } else { active.setApplyForWithdraw(false); } } else { active.setPayForFirst(false); active.setPayForLast(false); active.setConfirmIntention(false); active.setRefuseIntention(false); active.setApplyForCancel(false); active.setApplyForWithdraw(false); } } if (TokenManager.getToken() instanceof Admin) { active.setApplyForCancel(false); active.setPayForFirst(false); active.setPayForLast(false); if (tOrder.getSellerId().equals(DEFAULT_PLATFORM_ID)) { // 平台作为卖方 if (tOrder.getOrderStatus() == OrderState.INTENTION.getCode() && tOrder.getIntentionStatus() == IntentionSate.WAIT_SELLER_CONFIRM.getCode() && tOrder.getTradingStatus() == TradingState.WAIT_FOR_TRADE.getCode() && tOrder.getPaymentStatus() == PaymentState.WAIT_PAY_FIRST_BALANCE.getCode() && tOrder.getLiquidationStatus() == LiquidationSate.WAIT_FOR_PAY.getCode()) { active.setConfirmIntention(true); active.setRefuseIntention(true); } else { active.setConfirmIntention(false); active.setRefuseIntention(false); } if (tOrder.getOrderStatus() == OrderState.COMPLETED.getCode() && tOrder.getIntentionStatus() == IntentionSate.SELLER_CONFIRM.getCode() && tOrder.getTradingStatus() == TradingState.TRADE_SUCCESS.getCode() && tOrder.getPaymentStatus() == PaymentState.ALREADY_LAST_PAY.getCode() && tOrder.getLiquidationStatus() == LiquidationSate.FULL_PAY.getCode()) { active.setApplyForWithdraw(true); } else { active.setApplyForWithdraw(false); } }else{ active.setConfirmIntention(false); active.setApplyForWithdraw(false); } //平台作为中间方 确认首付 -尾款-提现-退款 if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_PAY.getCode() && tOrder.getIntentionStatus() == IntentionSate.SELLER_CONFIRM.getCode() && tOrder.getTradingStatus() == TradingState.ON_TRADE.getCode() && tOrder.getPaymentStatus() == PaymentState.WAIT_PAY_FIRST_BALANCE.getCode() && tOrder.getLiquidationStatus() == LiquidationSate.WAIT_FOR_PAY.getCode()){ active.setConfirmPayForFirst(true); }else{ active.setConfirmPayForFirst(false); } if(tOrder.getOrderStatus() == OrderState.WAIT_FOR_PAY.getCode() && tOrder.getIntentionStatus() == IntentionSate.SELLER_CONFIRM.getCode() && tOrder.getTradingStatus() == TradingState.ON_TRADE.getCode() && tOrder.getPaymentStatus() == PaymentState.ALREADY_FIRST_PAY.getCode() && tOrder.getLiquidationStatus() == LiquidationSate.PART_PAY.getCode()){ active.setConfirmPayForLast(true); }else{ active.setConfirmPayForLast(false); } if(tOrder.getOrderStatus() == OrderState.COMPLETED.getCode() && tOrder.getIntentionStatus() == IntentionSate.SELLER_CONFIRM.getCode() && tOrder.getTradingStatus() == TradingState.TRADE_SUCCESS.getCode() && tOrder.getPaymentStatus() == PaymentState.ALREADY_LAST_PAY.getCode() && tOrder.getLiquidationStatus() == LiquidationSate.WAIT_FOR_WITHDRAW.getCode()){ active.setConfirmWithdraw(true); }else{ active.setConfirmWithdraw(false); } if(tOrder.getOrderStatus() == OrderState.CANCELLED.getCode() && tOrder.getIntentionStatus() == IntentionSate.BUYER_CANCELLED.getCode() && tOrder.getPaymentStatus() == PaymentState.WAIT_FOR_REFUND.getCode() && tOrder.getLiquidationStatus() == LiquidationSate.WAIT_FOR_REFUND.getCode()){ active.setConfirmRefund(true); }else{ active.setConfirmRefund(false); } } return active; } @Override public int updatePayForFirst(Long orderNo, BigDecimal fundAmount,String remarks) { TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo); addFundRecord(orderNo, TokenManager.getUserToken().getNickname(), DEFAULT_PLATFORM_ID, TokenManager.getUserId(), remarks, TransactionSubject.SUPPLY_PAY,PayChannel.UNIONPAY, fundAmount, TransactionMode.OFFLINE, AuditState.WAIT_AUDIT); tOrderMapper.updateByPrimaryKeySelective(tOrder); return 1; } @Override public int updatePayForLast(Long orderNo, BigDecimal fundAmount, String remarks) { TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo); addFundRecord(orderNo, TokenManager.getUserToken().getNickname(), DEFAULT_PLATFORM_ID, TokenManager.getUserId(), remarks, TransactionSubject.SUPPLY_PAY,PayChannel.UNIONPAY, fundAmount, TransactionMode.OFFLINE, AuditState.WAIT_AUDIT); tOrderMapper.updateByPrimaryKeySelective(tOrder); return 1; } @SuppressWarnings("unchecked") @Override public Pagination selectOrderList(boolean confirm,Integer pageNo,Integer pageSize) { Map params = new HashMap(); Pagination result = new Pagination(); if(!confirm) params.put("intentionStatus", IntentionSate.WAIT_SELLER_CONFIRM.getCode()); //购买意向 params.put("uid", TokenManager.getUserId()); Pagination data = (Pagination)findPage("selectOrderListByPage", "selectOrderListCount", params, pageNo, pageSize); List list = (List)data.getList(); OrderDetailBo bo = null; List boList = new ArrayList(); if(list.size()>0){ for(TOrder t:list){ bo = tOrderMapper.selectCommodityDetail(t.getCommodityId(),t.getCommodityType()); bo.setOrderNo(String.valueOf(t.getOrderNo())); bo.setCommodityQuantity(t.getCommodityQuantity()); bo.setCommodityMode(t.getCommodityMode()); bo.setCommodityId(t.getCommodityId()); bo.setCommodityPrice(String.valueOf(t.getCommodityPrice())); bo.setOrderRemarks(t.getOrderRemarks()); bo.setCreateTime(DateUtils.formatDate(t.getCreateTime(),AFTConstants.YYYYMMDDHHMMSS)); bo.setOrderStatus(OrderState.getStatus(t.getOrderStatus()).getDesc()); bo.setCommodityType(t.getCommodityType()); bo.setOrderAmount(String.valueOf(t.getOrderAmount())); bo.setFirstPayment(String.valueOf(t.getFirstPayment())); bo.setOperatorActive(setOperatorActive(t)); boList.add(bo); } } result.setList(boList); result.setPageNo(data.getPageNo()); result.setPageSize(data.getPageSize()); result.setTotalCount(data.getTotalCount()); result.setFilterNo(data.getFilterNo()); return result; } @Override public OrderDetailBo selectOrderDetail(Long orderNo) { TOrder t = tOrderMapper.selectByPrimaryKey(orderNo); OrderDetailBo bo = tOrderMapper.selectCommodityDetail(t.getCommodityId(),t.getCommodityType()); bo.setOrderNo(String.valueOf(t.getOrderNo())); bo.setCommodityQuantity(t.getCommodityQuantity()); bo.setCommodityMode(t.getCommodityMode()); bo.setCommodityId(t.getCommodityId()); bo.setCommodityPrice(String.valueOf(t.getCommodityPrice())); bo.setOrderRemarks(t.getOrderRemarks()); bo.setCreateTime(DateUtils.formatDate(t.getCreateTime(),AFTConstants.YYYYMMDDHHMMSS)); bo.setOrderStatus(OrderState.getStatus(t.getOrderStatus()).getDesc()); bo.setCommodityType(t.getCommodityType()); bo.setOrderAmount(String.valueOf(t.getOrderAmount())); bo.setOperatorActive(setOperatorActive(t)); bo.setFirstPayment(String.valueOf(t.getFirstPayment())); return bo; } @SuppressWarnings("unchecked") @Override public Pagination selectFundingHistory(Long orderNo,Integer pageNo,Integer pageSize) { Map params = new HashMap(); if(orderNo != null) params.put("orderNo", orderNo); params.put("uid", TokenManager.getUserId()); Pagination data = (Pagination)findPage("selectFundingHistoryByPage","selectFundingHistoryCount", params, pageNo, pageSize); List list = (List)data.getList(); OrderDetailBo odBo = null; if(list.size()>0){ for(FundingListBo bo:list){ odBo = tOrderMapper.selectCommodityDetail(bo.getCommodityId(),bo.getCommodityType()); bo.setCommodityName(odBo.getCommodityName()); bo.setBusinessDesc(setBusinessDesc(bo.getTransactionSubject(),bo.getTransactionAmount())); } } data.setList(list); return data; } @Override @Transactional public int updateApplyForWithdraw(Long orderNo,String remarks) { TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo); BigDecimal transactionAmount = new BigDecimal(DecimalCalculate.sub(tOrder.getActuallyTotalPayment().doubleValue(), tOrder.getActuallyBrokerageAmount().doubleValue())); addFundRecord(orderNo, TokenManager.getUserToken().getNickname(), TokenManager.getUserId(), DEFAULT_PLATFORM_ID, remarks, TransactionSubject.SUPPLY_COLLECT, PayChannel.UNIONPAY,transactionAmount,TransactionMode.OFFLINE, AuditState.WAIT_AUDIT); setOrderState(OrderAction.APPLY_FOR_WITHDRAW, new BigDecimal(0), tOrder, false); tOrderMapper.updateByPrimaryKeySelective(tOrder); return 1; } @Override @Transactional public int updateApplyForCancel(Long orderNo) { TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo); setOrderState(OrderAction.APPLY_FOR_CANCEL, new BigDecimal(0), tOrder, false); if(tOrder.getPaymentStatus() == PaymentState.WAIT_FOR_REFUND.getCode() && tOrder.getLiquidationStatus() == LiquidationSate.WAIT_FOR_REFUND.getCode()){ //退款 BigDecimal transactionAmount = new BigDecimal(DecimalCalculate.sub(tOrder.getActuallyTotalPayment().doubleValue(), tOrder.getActuallyBrokerageAmount().doubleValue())); addFundRecord(orderNo, "平台方", DEFAULT_PLATFORM_ID,TokenManager.getUserId(), "买家取消订单", TransactionSubject.REFUND, PayChannel.UNIONPAY,transactionAmount,TransactionMode.OFFLINE, AuditState.WAIT_AUDIT); } tOrderMapper.updateByPrimaryKeySelective(tOrder); return 1; } /** * * @param transactionSubject 交易科目 * @param transactionAmount 交易金额 * @param payeeId 收款人 * @param payerId 付款人 * @return */ private String setBusinessDesc(Integer transactionSubject,BigDecimal transactionAmount){ String result = ""; if(transactionSubject == TransactionSubject.SUPPLY_PAY.getCode() || transactionSubject == TransactionSubject.REFUND.getCode()){ result = "收入-"+transactionAmount; }else if(transactionSubject == TransactionSubject.SUPPLY_PAY.getCode()){ result = "支出-"+transactionAmount; } return result; } @Override public int updateConfirmIntention(Long orderNo, boolean confirm) { TOrder tOrder = tOrderMapper.selectByPrimaryKey(orderNo); setOrderState(OrderAction.CONFIRM_INTENTION, new BigDecimal(0), tOrder, confirm); tOrderMapper.updateByPrimaryKeySelective(tOrder); return 1; } }