chenlu
2024-12-12 515025ffd3ace6f7382f9a853d3aba50f191c8d0
Merge branch 'master' of http://10.153.19.25:10105/r/ERP_override
11个文件已修改
451 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeProject.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/GlassInventory.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetTrimming.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintProject.vue 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/OrderMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue
@@ -30,12 +30,14 @@
let props = defineProps({
  printList: null,
  printMerge: null,
  printLike: null
  printLike: null,
  printProject:null
})
const {currentRoute} = useRouter()
const route = currentRoute.value
const printMerge = props.printMerge
const printProject = props.printProject
//打印时间
const currentTime = new Date();
@@ -56,94 +58,28 @@
data.value.printList = JSON.parse(props.printList)
let flowCardCount = ''
onMounted(() => {
      request.post(`/processCard/getSelectPrinting/${merge}/${like}`, data.value).then((res) => {
        if (res.code == 200) {
          produceList.value = deepClone(res.data.data)
          //处理单片厚度
          for (let j = 0; j < produceList.value.length; j++) {
            let sumWeight = 0
            produceList.value[j].detailList.forEach((item, index) => {
              // 解析 separation 字段的 JSON 字符串
              let separationObj = JSON.parse(item.separation);
              // 获取 thickness 的原始值
              let thicknessValue = separationObj.thickness;
              // 去除 'mm' 单位
              let thicknessWithoutUnit = thicknessValue.replace('mm', '');
              item.separation = thicknessWithoutUnit
              sumWeight += item.width * item.height * item.quantity / 1000000 * item.separation * 2.5 * 1;
            });
            produceList.value[j].detail[0].weight = sumWeight
  console.log(printProject)
      if(props.printProject!=null){
        request.post(`/processCard/getSelectPrintProject/${printProject}`).then((res) => {
          if (res.code == 200) {
            console.log(res.data.data)
            load(res.data.data)
          } else {
            ElMessage.warning(res.msg)
            router.push("/login")
          }
          //处理合并打印
          if (printMerge !== null && printMerge !== undefined && printMerge !== "") {
            produceList.value.forEach(item => {
              item.detail[0].technologyNumber = printMerge;
            });
            //合并打印工艺流程处理
            if (like == null) {
              let process = produceList.value[0].detail[0].process
              let indexOfJiaJiao = process.indexOf('夹胶');
              if (indexOfJiaJiao !== -1) {
                // 使用 substring 截取 "夹胶" 后面的部分,包括 "夹胶" 本身
                let afterJiaJiao = process.substring(indexOfJiaJiao).trim();
                produceList.value.forEach(item => {
                  item.detail[0].process = afterJiaJiao
                })
              }
              let indexOfProceList = produceList.value[0].processList
              let getProceList = indexOfProceList.findIndex(item => item.process === '夹胶');
              if (getProceList !== -1) {
                // 使用 filter 方法过滤出 "夹胶" 及其之后的对象
                produceList.value[0].processList = indexOfProceList.filter((item, index) => index >= getProceList);
              }
            }
            }
          produceList.value.forEach(item => {
            let technologyNumberMerge = printMerge.split('').join(',');
            item.detail[0].technologyNumberMerge = technologyNumberMerge
          })
          //处理编号列
          //定义存放编号数组
          const s01Values = [];
          for (let i = 0; i < produceList.value.length; i++) {
            const s01Values = [];
            // 遍历 detailList 数组,提取 S01 值到 s01Values 数组
            if (produceList.value[i].detailList[0].other_columns != null
                || produceList.value[i].detailList[0].other_columns != undefined) {
              produceList.value[i].detailList.forEach(element => {
                const otherColumnsObject = JSON.parse(element.other_columns);
                const s01Value = otherColumnsObject.S01;
                s01Values.push(s01Value || ''); // 如果 S01 值为空,添加空字符串或者其他默认值
              });
              // 将 s01Values 中的值赋给每个订单详情对象的 s01Value 属性
              produceList.value[i].detailList.forEach((detail, index) => {
                detail.s01Value = index < s01Values.length ? s01Values[index] : ''; // 赋值给 s01Value 属性
              });
            }
        })
      }else{
        request.post(`/processCard/getSelectPrinting/${merge}/${like}`, data.value).then((res) => {
          if (res.code == 200) {
            load(res.data.data)
          } else {
            ElMessage.warning(res.msg)
            router.push("/login")
          }
          //处理同配置打印
          handleGetQRCode()
          handleSummary()
          AreaQuantitySummary()
        } else {
          ElMessage.warning(res.msg)
          router.push("/login")
        }
      })
        })
      }
    }
)
@@ -209,6 +145,91 @@
  }
}
const load = (data) => {
  produceList.value = deepClone(data)
  //处理单片厚度
  for (let j = 0; j < produceList.value.length; j++) {
    let sumWeight = 0
    produceList.value[j].detailList.forEach((item, index) => {
      // 解析 separation 字段的 JSON 字符串
      let separationObj = JSON.parse(item.separation);
      // 获取 thickness 的原始值
      let thicknessValue = separationObj.thickness;
      // 去除 'mm' 单位
      let thicknessWithoutUnit = thicknessValue.replace('mm', '');
      item.separation = thicknessWithoutUnit
      sumWeight += item.width * item.height * item.quantity / 1000000 * item.separation * 2.5 * 1;
    });
    produceList.value[j].detail[0].weight = sumWeight
  }
  //处理合并打印
  if (printMerge !== null && printMerge !== undefined && printMerge !== "") {
    produceList.value.forEach(item => {
      item.detail[0].technologyNumber = printMerge;
    });
    //合并打印工艺流程处理
    if (like == null) {
      let process = produceList.value[0].detail[0].process
      let indexOfJiaJiao = process.indexOf('夹胶');
      if (indexOfJiaJiao !== -1) {
        // 使用 substring 截取 "夹胶" 后面的部分,包括 "夹胶" 本身
        let afterJiaJiao = process.substring(indexOfJiaJiao).trim();
        produceList.value.forEach(item => {
          item.detail[0].process = afterJiaJiao
        })
      }
      let indexOfProceList = produceList.value[0].processList
      let getProceList = indexOfProceList.findIndex(item => item.process === '夹胶');
      if (getProceList !== -1) {
        // 使用 filter 方法过滤出 "夹胶" 及其之后的对象
        produceList.value[0].processList = indexOfProceList.filter((item, index) => index >= getProceList);
      }
    }
  }
  produceList.value.forEach(item => {
    let technologyNumberMerge = printMerge.split('').join(',');
    item.detail[0].technologyNumberMerge = technologyNumberMerge
  })
  //处理编号列
  //定义存放编号数组
  const s01Values = [];
  for (let i = 0; i < produceList.value.length; i++) {
    const s01Values = [];
    // 遍历 detailList 数组,提取 S01 值到 s01Values 数组
    if (produceList.value[i].detailList[0].other_columns != null
        || produceList.value[i].detailList[0].other_columns != undefined) {
      produceList.value[i].detailList.forEach(element => {
        const otherColumnsObject = JSON.parse(element.other_columns);
        const s01Value = otherColumnsObject.S01;
        s01Values.push(s01Value || ''); // 如果 S01 值为空,添加空字符串或者其他默认值
      });
      // 将 s01Values 中的值赋给每个订单详情对象的 s01Value 属性
      produceList.value[i].detailList.forEach((detail, index) => {
        detail.s01Value = index < s01Values.length ? s01Values[index] : ''; // 赋值给 s01Value 属性
      });
    }
  }
  //处理同配置打印
  handleGetQRCode()
  handleSummary()
  AreaQuantitySummary()
}
const AreaQuantitySummary = () => {
  for (let i = 0; i < produceList.value.length; i++) {
@@ -234,7 +255,7 @@
          <div style="float: left;"><input style="border: none;font-size: 28px;width: 70px;margin: 5px  "/></div>
          <div id="bj" style="float: right;font-size: 28px">{{ id + 1 }}</div>
          <div>{{ company.companyName }}</div>
          <div>生产流程卡</div>
          <div>生产流程卡<span v-if="printProject!=null">({{ printProject }})</span></div>
          <div  style="font-weight: bolder;display: flex;justify-content:space-between">
            <div>
              打印人:{{user.user.userName}} &nbsp;&nbsp;
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeProject.vue
@@ -20,15 +20,21 @@
  detailPage.value = 3;
};
//获取SetTrimming的值
const dataForGlassInventory = ref();
const handleProjectDetailData = (data) => {
  dataForGlassInventory.value = data;
};
</script>
<template >
 <div style="width: 100%;height: 100%">
   <div id="main-body">
     <project-detail @changeDialog="changeDialog"/>
     <project-detail @changeDialog="changeDialog"  @forward-data-to-grandparent="handleProjectDetailData"/>
   </div>
   <div id="main-footer">
     <glass-inventory/>
     <glass-inventory :receivedData="dataForGlassInventory"/>
   </div>
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/GlassInventory.vue
@@ -1,5 +1,5 @@
<script setup>
import {onMounted, reactive, ref} from "vue";
import {nextTick, onMounted, reactive, ref, watch} from "vue";
import {useI18n} from "vue-i18n";
import request from "@/utils/request";
import {ElMessage} from "element-plus";
@@ -92,6 +92,7 @@
          item.upTrim = 0;
        });
        xGrid.value.loadData(formattedData);
        gridOptions.data = formattedData;
      } else {
      }
    } else {
@@ -105,17 +106,68 @@
  selectMaterialStore();
});
watch(() => props.receivedData, (newData) => {
  if (newData) {
    Trimming(newData);
  }
}, { immediate: true });
const props = defineProps({
  receivedData : {
    type: Object,
    required: false,
    properties: {
      quicksetLeft: { type: Number },
      quicksetBottom: { type: Number },
      quicksetRight: { type: Number },
      quicksetTop: { type: Number }
    }}
});
//接受SetTrimming的值 (修边)
const Trimming = (receivedData) => {
  nextTick(() => {
    const data = gridOptions.data;
    console.log('接收到的receivedData:', receivedData);
    console.log('表格原始数据:', data);
    if (data) {
      try {
        const updatedData = [];
        for (let i = 0; i < data.length; i++) {
          const item = data[i];
          const updatedItem = {
            ...item,
            // 此处修改为从 receivedData 中获取对应的值来更新表格数据项
            leftTrim: Number(receivedData.quicksetLeft),
            downTrim: Number(receivedData.quicksetBottom),
            rigthTrim: Number(receivedData.quicksetRight),
            upTrim: Number(receivedData.quicksetTop),
          };
          updatedData.push(updatedItem);
        }
        gridOptions.data = updatedData;
        xGrid.value.loadData(updatedData);
      } catch (error) {
        console.error('更新表格数据时出错:', error);
        // 这里可以根据实际需求添加一些回滚操作或者提示用户的逻辑,比如显示一个错误提示框等
        ElMessage.error('更新表格数据时出现错误,请检查输入或联系管理员');
      }
    } else {
      console.warn('表格数据为空,无法更新磨量值');
    }
  });
};
</script>
<template>
  <div style="width: 100%;height: 100%">
    <vxe-grid
        @filter-change="filterChanged"
        height="100%"
        class="mytable-scrollbar"
        ref="xGrid"
        v-bind="gridOptions"
        v-on="gridEvents"
    >
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue
@@ -143,9 +143,7 @@
  },
})
let emit = defineEmits([
  'changeDialog'
])
const handleCommand = async (command) => {
  await emit('changeDialog', command)
}
@@ -225,6 +223,15 @@
  });
};
//中转站接受SetTrimming的值
const emit = defineEmits([
  'changeDialog',
  'forward-data-to-grandparent'
]);
const handleTrimmingData = (data) => {
  emit('forward-data-to-grandparent', data);
};
</script>
@@ -294,7 +301,7 @@
                title="设置修边"
                destroy-on-close
                style="width: 35%;height:80%;margin-top: 3vh;">
              <set-trimming />
              <set-trimming :closeDialog="closeDialog" @send-data-event="handleTrimmingData"/>
            </el-dialog>
            <el-button id="button" type="primary">保存</el-button>
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetTrimming.vue
@@ -1,5 +1,7 @@
<script setup>
import {ref} from "vue";
import {defineEmits} from 'vue';
function setupComponent() {
  // 各个输入框绑定的值,初始化为0
@@ -37,6 +39,23 @@
const check = ref(true)
const emit = defineEmits(['send-data-event',]);
const props = defineProps({
  closeDialog: Function
});
const setTrimming = () => {
  const dataToSend = {
    quicksetTop: quicksetTop.value,
    quicksetRight: quicksetRight.value,
    quicksetBottom: quicksetBottom.value,
    quicksetLeft: quicksetLeft.value
  };
  emit('send-data-event', dataToSend);
  props.closeDialog(3);
};
</script>
<template>
@@ -55,7 +74,7 @@
        <el-input-number v-model="quicksetLeft" class="left" placeholder="0"
                         controls-position="right" :step="0.1" :min="0"></el-input-number>
      </div>
      <el-button type="primary" style="float: right; margin: 184px 0 0 13px;">应用</el-button>
      <el-button type="primary" style="float: right; margin: 184px 0 0 13px;" @click="setTrimming">应用</el-button>
    </div>
    <div>
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintProject.vue
@@ -13,10 +13,12 @@
import {Printer} from "@element-plus/icons-vue/global";
import companyInfo from "@/stores/sd/companyInfo"
import {remove} from "xe-utils";
import PrintProcess from "@/components/pp/PrintProcess.vue";
//语言获取
const {t} = useI18n()
let router = useRouter()
const dialogTableVisible = ref(false)
const dialogTableVisibleLabelXJTwo = ref(false)
let rowClickIndex = ref(null)
@@ -44,6 +46,14 @@
  orderId: '',
  project: ''
})
//打印
let printRow = ref({
  list: null,
  printMergeVal: null,
  like: null,
  project:null
})
const getTableRow = (row, type) => {
  switch (type) {
    case 'edit' :{
@@ -62,6 +72,11 @@
    case 'edit2' :{
      router.push({path: '/main/processCard/PrintLabel', query: { projectNo: row.project_no,type:3 }})
      break
    }
    case 'edit3' :{
      printRow.value.project=row.project_no
      console.log(printRow.value.project)
      dialogTableVisible.value = true
    }
  }
}
@@ -188,7 +203,7 @@
  //表头参数
  columns: [
    {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50},
    {title: t('basicData.operate'), width: 140, slots: { default: 'button_slot' },fixed:"left"},
    {title: t('basicData.operate'), width: 240, slots: { default: 'button_slot' },fixed:"left"},
    {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50},
    {
      field: 'project_no',
@@ -295,6 +310,10 @@
    }
  })
}
const printContent = ref({
  id: 'child',
})
</script>
<template>
@@ -342,6 +361,7 @@
          <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{$t('machine.cutting')}}</el-button>
          <el-button @click="getTableRow(row,'edit1')" link type="primary" size="small">{{$t('machine.tempering')}}</el-button>
          <el-button @click="getTableRow(row,'edit2')" link type="primary" size="small">{{$t('components.finishedProduct')}}</el-button>
          <el-button @click="getTableRow(row,'edit3')" link type="primary" size="small">{{$t('流程卡')}}</el-button>
        </template>
        <template #num1_filter="{ column, $panel }">
