From f61293e97bb2cb21c8f49e88b1ae5a3cbadefb6a Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Mon, 25 Dec 2023 16:40:09 +0800 Subject: [PATCH] 富文本框输入版本变化 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 190 +++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 167 insertions(+), 23 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java index f152ab7..0852804 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java @@ -8,10 +8,12 @@ import cc.mrbird.febs.mall.conversion.MallGoodsCommentConversion; import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion; import cc.mrbird.febs.mall.conversion.MallOrderRefundConversion; +import cc.mrbird.febs.mall.conversion.MallTeamLeaderConversion; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.*; +import cc.mrbird.febs.mall.vo.ApiLeaderListVo; import cc.mrbird.febs.mall.vo.OrderDetailVo; import cc.mrbird.febs.mall.vo.OrderListVo; import cc.mrbird.febs.mall.vo.OrderRefundVo; @@ -27,6 +29,8 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -78,11 +82,12 @@ private final IApiMallTeamLeaderService iApiMallTeamLeaderService; private final IMallElectronicFenceService iMallElectronicFenceService; private final MallElectronicFenceMapper mallElectronicFenceMapper; + private final MallMemberWalletMapper mallMemberWalletMapper; @Override @Transactional(rollbackFor = Exception.class) public Long createOrder(AddOrderDto addOrderDto) { - synchronized(this){ +// synchronized(this){ MallMember member = LoginUserUtil.getLoginUser(); String takeUniqueCode = addOrderDto.getTakeUniqueCode(); if(StrUtil.isEmpty(takeUniqueCode)){ @@ -96,6 +101,9 @@ //订单范围内才允许下单 MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId()); + if(ObjectUtil.isEmpty(address)){ + throw new FebsException("请重新选择提货人信息"); + } // MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode()); // if(ObjectUtil.isNotEmpty(mallElectronicFence)){ // String inStr = iMallElectronicFenceService.fenceToLocation(mallElectronicFence.getGKey(), @@ -219,24 +227,24 @@ orderInfo.setCarriage(delivaryAmount); } orderInfo.setAmount(total); - + orderInfo.setAddressId(address.getId()); orderInfo.setName(address.getName()); orderInfo.setPhone(address.getPhone()); orderInfo.setIsHome(addOrderDto.getIsHome()); //订单金额大于50,且选择送货上门,订单需要选择地址信息 - if(1 == addOrderDto.getIsHome()){ +// if(1 == addOrderDto.getIsHome()){ if (StrUtil.isBlank(address.getLatitude())||StrUtil.isBlank(address.getLongitude())) { throw new FebsException("请添加地址"); } orderInfo.setAddress(address.getArea() + address.getAddress()); orderInfo.setLatitude(address.getLatitude()); orderInfo.setLongitude(address.getLongitude()); - } +// } this.baseMapper.updateById(orderInfo); agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 15 * 60 * 1000L); return orderInfo.getId(); - } +// } } @@ -256,23 +264,34 @@ orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue()); orderInfo.setCancelType(MallOrderInfo.CANCEL_BY_SELF); this.baseMapper.updateById(orderInfo); - List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(id); + + + + List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId()); if(CollUtil.isNotEmpty(mallOrderItemList)){ for(MallOrderItem mallOrderItem : mallOrderItemList){ - Long goodsId = mallOrderItem.getGoodsId(); - Long skuId = mallOrderItem.getSkuId(); - Integer cnt = mallOrderItem.getCnt(); - MallGoods mallGoods = mallGoodsMapper.selectById(goodsId); - mallGoods.setVolume(mallGoods.getVolume() - cnt); - mallGoods.setStock(mallGoods.getStock() + cnt); - mallGoodsMapper.updateById(mallGoods); + MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId()); + if (sku == null) { + throw new FebsException("购买商品或sku不存在"); + } - MallGoodsSku mallGoodsSku = mallGoodsSkuMapper.selectById(skuId); - mallGoodsSku.setSkuVolume(mallGoodsSku.getSkuVolume() - cnt); - mallGoodsSku.setStock(mallGoodsSku.getStock() + cnt); - mallGoodsSkuMapper.updateById(mallGoodsSku); + if (sku.getStock() < mallOrderItem.getCnt()) { + throw new FebsException(sku.getSkuName() + "库存不足"); + } + + MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId()); + Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt()); + if(1 != goodsResult){ + throw new FebsException(mallGoods.getGoodsName() + "库存不足"); + } + + Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt()); + if(1 != skuResult){ + throw new FebsException(sku.getSkuName() + "库存不足"); + } } } + } /** @@ -326,6 +345,11 @@ throw new FebsException("订单状态不能支付"); } + MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(member.getId()); + if (ObjectUtil.isEmpty(mallMemberWallet)) { + throw new FebsException("用户钱包不存在。"); + } + String payResultStr = ""; String wxResultStr = ""; switch (payOrderDto.getType()) { @@ -355,14 +379,63 @@ agentProducer.sendOrderReturn(orderInfo.getId()); break; case "3": - payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance"); + BigDecimal score = mallMemberWallet.getScore();//积分 + BigDecimal balance = mallMemberWallet.getBalance();//余额 + + //这里将运费定义成折扣总金额 + /** + * 积分 + 余额 1:1来折扣支付金额 + */ + BigDecimal total = orderInfo.getAmount(); + BigDecimal totalCarriage = BigDecimal.ZERO;//总折扣金额 + BigDecimal memberAmount = score.add(balance);//用户积分加余额总数 + if(memberAmount.compareTo(BigDecimal.ZERO) > 0){ + //折扣金额 + if(total.compareTo(memberAmount) >= 0){ + totalCarriage = memberAmount; + }else{ + totalCarriage = total; + } + //减少用户积分和余额 + + BigDecimal avaAmount = totalCarriage;//剩余需要折扣的金额 + if(avaAmount.compareTo(memberAmount) >= 0){ + //清零用户的积分和余额 + mallMemberWallet.setBalance(BigDecimal.ZERO); + mallMemberWallet.setScore(BigDecimal.ZERO); + mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet); + }else{ + /** + * 先扣积分,再扣余额 + */ + if(avaAmount.compareTo(score) >= 0){ + mallMemberWallet.setScore(BigDecimal.ZERO); + avaAmount = avaAmount.subtract(score); + }else{ + mallMemberWallet.setScore(score.subtract(avaAmount)); + avaAmount = BigDecimal.ZERO; + } + //积分不够 + if(avaAmount.compareTo(BigDecimal.ZERO) > 0){ + mallMemberWallet.setBalance(balance.subtract(avaAmount)); + }else{ + mallMemberWallet.setBalance(balance); + } + mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet); + } + } + orderInfo.setCarriage(totalCarriage); + payResultStr = "支付成功"; +// payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance"); orderInfo.setPayOrderNo(orderInfo.getOrderNo()); orderInfo.setPayMethod("余额支付"); - orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); + orderInfo.setStatus(OrderStatusEnum.FINISH.getValue()); +// orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); orderInfo.setPayTime(new Date()); - orderInfo.setPayResult("1"); - orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue()); + orderInfo.setPayResult(1); + orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_FINISH.getValue()); +// orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue()); // boolean hasTc = false; // // 静态倍数 @@ -412,7 +485,7 @@ orderInfo.setPayMethod("积分支付"); orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); orderInfo.setPayTime(new Date()); - orderInfo.setPayResult("1"); + orderInfo.setPayResult(1); mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue()); break; @@ -474,11 +547,18 @@ @Override public List<OrderListVo> findOrderList(OrderListDto orderListDto) { + log.info("订单查询"); MallMember member = LoginUserUtil.getLoginUser(); IPage<MallOrderInfo> page = new Page<>(orderListDto.getPageNum(), orderListDto.getPageSize()); orderListDto.setMemberId(member.getId()); - IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectApiOrderListInPage(page, orderListDto); +// IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectApiOrderListInPage(page, orderListDto); + IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectNewApiOrderListInPage(page, orderListDto); + if (CollUtil.isNotEmpty(mallOrderInfos.getRecords())) { + mallOrderInfos.getRecords().forEach(item -> { + item.setItems(mallOrderItemMapper.selectListByOrderId(item.getId())); + }); + } return MallOrderInfoConversion.INSTANCE.entitysToVos(mallOrderInfos.getRecords()); } @@ -678,6 +758,31 @@ orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue()); orderInfo.setCancelType(MallOrderInfo.CANCEL_OVERTIME_NO_PAY); this.baseMapper.updateById(orderInfo); + + List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId()); + if(CollUtil.isNotEmpty(mallOrderItemList)){ + for(MallOrderItem mallOrderItem : mallOrderItemList){ + MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId()); + if (sku == null) { + throw new FebsException("购买商品或sku不存在"); + } + +// if (sku.getStock() < mallOrderItem.getCnt()) { +// throw new FebsException(sku.getSkuName() + "库存不足"); +// } + + MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId()); + Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt()); + if(1 != goodsResult){ + throw new FebsException(mallGoods.getGoodsName() + "库存不足"); + } + + Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt()); + if(1 != skuResult){ + throw new FebsException(sku.getSkuName() + "库存不足"); + } + } + } } } @@ -843,4 +948,43 @@ return new FebsResponse().success().message("已取消"); } + @Override + public Boolean createOrderVerify(ApiCreateOrderVerifyDto apiCreateOrderVerifyDto) { + Boolean flag = false; + Long addressId = apiCreateOrderVerifyDto.getAddressId(); + String takeUniqueCode = apiCreateOrderVerifyDto.getTakeUniqueCode(); + + MallAddressInfo mallAddressInfo = mallAddressInfoMapper.selectById(addressId); + if(ObjectUtil.isEmpty(mallAddressInfo)){ + return flag; + } + MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(takeUniqueCode); + if(ObjectUtil.isEmpty(mallElectronicFence)){ + return flag; + } + //{"data":{"count":1,"results":[{"gfid":800899,"gfname":"87053658_fence","in":0}]},"errcode":10000,"errdetail":null,"errmsg":"OK"} + String resultsStr = iMallElectronicFenceService.fenceToLocation(mallElectronicFence.getGKey(), + mallElectronicFence.getServiceId(), + mallAddressInfo.getLongitude() + "," + mallAddressInfo.getLatitude(), + mallElectronicFence.getGid()); + if("fail".equals(resultsStr)){ + return flag; + } + JSONArray objects = JSONUtil.parseArray(resultsStr); + for(Object obj : objects){ + //{"gfid":800899,"gfname":"87053658_fence","in":0} + JSONObject jsonObject = JSONUtil.parseObj(obj); + String gfid = jsonObject.get("gfid").toString(); + String in = jsonObject.get("in").toString(); + String gfname = jsonObject.get("gfname").toString(); + //指定坐标是否在围栏中 + //1:在, + //0:不在; + if("1".equals(in)){ + flag = true; + } + } + return flag; + } + } -- Gitblit v1.9.1