From 8d1be6f3ab9489cc5cca15b01a0d8e47b1cce862 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Fri, 23 Sep 2022 16:24:12 +0800 Subject: [PATCH] 20220902 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 153 ++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 122 insertions(+), 31 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 f9b0dc0..2c4106a 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; @@ -82,7 +86,7 @@ @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 +100,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(), @@ -236,7 +243,7 @@ agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 15 * 60 * 1000L); return orderInfo.getId(); - } +// } } @@ -256,23 +263,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() + "库存不足"); + } } } + } /** @@ -474,11 +492,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()); } @@ -545,23 +570,25 @@ if(CollUtil.isNotEmpty(mallOrderItemList)){ MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(orderInfo.getTakeUniqueCode()); + Integer profitSwitch = mallTeamLeader.getProfitSwitch()==null?2:mallTeamLeader.getProfitSwitch(); BigDecimal bonusPercent =new BigDecimal(mallTeamLeader.getBonusPercent()==null?"0":mallTeamLeader.getBonusPercent()); -// DataDictionaryCustom dicBonusPercent = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.BONUS_PERCENT.getType(), DataDictionaryEnum.BONUS_PERCENT.getCode()); -// BigDecimal bonusPercent = new BigDecimal(dicBonusPercent.getValue()).setScale(2,BigDecimal.ROUND_DOWN); - for(MallOrderItem mallOrderItem : mallOrderItemList){ - Integer state = mallOrderItem.getState() == null ? 1 : mallOrderItem.getState(); - if(1 == state){ - MallLeaderAchieve mallLeaderAchieve = new MallLeaderAchieve(); - mallLeaderAchieve.setMemberId(orderInfo.getMemberId()); - mallLeaderAchieve.setOrderNo(orderInfo.getOrderNo()); - mallLeaderAchieve.setOrderItemId(mallOrderItem.getId()); - BigDecimal itemAmount = mallOrderItem.getAmount(); - mallLeaderAchieve.setAmount(itemAmount); - BigDecimal bigDecimal = bonusPercent.multiply(itemAmount).setScale(2, BigDecimal.ROUND_DOWN); - mallLeaderAchieve.setProfitAmount(bigDecimal); - mallLeaderAchieve.setUniqueCode(orderInfo.getTakeUniqueCode()); - mallLeaderAchieve.setState(MallLeaderAchieve.STATE_ONE); - mallLeaderAchieveMapper.insert(mallLeaderAchieve); + + if(1 == profitSwitch){ + for(MallOrderItem mallOrderItem : mallOrderItemList){ + Integer state = mallOrderItem.getState() == null ? 1 : mallOrderItem.getState(); + if(1 == state){ + MallLeaderAchieve mallLeaderAchieve = new MallLeaderAchieve(); + mallLeaderAchieve.setMemberId(orderInfo.getMemberId()); + mallLeaderAchieve.setOrderNo(orderInfo.getOrderNo()); + mallLeaderAchieve.setOrderItemId(mallOrderItem.getId()); + BigDecimal itemAmount = mallOrderItem.getAmount(); + mallLeaderAchieve.setAmount(itemAmount); + BigDecimal bigDecimal = bonusPercent.multiply(itemAmount).setScale(2, BigDecimal.ROUND_DOWN); + mallLeaderAchieve.setProfitAmount(bigDecimal); + mallLeaderAchieve.setUniqueCode(orderInfo.getTakeUniqueCode()); + mallLeaderAchieve.setState(MallLeaderAchieve.STATE_ONE); + mallLeaderAchieveMapper.insert(mallLeaderAchieve); + } } } } @@ -676,6 +703,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() + "库存不足"); + } + } + } } } @@ -841,4 +893,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