钱惠东 5 gün önce
ebeveyn
işleme
12f221b0b0

+ 32 - 12
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/business/service/quotation/impl/TqQuotationServiceImpl.java

@@ -1062,8 +1062,7 @@ public class TqQuotationServiceImpl extends ServiceImpl<TqQuotationMapper, TqQuo
             });
 
             data.put("id", item.getId());
-            data.put("noFix", "E" + StringUtils.padl(String.valueOf(index++), 2, '0'));
-            data.put("no", data.get("noFix"));
+            data.put("no", StringUtils.padl(String.valueOf(index++), 2, '0'));
 
             data.put("specification", item.getSpecification());
             data.put("qty", format.format(item.getElevatorNumber()));
@@ -1079,6 +1078,7 @@ public class TqQuotationServiceImpl extends ServiceImpl<TqQuotationMapper, TqQuo
             totalFreight = totalFreight.add(nonNull(item.getSeaShipFees()) ? item.getSeaShipFees() : BigDecimal.ZERO);
             freightRemarks.add(item.getFreightRemark());
 
+            data.put("elevatorCode", item.getElevatorCode());
             data.put("productType", item.getElevatorModel());
             String loadCapacity = data.getString(RATED_LOAD_CAPACITY);
             String persons = isNotBlank(loadCapacity) ? String.valueOf(Integer.parseInt(loadCapacity) / 75) : EMPTY;
@@ -1293,6 +1293,17 @@ public class TqQuotationServiceImpl extends ServiceImpl<TqQuotationMapper, TqQuo
         map.put("date", DateUtils.parseDateToStr("yyyy-MM-dd", tqQuotation.getCreateTime()));
         // 2.2 规格信息
         map.put("specifications", specifications);
+        // 材质描述部分需要去重处理
+
+        map.put("carbinWallFinishesList", extractMaterialList(specifications, Lists.newArrayList("carType", "carDetail", "carDetail1", "carDetail2", "carDetail3", "carDetail4", "carDetail5", "carDetail6")));
+        map.put("doorFinishesList", extractMaterialList(specifications, Lists.newArrayList("typeOfDoor", "carDoor", "landingDoor", "landingDoor1", "landingDoor2", "landingDoor3", "landingDoor4")));
+        map.put("handrialTypeList", extractMaterialList(specifications, Lists.newArrayList("handrailDetail", "handrailDetail1", "handrailDetail2", "handrailDetail3")));
+        map.put("ceilingTypeList", extractMaterialList(specifications, Lists.newArrayList("ceiling", "ceilingType")));
+        map.put("flooringTypeList", extractMaterialList(specifications, Lists.newArrayList("flooringType")));
+        map.put("copTypeList", extractMaterialList(specifications, Lists.newArrayList("copDetail", "copDetail1", "copDetail2", "copDetail3", "copDetail4", "copDetail5")));
+        map.put("lopTypeList", extractMaterialList(specifications, Lists.newArrayList("lopDetail", "lopDetail1", "lopDetail2", "lopDetail3", "lopDetail4", "lopDetail5", "lopDetail6", "lopDetail7", "lopDetail8", "lopDetail9", "lopDetail10", "lopDetail11", "lopDetail12", "lopDetail13", "lopDetail14")));
+        map.put("mirrorTypeList", extractMaterialList(specifications, Lists.newArrayList("mirrorDetail", "mirrorDetail1", "mirrorDetail2")));
+
         // 2.3 规格统计信息
         String targetPort = "";
         if (isNotBlank(tqQuotation.getTargetPort())){
@@ -1348,17 +1359,26 @@ public class TqQuotationServiceImpl extends ServiceImpl<TqQuotationMapper, TqQuo
                 .download();
     }
 
