29个文件已修改
259 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/components/BasicTable.vue 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/OrderProcess.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/OrderProcessCollect.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/PrintSheet3.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/stores/sd/companySet/金华天成.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/stockReport/FinishedProductInventoryReport.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/stockReport/FinishedProductOutboundReport.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectProcessCard.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/replenish/PrintReplenishFlowCard.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/order/OrderReport.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/ReplenishController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportingWorkController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/dto/mm/FinishedOperateLogDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/dto/sd/OrderDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedOperateLog.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderDetail.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/PatchLogMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/sd/BomDataMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/scheduling/ScheduledTasks.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/mm/MaterialInventoryService.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/ReplenishService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/BomDataService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/PatchLogMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/BomDataMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/OrderDetailMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/BasicTable.vue
@@ -130,6 +130,71 @@
  return count.toFixed(2)
}
//合并显示其他列
const handleDynamicColumns = (data,title) => {
  // 1. æ”¶é›†æ‰€æœ‰è¡Œçš„otherColumns字段(去重)
  const allOtherFields = new Set();
  data.forEach(row => {
    if (!row || !row.otherColumns) return;
    let parsedOtherColumns;
    try {
      // æ ¸å¿ƒï¼šå°†å­—符串解析为JSON
      parsedOtherColumns = JSON.parse(row.otherColumns);
    } catch (e) {
      console.error('解析otherColumns失败:', e, '原始数据:', row.otherColumns);
      return;
    }
    // 2. ä»Žè§£æžåŽçš„JSON中收集字段(支持数组或对象格式)
    if (Array.isArray(parsedOtherColumns)) {
      // æ•°ç»„格式:[{ key: 'field1', label: '字段1', value: '值1' }, ...]
      parsedOtherColumns.forEach(item => {
        if (item.key) allOtherFields.add(item.key);
      });
    } else if (typeof parsedOtherColumns === 'object' && parsedOtherColumns !== null) {
      // å¯¹è±¡æ ¼å¼ï¼š{ field1: { label: '字段1', value: '值1' }, ... }
      Object.keys(parsedOtherColumns).forEach(key => {
        allOtherFields.add(key);
      });
    }
  });
  // 2. ç”ŸæˆåŠ¨æ€å­åˆ—ï¼ˆä½œä¸ºprocessList的children)
  const otherColumns = Array.from(allOtherFields).map(field => {
    // å°è¯•获取字段对应的label(优先取第一个出现的label)
    let label=field;
    title.forEach(item=>{
      if(field==item.column){
        label=item.alias
      }
    })
    return {
      title: label,
      field: `otherColumnsJson.${field}`,
      width: 120,
      align: 'center',
      // å¤„理字段值显示(兼容数组/对象类型的otherColumns)
      formatter: ({ row }) => {
        return row.otherColumnsJson?.[field] || '';
      }
    };
  });
  // 3. å®šä¹‰çˆ¶çº§åˆ—processList,包含动态子列
  const processList = {
    title: t('其他列'),
    field: 'process',
    children: otherColumns // å°†åŠ¨æ€åˆ—ä½œä¸ºå­åˆ—
  };
  // 4. å…ˆç§»é™¤å·²å­˜åœ¨çš„process列(避免重复),再添加新列
  gridOptions.columns = gridOptions.columns.filter(col => col.field !== 'process');
  gridOptions.columns.push(processList);
}
watch(props, (newVal) => {
@@ -180,6 +245,12 @@
        basicProp.value.pageTotal = res.data.total.pageTotal
        basicProp.value.dataTotal = res.data.total.total
        orderInfo.reportFormDate = res.data.selectDate
        //订单明细报表
        if (props.childrenData.url === '/order/getOrderReport') {
          const dataList = res.data.data || [];
          handleDynamicColumns(dataList,res.data.title)
        }
      }
    })
    return
