rk
2025-12-16 2cfceadff437135a255990ab9698788a48adb636
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -20,14 +20,12 @@
import com.doumee.dao.business.join.PlanorderDetailJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.web.dto.CouponDTO;
import com.doumee.dao.web.request.DealIntegralRequest;
import com.doumee.dao.web.request.OrderPayRequest;
import com.doumee.dao.web.request.PayDetailRequest;
import com.doumee.dao.web.request.ShopOrderPayRequest;
import com.doumee.dao.web.request.*;
import com.doumee.dao.web.request.goods.MemberOrderRequest;
import com.doumee.dao.web.request.goods.DealOrderRequest;
import com.doumee.dao.web.request.goods.OrderCommentRequest;
import com.doumee.dao.web.request.goods.OrderGoodsCommentRequest;
import com.doumee.dao.web.response.HomeInfoResponse;
import com.doumee.dao.web.response.MyPageResponse;
import com.doumee.dao.web.response.goods.*;
import com.doumee.service.business.AreasService;
@@ -78,7 +76,8 @@
    private ActivitySignMapper activitySignMapper;
    @Autowired
    private AftersaleMapper  aftersaleMapper;
    @Autowired
    private ShopGoodsRelationMapper shopGoodsRelationMapper;
    @Autowired
    private MemberMapper memberMapper;
@@ -98,7 +97,13 @@
    private ShopMapper shopMapper;
    @Autowired
    private ShopGoodsRelationMapper relationMapper;
    @Autowired
    private MemberCouponMapper memberCouponMapper;
    @Autowired
    private CollectMapper collectMapper;
    @Autowired
    private WxMiniUtilService wxMiniUtilService;
@@ -529,7 +534,6 @@
    /****************************************移动端接口开始********************************************************************/
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public PayResponse orderPay(OrderPayRequest orderPayRequest){
        Member member = memberMapper.selectById(orderPayRequest.getMemberId());
@@ -710,6 +714,7 @@
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public PayResponse orderPay(ShopOrderPayRequest orderPayRequest,MemberCouponServiceImpl memberCouponService){
        Member member = memberMapper.selectById(orderPayRequest.getMemberId());
@@ -750,7 +755,6 @@
            if(Objects.isNull(shop)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"请选择正确的自提门店!");
            }
            //判断门店是否设置商品的价格信息
            //根据选择商户进行会员与商户信息绑定
@@ -760,7 +764,6 @@
                        .eq(Member::getId,member.getId())
                );
            }
            goodsorder.setPickUpShopId(shop.getId());
            goodsorder.setDistributionShopId(shop.getId());
            if(Objects.isNull(member.getBindShopId())){
@@ -780,6 +783,7 @@
        goodsorder.setPrice(orderPayConfirmResponse.getPayAmount());
        goodsorder.setTotalPrice(orderPayConfirmResponse.getAmount());
        goodsorder.setUseIntegral(orderPayConfirmResponse.getDeductIntegral());
        goodsorder.setIntegral(goodsorder.getUseIntegral());
        goodsorder.setIntegralPrice(orderPayConfirmResponse.getIntegralAmount());
        if(Objects.nonNull(orderPayConfirmResponse.getMemberCoupon())){
@@ -839,6 +843,21 @@
            goodsOrderDetail.setCouponDeduct(payDetailRequest.getCouponDeductCash());
            goodsOrderDetail.setIntegralDeduct(payDetailRequest.getIntegralDeductCash());
            goodsOrderDetail.setOrderId(goodsorder.getId());
            //判断门店是否设置商品的价格信息
            if(Objects.nonNull(goodsorder.getDistributionShopId())){
                ShopGoodsRelation shopGoodsRelation = relationMapper.selectOne(new QueryWrapper<ShopGoodsRelation>().lambda()
                        .eq(ShopGoodsRelation::getIsdeleted,Constants.ZERO) .eq(ShopGoodsRelation::getShopId,goodsorder.getDistributionShopId())
                        .eq(ShopGoodsRelation::getStatus,Constants.ZERO)
                        .eq(ShopGoodsRelation::getIsdeleted,Constants.ZERO)
                        .eq(ShopGoodsRelation::getGoodsSkuId,goodsOrderDetail.getGoodsSkuId())
                        .last(" limit 1 ")
                );
                if(Objects.isNull(shopGoodsRelation)){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,关联经销商未绑定["+goods.getName()+"]商品,请联系管理员!");
                }
                goodsOrderDetail.setShopSettlement(shopGoodsRelation.getPrice());
            }
            goodsOrderDetailList.add(goodsOrderDetail);
            //删除购物车商品
            shopcartMapper.delete(new QueryWrapper<Shopcart>().lambda()
@@ -847,12 +866,18 @@
            );
        }
        //积分变动记录
        Integral integral =Integral.createIntegral(member.getId(),Constants.INTEGRAL_TYPE.ORDER_PAY,goodsorder.getId());
        integral.setNum(goodsorder.getUseIntegral());
        integral.setTotalNum(member.getIntegral().subtract(goodsorder.getUseIntegral()));
        integralMapper.insert(integral);
        //更新用户积分
        memberMapper.subtractIntegral(member.getId(),goodsorder.getUseIntegral());
        if(goodsorder.getUseIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            //更新余额信息 添加积分变动记录
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(goodsorder.getUseIntegral());
            dealIntegralRequest.setDealType(Constants.ONE);
            dealIntegralRequest.setMemberId(member.getId());
            dealIntegralRequest.setObjId(goodsorder.getId());
            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER);
            integralService.dealIntegral(dealIntegralRequest);
        }
        if(goodsorder.getPrice().compareTo(orderPayRequest.getTitlePrice())!=Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"商品价格发生变化,请刷新后重新支付!");
        }