@@ -392,6 +412,24 @@
                                  :projectNo="labelRow.projectNo"
                                  style="width: 100%;height: 100%"/>
    </el-dialog>
    <el-dialog
        id="sizePrintCalrd"
        v-model="dialogTableVisible"
        :title="$t('processCard.print')"
        destroy-on-close
        style="width: 75%;height:75% ">
      <template #header="{ close, titleId, titleClass }">
        <el-button v-print="printContent" :icon="Printer" circle />
      </template>
      <print-process
          id="child"
          :printLike="printRow.like"
          :printList="printRow.list"
          :printMerge="printRow.printMergeVal"
          :printProject="printRow.project"
          style="width: 100%;height: 100%"/>
    </el-dialog>
  </div>
</template>
@@ -412,4 +450,10 @@
  width: 100%;
}
:deep(#sizePrintCalrd .el-dialog__body) {
  height: 85%;
  width: 100%;
  overflow-y: auto;
}
</style>
north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java
@@ -189,6 +189,13 @@
        return Result.seccess(flowCardService.getSelectPrintingSv(object,printMerge,printLike));
    }
    @ApiOperation("工程打印流程卡数据查询接口")
    @PostMapping("/getSelectPrintProject/{printProject}")
    public Result getSelectPrintProject(
            @PathVariable String printProject) {
        return Result.seccess(flowCardService.getSelectPrintProject(printProject));
    }
    @ApiOperation("打印标签数据查询接口")
    @PostMapping("/getSelectPrintLabel/{projectNo}/{type}")
    public Result getSelectPrintLabel(@PathVariable String projectNo,@PathVariable String type) {
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java
@@ -196,4 +196,6 @@
    Boolean deleteProcessMp(String processId, String technologyNumber);
    Boolean updateOrderProcessMp(String orderId, String number, String technologyNumber, String orderprocess);
    List<FlowCard> getFlowCardListPrintProject(String printProject);
}
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
@@ -362,6 +362,67 @@
        return map;
    }
    public Map<String, Object> getSelectPrintProject(String printProject) {
        Map<String, Object> map = new HashMap<>();
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();//最终结果
        List<FlowCard> flowCardList = flowCardMapper.getFlowCardListPrintProject(printProject);
        if (!flowCardList.isEmpty()) {
            for (FlowCard flowCard : flowCardList) {
                Map<String, Object> itemmap = new HashMap<>();
                    //是否包含切割
                    //boolean containsCutting = flowCard.getProcess().contains("切割");
                    String processSub=flowCard.getProcess().substring(0, 2);
                    if(processSub.equals("夹胶") || processSub.equals("中空")){
                        itemmap.put("detail", flowCardMapper.getPrimaryListLimt(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()),flowCard.getGlassChild(),flowCard.getProcess(),flowCard.getOrderId()));
                        List<Map<String, Object>> detailList = flowCardMapper.getDetailList(flowCard.getProcessId(), flowCard.getTechnologyNumber(),flowCard.getProcess());
                        itemmap.put("detailList", detailList);
                    }
                    else {
                        itemmap.put("detail", flowCardMapper.getPrimaryList(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()),flowCard.getGlassChild(),flowCard.getProcess(),flowCard.getOrderId()));
                        List<Map<String, Object>> detailList = flowCardMapper.getDetailListLike(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()),flowCard.getProcess());
                        itemmap.put("detailList", detailList);
                    }
                //工艺流程
                //List<Map<String, Object>> processList = flowCardMapper.getProcessList(flowCard.getProcessId(), flowCard.getTechnologyNumber());
                String input = flowCard.getProcess();
                String delimiter = "->";
                // 分割字符串
                String[] parts = input.split(delimiter);
                // 创建 List<Map<String, Object>>
                List<Map<String, Object>> processList = new ArrayList<>();
                // 遍历分割后的部分并将其存入 List<Map<String, Object>>
                for (int i = 0; i < parts.length; i++) {
                    Map<String, Object> maps = new HashMap<>();
                    maps.put("id", i); // 添加一个索引字段
                    maps.put("process", parts[i]); // 添加实际的值
                    processList.add(maps);
                }
                itemmap.put("processList", processList);
                //  itemmap.put("numberList", numberList);
                itemmap.put("count", flowCardMapper.countFlowCard(flowCard.getOrderId()));
                itemmap.put("remarkList", flowCardMapper.remakList(flowCard.getProcessId()));
                list.add(itemmap);
            }
        }
        map.put("data", list);
        return map;
    }
    public Boolean updateComposingSv(Map<String, Object> object) {
        List<FlowCard> flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("composing")), FlowCard.class);
        if (!flowCardList.isEmpty()) {
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -2509,4 +2509,33 @@
        update sd.order_glass_detail set process=#{orderprocess}
        where order_id=#{orderId} and order_number=#{number} and technology_number=#{technologyNumber}
    </update>
    <select id="getFlowCardListPrintProject">
        select fc.id,
               fc.order_id,
               fc.process_id,
               o.customer_name,
               o.project,
               fc.order_number,
               ogd.technology_number,
               ogd.glass_address,
               sum(fc.quantity)                                                          as quantity,
               round(sum(ogd.child_width * ogd.child_height * fc.quantity / 1000000), 2) as total_area,
               od.product_name,
               ogd.glass_child,
               fc.founder,
               date(fc.splitFrame_time) as splitFrame_time,
            /* if(fc.print_status=0,'未打印','已打印') as  print_status*/
               fc.print_status,
               ogd.process
        from pp.flow_card as fc
                 left join sd.order_glass_detail as ogd
                           on ogd.order_id = fc.order_id and ogd.order_number = fc.order_number and
                              ogd.technology_number = fc.technology_number
                 left join sd.order_detail as od on od.order_id = fc.order_id and od.order_number = fc.order_number
                 left join sd.`order` as o on o.order_id = fc.order_id
        where fc.project_no = #{printProject}
        GROUP BY fc.process_id, ogd.technology_number
        order by fc.process_id, ogd.technology_number
    </select>
</mapper>
north-glass-erp/src/main/resources/mapper/sd/OrderMapper.xml
@@ -337,16 +337,11 @@
    </update>
    <select id="selectDifferentSize">
    select a.order_number,count(a.order_number),a.order_id from(select order_id,order_number
    from sd.order_glass_detail ogd
    where ogd.order_id = #{orderId}
    group by ogd.order_number,ogd.child_height,child_width)
    as a
    inner join order_detail od
        on od.order_id = a.order_id
        and od.order_number = a.order_number
        and (od.bend_radius is null or od.bend_radius = '')
    group by a.order_number
    having count(a.order_number) > 1
    </select>