@@ -190,6 +261,8 @@
      basicProp.value.pageTotal = res.data.total.pageTotal
      basicProp.value.dataTotal = res.data.total.total
      orderInfo.reportFormDate = res.data.selectDate
    }
  })
}
north-glass-erp/northglass-erp/src/components/sd/order/OrderProcess.vue
@@ -315,7 +315,9 @@
      <template #title>
        <span style="font-weight: bold" v-show="showTitle">
          {{ row.orderId }}
          {{ row.project?'--':'' }}
          {{ row.customerName?'--':'' }}
          {{ row.customerName}}
          {{row.project?'--':'' }}
          {{row.project}}
          {{ row.batch?'--':'' }}
          {{row.batch}}
north-glass-erp/northglass-erp/src/components/sd/order/OrderProcessCollect.vue
@@ -257,6 +257,8 @@
      <template #title>
        <span style="font-weight: bold" v-show="showTitle">
          {{ row.orderId }}
          {{ row.customerName?'--':'' }}
          {{ row.customerName}}
          {{ row.project?'--':'' }}
          {{row.project}}
          {{ row.batch?'--':'' }}
north-glass-erp/northglass-erp/src/components/sd/order/PrintSheet3.vue
@@ -194,6 +194,7 @@
        </th>
        <th colspan="2" style="text-align: left;font-weight: bold;" v-if="company.showDeliveryCreator">发货单号:<span>{{delivery.deliveryId}}</span></th>
        <th colspan="2" style="text-align: left;font-weight: bold;" v-else></th>
      </tr>
      <tr>
        <th style="text-align: left;border:none;font-weight: bold;" colspan="4">客户名称:<span>{{delivery.customerName}}</span></th>
north-glass-erp/northglass-erp/src/stores/sd/companySet/½ð»ªÌì³É.js
@@ -112,7 +112,7 @@
                },
            },
            hideButton:'true',//流程卡打印界面按钮是否显示
            getSelectFlowCard:1,//流程卡打印查询是否合并  1合并2不合并
            getSelectFlowCard:2,//流程卡打印查询是否合并  1合并2不合并
            columnsLabel:2,//一行两列成品标签 1新疆一行两列成品标签,2其它
        },
