| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593 |
- 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<TOrderMapper> 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<OrderDetailBo> selectOrderList(boolean confirm,Integer pageNo,Integer pageSize) {
- Map<String, Object> params = new HashMap<String, Object>();
- Pagination<OrderDetailBo> result = new Pagination<OrderDetailBo>();
- if(!confirm) params.put("intentionStatus", IntentionSate.WAIT_SELLER_CONFIRM.getCode()); //购买意向
- params.put("uid", TokenManager.getUserId());
- Pagination<TOrder> data = (Pagination<TOrder>)findPage("selectOrderListByPage", "selectOrderListCount", params, pageNo, pageSize);
- List<TOrder> list = (List<TOrder>)data.getList();
- OrderDetailBo bo = null;
- List<OrderDetailBo> boList = new ArrayList<OrderDetailBo>();
- 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<FundingListBo> selectFundingHistory(Long orderNo,Integer pageNo,Integer pageSize) {
- Map<String, Object> params = new HashMap<String, Object>();
- if(orderNo != null) params.put("orderNo", orderNo);
- params.put("uid", TokenManager.getUserId());
- Pagination<FundingListBo> data = (Pagination<FundingListBo>)findPage("selectFundingHistoryByPage","selectFundingHistoryCount", params, pageNo, pageSize);
- List<FundingListBo> list = (List<FundingListBo>)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;
- }
- }
|