From 20bf12dc209329b29ac96d01efabaa3a0ff30cb2 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期日, 26 一月 2025 17:27:31 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/qijisheng --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 313 ++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 231 insertions(+), 82 deletions(-) diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java index 4519f1b..cfc9dfc 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java @@ -1,16 +1,12 @@ package com.ruoyi.order.service.impl; -import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.account.api.feignClient.AppUserClient; -import com.ruoyi.account.api.feignClient.BalanceChangeRecordClient; -import com.ruoyi.account.api.feignClient.UserCouponClient; -import com.ruoyi.account.api.feignClient.UserPointClient; +import com.ruoyi.account.api.feignClient.*; import com.ruoyi.account.api.model.*; +import com.ruoyi.common.core.constant.ExpressCompanyMap; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; @@ -24,27 +20,41 @@ import com.ruoyi.order.model.OrderBalancePayment; import com.ruoyi.order.model.OrderGood; import com.ruoyi.order.model.RefundPass; -import com.ruoyi.order.service.*; +import com.ruoyi.order.service.CommissionService; +import com.ruoyi.order.service.OrderBalancePaymentService; +import com.ruoyi.order.service.OrderService; +import com.ruoyi.order.service.RefundPassService; import com.ruoyi.order.util.ExpressDeliveryUtil; import com.ruoyi.order.util.payment.PaymentUtil; import com.ruoyi.order.util.payment.model.RefundCallbackResult; import com.ruoyi.order.util.payment.model.RefundResult; import com.ruoyi.order.util.vo.MapTrackKD100Vo; -import com.ruoyi.order.util.vo.QueryKD100Vo; +import com.ruoyi.order.util.vo.QueryKD100ListVo; import com.ruoyi.order.vo.*; import com.ruoyi.other.api.domain.*; import com.ruoyi.other.api.feignClient.*; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; import com.ruoyi.system.api.model.LoginUser; +import lombok.SneakyThrows; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; +import java.io.InputStream; import java.math.BigDecimal; import java.math.RoundingMode; +import java.net.MalformedURLException; +import java.net.URL; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; @@ -88,9 +98,6 @@ private UserPointClient userPointClient; @Resource - private PointSettingClient pointSettingClient; - - @Resource private OrderBalancePaymentService orderBalancePaymentService; @Resource @@ -115,6 +122,11 @@ @Resource private UserCouponClient userCouponClient; + @Resource + private UserChangeLogClient userChangeLogClient; + + @Resource + private RegionClient regionClient; @@ -201,6 +213,12 @@ orderDetailVO.setLongitude(shop.getLongitude()); orderDetailVO.setLatitude(shop.getLatitude()); orderDetailVO.setShopId(shop.getId()); + if(StringUtils.isNotEmpty(order.getExpressResult())){ + MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(order.getExpressResult(), MapTrackKD100Vo.class); + List<QueryKD100ListVo> data = mapTrackKD100Vo.getData(); + orderDetailVO.setExpress(null != data && data.size() > 0 ? data.get(0).getContext() : ""); + } + if(order.getOrderType() == 1){ List<TechnicianSubscribe> data = technicianSubscribeClient.getTechnicianSubscribeList(order.getId()).getData(); if(data.size() > 0){ @@ -213,7 +231,7 @@ } // 生成核销码BASE64 try { - String base64 = QRCodeGenerator.generateQRCodeBase64(order.getOrderNumber(), 124, 124); + String base64 = QRCodeGenerator.generateQRCodeBase64(String.valueOf(order.getId()), 124, 124); orderDetailVO.setWriteOffCode(base64); } catch (Exception e) { e.printStackTrace(); @@ -251,12 +269,12 @@ @Override @Transactional(rollbackFor = Exception.class) - public void writeOff(String id,Integer shopId, Integer technicianId) { + public void writeOff(String id, Integer shopId, String technicianId) { LoginUser loginUserApplet = tokenService.getLoginUserApplet(); Order order = orderMapper.selectById(id); boolean check = check(order, shopId, loginUserApplet.getUserid()); if (!check){ - throw new ServiceException("订单不存在"); + throw new ServiceException("该订单与当前扫码门店不一致"); } // 售后设置 @@ -276,7 +294,10 @@ order.setAfterSaleTime(LocalDateTime.now().plusDays(days)); order.setEndTime(LocalDateTime.now()); order.setCancellerAppUserId(loginUserApplet.getUserid()); - order.setTechnicianId(technicianId); + if(StringUtils.isNotEmpty(technicianId) && !"null".equals(technicianId)){ + order.setTechnicianId(Integer.valueOf(technicianId)); + } + // TODO orderMapper.updateById(order); } @@ -328,11 +349,31 @@ orderPageListVo.setUserName(appUser.getName()); orderPageListVo.setPhone(appUser.getPhone()); } - RefundPass one = refundPassService.getOne(new LambdaQueryWrapper<RefundPass>().eq(RefundPass::getOrderId, orderPageListVo.getId()).eq(RefundPass::getDelFlag, 0).last(" order by create_time desc limit 0, 1")); + RefundPass one = refundPassService.getOne(new LambdaQueryWrapper<RefundPass>().eq(RefundPass::getOrderId, orderPageListVo.getId()).eq(RefundPass::getDelFlag, 0).last(" order by create_time desc limit 0,1")); orderPageListVo.setRefundPassId(null != one ? one.getId().toString() : null); + + // 平台分佣 + List<ShopBalanceStatement> data = shopBalanceStatementClient.getShopBalanceStatementList(Arrays.asList(1, 2, 3), Long.valueOf(orderPageListVo.getId())).getData(); + BigDecimal reduce = data.stream().map(ShopBalanceStatement::getVariableAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + orderPageListVo.setGetCommission(reduce); + + String expressJson = orderPageListVo.getExpressJson(); + if (StringUtils.isNotEmpty(expressJson) && !expressJson.equals("NULL")){ + JSONObject jsonObject = null; + try { + jsonObject = JSONObject.parseObject(expressJson); + String companyName = ExpressCompanyMap.getCompanyNameByCode(jsonObject.getString("com")); + orderPageListVo.setExpressCompany(companyName); + orderPageListVo.setExpressNum(jsonObject.getString("num")); + } catch (Exception e) { + } + + } + } return pageInfo.setRecords(list); } + /** @@ -366,8 +407,6 @@ /** * 确认发货操作 - * @param orderId - * @param code * @return */ @Override @@ -397,7 +436,7 @@ JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); Integer waitTime = jsonObject.getInteger("waitTime"); redisTemplate.opsForZSet().add("order_express", order.getId(), LocalDateTime.now().plusHours(waitTime).toEpochSecond(ZoneOffset.UTC)); - + JSONObject jsonObject1 = JSON.parseObject(confirmDelivery.getCode()); String com = jsonObject1.getString("com"); String num = jsonObject1.getString("num"); @@ -407,6 +446,10 @@ order.setExpressResult(JSON.toJSONString(mapTrackKD100Vo)); this.updateById(order); return R.ok(); + } + + public static void main(String[] args) { + System.out.println(LocalDateTime.now().toEpochSecond(ZoneOffset.UTC)); } @@ -421,7 +464,7 @@ if(Arrays.asList(5, 6, 7).contains(order.getOrderStatus())){ return R.fail("无效的操作"); } - if(LocalDateTime.now().isAfter(order.getAfterSaleTime())){ + if(null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())){ return R.fail("订单取消失败"); } order.setOrderStatus(5); @@ -458,7 +501,7 @@ BigDecimal balance = appUser.getBalance(); if(null != orderBalancePayment){ appUser.setTotalRedPacketAmount(appUser.getTotalRedPacketAmount().add(orderBalancePayment.getRedPacketAmount()).setScale(2, RoundingMode.HALF_EVEN)); - appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN)); +// appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN)); } appUser.setBalance(balance.add(paymentAmount).setScale(2, RoundingMode.HALF_EVEN)); appUser.setShopAmount(appUser.getShopAmount().subtract(paymentAmount).setScale(2, RoundingMode.HALF_EVEN)); @@ -506,22 +549,24 @@ } appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint); - boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId()); - if(vipDemotion){ - appUser.setVipId(appUser.getVipId() - 1); - } - //构建积分流水明细 - UserPoint userPoint = new UserPoint(); - userPoint.setType(1); - userPoint.setHistoricalPoint(lavePoint); - userPoint.setVariablePoint(shopPoint); - userPoint.setBalance(appUser.getLavePoint()); - userPoint.setCreateTime(LocalDateTime.now()); - userPoint.setAppUserId(order.getAppUserId()); - userPoint.setObjectId(order.getId()); - userPointClient.saveUserPoint(userPoint); + if(shopPoint > 0){ + UserPoint userPoint = new UserPoint(); + userPoint.setType(1); + userPoint.setHistoricalPoint(lavePoint); + userPoint.setVariablePoint(shopPoint); + userPoint.setBalance(appUser.getLavePoint()); + userPoint.setCreateTime(LocalDateTime.now()); + userPoint.setAppUserId(order.getAppUserId()); + userPoint.setObjectId(order.getId()); + userPointClient.saveUserPoint(userPoint); + } appUserClient.editAppUserById(appUser); + + //降级检测 + if(1 < appUser.getVipId() && appUser.getVipId() < 4){ + appUserClient.vipDemotion(appUser.getId()); + } //回退优惠券状态 if(null != order.getUserCouponId()){ UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData(); @@ -549,7 +594,7 @@ BigDecimal balance = appUser.getBalance(); if(null != orderBalancePayment){ appUser.setTotalRedPacketAmount(appUser.getTotalRedPacketAmount().add(orderBalancePayment.getRedPacketAmount()).setScale(2, RoundingMode.HALF_EVEN)); - appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN)); +// appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN)); } appUser.setBalance(balance.add(expressAmount).setScale(2, RoundingMode.HALF_EVEN)); //构建账户余额流水明细 @@ -583,15 +628,18 @@ appUser.setTransferablePoint(appUser.getTransferablePoint() + transferablePoint); //构建积分流水明细 - UserPoint userPoint = new UserPoint(); - userPoint.setType(11); - userPoint.setHistoricalPoint(lavePoint); - userPoint.setVariablePoint(order.getPoint()); - userPoint.setBalance(appUser.getLavePoint()); - userPoint.setCreateTime(LocalDateTime.now()); - userPoint.setAppUserId(order.getAppUserId()); - userPoint.setObjectId(order.getId()); - userPointClient.saveUserPoint(userPoint); + if(order.getPoint() > 0){ + UserPoint userPoint = new UserPoint(); + userPoint.setType(11); + userPoint.setHistoricalPoint(lavePoint); + userPoint.setVariablePoint(order.getPoint()); + userPoint.setBalance(appUser.getLavePoint()); + userPoint.setCreateTime(LocalDateTime.now()); + userPoint.setAppUserId(order.getAppUserId()); + userPoint.setObjectId(order.getId()); + userPointClient.saveUserPoint(userPoint); + } + appUserClient.editAppUserById(appUser); } order.setRefundStatus(2); @@ -637,22 +685,24 @@ } appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint); - boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId()); - if(vipDemotion){ - appUser.setVipId(appUser.getVipId() - 1); - } - //构建积分流水明细 - UserPoint userPoint = new UserPoint(); - userPoint.setType(1); - userPoint.setHistoricalPoint(lavePoint); - userPoint.setVariablePoint(shopPoint); - userPoint.setBalance(appUser.getLavePoint()); - userPoint.setCreateTime(LocalDateTime.now()); - userPoint.setAppUserId(order.getAppUserId()); - userPoint.setObjectId(order.getId()); - userPointClient.saveUserPoint(userPoint); + if(shopPoint > 0){ + UserPoint userPoint = new UserPoint(); + userPoint.setType(1); + userPoint.setHistoricalPoint(lavePoint); + userPoint.setVariablePoint(shopPoint); + userPoint.setBalance(appUser.getLavePoint()); + userPoint.setCreateTime(LocalDateTime.now()); + userPoint.setAppUserId(order.getAppUserId()); + userPoint.setObjectId(order.getId()); + userPointClient.saveUserPoint(userPoint); + } appUserClient.editAppUserById(appUser); + + //降级检测 + if(1 < appUser.getVipId() && appUser.getVipId() < 4){ + appUserClient.vipDemotion(appUser.getId()); + } //回退优惠券状态 if(null != order.getUserCouponId()){ @@ -697,30 +747,21 @@ appUser.setTransferablePoint(appUser.getTransferablePoint() + transferablePoint); //构建积分流水明细 - UserPoint userPoint = new UserPoint(); - userPoint.setType(11); - userPoint.setHistoricalPoint(lavePoint); - userPoint.setVariablePoint(order.getPoint()); - userPoint.setBalance(appUser.getLavePoint()); - userPoint.setCreateTime(LocalDateTime.now()); - userPoint.setAppUserId(order.getAppUserId()); - userPoint.setObjectId(order.getId()); - userPointClient.saveUserPoint(userPoint); + if(order.getPoint() > 0){ + UserPoint userPoint = new UserPoint(); + userPoint.setType(11); + userPoint.setHistoricalPoint(lavePoint); + userPoint.setVariablePoint(order.getPoint()); + userPoint.setBalance(appUser.getLavePoint()); + userPoint.setCreateTime(LocalDateTime.now()); + userPoint.setAppUserId(order.getAppUserId()); + userPoint.setObjectId(order.getId()); + userPointClient.saveUserPoint(userPoint); + } return R.ok(); } - /** - * 会员降级检测 - */ - public boolean vipDemotion(Integer shopPoint, Integer vipId){ - if(vipId == 1 || vipId > 3){ - return false; - } - VipSetting vipSetting = vipSettingClient.getVipSetting(vipId).getData(); - Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole(); - Integer vipLevelUpShop = vipSetting.getVipLevelUpShop(); - return 1 == vipLevelUpShopRole && shopPoint < vipLevelUpShop; - } + /** @@ -795,6 +836,7 @@ } List<OrderGood> orderGoods = orderGoodMapper.selectList(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, orderId).eq(OrderGood::getDelFlag, 0)); int sum = orderGoods.stream().mapToInt(OrderGood::getNum).sum(); + System.out.println("111111111111222"); orderInfo.setGoodsNum(sum); List<Object> goodsJson = new ArrayList<>(); for (OrderGood orderGood : orderGoods) { @@ -840,8 +882,8 @@ * @return */ @Override - public Integer getGoodsSaleNum(Integer goodsId, Integer type) { - return this.baseMapper.getGoodsSaleNum(goodsId, type); + public Integer getGoodsSaleNum(Integer goodsId, Integer type, Long userId) { + return this.baseMapper.getGoodsSaleNum(goodsId, type, userId); } @@ -892,4 +934,111 @@ } } } + + @SneakyThrows + @Override + @Transactional(rollbackFor = Exception.class) + public void importExpress(String url) { + URL url1 = new URL(url); + try (InputStream fileInputStream = url1.openStream()) { + Workbook workbook = new XSSFWorkbook(fileInputStream); + Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet + int lastRowNum = sheet.getLastRowNum(); + for (int i = 2; i <= lastRowNum; i++) { + Row row = sheet.getRow(i); + row.getCell(1).setCellType(CellType.STRING); + String orderNum = row.getCell(1).getStringCellValue(); + // 快递单号 + row.getCell(7).setCellType(CellType.STRING); + String expressNum = row.getCell(7).getStringCellValue(); + // 快递公司名称 + row.getCell(8).setCellType(CellType.STRING); + String expressName = row.getCell(8).getStringCellValue(); + // 省区划代码 + row.getCell(10).setCellType(CellType.STRING); + String provinceCode = row.getCell(10).getStringCellValue(); + // 市区划代码 + row.getCell(12).setCellType(CellType.STRING); + String cityCode = row.getCell(12).getStringCellValue(); + Order order = this.getOne(new LambdaQueryWrapper<Order>() + .eq(Order::getOrderNumber, orderNum) + ); + if (order == null){ + throw new ServiceException("订单不存在:"+orderNum, 500); + } + + Integer orderType = order.getOrderType(); + if (orderType != 2){ + throw new ServiceException("该订单:"+orderNum+"类型不为单品订单", 500); + } + if (order.getDistributionMode() != 2){ + throw new ServiceException("该订单:"+orderNum+"配送方式不为快递", 500); + } + Integer orderStatus = order.getOrderStatus(); + if (orderStatus != 1){ + throw new ServiceException("该订单:"+orderNum+"状态不为待发货", 500); + } + + String companyNameByCode = ExpressCompanyMap.getCodeByCompanyName(expressName); + if(StringUtils.isEmpty(companyNameByCode)){ + throw new ServiceException("快递公司名称错误:"+expressName, 500); + } + + R<Region> regionBiCode = regionClient.getRegionBiCode(provinceCode); + if (regionBiCode.getData() == null) { + throw new ServiceException("省份编码错误:"+provinceCode, 500); + } + R<Region> regionBiCode1 = regionClient.getRegionBiCode(cityCode); + if (regionBiCode1.getData() == null) { + throw new ServiceException("城市编码错误:"+cityCode, 500); + } + JSONObject jsonObject = new JSONObject(); + jsonObject.put("com", companyNameByCode); + jsonObject.put("num", expressNum); + ConfirmDelivery confirmDelivery =new ConfirmDelivery(); + confirmDelivery.setOrderId(order.getId()); + confirmDelivery.setCode(jsonObject.toJSONString()); + confirmDelivery.setDeliverProvince(regionBiCode.getData().getName()); + confirmDelivery.setDeliverProvinceCode(regionBiCode.getData().getCode()); + confirmDelivery.setDeliverCity(regionBiCode1.getData().getName()); + confirmDelivery.setDeliverCityCode(regionBiCode1.getData().getCode()); + confirmDelivery(confirmDelivery); + } + + } catch (IOException e) { + e.printStackTrace(); + throw new ServiceException(e.getMessage()); + } + + + } + + + public static void importExpress2(String filePath) throws MalformedURLException { + // 从网络地址读取 + URL url = new URL(filePath); + try (InputStream fileInputStream = url.openStream()) { + Workbook workbook = new XSSFWorkbook(fileInputStream); + + Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet + int lastRowNum = sheet.getLastRowNum(); + + for (int i = 2; i <= lastRowNum; i++) { + Row row = sheet.getRow(i); + String orderNum = row.getCell(1).getStringCellValue(); + // 快递单号 + String expressNum = row.getCell(7).getStringCellValue(); + // 快递公司名称 + String expressName = row.getCell(8).getStringCellValue(); + // 省区划代码 + String provinceCode = row.getCell(10).getStringCellValue(); + // 市区划代码 + String cityCode = row.getCell(12).getStringCellValue(); + } + + } catch (IOException e) { + throw new ServiceException(e.getMessage()); + } + } + } -- Gitblit v1.7.1