jiangping
2023-10-09 70f25657a7f1c5b1bfb1189759b9fa6f33b6922e
server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -9,6 +9,7 @@
import com.doumee.core.constants.Constants;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.DateUtil;
@@ -22,19 +23,18 @@
import com.doumee.dao.business.model.Goodsorder;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.MemberRides;
import com.doumee.dao.business.web.response.HomeResponse;
import com.doumee.dao.business.web.response.*;
import com.doumee.dao.business.join.MemberRidesJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.web.response.GoodsorderDetailDTO;
import com.doumee.dao.business.web.response.MemberRidesResponse;
import com.doumee.dao.business.web.response.PayOrderDTO;
import com.doumee.service.business.GoodsorderService;
import com.doumee.service.business.PricingRuleService;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -51,6 +51,7 @@
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
public class GoodsorderServiceImpl implements GoodsorderService {
@@ -74,14 +75,14 @@
    @Autowired
    private BaseParamMapper baseParamMapper;
    @Autowired
    private RefundMapper refundMapper;
    @Autowired
    private MemberRidesJoinMapper memberRidesJoinMapper;
    @Autowired
    PricingRuleService pricingRuleService;
    @Override
    public String create(Goodsorder goodsorder) {
@@ -221,8 +222,8 @@
        }
        return homeResponse;
    }
    @Autowired
    private TransactionsMapper transactionsMapper;
    @Override
@@ -237,7 +238,7 @@
        PayOrderDTO payOrderDTO = new PayOrderDTO();
        payOrderDTO.setOrderCode(goodsorder.getCode());
        payOrderDTO.setPayType(goodsorder.getPayWay());
        payOrderDTO.setPayWay(goodsorder.getPayWay());
        payOrderDTO.setMoney(goodsorder.getMoney());
        payOrderDTO.setPayDate(goodsorder.getPayDate());
        payOrderDTOList.add(0,payOrderDTO);
