From 53eece6b5c6845fd70155a101b2a9e567b59a421 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期日, 10 八月 2025 20:01:17 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargeOrderServiceImpl.java |  152 ++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 126 insertions(+), 26 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargeOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargeOrderServiceImpl.java
index dc3b6ed..166a46f 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargeOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargeOrderServiceImpl.java
@@ -1,15 +1,19 @@
 package com.ruoyi.order.service.impl;
 
 import cn.hutool.core.util.IdUtil;
-import com.alibaba.fastjson2.JSONObject;
+import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.account.api.feignClient.AppUserClient;
 import com.ruoyi.account.api.feignClient.UserPointClient;
 import com.ruoyi.account.api.model.AppUser;
 import com.ruoyi.account.api.model.UserPoint;
+import com.ruoyi.chargingPile.api.feignClient.SiteClient;
+import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.common.core.constant.ExpressCompanyMap;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.dto.ChargingOrderGroup;
+import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.page.PageInfo;
@@ -21,9 +25,15 @@
 import com.ruoyi.order.service.ChargeOrderService;
 import com.ruoyi.order.service.OrderService;
 import com.ruoyi.order.vo.ConfirmDelivery;
+import com.ruoyi.other.api.domain.IntegralRecord;
 import com.ruoyi.other.api.domain.Region;
+import com.ruoyi.other.api.domain.TIntegralRule;
+import com.ruoyi.other.api.feignClient.OtherClient;
 import com.ruoyi.system.api.domain.SysConfig;
+import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysConfigClient;
+import com.ruoyi.system.api.feignClient.SysUserClient;
+import io.swagger.models.auth.In;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@@ -57,18 +67,24 @@
     private OrderService orderService;
     @Resource
     private SysConfigClient sysConfigClient;
-
+    @Resource
+    private OtherClient otherClient;
     @Resource
     private AppUserClient appUserClient;
     @Resource
     private UserPointClient userPointClient;
     @Resource
     private ChargeOrderService chargeOrderService;
+    @Resource
+    private SiteClient siteClient;
+
+    @Resource
+    private SysUserClient sysUserClient;
     private static final String DEFAULT_AVATAR_URL = "http://qijishenghuiyuan.obs.cn-southwest-2.myhuaweicloud.com/admin/58084a0ce8c34dc79f9d8b4c0bc3774a.png";
 
 
     @Override