@@ -962,6 +987,9 @@
            j.setImgUrl(fullUrl + j.getImgUrl());
        });
        memberOrderResponse.setMemberOrderDetailResponseList(memberOrderDetailResponseList);
        if(Constants.equalsInteger(memberOrderResponse.getReceiveType(),Constants.ONE)){
            memberOrderResponse.setShopInfo(shopMapper.selectById(memberOrderResponse.getShopId()));
        }
        return memberOrderResponse;
    }
@@ -1079,6 +1107,88 @@
            }
        }
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void cancelOrderNew(Integer orderId,Integer optUserId,String cancelInfo){
        if(Objects.isNull(orderId)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
        if(Objects.isNull(goodsorder)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!(Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_PAY.getKey())
        || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.PAY_DONE.getKey())
        || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_RECEIVE.getKey()) )){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"订单取消失败:订单状态已流转!");
        }
        if(goodsorder.getPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            //微信现金退款
            String refundCode = WxMiniUtilService.wxRefund(goodsorder.getCode().toString(), goodsorder.getPrice(), goodsorder.getPrice());
            Fund fund = new Fund();
            fund.setOrderCode(refundCode);
            fund.setCreateDate(new Date());
            fund.setIsdeleted(Constants.ZERO);
            fund.setRemark(goodsorder.getId().toString());
            fund.setMemberId(goodsorder.getCreator());
            fund.setTitle("订单取消");
            fund.setContent(StringUtils.isBlank(cancelInfo)?"用户主动取消":cancelInfo);
            fund.setObjId(goodsorder.getId());
            fund.setObjType(Constants.ONE);
            fund.setType(Constants.ONE);
            fund.setNum(goodsorder.getPrice());
            fundMapper.insert(fund);
        }
        if(goodsorder.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            //更新余额信息 添加积分变动记录
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(goodsorder.getIntegral());
            dealIntegralRequest.setDealType(Constants.ZERO);
            dealIntegralRequest.setMemberId(goodsorder.getMemberId());
            dealIntegralRequest.setObjId(goodsorder.getId());
            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_CANCEL);
            integralService.dealIntegral(dealIntegralRequest);
        }
        //订单信息取消
        goodsorder.setStatus(Constants.OrderStatus.CLOSE.getKey());
        goodsorder.setCancelDate(new Date());
        goodsorder.setCancelInfo(StringUtils.isBlank(cancelInfo)?"用户主动取消":cancelInfo);
        goodsorder.setCancelUser(optUserId);
        goodsorderMapper.updateById(goodsorder);
        String goodsName = "";
        List<GoodsorderDetail> goodsorderDetailList =  goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().eq("ORDER_ID",goodsorder.getId()));
        if(!Objects.isNull(goodsorderDetailList)&&goodsorderDetailList.size()>Constants.ZERO){
            for (GoodsorderDetail goodsorderDetail:goodsorderDetailList) {
                GoodsSku goodsSku = goodsSkuMapper.selectById(goodsorderDetail.getGoodsSkuId());
                if(StringUtils.isBlank(goodsName)){
                    Goods goods = goodsMapper.selectById(goodsSku.getGoodsId());
                    goodsName = goods.getName();
                }
                if(!Objects.isNull(goodsSku)){
                    goodsSku.setStock(goodsSku.getStock().add(new BigDecimal(Constants.formatIntegerNum(goodsorderDetail.getGoodsNum()))));
                    goodsSkuMapper.updateById(goodsSku);
                }
            }
        }
        //SendWxMessage.orderCancel(goodsorder,memberMapper.selectById(goodsorder.getMemberId()),goodsName);
        //查询优惠券信息记录
        if(!Objects.isNull(goodsorder.getCouponId())){
            MemberCoupon memberCoupon = memberCouponMapper.selectById(goodsorder.getCouponId());
            if(!Objects.isNull(memberCoupon)){
                memberCoupon.setStatus(Constants.ZERO);
                memberCouponMapper.updateById(memberCoupon);
            }
        }
    }
    public BigDecimal getDeductAmount(List<PayDetailRequest> requestList){
        List<MemberCoupon> memberCouponList = new ArrayList<>();
@@ -1295,6 +1405,21 @@
        orderUrgeMapper.insert(orderUrge);
    }
    @Override
    public void delOrder(Integer orderId,Integer memberId){
        Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
        if(!goodsorder.getMemberId().equals(memberId)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:用户信息匹配失败!");
        }
        if(!goodsorder.getStatus().equals(Constants.OrderStatus.CLOSE.getKey())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:当前订单状态,无法进行该操作!");
        }
        goodsorder.setIsdeleted(Constants.ONE);
        goodsorder.setEditDate(new Date());
        goodsorderMapper.updateById(goodsorder);
    }
    /**
     * 订单确认收货
@@ -1307,6 +1432,9 @@
        if(!goodsorder.getMemberId().equals(memberId)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:用户信息匹配失败!");
        }
        if(Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:自提订单,无法进行该操作!");
        }
        if(!goodsorder.getStatus().equals(Constants.OrderStatus.WAIT_RECEIVE.getKey())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:订单未发货,无法进行确认!");
        }
@@ -1316,7 +1444,69 @@
        goodsorder.setStatus(Constants.OrderStatus.DONE.getKey());
        goodsorder.setDoneDate(new Date());
        goodsorderMapper.updateById(goodsorder);
        //经销商分销 添加分销金额记录
        this.addShopIntegral(goodsorder);
    }
    /**
     * 订单核销
     * @param code
     * @param memberId
     */
    @Override
    public void orderWriteOff(String exchangeCode,Integer memberId){
        Goodsorder goodsorder = goodsorderMapper.selectOne(new QueryWrapper<Goodsorder>().lambda()
                .eq(Goodsorder::getExchangeCode,exchangeCode)
                .eq(Goodsorder::getIsdeleted,Constants.ZERO).last("limit 1 "));
        if(Objects.isNull(goodsorder)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:配送订单,无法进行该操作!");
        }
        if(!goodsorder.getStatus().equals(Constants.OrderStatus.PAY_DONE.getKey())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:订单状态已流转,无法进行该操作!");
        }
        Shop shop = shopMapper.selectById(goodsorder.getPickUpShopId());/*selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getMemberId,memberId)
                .eq(Shop::getIsdeleted,Constants.ZERO).last("limit 1 ")
        );*/
        if(Objects.isNull(shop)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到订单关联经销商信息,请联系管理员");
        }
        if(!Constants.equalsInteger(shop.getMemberId(),memberId)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"["+shop.getName()+"]非您绑定的经销商,无法进行该操作!");
        }
        goodsorder.setStatus(Constants.OrderStatus.DONE.getKey());
        goodsorder.setDoneDate(new Date());
        goodsorderMapper.updateById(goodsorder);
        //经销商分销 添加分销金额记录
        this.addShopIntegral(goodsorder);
    }
    public void addShopIntegral(Goodsorder goodsorder){
        if(Objects.isNull(goodsorder.getDistributionShopId())){
            return;
        }
        List<GoodsorderDetail> detailList = goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
                .eq(GoodsorderDetail::getOrderId,goodsorder.getId())
                .isNotNull(GoodsorderDetail::getShopSettlement)
        );
        if(CollectionUtils.isNotEmpty(detailList)){
            BigDecimal settlement = detailList.stream().map(i->i.getShopSettlement()).reduce(BigDecimal.ZERO,BigDecimal::add);
            //更新余额信息 添加积分变动记录
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(settlement);
            dealIntegralRequest.setDealType(Constants.ZERO);
            dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
            dealIntegralRequest.setObjId(goodsorder.getId());
            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_SETTLEMENT);
            integralService.dealShopIntegral(dealIntegralRequest);
        }
    }
    @Override