north-glass-erp/northglass-erp/src/views/mm/stockReport/FinishedProductInventoryReport.vue
@@ -22,6 +22,7 @@
    {field: 'orderDetail.width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'area',width: '100', title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'squareMillimeter',width: '100', title: t('平方毫米')},
    {field: 'money',width: '100', title: t('order.grossAmount'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.project',width: '100', title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'order.customerName',width: '100', title: t('order.customers'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
@@ -41,7 +42,7 @@
  url :'/finishedGoodsInventory/getSelectFinishedOperateLogReport/入库',
  exportUrl :'/finishedGoodsInventory/exportFinishedOperateLogReport/入库',
  exportName:t('stockReport.finishedProductInventoryReport'),
  footList:['quantity','area','money']
  footList:['quantity','area','money','squareMillimeter']
})
</script>
north-glass-erp/northglass-erp/src/views/mm/stockReport/FinishedProductOutboundReport.vue
@@ -20,6 +20,7 @@
    {field: 'order.customerName',width: '100', title: t('order.customers'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'order.orderType',width: '100', title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'area',width: '100', title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'squareMillimeter',width: '100', title: t('平方毫米')},
    {field: 'orderDetail.productId',width: '100', title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderDetail.productName',width: '140', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderDetail.width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
@@ -39,7 +40,7 @@
  url :'/finishedGoodsInventory/getSelectFinishedOperateLogReport/出库',
  exportUrl :'/finishedGoodsInventory/exportFinishedOperateLogReport/出库',
  exportName:t('stockReport.finishedProductOutboundReport'),
  footList:['quantity','area']
  footList:['quantity','area','squareMillimeter']
})
</script>
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectProcessCard.vue
@@ -759,4 +759,9 @@
  width: 100%;
  height: calc(100% - 35px);
}
:deep(.el-dialog__body){
  height: 90%;
  width: 100%;
}
</style>
north-glass-erp/northglass-erp/src/views/pp/replenish/PrintReplenishFlowCard.vue
@@ -367,6 +367,11 @@
    {field: 'glass_child', title: t('reportingWorks.glassChild'),width:110,filters: [{data: ''}],slots: {filter: 'num1_filter'}, filterMethod: filterChanged},
    {field: 'reporting_work_id', title: t('reportingWorks.reportingWorkId'),width:120,filters: [{data: ''}],slots: {filter: 'num1_filter'}, filterMethod: filterChanged},
    {field: 'create_time', title: t('basicData.reportData'),width:120},
    {
      field: 'print_num',
      title: t('processCard.printStatus'),
       width: 120
    },
  ],//表头按钮
  toolbarConfig: {
@@ -712,10 +717,9 @@
// ç›‘听打印完成事件
const printNumber = () =>{
  selectRecordsData.value.printList=selectRecords
  let printState=0
  request.post(`/processCard/updatePrintState/${printState}`, selectRecordsData.value).then((res) => {
  const $grid = xGrid.value
  selectRecords = $grid.getCheckboxRecords()
  request.post(`/Replenish/updatePrintNum`, selectRecords).then((res) => {
    if (res.code == 200 && res.data === true) {
    } else {
@@ -848,7 +852,7 @@
        destroy-on-close
        style="width: 75%;height:75% ">
      <template #header="{ close, titleId, titleClass }">
        <el-button v-print="printContent"   :icon="Printer" circle />
        <el-button v-print="printContent"   :icon="Printer" circle @click="printNumber"/>
      </template>
      <print-process id="child" :printList="printRow.list" :printMerge="printRow.printMergeVal" :printLike="printRow.like"
                     :mergeTechnologyNumber="printRow.mergeTechnologyNumber"
north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue
@@ -508,7 +508,7 @@
                    }
                  })
                  // è®¡ç®—总价
                  product.totalPrice = details.reduce((sum, d) => sum + (d.materialPric || 0), 0)
                  product.totalPrice = details.reduce((sum, d) => sum + (d.materialPric || 0) , 0)
                })
                dialogTableVisible.value = true
              }
north-glass-erp/northglass-erp/src/views/sd/order/OrderReport.vue
@@ -3,6 +3,7 @@
import { ref} from "vue"
import request from "@/utils/request"
import {useI18n} from "vue-i18n";
import {filterChanged} from "@/hook";
const { t } = useI18n()
const childrenData = ref({
@@ -17,7 +18,7 @@
    {field: 'productId',width:120, title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'productName',width:120, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderNumber',width:120, title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    // {field: 'buildingNumber',width:120, title: '楼号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'buildingNumber',width:120, title:  t('order.buildingNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'width',width:120, title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'height',width:120, title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'quantity',width:120, title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
north-glass-erp/src/main/java/com/example/erp/controller/pp/ReplenishController.java
@@ -108,4 +108,13 @@
        //参数:相应的数据,实体类信息,相应的方法(数据获取),生成的excel名字
        DownExcel.download(response, exportReplenishDTO.class, replenishService.exportReplenishSv(dates), "PatchLogAddDTO");
    }
    @ApiOperation("修改打印次数")
    @PostMapping("/updatePrintNum")
    public Result updatePrintNum(
            @RequestBody List<Map<String, Object>> object
    ) {
        return Result.success(replenishService.updatePrintNumSv(object));
    }
}
north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportingWorkController.java
@@ -161,8 +161,8 @@
            throw new ServiceException(Constants.Code_600, "上工序已完工数量小于本工序报工数量,请检查");
        }
    }
    @ApiOperation("mes报工接口测试")
    @PostMapping  ("/mesReportingWork1")
    @ApiOperation("mes报工接口Redis")
    @PostMapping  ("/mesReportingWorkRedis")
    public Result mesReportingWorkSvToRedis(@RequestBody Map<String,Object> reportingWork) throws JsonProcessingException, InterruptedException {
        return reportingWorkService.mesReportingWorkSvToRedis(reportingWork);
    }
north-glass-erp/src/main/java/com/example/erp/dto/mm/FinishedOperateLogDTO.java
@@ -1,6 +1,7 @@
package com.example.erp.dto.mm;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.example.erp.entity.mm.FinishedOperateLog;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -33,6 +34,8 @@
    private Double height;
    @ExcelProperty("面积")
    private Double area;
    @ExcelProperty("平方毫米")
    private Double squareMillimeter;
    @ExcelProperty("金额")
    private Double money;
    @ExcelProperty("项目名称")
north-glass-erp/src/main/java/com/example/erp/dto/sd/OrderDTO.java
@@ -15,6 +15,8 @@
    private String productName;
    @ExcelProperty("订单序号")
    private Integer orderNumber;
    @ExcelProperty("楼层编号")
    private String buildingNumber;
    @ExcelProperty("宽")
    private Double width;
    @ExcelProperty("高")
north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedOperateLog.java
@@ -43,6 +43,10 @@
    @TableField(select = false,exist = false)
    private Integer quantityAvailable;
    /*平方毫米*/
    @TableField(select = false,exist = false)
    private Double squareMillimeter;
    /*撤销数量*/
    @TableField(select = false,exist = false)
    private Integer cancelAvailable;
north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderDetail.java
@@ -12,6 +12,7 @@
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
@Data
@TableName("sd.`order_detail`")
@@ -86,6 +87,8 @@
    private Integer landingSequence;
    @TableField(exist= false,select = false)
    private Double thickness;
    @TableField(exist= false,select = false)
    private Map<String, Object> otherColumnsJson;
    //用于智能分架
    @TableField(exist= false,select = false)
north-glass-erp/src/main/java/com/example/erp/mapper/pp/PatchLogMapper.java
@@ -7,6 +7,7 @@
import com.example.erp.entity.pp.PatchLog;
import com.example.erp.entity.pp.ReportingWork;
import com.github.yulichang.base.MPJBaseMapper;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -55,5 +56,7 @@
    Integer selectProjectCount(String processId, String patchId, Integer technologyNumber);
    List<exportReplenishDTO> exportReplenishMp(List<LocalDate> dates);
    Boolean updatePrintNumMp(Integer id);
}
north-glass-erp/src/main/java/com/example/erp/mapper/sd/BomDataMapper.java
@@ -21,7 +21,7 @@
    List<Map<String, String>> getOrderBomDataMp(String orderId);
    List<Map<String, String>> getBOMDetails(Integer productId);
    List<Map<String, String>> getBOMDetails(Integer productId, String orderId);
    List<Map<String, String>> getOrderBomSumDataMp(String orderId);