-    public void importExpress(MultipartFile file) {
+    public R<JSONObject> importExpress(MultipartFile file) {
  /*       System.out.println("导入订单url:"+url);
         URL url1 = null;
         try {
@@ -80,7 +96,7 @@
             throw new RuntimeException(e);
         }*/
         List<String> orderNumberList=new ArrayList<>();
-
+        JSONObject result = new JSONObject();
         try (InputStream inputStream = file.getInputStream();
              Workbook workbook = new XSSFWorkbook(inputStream)) {
 //            Workbook workbook = new XSSFWorkbook(fileInputStream);
@@ -201,51 +217,61 @@
                 String powerStationId = row.getCell(18).getStringCellValue();
 
                 // 终端编码
-                if (row.getCell(20 )== null){
-                    throw new ServiceException("第" + i + "行电站id为空", 500);
+                if (row.getCell(19 )== null){
+                    throw new ServiceException("第" + i + "行终端编码为空", 500);
                 }
-                row.getCell(20).setCellType(CellType.STRING);
-                String terminalCode = row.getCell(20).getStringCellValue();
+                row.getCell(19).setCellType(CellType.STRING);
+                String terminalCode = row.getCell(19).getStringCellValue();
 
                 // 车牌号
-                if (row.getCell(26 )== null){
+                if (row.getCell(20 )== null){
                     throw new ServiceException("第" + i + "行车牌号为空", 500);
                 }
-                row.getCell(26).setCellType(CellType.STRING);
+                row.getCell(20).setCellType(CellType.STRING);
                 String plateNumber = row.getCell(26).getStringCellValue();
 
                 // 电站价电费金额
-                if (row.getCell(73 )== null){
+                if (row.getCell(21 )== null){
                     throw new ServiceException("第" + i + "行电站价电费金额为空", 500);
                 }
-                row.getCell(73).setCellType(CellType.STRING);
-                String electricityAmount = row.getCell(73).getStringCellValue();
+                row.getCell(21).setCellType(CellType.STRING);
+                String electricityAmount = row.getCell(21).getStringCellValue();
 
                 // 电站价服务费金额
-                if (row.getCell(74 )== null){
+                if (row.getCell(22 )== null){
                     throw new ServiceException("第" + i + "行电站价服务费金额为空", 500);
                 }
-                row.getCell(74).setCellType(CellType.STRING);
-                String serviceAmount = row.getCell(74).getStringCellValue();
+                row.getCell(22).setCellType(CellType.STRING);
+                String serviceAmount = row.getCell(22).getStringCellValue();
 
                 // 电站价总金额
-                if (row.getCell(75 )== null){
-                    throw new ServiceException("第" + i + "行电站价服务费金额为空", 500);
+                if (row.getCell(23 )== null){
+                    throw new ServiceException("第" + i + "行电站价总金额为空", 500);
                 }
-                row.getCell(75).setCellType(CellType.STRING);
-                String totalAmount = row.getCell(75).getStringCellValue();
+                row.getCell(23).setCellType(CellType.STRING);
+                String totalAmount = row.getCell(23).getStringCellValue();
+                // 绿电分
+                if (row.getCell(24 )== null){
+                    throw new ServiceException("第" + i + "行绿电分为空", 500);
+                }
+                row.getCell(24).setCellType(CellType.STRING);
+                String point = row.getCell(24).getStringCellValue();
 
 
                 //检查订单号是否重复
                 if (orderNumberList.contains(orderNum)) {
-                    throw new ServiceException("订单号重复:" + orderNum, 500);
+//                    throw new ServiceException("订单号重复:" + orderNum, 500);
+                    result.append("订单号:[", orderNum+"]重复");
+                    continue;
                 }
                 //数据库中是否存在
                 ChargeOrder order = chargeOrderService.getOne(new LambdaQueryWrapper<ChargeOrder>()
                         .eq(ChargeOrder::getOrderNumber, orderNum)
                 );
                 if (order != null) {
-                    throw new ServiceException("数据库中订单已存在:" + orderNum, 500);
+//                    throw new ServiceException("数据库中订单已存在:" + orderNum, 500);
+                    result.append("订单号:[", orderNum+"]数据库中订单已存在");
+                    continue;
                 }
                 orderNumberList.add(orderNum);//添加到订单集合中
 
@@ -268,6 +294,7 @@
                 chargeOrder.setElectricityAmount(new BigDecimal(electricityAmount));
                 chargeOrder.setServiceAmount(new BigDecimal(serviceAmount));
                 chargeOrder.setTotalAmount(new BigDecimal(totalAmount));
+                chargeOrder.setPoint(Integer.valueOf(point));
 
                 R r = importData(chargeOrder);
                 if (R.isError(r)) {
@@ -279,6 +306,10 @@
             e.printStackTrace();
             throw new ServiceException(e.getMessage());
         }
+        if(!result.isEmpty()){
+            return R.ok(result);
+        }
+        return R.ok();
     }
 
     @Override
@@ -288,12 +319,20 @@
         pageInfo.setRecords(list);
         return pageInfo;
     }
+
+    @Override
+    public List<ChargingOrderGroup> chargingOrderGroup(ChargingPercentProvinceDto chargingPercentProvinceDto) {
+
+        return this.baseMapper.chargingOrderGroup(chargingPercentProvinceDto);
+    }
+
     @Transactional
     public R importData(ChargeOrder chargeOrder) {
-        //先计算出积分数
-        Integer point = getPoint(chargeOrder.getTotalAmount());
-        //获取用户,更改积分数
+        Site site = siteClient.getSiteAll().getData().stream().filter(e -> e.getId()
+                .equals(chargeOrder.getPowerStationId())).findFirst().orElse(null);
+        Integer point=0;
         AppUser appuser = appUserClient.getAppUserByPhone1(chargeOrder.getPhone()).getData();
+        //获取用户,更改积分数
         if (null==appuser){
             //创建用户
             appuser = new AppUser();
@@ -317,7 +356,28 @@
         if (userId==null){
             return R.fail("导入订单-保存用户失败");
         }
-
+        if (site==null){
+            //先计算出积分数
+            point = getPoint(chargeOrder.getTotalAmount());
+        }else{
+            point = getPointSite(chargeOrder.getTotalAmount(),site.getId());
+            // 增加站点端积分明细
+            IntegralRecord integralRecord = new IntegralRecord();
+            integralRecord.setSiteId(chargeOrder.getPowerStationId());
+            integralRecord.setAppUserId(appuser.getId());
+            integralRecord.setIntegralType(2);
+            integralRecord.setIntegralCount(point);
+            integralRecord.setDelFlag(0);
+            integralRecord.setCreateTime(LocalDateTime.now());
+            otherClient.saveIntegralRecord(integralRecord);
+            // 扣除站点系统用户的积分数
+            List<SysUser> data = sysUserClient.getSysUserAll().getData();
+            SysUser sysUser = data.stream().filter(e -> e.getSiteId().equals(site.getId())).findFirst().orElse(null);
+            if (sysUser != null) {
+                sysUser.setIntegral(sysUser.getIntegral()==null?0:sysUser.getIntegral()-point);
+                sysUserClient.updateSysUser(sysUser);
+            }
+        }
         //添加用户积分流水
         //转入用户
         UserPoint userPoint = new UserPoint();
@@ -375,5 +435,45 @@
         }
 
     }
+    /**
+     * 获取现金兑换的积分数
+     * @param cash
+     * @return
+     */
+    public Integer getPointSite(BigDecimal cash,Integer siteId){
+        if (cash == null || cash.compareTo(BigDecimal.ZERO) < 0) {
+            throw new IllegalArgumentException("金额不能为null或负数");
+        }
+        // 获取积分兑换比例配置
+        TIntegralRule data = otherClient.getSetBySiteId(siteId).getData();
+        if (data == null) {
+            throw new RuntimeException("获取积分兑换比例配置失败");
+
+        }
+        if (org.springframework.util.StringUtils.hasLength(data.getChargeCredit())) {
+            throw new RuntimeException("获取积分兑换比例配置失败");
+        }
+        String chargeCredit = data.getChargeCredit();
+        if (StringUtils.isBlank(chargeCredit)) {
+            throw new RuntimeException("积分兑换比例配置值为空");
+        }
+        try {
+            com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(chargeCredit);
+            Integer num1 = jsonObject.getInteger("num1");
+
+            if (num1 <= 0) {
+                throw new RuntimeException("积分兑换比例必须大于0");
+            }
+            // 计算积分并向下取整(Floor)
+            int cashInt = cash.intValue();
+            return cashInt*=num1;
+
+        } catch (NumberFormatException e) {
+            throw new RuntimeException("积分兑换比例配置值格式错误", e);
+        } catch (ArithmeticException e) {
+            throw new RuntimeException("积分计算结果溢出", e);
+        }
+
+    }
 
 }

--
Gitblit v1.7.1