-    public static void main(String[] args) {
-        // 2.1 基础信息
-        Map<String, Object> map = Maps.newHashMap();
-        map.put("buyers","陈杰");
-        // 3. 填充模板并返回
-        new CommonDocUtils()
-                .loadFromClasspath("/wordTemplate/国际部销售合同模版2024test.docx")
-                .replaceData(map)
-                .download();
-    }
+    private List<JSONObject> extractMaterialList(List<JSONObject> specifications, ArrayList<String> keys) {
+        List<JSONObject> result = Lists.newArrayList();
+        Map<String, Object> resultMap = Maps.newHashMap();
+        specifications.forEach(item -> {
+            JSONObject data = new JSONObject();
+            keys.forEach(key -> data.put(key, item.get(key)));
+            String key = JSONObject.toJSONString(data);
+            JSONObject exist = (JSONObject)resultMap.get(key);
+            String elevatorCode = item.getString("elevatorCode");
+            if (Objects.nonNull(exist)){
+                exist.put("elevatorCode", exist.getString("elevatorCode") + "," + elevatorCode);
+            } else {
+                data.put("elevatorCode", elevatorCode);
+                resultMap.put(key, data);
+                result.add(data);
+            }
+        });
 
+        return result;
+    }
 
     @Override
     public List<QuotationVO> selectTqQuotationListAll(QuotationQueryBO queryBO) {

BIN
RuoYi-Vue-fast-master/src/main/resources/wordTemplate/报价单.docx


+ 2 - 27
ruoyi-ui-vue2/src/views/quotation/editQuotation.vue

@@ -1748,7 +1748,7 @@ export default {
         if (this.elevatorSet.has(Number(elevatorId))) {
           this.initElevatorCodeSet(Number(elevatorId))
           console.log("重复编辑电梯", elevatorId, elevator)
-          elevator.elevatorCode = this.setElevatorCode(elevator.elevatorNumber, elevator.elevatorGroupCode)
+          elevator.elevatorCode = elevator.elevatorGroupCode.replaceAll(";", ",")
           // 替换电梯列表
           for (let i = 0; i < this.elevatorList.length; i++) {
             if (this.elevatorList[i].id == elevatorId) {
@@ -1760,7 +1760,7 @@ export default {
         } else {
           this.initElevatorCodeSet()
           // 设置电梯编号
-          elevator.elevatorCode = this.setElevatorCode(elevator.elevatorNumber, elevator.elevatorGroupCode)
+          elevator.elevatorCode = elevator.elevatorGroupCode.replaceAll(";", ",")
           console.log("新增电梯", elevatorId, elevator)
           this.elevatorSet.add(Number(elevatorId));
           this.elevatorList.push(elevator);
@@ -1787,31 +1787,6 @@ export default {
         }
       }
     },
-    // 设置电梯编号
-    setElevatorCode(elevatorNumber, elevatorGroupCode) {
-      let elevatorCode = ''
-      for (let i = 0; i < elevatorNumber; i++) {
-        if (i !== 0) {
-          elevatorCode += ','
-        }
-        let itemElevatorCode = this.getUsableElevatorCode(elevatorGroupCode, (i + 1))
-        this.elevatorCodeSet.add(itemElevatorCode)
-        elevatorCode += itemElevatorCode
-      }
-      return elevatorCode
-    },
-    // 获取可用的电梯编号
-    getUsableElevatorCode(elevatorCode, num) {
-      let number = num
-      while (true) {
-        let item = elevatorCode + '-' + number
-        if (this.elevatorCodeSet.has(item)) {
-          number += 1
-        } else {
-          return item
-        }
-      }
-    },
     // 项目变更
     projectChange(key) {
       let checkProjectList = this.projectList.filter(item => item.value === key)

+ 9 - 1
ruoyi-ui-vue2/src/views/quotation/elevator.vue

@@ -52,7 +52,7 @@
                   <!-- 电梯组号-->
                   <el-form-item :label="$t('elevator.groupCode')" prop="elevatorGroupCode">
                     <el-input :disabled="disableFlag" v-model.trim="form.elevatorGroupCode" :placeholder="$t('common.pleaseInput') + $t('elevator.groupCode')"
-                              @input="e => form.elevatorGroupCode = replaceGroupCode(e)" maxlength="20" class="w-100"/>
+                              @input="e => form.elevatorGroupCode = replaceGroupCode(e)" maxlength="255" class="w-100"/>
                   </el-form-item>
                 </div>
               </el-card>
@@ -1198,6 +1198,7 @@ export default {
           }
         }
       }
+
       let config = await this.getSpecification('quoatation.specification:' + this.form.elevatorType)
       let configMap = new Map()
 
@@ -1209,6 +1210,13 @@ export default {
 
       }
       console.log('表单验证结果', valid)
+
+      // 验证组号与数量是否对应
+      if(this.form.elevatorGroupCode.split(';').length !== this.form.count){
+        this.$message.error(this.$t('电梯组号与数量不对应,多个电梯请用;隔开'))
+        valid = false
+      }
+
       if (!valid) {
         this.$modal.closeLoading()
       } else {