Parcourir la source

fix - 报价导出

jinyw il y a 1 mois
Parent
commit
ecbcaf2bb7

+ 12 - 0
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/business/domain/vo/quotation/QuotationExportVO.java

@@ -37,5 +37,17 @@ public class QuotationExportVO {
     // 最终价格
     private BigDecimal finalPrice;
 
+    // 原始基价
+    private BigDecimal originalBasicPrice;
+
+    // 折后基价
+    private BigDecimal basicPrice;
+
+    // 选配价格
+    private BigDecimal optionalPrice;
+
+    // 币种汇率
+    private BigDecimal exchangeRate;
+
 
 }

+ 54 - 11
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/business/service/quotation/IQuotationConstantService.java

@@ -8,26 +8,35 @@ public interface IQuotationConstantService {
     String QUOTATION_FTL = "报价模板.ftl";
 
     // 报价编号
-    String QUOTATION_NO = "quotationNo";
+    String QUOTATION_NO = "quotation_no";
 
-    // 电梯数据
-    String DATA_LIST = "dataList";
+    // 电梯规格单价
+    String UNIT_PRICE = "unit_price";
 
-    // 价格数据
-    String PRICE_LIST = "priceList";
+    // 电梯规格数量
+    String QTY = "qty";
+
+    // 电梯规格总价价
+    String T_PRICE = "t_price";
 
     // 运费
-    String FREIGHT_PRICE = "freightPrice";
+    String FREIGHT_PRICE = "freight_price";
 
     // 总价(包含运费)
-    String PRICE_TOTAL = "priceTotal";
+    String PRICE_TOTAL = "total_price";
+
+    // 目的地的
+    String DESTINATION = "destination";
+
+    // 集装箱信息
+    String CONTAINER = "container";
+
+    // 币种汇率
+    String CURRENCY = "currency";
 
     // 日期
     String DATE = "date";
 
-    // 是否升降電梯
-    String IS_ELEVATOR = "elevator";
-
     // 项目名
     String PROJECT = "project";
 
@@ -41,7 +50,7 @@ public interface IQuotationConstantService {
     String EMAIL = "email";
 
     // 顾问
-    // String CONSULTANT = "consultant";
+    String DISCOUNT = "discount";
 
     String MM_DD_YYYY = "MM.dd.yyyy";
 
@@ -51,4 +60,38 @@ public interface IQuotationConstantService {
 
     DecimalFormat format = new DecimalFormat("#,###");
 
+    DecimalFormat format2 = new DecimalFormat("#,###.##");
+
+    String SPECIFICATION = "specification";
+
+    String PRODUCT_TYPE = "product_type";
+
+    String STAND = "stand";
+
+    String LOAD = "load";
+
+    String P = "p";
+
+    String SPEED = "speed";
+
+    String FLOORS = "floors";
+
+    String STOPS = "stops";
+
+    String DOORS = "doors";
+
+    String MAIN_FLOOR = "main_floor";
+
+    String CABIN = "cabin";
+
+    String DOOR = "door";
+
+    String SHAFT = "shaft";
+
+    String PIT = "pit";
+
+    String OH = "oh";
+
+    String TR = "tr";
+
 }

+ 73 - 45
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/business/service/quotation/impl/QuotationExportServiceImpl.java

@@ -4,30 +4,34 @@ import cn.hutool.core.codec.Base64;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.WordUtil;
 import com.ruoyi.common.utils.office.doc.CommonDocUtils;
 import com.ruoyi.framework.config.RuoYiConfig;
+import com.ruoyi.project.business.domain.TqBargainPrice;
 import com.ruoyi.project.business.domain.TqQuotation;
 import com.ruoyi.project.business.domain.bo.quotation.QuotationExportBO;
 import com.ruoyi.project.business.domain.vo.quotation.ElevatorExportVO;
 import com.ruoyi.project.business.domain.vo.quotation.QuotationExportVO;
 import com.ruoyi.project.business.domain.vo.quotation.WParam;
-import com.ruoyi.project.business.domain.vo.quotation.WPrice;
 import com.ruoyi.project.business.mapper.quotation.TqQuotationMapper;
 import com.ruoyi.project.business.service.ITbCurrencyService;
 import com.ruoyi.project.business.service.ITcProjectService;
 import com.ruoyi.project.business.service.quotation.IQuotationConstantService;
 import com.ruoyi.project.business.service.quotation.IQuotationExportService;
+import com.ruoyi.project.business.service.quotation.ITqBargainPriceService;
 import com.ruoyi.project.business.service.quotation.ITqSpecificationService;
 import java.io.File;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
@@ -45,6 +49,8 @@ public class QuotationExportServiceImpl
 
     public final ITbCurrencyService tbCurrencyService;
 
+    public final ITqBargainPriceService tqBargainPriceService;
+
     public final ITqSpecificationService specificationService;
 
     @Override
@@ -58,6 +64,7 @@ public class QuotationExportServiceImpl
         List<ElevatorExportVO> specificationList = specificationService.listElevatorExport(quotationIdList);
         Map<Long, List<ElevatorExportVO>> elevatorMap = specificationList.stream()
             .collect(Collectors.groupingBy(ElevatorExportVO::getQuotationId));
+
         // 多个报价单文件
         List<File> fileList = new ArrayList<>();
         for (Long quotationId : quotationIdList) {
@@ -67,65 +74,78 @@ public class QuotationExportServiceImpl
             List<ElevatorExportVO> elevatorDataList = elevatorMap.get(quotationId);
 
             Map<String, Object> map = new HashMap<>();
-            List<Map<String, Object>> elevatorList = new ArrayList<>();
             // 首页
             map.put(QUOTATION_NO, getStr(quotation.getQuotationNo()));
+            // 项目
             map.put(PROJECT, getStr(quotation.getProjectName()));
+            // 地址
             map.put(ADDRESS, getStr(quotation.getAddress()));
+            // 客户
             map.put(CLIENT, getStr(quotation.getClient()));
+            // 邮箱
             map.put(EMAIL, getStr(quotation.getEmail()));
+            // 日期
             map.put(DATE, getStr(DateUtils.parseDateToStr(MM_DD_YYYY, quotation.getSubmitDate())));
-            map.put(IS_ELEVATOR, true);
+            // 运费
+            map.put(FREIGHT_PRICE, formatNum(quotation.getFreightPrice()));
+            // 总价
+            map.put(PRICE_TOTAL, formatNum(quotation.getFinalPrice()));
+            // 币种汇率
+            BigDecimal divide1 = BigDecimal.ONE.divide(quotation.getExchangeRate(), 2, RoundingMode.HALF_UP);
+            map.put(CURRENCY, formatNum2(divide1));
 
-            File file = new CommonDocUtils().loadFromClasspath("/wordTemplate/KW2600模版.docx")
-                .replaceData(map).genFile(getStr(quotation.getQuotationNo()));
-            fileList.add(file);
-            WordUtil.exportZip(response, fileList);
+            // TODO: 2024/7/31
+            // 目的地
+            map.put(DESTINATION, "unknown");
+            // 集装箱信息
+            map.put(CONTAINER, "unknown");
 
-            if (true) {
-                return;
+            // 议价数据(折扣)
+            // 整单折扣没存,需要算
+            map.put(DISCOUNT, "0%");
+            List<TqBargainPrice> list = tqBargainPriceService.list(
+                Wrappers.<TqBargainPrice>lambdaQuery().eq(TqBargainPrice::getQuotationId, quotationId)
+                    .orderByDesc(TqBargainPrice::getId));
+            if (CollUtil.isNotEmpty(list)) {
+                TqBargainPrice tqBargainPrice = list.get(0);
+                BigDecimal discountBasicPrice = tqBargainPrice.getAcceptPrice().subtract(quotation.getOptionalPrice());
+                BigDecimal divide = discountBasicPrice.divide(quotation.getOriginalBasicPrice(), 2, RoundingMode.DOWN);
+                map.put(DISCOUNT, formatNum(divide.multiply(new BigDecimal(100))) + "%");
             }
 
             // 电梯价格表
-            List<WPrice> priceList = new ArrayList<>();
             for (ElevatorExportVO elevator : elevatorDataList) {
-                // 规格
-                String equipment = "";
-                String elevatorCode = elevator.getElevatorCode();
-                if (StringUtils.isNotBlank(elevatorCode)) {
-                    String[] split = elevatorCode.split(COMMA);
-                    if (split.length == 1) {
-                        equipment = split[0];
-                    } else if (split.length == 2) {
-                        equipment = elevatorCode;
-                    } else if (split.length > 2) {
-                        equipment = split[0] + TILDE + split[split.length - 1];
-                    }
-                }
-                // 电梯类型
-                priceList.add(new WPrice(equipment,
-                    elevator.getElevatorTypeName(),
-                    elevator.getSpecification(),
-                    elevator.getElevatorNumber().toString(),
-                    quotation.getCurrencyName(),
-                    format.format(elevator.getPrice()),
-                    format.format(
-                        elevator.getPrice().multiply(BigDecimal.valueOf(elevator.getElevatorNumber())))));
-                // 电梯参数
-                elevatorList.add(getMap(elevator));
+                // 电梯规格单价
+                map.put(UNIT_PRICE, formatNum(elevator.getPrice()));
+                // 电梯规格数量
+                map.put(QTY, elevator.getElevatorNumber());
+                // 电梯规格总价
+                BigDecimal multiply = elevator.getPrice().multiply(new BigDecimal(elevator.getElevatorNumber()));
+                map.put(T_PRICE, formatNum(multiply));
 
-                return;
+                map.put(SPECIFICATION, getStr("1111111"));
+                map.put(PRODUCT_TYPE, getStr("1111111"));
+                map.put(STAND, getStr("1111111"));
+                map.put(LOAD, getStr("1111111"));
+                map.put(P, getStr("1111111"));
+                map.put(SPEED, getStr("1111111"));
+                map.put(FLOORS, getStr("1111111"));
+                map.put(STOPS, getStr("1111111"));
+                map.put(DOORS, getStr("1111111"));
+                map.put(MAIN_FLOOR, getStr("1111111"));
+                map.put(CABIN, getStr("1111111"));
+                map.put(DOOR, getStr("1111111"));
+                map.put(SHAFT, getStr("1111111"));
+                map.put(PIT, getStr("1111111"));
+                map.put(OH, getStr("1111111"));
+                map.put(TR, getStr("1111111"));
+
+                // 电梯参数
+                File file = new CommonDocUtils().loadFromClasspath("/wordTemplate/KW2600模版.docx")
+                    .replaceData(map).genFile(getStr(quotation.getQuotationNo()));
+                fileList.add(file);
             }
-            map.put(PRICE_LIST, priceList);
-            map.put(FREIGHT_PRICE, quotation.getFreightPrice());
-            map.put(PRICE_TOTAL, quotation.getFinalPrice());
-            // 电梯参数
-            map.put(DATA_LIST, elevatorList);
-            // 测试图片
-            String path = "/profile/upload/2024/07/02/狮子_20240702165437A001.jpg";
-            map.put("testPic", getPicBase64(path));
-            map.put("needPic", false);
-            fileList.add(WordUtil.genFile(map, QUOTATION_FTL));
+
         }
         WordUtil.exportZip(response, fileList);
     }
@@ -134,6 +154,14 @@ public class QuotationExportServiceImpl
         return StrUtil.isBlank(str) ? " " : str;
     }
 
+    private static String formatNum(Object decimal) {
+        return Objects.isNull(decimal) ? " " : format.format(decimal);
+    }
+
+    private static String formatNum2(Object decimal) {
+        return Objects.isNull(decimal) ? " " : format2.format(decimal);
+    }
+
     private static String getPicBase64(String path) {
         String encode = "";
         if (StringUtils.isBlank(path)) {

+ 5 - 1
RuoYi-Vue-fast-master/src/main/resources/mybatis/business/quotation/TqQuotationMapper.xml

@@ -404,13 +404,17 @@
         quo.id as quotationId,
         quo.quotation_no as quotationNo,
         quo.submit_time as submitDate,
+        quo.exchange_rate as exchangeRate,
         pro.project_name as projectName,
         pro.email as email,
         pro.address as address,
         acc.account_name as client,
         cur.currency_name as currencyName,
         quo.final_price as finalPrice,
-        quo.freight_price as freightPrice
+        quo.freight_price as freightPrice,
+        quo.original_basic_price as originalBasicPrice,
+        quo.basic_price as basicPrice,
+        quo.optional_price as optionalPrice
         FROM
         tq_quotation quo
         LEFT JOIN tc_project pro on pro.project_id = quo.project_id

BIN
RuoYi-Vue-fast-master/src/main/resources/wordTemplate/KW2600模版.docx