north-glass-erp/src/main/java/com/example/erp/scheduling/ScheduledTasks.java
@@ -10,8 +10,8 @@
public class ScheduledTasks {
    private final ReportingWorkService reportingWorkService;
//    @Scheduled( fixedRate = 2*60*1000)
//    public void reportingWorkRedisToMysql() throws InterruptedException {
//        reportingWorkService.redisToMysqlReportingWork();
//    }
    @Scheduled( fixedRate = 2*60*1000)
    public void reportingWorkRedisToMysql() throws InterruptedException {
        reportingWorkService.redisToMysqlReportingWork();
    }
}
north-glass-erp/src/main/java/com/example/erp/service/mm/MaterialInventoryService.java
@@ -1171,7 +1171,6 @@
                materialInventoryMapper.insertMaterialOutbound(materialOutbound, oddNumber);
                log.setFunction("saveMaterialOutbound新增:"+oddNumber);
            }
            //获取对象集合循环进行新增修改
            if (!materialOutboundDetailList.isEmpty()) {
@@ -1230,10 +1229,6 @@
                        TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
                        return "false1";
                    }
                }
            }
@@ -1309,20 +1304,16 @@
    }
    public Object appGetStockList() {
        ExecutorService executor = Executors.newFixedThreadPool(2);
        AtomicReference<List<MaterialInventory>> materialInventoryList = new AtomicReference<>(new ArrayList<MaterialInventory>());
        executor.execute(() -> {
            materialInventoryList.set(materialInventoryMapper.selectGetStockList());
        });
        List<Object> list = new ArrayList<>();
        executor.shutdown();
        //ExecutorService executor = Executors.newFixedThreadPool(2);
        List<MaterialInventory> materialInventoryList = materialInventoryMapper.selectGetStockList();
        //executor.shutdown();
        Map<String, Object> totalSum  = new HashMap<>();
        Integer inventoryQuantity = 0;
        Integer availableQuantity = 0;
        Double totalArea = 0.00;
        for (MaterialInventory materialInventory : materialInventoryList.get()) {
        for (MaterialInventory materialInventory : materialInventoryList) {
            inventoryQuantity += materialInventory.getInventoryQuantity();
            availableQuantity += materialInventory.getAvailableQuantity();
            totalArea += materialInventory.getTotalArea();
north-glass-erp/src/main/java/com/example/erp/service/pp/ReplenishService.java
@@ -432,5 +432,18 @@
    public List<exportReplenishDTO> exportReplenishSv(List<LocalDate> dates) {
        return patchMapper.exportReplenishMp(dates);
    }
    public Boolean updatePrintNumSv(List<Map<String, Object>> list) {
        if (!list.isEmpty()){
            for (Map<String, Object> item : list) {
                Integer id = (Integer) item.get("id");
                patchMapper.updatePrintNumMp(id);
            }
            return true;
        }else {
            return false;
        }
    }
}
north-glass-erp/src/main/java/com/example/erp/service/sd/BomDataService.java
@@ -95,7 +95,7 @@
        if (!orderDetailsList.isEmpty()) {
            for (OrderDetail od : orderDetailsList) {
                Map<String, Object> itemmap = new HashMap<>();
                itemmap.put("data", bomDataMapper.getBOMDetails(od.getProductId()));
                itemmap.put("data", bomDataMapper.getBOMDetails(od.getProductId(),od.getOrderId()));
                list.add(itemmap);
            }
north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java
@@ -49,8 +49,10 @@
    private final WorkOrderMapper workOrderMapper;
    private final FlowCardMapper flowCardMapper;
    private final BasicOtherMoneyMapper basicOtherMoneyMapper;
    private final OrderProcessDetailMapper orderProcessDetailMapper;
    public OrderService(OrderMapper orderMapper, OrderDetailMapper orderDetailMapper, OrderGlassDetailMapper orderGlassDetailMapper, OrderProcessDetailMapper orderProcessDetailMapper, SysErrorService sysErrorService, OrderOtherMoneyMapper orderOtherMoneyMapper, ProductMapper productMapper, LogService logService, WorkOrderMapper workOrderMapper, FlowCardMapper flowCardMapper) {
    public OrderService(OrderMapper orderMapper, OrderDetailMapper orderDetailMapper, OrderGlassDetailMapper orderGlassDetailMapper, OrderProcessDetailMapper orderProcessDetailMapper, SysErrorService sysErrorService, OrderOtherMoneyMapper orderOtherMoneyMapper, ProductMapper productMapper, LogService logService, WorkOrderMapper workOrderMapper, FlowCardMapper flowCardMapper, BasicOtherMoneyMapper basicOtherMoneyMapper) {
        this.orderMapper = orderMapper;
        this.orderDetailMapper = orderDetailMapper;
        this.orderGlassDetailMapper = orderGlassDetailMapper;
@@ -61,6 +63,7 @@
        this.logService = logService;
        this.workOrderMapper = workOrderMapper;
        this.flowCardMapper = flowCardMapper;
        this.basicOtherMoneyMapper = basicOtherMoneyMapper;
    }
    public boolean saveOrder(Map<String,Object> orderMap) throws Exception {
@@ -604,8 +607,28 @@
                endDate = selectDate.get(1);
            }
        }
        List<OrderDetail> orderDetailList = orderDetailMapper.getOrderReport(offset, pageSize, startDate, endDate, orderDetail,model,scope);
        List<BasicOtherMoney> basicOtherMoneyList=basicOtherMoneyMapper.selectList(new QueryWrapper<BasicOtherMoney>());
        ObjectMapper objectMapper = new ObjectMapper();
        for (OrderDetail detail : orderDetailList) {
            String otherColumnsStr = detail.getOtherColumns();
            if (otherColumnsStr == null || otherColumnsStr.trim().isEmpty()||otherColumnsStr.equals("{}")) {
                continue; // è·³è¿‡ç©ºå€¼
            }
            try {
                // è§£æžä¸ºMap(也可解析为自定义实体类,如OtherColumnsDTO)
                Map<String, Object> otherColumnsJson = objectMapper.readValue(otherColumnsStr, Map.class);
                 detail.setOtherColumnsJson(otherColumnsJson);
            } catch (JsonProcessingException e) {
                System.err.println("解析otherColumns失败,数据:" + otherColumnsStr + ",错误:" + e.getMessage());
            }
        }
        Map<String,Object> map = new HashMap<>();
        map.put("data",orderDetailMapper.getOrderReport(offset, pageSize, startDate, endDate, orderDetail,model,scope));
        map.put("data",orderDetailList);
        map.put("title",basicOtherMoneyList);
        map.put("total",orderDetailMapper.getOrderReportTotal(offset, pageSize, startDate, endDate, orderDetail,"order"));
        List<String> list = new ArrayList<>();
        list.add(startDate);
north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml
@@ -23,6 +23,7 @@
        <result column="process_id" property="processId"/>
        <result column="money" property="money"/>
        <result column="area" property="area"/>
        <result column="square_millimeter" property="squareMillimeter"/>
        <result column="width" property="orderDetail.width"/>
        <result column="height" property="orderDetail.height"/>
@@ -509,11 +510,13 @@
        o.customer_name,
        o.project,
        od.price,
        o.order_type
        o.order_type,
        p.thickness * fol.area as square_millimeter
        from (select *
        from mm.finished_operate_log aa where  aa.status!='已作废') fol
        left join sd.order_detail od on fol.order_id = od.order_id and fol.operation_number = od.order_number
        left join sd.`order` o on o.order_id=fol.order_id
        left join sd.product p on p.id=od.product_id
        <where>
            date(fol.operate_time)>=#{startDate} and date(fol.operate_time) &lt;= #{endDate} and fol.operate_type=#{type}
            <if test="finishedOperateLog.operateType != null and finishedOperateLog.operateType != ''">
@@ -594,6 +597,7 @@
        from mm.finished_operate_log aa where  aa.status!='已作废') fol
        left join sd.order_detail od on fol.order_id = od.order_id and fol.operation_number = od.order_number
        left join sd.`order` o on o.order_id=fol.order_id
        left join sd.product p on p.id=od.product_id
        <where>
            date(fol.operate_time)>=#{startDate} and date(fol.operate_time) &lt;= #{endDate} and fol.operate_type=#{type}
            <if test="finishedOperateLog.operateType != null and finishedOperateLog.operateType != ''">
@@ -806,11 +810,13 @@
               o.customer_name,
               o.project,
               od.price,
               o.order_type
               o.order_type,
               p.thickness * fol.area as square_millimeter
        from (select *
              from mm.finished_operate_log aa where  aa.status!='已作废') fol
                 left join sd.order_detail od on fol.order_id = od.order_id and fol.operation_number = od.order_number
                 left join sd.`order` o on o.order_id=fol.order_id
                 left join sd.product p on p.id=od.product_id
        where  date(fol.operate_time)>=#{dates[0]} and date(fol.operate_time) &lt;= #{dates[1]} and fol.operate_type=#{type}
    </select>
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -1284,7 +1284,7 @@
    </select>
    <select id="selectReplenishPrintMp">
        select fc.id,
        select pl.id,
               fc.order_id,
               fc.process_id,
               o.customer_name,
@@ -1309,7 +1309,8 @@
               pl.reporting_work_id,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S01'))                AS glassNumber,
               pl.patch_id,
               date(pl.create_time) as create_time
               date(pl.create_time) as create_time,
               pl.print_num
        from flow_card as fc
                 left join sd.order_glass_detail as ogd
@@ -1629,7 +1630,8 @@
               pd.separation,
               fc.technology_number,
               IFNULL(JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S02')),'') as mapNumber,
               od.building_number
               od.building_number,
               od.weight
        from flow_card as fc
                 left join sd.order_glass_detail as ogd
                           on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and
@@ -1686,7 +1688,8 @@
               fc.technology_number,
               IFNULL(JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S02')),'') as mapNumber,
               od.building_number,
               fc.merge                                                         as merge
               fc.merge                                                         as merge,
               od.weight
        from flow_card as fc
                 left join sd.order_glass_detail as ogd
                           on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and
@@ -3623,7 +3626,8 @@
        pd.separation,
        #{compound} as technology_number,
        IFNULL(JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S02')),'') as mapNumber,
        od.building_number
        od.building_number,
        od.weight
        from flow_card as fc
        left join sd.order_glass_detail as ogd
        on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and
north-glass-erp/src/main/resources/mapper/pp/PatchLogMapper.xml
@@ -474,4 +474,8 @@
        </where>
        order by r.review_status,r.id desc
    </select>
    <update id="updatePrintNumMp">
        update pp.patch_log set print_num=IFNULL(print_num,0)+1 where id=#{id}
    </update>
</mapper>
north-glass-erp/src/main/resources/mapper/sd/BomDataMapper.xml
@@ -29,13 +29,16 @@
    <select id="getOrderBomDataMp">
        SELECT  product_id,product_name,SUM(quantity) as quantity,
            SUM(gross_area) as area,SUM(perimeter) as perimeter from sd.order_detail where order_id=#{orderId}
            SUM(gross_area) as area,SUM(perimeter) as perimeter,order_id from sd.order_detail where order_id=#{orderId}
            GROUP BY product_id
    </select>
    <select id="getBOMDetails">
        select *,(consume*price) as materialPric from sd.bom_product as bp left join sd.bom_base as bb on bb.id=bp.base_id
            where bp.product_id = #{productId} ORDER BY product_layer
        select bp.*,bb.*,(consume*price) as materialPric,od.quantity from sd.bom_product as bp
            left join sd.bom_base as bb on bb.id=bp.base_id
            left join ( select order_id,product_id,SUM(quantity) as quantity from sd.order_detail GROUP BY  order_id,product_id
        ) as od on od.product_id = bp.product_id
        where bp.product_id = #{productId} and od.order_id = #{orderId} ORDER BY product_layer
    </select>
    <select id="getOrderBomSumDataMp">
@@ -53,12 +56,13 @@
            bb.type,
            sum(bb.consume) as consume,
            sum(bb.price) as price,
            sum(bb.consume * bb.price) AS materialPrice
            sum(bb.consume * bb.price) AS materialPrice,
            od.quantity
        FROM
            sd.bom_product AS bp
                LEFT JOIN sd.bom_base AS bb ON bb.id = bp.base_id
                LEFT JOIN (
                select order_id,product_id from sd.order_detail GROUP BY product_id
                select order_id,product_id,SUM(quantity) as quantity from sd.order_detail GROUP BY  order_id,product_id
            ) as od on od.product_id = bp.product_id
        WHERE od.order_id=#{orderId}
north-glass-erp/src/main/resources/mapper/sd/OrderDetailMapper.xml
@@ -320,6 +320,10 @@
            and a.order_number like concat('%',#{orderDetail.orderNumber},'%')
        </if>
        <if test="orderDetail.buildingNumber != null and orderDetail.buildingNumber != ''">
            and a.building_number like concat('%',#{orderDetail.buildingNumber},'%')
        </if>
        <if test="orderDetail.width != null and orderDetail.width != '' and model==0">
            and a.width regexp REGEXP_REPLACE(#{orderDetail.width},'\\.0+$','')
        </if>
@@ -478,6 +482,10 @@
            and a.order_number like concat('%',#{orderDetail.orderNumber},'%')
        </if>
        <if test="orderDetail.buildingNumber != null and orderDetail.buildingNumber != ''">
            and a.building_number like concat('%',#{orderDetail.buildingNumber},'%')
        </if>
        <if test="orderDetail.width != null and orderDetail.width != ''">
            and a.width regexp REGEXP_REPLACE(#{orderDetail.width},'\\.0+$','')
        </if>