廖井涛
2024-09-25 c979de34206aa005912eacde008ec70916c414ae
修改物料出库以及标签打印
15个文件已修改
434 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/views/mm/mainIngredientStock/CreateOutBound.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintCustomLabel1.vue 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintCustomLabelSemi1.vue 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintCustomLabelSemi2.vue 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintFlowCard.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintLabel.vue 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintLabel1.vue 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/mm/MaterialInventoryController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/mm/MaterialInventoryMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | 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/mm/MaterialInventoryService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainIngredientStock/CreateOutBound.vue
@@ -317,13 +317,17 @@
          })
          request.post("/MaterialInventory/saveMaterialOutbound", flowData.value).then((res) => {
            if(res.code==200){
            if(res.code==200 && res.data==="true"){
              ElMessage.success(t('basicData.msg.saveSuccess'))
              router.push({path: '/main/ingredientsStock/MaterialOutbound', query:{random:Math.random()}})
            }else if(res.data==="false1"){
              ElMessage.warning("数量错误,请刷新再保存")
            }else{
              ElMessage.warning(res.msg)
              router.push("/login")
              ElMessage.warning(t('basicData.msg.saveFail'))
            }
          }).catch((err)=>{
            ElMessage.error(t('basicData.msg.ServerConnectionError'))
            router.push("/login")
          })
          break
        }
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintCustomLabel1.vue
@@ -33,32 +33,60 @@
const type = route.query.type
const faceOrientation = route.query.faceOrientation
const lableType = route.query.lableType
const printType=route.query.printType
onMounted(() => {
      request.post(`/processCard/getSelectPrintCustomLabel/${type}/1`, data.value).then((res) => {
        if (res.code == 200) {
          produceList.value = deepClone(res.data.title)
          list.value = deepClone(res.data.data)
          const data = produceList.value[0].value
          dataList = JSON.parse(`[${data}]`);
          labelList = dataList[0]
          for (let i = 0; i < list.value.length; i++) {
            let count= list.value[i].data.length
            for (let j = 0; j < count; j++) {
              for (let k = 0; k < list.value[i].data[j].quantity; k++){
                lastList.value.push(list.value[i].data[j])
              }
  console.log(printType)
  if(printType==1){
    request.post(`/processCard/getSelectPrintCustomLabel/${type}/1`, data.value).then((res) => {
      if (res.code == 200) {
        produceList.value = deepClone(res.data.title)
        list.value = deepClone(res.data.data)
        const data = produceList.value[0].value
        dataList = JSON.parse(`[${data}]`);
        labelList = dataList[0]
        for (let i = 0; i < list.value.length; i++) {
          let count= list.value[i].data.length
          for (let j = 0; j < count; j++) {
            for (let k = 0; k < list.value[i].data[j].quantity; k++){
              lastList.value.push(list.value[i].data[j])
            }
          }
        } else {
          ElMessage.warning(res.msg)
          router.push("/login")
        }
      })
      } else {
        ElMessage.warning(res.msg)
        router.push("/login")
      }
    })
  }else if(printType==2){
    request.post(`/processCard/getSelectPrintCustomLabelDetails/${type}/1`, data.value).then((res) => {
      if (res.code == 200) {
        produceList.value = deepClone(res.data.title)
        list.value = deepClone(res.data.data)
        const data = produceList.value[0].value
        dataList = JSON.parse(`[${data}]`);
        console.log(switchType)
        if (switchType===true){
          labelList = props.titleList
        }else {
          labelList = dataList[0]
        }
        for (let i = 0; i < list.value.length; i++) {
          let count = list.value[i].data.length
          for (let j = 0; j < count; j++) {
            for (let k = 0; k < list.value[i].data[j].quantity; k++) {
              props.lastList.push(list.value[i].data[j])
            }
          }
        }
      } else {
        ElMessage.warning(res.msg)
      }
    })
  }
    }
)
})
// 打印方法
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintCustomLabelSemi1.vue
@@ -33,32 +33,59 @@
const type = route.query.type
const faceOrientation = route.query.faceOrientation
const lableType = route.query.lableType
const printType=route.query.printType
onMounted(() => {
      request.post(`/processCard/getSelectPrintCustomLabel/${type}/1`, data.value).then((res) => {
        if (res.code == 200) {
          produceList.value = deepClone(res.data.title)
          list.value = deepClone(res.data.data)
          const data = produceList.value[0].value
          dataList = JSON.parse(`[${data}]`);
          labelList = dataList[0]
          for (let i = 0; i < list.value.length; i++) {
            let count= list.value[i].data.length
            for (let j = 0; j < count; j++) {
              for (let k = 0; k < list.value[i].data[j].quantity; k++){
                lastList.value.push(list.value[i].data[j])
              }
  if (printType == 1) {
    request.post(`/processCard/getSelectPrintCustomLabel/${type}/1`, data.value).then((res) => {
      if (res.code == 200) {
        produceList.value = deepClone(res.data.title)
        list.value = deepClone(res.data.data)
        const data = produceList.value[0].value
        dataList = JSON.parse(`[${data}]`);
        labelList = dataList[0]
        for (let i = 0; i < list.value.length; i++) {
          let count = list.value[i].data.length
          for (let j = 0; j < count; j++) {
            for (let k = 0; k < list.value[i].data[j].quantity; k++) {
              lastList.value.push(list.value[i].data[j])
            }
          }
        } else {
          ElMessage.warning(res.msg)
          router.push("/login")
        }
      })
      } else {
        ElMessage.warning(res.msg)
        router.push("/login")
      }
    })
    }
  }else if(printType==2){
    request.post(`/processCard/getSelectPrintCustomLabelDetails/${type}/1`, data.value).then((res) => {
      if (res.code == 200) {
        produceList.value = deepClone(res.data.title)
        list.value = deepClone(res.data.data)
        const data = produceList.value[0].value
        dataList = JSON.parse(`[${data}]`);
        console.log(switchType)
        if (switchType===true){
          labelList = props.titleList
        }else {
          labelList = dataList[0]
        }
        for (let i = 0; i < list.value.length; i++) {
          let count = list.value[i].data.length
          for (let j = 0; j < count; j++) {
            for (let k = 0; k < list.value[i].data[j].quantity; k++) {
              props.lastList.push(list.value[i].data[j])
            }
          }
        }
      } else {
        ElMessage.warning(res.msg)
      }
    })
  }
)
})
// 打印方法
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintCustomLabelSemi2.vue
@@ -33,29 +33,49 @@
const type = route.query.type
const faceOrientation = route.query.faceOrientation
const lableType = route.query.lableType
const printType=route.query.printType
onMounted(() => {
  request.post(`/processCard/getSelectPrintLabel1`,data.value).then((res) => {
    if (res.code == 200) {
      produceList.value = deepClone(res.data.data)
      for (let i = 0; i < produceList.value.length; i++) {
        let count= produceList.value[i].data.length
        for (let j = 0; j < count; j++) {
          for (let k = 0; k < produceList.value[i].data[j].quantity; k++){
            labelList.value.push(produceList.value[i].data[j])
  if (printType == 1) {
    request.post(`/processCard/getSelectPrintLabel1`, data.value).then((res) => {
      if (res.code == 200) {
        produceList.value = deepClone(res.data.data)
        for (let i = 0; i < produceList.value.length; i++) {
          let count = produceList.value[i].data.length
          for (let j = 0; j < count; j++) {
            for (let k = 0; k < produceList.value[i].data[j].quantity; k++) {
              labelList.value.push(produceList.value[i].data[j])
            }
          }
        }
      } else {
        ElMessage.warning(res.msg)
        router.push("/login")
      }
    } else {
      ElMessage.warning(res.msg)
      router.push("/login")
    }
  })
    })
    }
  }else if(printType==2){
    request.post(`/processCard/getSelectPrintLabelDetails`, data.value).then((res) => {
      if (res.code == 200) {
        produceList.value = deepClone(res.data.data)
        for (let i = 0; i < produceList.value.length; i++) {
          let count = produceList.value[i].data.length
          for (let j = 0; j < count; j++) {
            for (let k = 0; k < produceList.value[i].data[j].quantity; k++) {
              labelList.value.push(produceList.value[i].data[j])
            }
)
          }
        }
      } else {
        ElMessage.warning(res.msg)
        router.push("/login")
      }
    })
  }
})
// 打印方法
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintFlowCard.vue
@@ -414,7 +414,10 @@
              id += selectRecords[i].id + "|"
            }
          }
          router.push({path: '/main/processCard/PrintLabel', query: {printList: JSON.stringify(selectRecords)}})
          router.push({
            path: '/main/processCard/PrintLabel',
            query: {printList: JSON.stringify(selectRecords),printType:1}
          })
          break
        }