@@ -1533,4 +1723,52 @@
    @Override
    public HomeInfoResponse getHomeInfo(int memberId){
        HomeInfoResponse homeInfoResponse = new HomeInfoResponse();
        Member member = memberMapper.selectById(memberId);
        if(Objects.isNull(member)){
            return homeInfoResponse;
        }
        homeInfoResponse.setMember(member);
        homeInfoResponse.setWaitReceiveNum(
                goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getIsdeleted,Constants.ZERO)
                        .eq(Goodsorder::getMemberId,member.getId())
                        .eq(Goodsorder::getStatus,Constants.OrderStatus.WAIT_RECEIVE.getKey()))
        );
        homeInfoResponse.setWaitPayNum(
                goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getIsdeleted,Constants.ZERO)
                        .eq(Goodsorder::getMemberId,member.getId())
                        .eq(Goodsorder::getStatus,Constants.OrderStatus.WAIT_PAY.getKey()))
        );
        homeInfoResponse.setCartTypeNum(
                shopcartMapper.selectCount(new QueryWrapper<Shopcart>().lambda()
                        .eq(Shopcart::getIsdeleted,Constants.ZERO)
                        .eq(Shopcart::getMemberId,member.getId()))
        );
        homeInfoResponse.setCouponNum(
                memberCouponMapper.selectCount(new QueryWrapper<MemberCoupon>().lambda()
                        .eq(MemberCoupon::getIsdeleted,Constants.ZERO)
                        .eq(MemberCoupon::getMemberId,member.getId())
                        .eq(MemberCoupon::getStatus,Constants.ZERO)
                        .apply(" end_date >now() ")
                )
        );
        homeInfoResponse.setCollectNum(
                collectMapper.selectCount(new QueryWrapper<Collect>().lambda()
                        .eq(Collect::getIsdeleted,Constants.ZERO)
                        .eq(Collect::getMemberId,member.getId())
                )
        );
        return homeInfoResponse;
    }
}