@@ -245,7 +246,8 @@
            refunds.forEach(s->{
                PayOrderDTO refundOrderDTO = new PayOrderDTO();
                refundOrderDTO.setOrderCode(s.getCode());
                refundOrderDTO.setPayType(s.getPayWay());
                refundOrderDTO.setPayWay(s.getPayWay());
                refundOrderDTO.setRefundType(s.getType());
                refundOrderDTO.setMoney(s.getMoney());
                refundOrderDTO.setPayDate(s.getDoneDate());
                payOrderDTOList.add(refundOrderDTO);
@@ -262,15 +264,125 @@
    }
    @Override
    public Goodsorder closerGoodsorder(String id) {
    public void closerGoodsorder(String id) {
        LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Goodsorder goodsorder = goodsorderMapper.selectById(id);
        QueryWrapper<MemberRides> wrapper = new QueryWrapper<>();
        wrapper.lambda()
                .eq(MemberRides::getOrdreId,id);
        List<MemberRides> memberRides = memberRidesMapper.selectList(wrapper);
        if (!CollectionUtils.isEmpty(memberRides)){
            boolean exitUnBack = memberRides.stream().anyMatch(s -> !Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey().equals(s.getStatus()));
            if (exitUnBack){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前订单有未完成的骑行,无法强制结算");
            }
            PricingRuleDTO pricingRule = pricingRuleService.getPricingRule(memberRides);
            RidesDetailResponse ridesDetailResponse = new RidesDetailResponse();
            List<MemberRidesResponse> collect = memberRides.stream().map(s -> {
                MemberRidesResponse memberRidesResponse = new MemberRidesResponse();
                memberRidesResponse.setRideStartTime(s.getRentDate());
                memberRidesResponse.setRideEndTime(s.getBackDate());
                memberRidesResponse.setRideTime(DateUtil.betweenMin(memberRidesResponse.getRideStartTime(), memberRidesResponse.getRideEndTime()));
                memberRidesResponse.setDuration(s.getDuration());
                memberRidesResponse.setBikeType(s.getParamName());
                memberRidesResponse.setBikeCode(s.getBikeCode());
                memberRidesResponse.setBasePrice(s.getBasePrice());
                memberRidesResponse.setBaseTime(s.getBaseTime());
                memberRidesResponse.setUnitPrice(s.getUnitTime());
                memberRidesResponse.setUnitTime(s.getUnitTime());
                return memberRidesResponse;
            }).collect(Collectors.toList());
            Integer durationSum = memberRides.stream().filter(s -> s.getDuration() > 0).mapToInt(s -> s.getDuration()).sum();
            if (durationSum > pricingRule.getMemberRides().getBaseTime()){
                BigDecimal basePrice = pricingRule.getMemberRides().getBasePrice();
                BigDecimal multiply = pricingRule.getMemberRides().getUnitPrice().multiply(new BigDecimal((durationSum - pricingRule.getMemberRides().getBaseTime())));
                ridesDetailResponse.setAmount(basePrice.add(multiply));
            }else {
                ridesDetailResponse.setAmount(pricingRule.getMemberRides().getBasePrice());
            }
            ridesDetailResponse.setBikeType(pricingRule.getBikeType());
            ridesDetailResponse.setDuration(durationSum);
            ridesDetailResponse.setMemberRidesResponseList(collect);
        return null;
            Refund refund = new Refund();
            refund.setCreateDate(new Date());
            refund.setCreator(principal.getId());
            refund.setEditDate(new Date());
            refund.setEditor(principal.getId());
            refund.setIsdeleted(Constants.ZERO);
            refund.setInfo("系统结算后订单自动完结");
//            refund.setCode();
            refund.setMemberId(goodsorder.getMemberId());
            refund.setMoney(goodsorder.getMoney().subtract(ridesDetailResponse.getAmount()));
//            refund.setStatus();
//            refund.setPreOrderid();
//            refund.setOnlineOrderid();
            refund.setPayWay(goodsorder.getPayWay());
            refund.setDoneDate(new Date());
            refund.setType(Constants.ONE);
            refund.setObjId(goodsorder.getId());
            refund.setReason("确定强制结算吗?结算后订单自动完结");
            refundMapper.insert(refund);
            Goodsorder update = new Goodsorder();
            update.setId(goodsorder.getId());
            update.setStatus(Constants.GOODSORDER_STATUS.CLOSE.getKey());
            update.setCloseMoney(goodsorder.getMoney().subtract(ridesDetailResponse.getAmount()));
            update.setCloseId(refund.getId());
            update.setCloseDate(refund.getDoneDate());
            update.setCloseInfo(refund.getInfo());
            update.setCloseUserId(principal.getId());
            update.setCloseType(Constants.ONE);
            goodsorderMapper.updateById(update);
        }
    }
    @Override
    public RidesDetailResponse getRidesDetailResponse(String id) {
        QueryWrapper<MemberRides> wrapper = new QueryWrapper<>();
        wrapper.lambda()
                .eq(MemberRides::getOrdreId,id);
        List<MemberRides> memberRides = memberRidesMapper.selectList(wrapper);
        if (!CollectionUtils.isEmpty(memberRides)){
            PricingRuleDTO pricingRule = pricingRuleService.getPricingRule(memberRides);
            RidesDetailResponse ridesDetailResponse = new RidesDetailResponse();
            List<MemberRidesResponse> collect = memberRides.stream().map(s -> {
                MemberRidesResponse memberRidesResponse = new MemberRidesResponse();
                memberRidesResponse.setRideStartTime(s.getRentDate());
                memberRidesResponse.setRideEndTime(s.getBackDate());
                memberRidesResponse.setRideTime(DateUtil.betweenMin(memberRidesResponse.getRideStartTime(), memberRidesResponse.getRideEndTime()));
                memberRidesResponse.setDuration(s.getDuration());
                memberRidesResponse.setBikeType(s.getParamName());
                memberRidesResponse.setBikeCode(s.getBikeCode());
                memberRidesResponse.setBasePrice(s.getBasePrice());
                memberRidesResponse.setBaseTime(s.getBaseTime());
                memberRidesResponse.setUnitPrice(s.getUnitTime());
                memberRidesResponse.setUnitTime(s.getUnitTime());
                return memberRidesResponse;
            }).collect(Collectors.toList());
            Integer durationSum = memberRides.stream().filter(s -> s.getDuration() > 0).mapToInt(s -> s.getDuration()).sum();
            if (durationSum > pricingRule.getMemberRides().getBaseTime()){
                BigDecimal basePrice = pricingRule.getMemberRides().getBasePrice();
                BigDecimal multiply = pricingRule.getMemberRides().getUnitPrice().multiply(new BigDecimal((durationSum - pricingRule.getMemberRides().getBaseTime())));
                ridesDetailResponse.setAmount(basePrice.add(multiply));
            }else {
                ridesDetailResponse.setAmount(pricingRule.getMemberRides().getBasePrice());
            }
            ridesDetailResponse.setBikeType(pricingRule.getBikeType());
            ridesDetailResponse.setDuration(durationSum);
            ridesDetailResponse.setMemberRidesResponseList(collect);
            return ridesDetailResponse;
        }
        return new RidesDetailResponse();
    }
    @Override
    public Object createGoodsOrderPay(String memberId){
@@ -328,6 +440,23 @@
        goodsorder.setPayDate(new Date());
        goodsorder.setEditDate(new Date());
        goodsorderMapper.updateById(goodsorder);
        //存储交易流水表
        Transactions transactions = new Transactions();
        transactions.setMemberId(goodsorder.getMemberId());
        transactions.setCreateDate(new Date());
        transactions.setIsdeleted(Constants.ZERO);
        transactions.setOrderId(goodsorder.getId());
        transactions.setMoney(goodsorder.getMoney());
        transactions.setType(Constants.transactionsType.deposit);
        transactions.setPreOrderid(goodsorder.getPreOrderid());
        transactions.setOnlineOrderid(goodsorder.getOnlineOrderid());
        transactions.setDoneDate(new Date());
        transactions.setTitle("支付");
        transactions.setContent("押金支付");
        transactions.setBalance(goodsorder.getMoney());
        transactions.setObjId(goodsorder.getId());
        transactions.setObjType(Constants.ZERO);
        transactionsMapper.insert(transactions);
        return WxPayNotifyResponse.success("处理成功!");
    }