@@ -434,7 +437,7 @@
          }
          router.push({
            path: '/main/processCard/PrintCustomLabelSemi2',
            query: {printList: JSON.stringify(selectRecords)}
            query: {printList: JSON.stringify(selectRecords),printType:1}
          })
          break
@@ -506,7 +509,8 @@
                  type: type,
                  faceOrientation: faceOrientation,
                  lableType: lableTypes,
                  printList: JSON.stringify(selectRecords)
                  printList: JSON.stringify(selectRecords),
                  printType:1
                }
              })
            }
@@ -525,7 +529,8 @@
                  type: type,
                  faceOrientation: faceOrientation,
                  lableType: lableTypes,
                  printList: JSON.stringify(selectRecords)
                  printList: JSON.stringify(selectRecords),
                  printType:1
                }
              })
            }
@@ -536,7 +541,8 @@
                type: type,
                faceOrientation: faceOrientation,
                lableType: lableTypes,
                printList: JSON.stringify(selectRecords)
                printList: JSON.stringify(selectRecords),
                printType:1
              }
            })
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintLabel.vue
@@ -24,8 +24,10 @@
const {currentRoute} = useRouter()
const route = currentRoute.value
const printType=route.query.printType
projectNo.value = route.query.projectNo
type.value = route.query.type
onMounted(() => {
  if(projectNo.value!=null){
    request.post(`/processCard/getSelectPrintLabel/${projectNo.value}/${type.value}`).then((res) => {
@@ -37,25 +39,47 @@
      }
    })
  }else{
    data.value.printList = JSON.parse(route.query.printList)
    request.post(`/processCard/getSelectPrintLabel1`,data.value).then((res) => {
      if (res.code == 200) {
        produceList.value = deepClone(res.data.data)
        for (let i = 0; i < produceList.value.length; i++) {
         let count= produceList.value[i].data.length
          for (let j = 0; j < count; j++) {
            for (let k = 0; k < produceList.value[i].data[j].quantity; k++){
              labelList.value.push(produceList.value[i].data[j])
    if (printType == 1) {
      data.value.printList = JSON.parse(route.query.printList)
      request.post(`/processCard/getSelectPrintLabel1`,data.value).then((res) => {
        if (res.code == 200) {
          produceList.value = deepClone(res.data.data)
          for (let i = 0; i < produceList.value.length; i++) {
            let count= produceList.value[i].data.length
            for (let j = 0; j < count; j++) {
              for (let k = 0; k < produceList.value[i].data[j].quantity; k++){
                labelList.value.push(produceList.value[i].data[j])
              }
            }
          }
        } else {
          ElMessage.warning(res.msg)
          router.push("/login")
        }
      } else {
        ElMessage.warning(res.msg)
        router.push("/login")
      }
    })
      })
    }else if(printType==2){
      request.post(`/processCard/getSelectPrintLabelDetails`, data.value).then((res) => {
        if (res.code == 200) {
          produceList.value = deepClone(res.data.data)
          for (let i = 0; i < produceList.value.length; i++) {
            let count = produceList.value[i].data.length
            for (let j = 0; j < count; j++) {
              for (let k = 0; k < produceList.value[i].data[j].quantity; k++) {
                labelList.value.push(produceList.value[i].data[j])
              }
            }
          }
        } else {
          ElMessage.warning(res.msg)
          router.push("/login")
        }
      })
    }
  }
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintLabel1.vue
@@ -32,32 +32,59 @@
const type = route.query.type
const faceOrientation = route.query.faceOrientation
const lableType = route.query.lableType
const printType=route.query.printType
onMounted(() => {
      request.post(`/processCard/getSelectPrintCustomLabel/${type}/1`, data.value).then((res) => {
        if (res.code == 200) {
          produceList.value = deepClone(res.data.title)
          list.value = deepClone(res.data.data)
          const data = produceList.value[0].value
          dataList = JSON.parse(`[${data}]`);
          labelList = dataList[0]
          for (let i = 0; i < list.value.length; i++) {
            let count= list.value[i].data.length
            for (let j = 0; j < count; j++) {
              for (let k = 0; k < list.value[i].data[j].quantity; k++){
                lastList.value.push(list.value[i].data[j])
              }
  if (printType == 1) {
    request.post(`/processCard/getSelectPrintCustomLabel/${type}/1`, data.value).then((res) => {
      if (res.code == 200) {
        produceList.value = deepClone(res.data.title)
        list.value = deepClone(res.data.data)
        const data = produceList.value[0].value
        dataList = JSON.parse(`[${data}]`);
        labelList = dataList[0]
        for (let i = 0; i < list.value.length; i++) {
          let count = list.value[i].data.length
          for (let j = 0; j < count; j++) {
            for (let k = 0; k < list.value[i].data[j].quantity; k++) {
              lastList.value.push(list.value[i].data[j])
            }
          }
        } else {
          ElMessage.warning(res.msg)
          router.push("/login")
        }
      })
      } else {
        ElMessage.warning(res.msg)
        router.push("/login")
      }
    })
    }
  }else if(printType==2){
    request.post(`/processCard/getSelectPrintCustomLabelDetails/${type}/1`, data.value).then((res) => {
      if (res.code == 200) {
        produceList.value = deepClone(res.data.title)
        list.value = deepClone(res.data.data)
        const data = produceList.value[0].value
        dataList = JSON.parse(`[${data}]`);
        console.log(switchType)
        if (switchType===true){
          labelList = props.titleList
        }else {
          labelList = dataList[0]
        }
        for (let i = 0; i < list.value.length; i++) {
          let count = list.value[i].data.length
          for (let j = 0; j < count; j++) {
            for (let k = 0; k < list.value[i].data[j].quantity; k++) {
              props.lastList.push(list.value[i].data[j])
            }
          }
        }
      } else {
        ElMessage.warning(res.msg)
      }
    })
  }
)
})
// 打印方法
north-glass-erp/src/main/java/com/example/erp/controller/mm/MaterialInventoryController.java
@@ -28,12 +28,9 @@
    @SaCheckPermission("CreateOutbound.add")
    @PostMapping("/saveMaterialOutbound")
    public Result saveMaterialOutbound( @RequestBody Map<String,Object>  object){
        if(materialInventoryService.saveMaterialOutbound(object)){
            return Result.seccess();
        }else {
            throw new ServiceException(Constants.Code_500,"保存失败");
        }
        return Result.seccess(materialInventoryService.saveMaterialOutbound(object));
    }
    @ApiOperation("物料新增接口")
north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java
@@ -201,6 +201,12 @@
        return Result.seccess(flowCardService.getSelectPrintLabelSv1(object));
    }
    @ApiOperation("打印标签明细查询接口")
    @PostMapping("/getSelectPrintLabelDetails")
    public Result getSelectPrintLabelDetails(@RequestBody Map<String, Object> object) {
        return Result.seccess(flowCardService.getSelectPrintLabelDetails(object));
    }
    @ApiOperation("打印自定义标签数据查询接口")
    @PostMapping("/getSelectPrintCustomLabel/{type}/{lableType}")
    public Result getSelectPrintCustomLabel( @PathVariable String type,
north-glass-erp/src/main/java/com/example/erp/mapper/mm/MaterialInventoryMapper.java
@@ -208,4 +208,6 @@
    List<Map<String,Object>> getPrintCreateOutboundDetail(String materialOutboundId);
    MaterialInventory getMaterialInventoryById(@Param("id") Long id);
}
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java
@@ -88,6 +88,8 @@
    List<Map<String, String>> getPrintLabel1(String processId,Integer technologyNumber);
    List<Map<String, String>> getPrintLabelDetail(String processId,Integer orderNumber);
    List<Map<String, String>> printFlowCardDetailsMp(String processId, String technologyNumber, String process, FlowCard flowCard);
    Boolean printSortMp(String processId, Integer orderNumber, Integer technologyNumber, Integer sort);
north-glass-erp/src/main/java/com/example/erp/service/mm/MaterialInventoryService.java
@@ -45,8 +45,8 @@
    @Autowired
    LogService logService;
    public Boolean saveMaterialOutbound(Map<String,Object> object) {
        boolean saveState = true;
    public String saveMaterialOutbound(Map<String,Object> object) {
        String saveState = "true";
        //设置回滚点
        Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
        String materialOutboundId = "";
@@ -67,7 +67,7 @@
                if (!materialOutboundDetailLists.isEmpty()) {
                    for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailLists) {
                        //还原物料库存数
                        materialInventoryMapper.updateMaterialInventoryAvailableInt(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
                        materialInventoryMapper.updateMaterialInventoryAvailableInt(materialOutboundDetail.getInventoryId(), materialOutboundDetail.getOutboundQuantity());
                        /*if(materialOutboundDetail.getUseId()!=null){
                            //还原优化工程库存数
                            materialInventoryMapper.updateMaterialInventoryAvailableOptInt(materialOutboundDetail.getUseId(), materialOutboundDetail.getOutboundQuantity());
@@ -95,12 +95,13 @@
            if (!materialOutboundDetailList.isEmpty()) {
                for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailList) {
                    Integer materialOutboundDetailMaximum = materialInventoryMapper.getMaterialOutboundDetailMaximum(oddNumber);
                    //新增材料出库明细数据
                    materialInventoryMapper.insertMaterialOutboundDetail(materialOutboundDetail, oddNumber, materialOutboundDetailMaximum + 1);
                    //修改物料库存表出库数量
                    materialInventoryMapper.updateMaterialInventoryAvailableOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
                    MaterialInventory materialInventory = materialInventoryMapper.getMaterialInventoryById(materialOutboundDetail.getId());
                    if(materialInventory.getAvailableQuantity()>=materialOutboundDetail.getOutboundQuantity()){
                        Integer materialOutboundDetailMaximum = materialInventoryMapper.getMaterialOutboundDetailMaximum(oddNumber);
                        //新增材料出库明细数据
                        materialInventoryMapper.insertMaterialOutboundDetail(materialOutboundDetail, oddNumber, materialOutboundDetailMaximum + 1);
                        //修改物料库存表出库数量
                        materialInventoryMapper.updateMaterialInventoryAvailableOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
                    /*if(materialOutboundDetail.getUseId()!=null){
                        //修改优化工程表出库数量
                        materialInventoryMapper.updateMaterialInventoryAvailableOptOut(materialOutboundDetail.getUseId(), materialOutboundDetail.getOutboundQuantity());
@@ -108,6 +109,12 @@
                        //修改物料库存表出库数量
                        materialInventoryMapper.updateMaterialInventoryAvailableOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
                    }*/
                    }else{
                        TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
                        return "false1";
                    }
                }
@@ -122,7 +129,7 @@
            sysError.setError(e+Arrays.toString(e.getStackTrace()));
            sysError.setFunc("saveMaterialOutbound");
            sysErrorService.insert(sysError);
            saveState = false;
            saveState = "false1";
        }
        return saveState;
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
@@ -407,6 +407,27 @@
        return map;
    }
    public Map<String, Object> getSelectPrintLabelDetails(Map<String, Object> object) {
        Map<String, Object> map = new HashMap<>();
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();//最终结果
        List<FlowCard> flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class);
        if (!flowCardList.isEmpty()) {
            for (FlowCard flowCard : flowCardList) {
                // Integer count=flowCardMapper.getPrintLabelCount(flowCard.getProcessId(), flowCard.getTechnologyNumber());
                Map<String, Object> itemmap = new HashMap<>();
                // for (int i = 0; i < count; i++) {
                itemmap.put("data", flowCardMapper.getPrintLabelDetail(flowCard.getProcessId(), flowCard.getOrderNumber()));
                list.add(itemmap);
                //}
            }
        }
        map.put("data", list);
        return map;
    }
    public Map<String, Object> printFlowCardDetailsSv(String processId, String technologyNumber, String process, FlowCard flowCard) {
        Map<String, Object> map = new HashMap<>();
        map.put("data", flowCardMapper.printFlowCardDetailsMp(processId, technologyNumber,process, flowCard));
north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml
@@ -906,5 +906,12 @@
        where modd.material_outbound_id = #{materialOutboundId}
    </select>
    <select id="getMaterialInventoryById" >
        select
            *
        from mm.material_inventory mi
        where mi.id = #{id}
    </select>
</mapper>
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -796,6 +796,38 @@
        group by od.order_number, od.width, od.height
    </select>
    <select id="getPrintLabelDetail">
        select o.order_id,
               o.project,
               o.customer_id,
               ogd.child_width                as width,
               ogd.child_height               as height,
               fc.quantity,
               od.order_number                as orderNumber,
               fc.technology_number           as technologyNumber,
               ogd.glass_child,
               ogd.process,
               c.customer_abbreviation        as customer_name,
               ifnull(od.processing_note, '') as processing_note,
               bgt.type_name,
               od.other_columns,
               od.building_number,
               od.bend_radius
        from sd.order as o
                 left join sd.order_detail as od on o.order_id = od.order_id
                 left join sd.order_glass_detail as ogd
                           on ogd.order_id = od.order_id and ogd.order_number = od.order_number
                 left join pp.flow_card as fc on o.order_id = fc.order_id and
                                                 od.order_number = fc.order_number and
                                                 fc.technology_number = ogd.technology_number
                 left join sd.product pt on pt.id = od.product_id
                 left join sd.customer c on c.id = o.customer_id
                 left join sd.basic_glass_type bgt on bgt.type_id = pt.type_id
        where fc.process_id = #{processId}
          and fc.order_number = #{orderNumber}
        group by od.order_number, od.width, od.height
    </select>
    <select id="printFlowCardDetailsMp">
        SELECT fc.process_id,
               fc.order_number,