廖井涛
2025-07-21 4b15732ea08d8a75c07cef37f180289e73932783
物料库存以及订单修改商标后端修改
14个文件已修改
324 ■■■■■ 已修改文件
north-glass-erp/northglass-erp/src/views/mm/ingredientStock/CreateOutBound.vue 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/stockReport/MaterialOutboundReport.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/mm/BasicWarehouseTypeController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/mm/MaterialInventoryController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/sd/OrderController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/entity/mm/MaterialLog.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/mm/BasicWarehouseTypeMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/mm/BasicWarehouseTypeService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/mm/MaterialInventoryService.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/mm/BasicWarehouseType.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/OrderMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/ingredientStock/CreateOutBound.vue
@@ -74,6 +74,8 @@
  warehouseManager:userStore.user.userName
})
let userNameCutting = ref([])
let filterData = ref({
@@ -111,7 +113,6 @@
    if (res.code == 200) {
      titleSelectJson.value = deepClone(res.data)
      console.log("a"+titleSelectJson.value)
      const today = new Date
      today.setTime(today.getTime())
      titleUploadData.value.materialRequisitionDate = today.getFullYear() +
@@ -123,6 +124,18 @@
    }
  })
}
const initUser = async ()=> {
  await request.get(`/BasicWarehouse/BasicWarehouseTypeUser/` + t('machine.cutting')).then((res) => {
    if (res.code == 200) {
      userNameCutting.value=res.data.userName
    } else {
      ElMessage.warning(res.msg)
    }
  })
}
//列查询
const getWork = async ()=> {
  await request.get(`/BasicWarehouse/BasicWarehouseType/`+t('ingredients.originalFilm')+'|'+t('ingredients.accessories')).then((res) => {
@@ -156,6 +169,8 @@
onMounted(async()=>{
  await initOrder()
  await initUser()
  //启用表格拖动选中
  addListener(xGrid.value,gridOptions,cellArea.value)
@@ -170,7 +185,6 @@
      request.post("/materialInventory/getSelectMaterialInventory/1/100",filterData.value).then((res) => {
        if(res.code==200){
          console.log("b"+titleSelectJson.value)
          titleUploadData.value.warehouseManager=userStore.user.userName
          titleUploadData.value.outboundType = titleSelectJson.value.outboundType[0].operateTypeName
          materialStore.value=[]
@@ -380,6 +394,46 @@
          })
          break
        }
        case 'addToExamine': {
          const selectRecords = $grid.getCheckboxRecords()
          if (selectRecords.length === 0) {
            ElMessage.warning(t('productStock.unselectedData'))
            return
          }
          const errMap = await $grid.validate(selectRecords)
          if (errMap) {
            ElMessage.warning(t('productStock.dataVerificationFailed'))
            return
          }
          //表头数据校验
          const outboundType = titleUploadData.value.outboundType
          if(outboundType === null || outboundType === undefined || outboundType === ''){
            ElMessage.error(t('ingredientsStock.pleaseOutboundType'))
            return
          }
          let flowData = ref({
            materialOutboundDetail: selectRecords,
            title: titleUploadData.value,
            materialOutboundId: route.query.materialOutboundId,
            userName:userStore.user.userName,
            userId:userStore.user.userId
          })
          request.post("/materialInventory/saveToExamineMaterialOutbound", flowData.value).then((res) => {
            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(t('basicData.msg.quantityError'))
            }else{
              ElMessage.warning(t('basicData.msg.saveFail'))
            }
          }).catch((err)=>{
            ElMessage.error(t('basicData.msg.ServerConnectionError'))
            router.push("/login")
          })
          break
        }
      }
    }
@@ -459,7 +513,8 @@
    buttons: [
      {'code': 'add', 'name': t('basicData.save'),status: 'primary',icon: 'vxe-icon-save'},
      {'code': 'toExamine', 'name': t('basicData.review'),status: 'primary'},
      {'code': 'CounterExamination', 'name': t('basicData.cancelReview'),status: 'primary'}
      {'code': 'CounterExamination', 'name': t('basicData.cancelReview'),status: 'primary'},
      {'code': 'addToExamine', 'name': t('reportingWorks.saveAndReview'),status: 'primary',icon: 'vxe-icon-save'},
    ],
    /*import: false,
    export: true,
@@ -548,7 +603,14 @@
            :placeholder="$t('delivery.selectDate')"/>
      </el-col>
      <el-col  :span="2"><el-text>{{$t('ingredientsStock.materialRequisitionPersonnel')}}:</el-text></el-col>
      <el-col  :span="3"><el-input v-model="titleUploadData.materialRequisitionPersonnel" /></el-col>
      <el-col  :span="3">
        <el-select v-model="titleUploadData.materialRequisitionPersonnel" clearable placeholder=" " >
          <el-option v-for="item in userNameCutting"
                     :key="item.id"
                     :label="item"
                     :value="item"/>
        </el-select>
      </el-col>
      <el-col  :span="2"><el-text>{{$t('ingredientsStock.materialRequisitionTeam')}}:</el-text></el-col>
      <el-col  :span="3"><el-input v-model="titleUploadData.materialRequisitionTeam" /></el-col>
      <el-col  :span="2"><el-text>{{$t('ingredientsStock.outboundType')}}:</el-text></el-col>
north-glass-erp/northglass-erp/src/views/mm/stockReport/MaterialOutboundReport.vue
@@ -14,7 +14,9 @@
    {field: 'operationOrderNumber', width:'150', title: t('productStock.operationOrderNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationNumber', width: '100',title: t('order.OrderNum'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateType', width: '120',title:t('warehouseBasicData.type'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'projectNo', width: '120',title:t('ingredientsStock.projectNo'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'materialOutbound.orderId', width: '120',title:t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'materialOutbound.project', width: '120',title:t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'materialOutbound.batch', width: '120',title:t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity', width: '140',title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'inventoryId',width: '100', title: t('ingredientsStock.id'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'materialCode',width: '140', title: t('ingredients.materialCode'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
north-glass-erp/src/main/java/com/example/erp/controller/mm/BasicWarehouseTypeController.java
@@ -56,4 +56,10 @@
        return  Result.seccess(basicWarehouseTypeService.deleteBasicWarehouse(basicWarehouseType));
    }
    @ApiOperation("用户基础数据查询返回json对象格式")
    @GetMapping("/BasicWarehouseTypeUser/{type}")
    public Result BasicWarehouseTypeUser(@PathVariable String type){
        return Result.seccess(basicWarehouseTypeService.BasicWarehouseTypeUser(type));
    }
}
north-glass-erp/src/main/java/com/example/erp/controller/mm/MaterialInventoryController.java
@@ -207,5 +207,14 @@
        return Result.seccess(materialInventoryService.getOptimizeOutboundReport(type,pageNum,pageSize,selectDate,materialLog));
    }
    @ApiOperation("物料出库保存并审核接口")
    @SaCheckPermission("createOutbound.add")
    @PostMapping("/saveToExamineMaterialOutbound")
    public Result saveToExamineMaterialOutbound( @RequestBody Map<String,Object>  object){
        return Result.seccess(materialInventoryService.saveToExamineMaterialOutbound(object));
    }
}
north-glass-erp/src/main/java/com/example/erp/controller/sd/OrderController.java
@@ -275,5 +275,10 @@
        return  Result.seccess(orderService.selectUploadDxf(object));
    }
    @PostMapping("/updateOrderFile")
    public Result updateOrderFile(@RequestBody Map<String,Object> map)  {
        return  Result.seccess(orderService.updateOrderFile(map));
    }
}
north-glass-erp/src/main/java/com/example/erp/entity/mm/MaterialLog.java
@@ -53,5 +53,7 @@
    @ExcelProperty("优化使用数量")
    private Integer useCount;
    private MaterialOutbound materialOutbound;
}
north-glass-erp/src/main/java/com/example/erp/mapper/mm/BasicWarehouseTypeMapper.java
@@ -30,5 +30,7 @@
    Boolean updateBasicWarehouse(@Param("id") Long id,@Param("operateTypeName") String operateTypeName);
    List<String> getBasicWarehouseUser(String type);
}
north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderMapper.java
@@ -63,6 +63,8 @@
    Boolean saveOrderFile(String fileName,String dxfData,String orderId,Integer orderNumber);
    Boolean updateOrderFile(String fileName,String dxfData,String orderId,Integer orderNumber);
    Map<String,String> selectOrderFile( String orderId,Integer orderNumber);
    List<Map<String,String>> selectOrderFileList( String orderId);
north-glass-erp/src/main/java/com/example/erp/service/mm/BasicWarehouseTypeService.java
@@ -80,4 +80,11 @@
    }
    public Map<String, Object> BasicWarehouseTypeUser(String type){
        Map<String, Object> map = new HashMap<>();
        map.put("userName",basicWarehouseTypeMapper.getBasicWarehouseUser(type));
        return map;
    }
}
north-glass-erp/src/main/java/com/example/erp/service/mm/MaterialInventoryService.java
@@ -1112,4 +1112,134 @@
        return map;
    }
    public String saveToExamineMaterialOutbound(Map<String,Object> object) {
        String saveState = "true";
        //设置回滚点
        Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
        String materialOutboundId = "";
        String oddNumber;
        if (object.get("materialOutboundId") != null) {
            materialOutboundId = object.get("materialOutboundId").toString();
        }
        Log log = new Log();
        log.setOperatorId(object.get("userId").toString());
        log.setOperator(object.get("userName").toString());
        log.setContent(object.toString());
        try {
            MaterialOutbound materialOutbound = JSONObject.parseObject(JSONObject.toJSONString(object.get("title")), MaterialOutbound.class);
            List<MaterialOutboundDetail> materialOutboundDetailList = JSONArray.parseArray(JSONObject.toJSONString(object.get("materialOutboundDetail")), MaterialOutboundDetail.class);
            //查询出库单是否存在
            Integer MaterialOutboundConut = materialInventoryMapper.getMaterialOutboundCount(materialOutboundId);
            if (MaterialOutboundConut != 0) {
                List<MaterialOutboundDetail> materialOutboundDetailLists = materialInventoryMapper.getIsNotMaterialOutboundDetail(materialOutboundId);
                if (!materialOutboundDetailLists.isEmpty()) {
                    for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailLists) {
                        //还原物料库存数
                        materialInventoryMapper.updateMaterialInventoryAvailableInt(materialOutboundDetail.getInventoryId(), materialOutboundDetail.getOutboundQuantity());
                        if(materialOutboundDetail.getUseId()!=null){
                            //还原优化工程库存数
                            materialInventoryMapper.updateMaterialInventoryAvailableOptInt(materialOutboundDetail.getUseId(), materialOutboundDetail.getOutboundQuantity());
                        }/*else{
                            //还原物料库存数
                            materialInventoryMapper.updateMaterialInventoryAvailableInt(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
                        }*/
                    }
                }
                //删除材料出库明细的数据
                materialInventoryMapper.deleteMaterialOutboundDetail(materialOutboundId);
                materialInventoryMapper.updateMaterialOutbound(materialOutbound, materialOutboundId);
                materialInventoryMapper.deleteMaterialLog(materialOutboundId);
                oddNumber = materialOutboundId;
                log.setFunction("saveMaterialOutbound修改:"+oddNumber);
            } else {
                //获取单号
                oddNumber = orderNumberSetting("出库");
                //新增材料出库表数据
                materialInventoryMapper.insertMaterialOutbound(materialOutbound, oddNumber);
                log.setFunction("saveMaterialOutbound新增:"+oddNumber);
            }
            //获取对象集合循环进行新增修改
            if (!materialOutboundDetailList.isEmpty()) {
                for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailList) {
                    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());
                        String projectNo="";
                        if(materialOutboundDetail.getUseId()!=null){
                            projectNo = materialInventoryMapper.selectProjectNo(materialOutboundDetail.getUseId());
                            //修改优化工程表出库数量
                            materialInventoryMapper.updateMaterialInventoryAvailableOptOut(materialOutboundDetail.getUseId(), materialOutboundDetail.getOutboundQuantity());
                        }/*else{
                        //修改物料库存表出库数量
                        materialInventoryMapper.updateMaterialInventoryAvailableOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
                        }*/
                        if(materialOutboundDetail.getUseId()!=null){
                            //修改物料库存数量
                            materialInventoryMapper.updateMaterialInventoryInventoryPlanQuantityOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
                        }else{
                            materialInventoryMapper.updateMaterialInventoryInventoryOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
                        }
                        materialInventoryMapper.updateMaterialOutboundToExamine(oddNumber,1,object.get("userName").toString());
                        String json="";
                        MaterialStore materialStore=materialStoreMapper.getSelectMaterialStoreById(Long.valueOf(materialOutboundDetail.getMaterialCode()));
                        json=materialStore.getJson().substring(1, materialStore.getJson().length() - 1);
                        MaterialLog materialLog=new MaterialLog();
                        materialLog.setOperationOrderNumber(oddNumber);
                        materialLog.setOperationNumber(materialOutboundDetailMaximum + 1);
                        materialLog.setOperateType("物料出库");
                        materialLog.setMaterialCode(Long.valueOf(materialOutboundDetail.getMaterialCode()));
                        materialLog.setMaterialName(convertString(json,"\"name\""));
                        materialLog.setProducer(materialInventory.getProducer());
                        materialLog.setUnit(convertString(json,"\"unit\""));
                        materialLog.setWidth(convertDouble(json,"\"width\""));
                        materialLog.setHeight(convertDouble(json,"\"height\""));
                        materialLog.setThickness(convertDouble(json,"\"thickness\""));
                        materialLog.setQuantity(materialOutboundDetail.getOutboundQuantity());
                        materialLog.setSinglePieceArea(materialOutboundDetail.getSinglePieceArea());
                        materialLog.setInventoryId(materialOutboundDetail.getId());
                        materialLog.setInventoryArea(materialInventory.getInventoryArea());
                        materialLog.setRemarks(materialOutboundDetail.getRemarks());
                        materialLog.setProjectNo(projectNo);
                        materialLog.setOperator(object.get("userName").toString());
                        materialLog.setOperateTime(LocalDate.now());
                        materialLogMapper.insert(materialLog);
                    }else{
                        TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
                        return "false1";
                    }
                }
            }
            logService.saveLog(log);
        } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
            //将异常传入数据库
            SysError sysError = new SysError();
            sysError.setError(e+Arrays.toString(e.getStackTrace()));
            sysError.setFunc("saveMaterialOutbound");
            sysErrorService.insert(sysError);
            saveState = "false";
        }
        return saveState;
    }
}
north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java
@@ -1011,4 +1011,26 @@
        map.put("data",orderMapper.selectOrderFile(orderId,orderNumber));
        return map;
    }
    public boolean updateOrderFile(Map<String,Object> object)  {
        String orderId = "";
        if (object.get("orderId") != null) {
            orderId = object.get("orderId").toString();
        }
        int orderNumber =0;
        if (object.get("orderNumber") != null) {
            orderNumber = Integer.parseInt(object.get("orderNumber").toString());
        }
        String dataBase64 = "";
        if (object.get("dataBase64") != null) {
            dataBase64 = object.get("dataBase64").toString();
        }
        Map<String,String> orderFile =orderMapper.selectOrderFile(orderId,orderNumber);
        if(orderFile!=null){
            orderMapper.updateOrderFile("map.dxf", dataBase64,orderId,orderNumber);
        }else{
            orderMapper.saveOrderFile("map.dxf", dataBase64,orderId,orderNumber);
        }
        return true;
    }
}
north-glass-erp/src/main/resources/mapper/mm/BasicWarehouseType.xml
@@ -40,6 +40,10 @@
        update mm.basic_warehouse_type set operate_type_name=#{operateTypeName},create_time=now() where id=#{id}
    </update>
    <select id="getBasicWarehouseUser" >
        select user_name from erp_user_info.user u where u.address regexp #{type};
    </select>
north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml
@@ -35,6 +35,32 @@
    </resultMap>
    <resultMap id="selectMaterialOutboundLog" type="com.example.erp.entity.mm.MaterialLog" >
        <id column="id" property="id"/>
        <result column="operation_order_number" property="operationOrderNumber"/>
        <result column="operate_type" property="operateType"/>
        <result column="operation_number" property="operationNumber"/>
        <result column="inventory_id" property="inventoryId"/>
        <result column="material_code" property="materialCode"/>
        <result column="material_name" property="materialName"/>
        <result column="producer" property="producer"/>
        <result column="unit" property="unit"/>
        <result column="width" property="width"/>
        <result column="height" property="height"/>
        <result column="thickness" property="thickness"/>
        <result column="quantity" property="quantity"/>
        <result column="single_piece_area" property="singlePieceArea"/>
        <result column="inventory_area" property="inventoryArea"/>
        <result column="operator" property="operator"/>
        <result column="remarks" property="remarks"/>
        <result column="operate_time" property="operateTime"/>
        <result column="use_count" property="useCount"/>
        <result column="order_id" property="materialOutbound.orderId"/>
        <result column="project" property="materialOutbound.project"/>
        <result column="batch" property="materialOutbound.batch"/>
    </resultMap>
    <select id="getSelectMaterialInventoryDate">
@@ -974,9 +1000,9 @@
        where mi.id = #{id}
    </select>
    <select id="getMaterialLogReport" >
    <select id="getMaterialLogReport" resultMap="selectMaterialOutboundLog">
        select *
        from mm.material_log ml
        from mm.material_log ml left join mm.material_outbound mo on mo.material_outbound_id=ml.operation_order_number
        <where>
            date(ml.operate_time)>=#{startDate} and date(ml.operate_time) &lt;= #{endDate} and ml.operate_type=#{type}
            <if test="materialLog.operateType != null and materialLog.operateType != ''">
@@ -1026,10 +1052,19 @@
                and  ml.operator regexp  #{materialLog.operator}
            </if>
            <if test="materialLog.remarks != null and materialLog.remarks != ''">
                and ml.remarks regexp #{materialLog.remarksr}
                and ml.remarks regexp #{materialLog.remarks}
            </if>
            <if test="materialLog.projectNo != null and materialLog.projectNo != ''">
                and ml.project_no regexp #{materialLog.projectNo}
            </if>
            <if test="materialLog.materialOutbound!=null and (materialLog.materialOutbound.orderId != null and materialLog.materialOutbound.orderId != '')">
                and  mo.order_id regexp  #{materialLog.materialOutbound.orderId}
            </if>
            <if test=" materialLog.materialOutbound!=null and materialLog.materialOutbound.project != null and materialLog.materialOutbound.project != ''">
                and mo.project regexp #{materialLog.materialOutbound.project}
            </if>
            <if test=" materialLog.materialOutbound!=null and materialLog.materialOutbound.batch != null and materialLog.materialOutbound.batch != ''">
                and mo.batch regexp #{materialLog.materialOutbound.batch}
            </if>
        </where>
        order by ml.id desc
@@ -1040,7 +1075,7 @@
    <select id="getMaterialLogReportTotal">
        select CEILING(count(ml.id)/#{pageSize}) as 'pageTotal',
        count(ml.id) as 'total'
        from mm.material_log ml
        from mm.material_log ml left join mm.material_outbound mo on mo.material_outbound_id=ml.operation_order_number
        <where>
            date(ml.operate_time)>=#{startDate} and date(ml.operate_time) &lt;= #{endDate} and ml.operate_type=#{type}
            <if test="materialLog.operateType != null and materialLog.operateType != ''">
@@ -1090,7 +1125,19 @@
                and  ml.operator regexp  #{materialLog.operator}
            </if>
            <if test="materialLog.remarks != null and materialLog.remarks != ''">
                and ml.remarks regexp #{materialLog.remarksr}
                and ml.remarks regexp #{materialLog.remarks}
            </if>
            <if test="materialLog.projectNo != null and materialLog.projectNo != ''">
                and ml.project_no regexp #{materialLog.projectNo}
            </if>
            <if test="materialLog.materialOutbound!=null and (materialLog.materialOutbound.orderId != null and materialLog.materialOutbound.orderId != '')">
                and  mo.order_id regexp  #{materialLog.materialOutbound.orderId}
            </if>
            <if test=" materialLog.materialOutbound!=null and materialLog.materialOutbound.project != null and materialLog.materialOutbound.project != ''">
                and mo.project regexp #{materialLog.materialOutbound.project}
            </if>
            <if test=" materialLog.materialOutbound!=null and materialLog.materialOutbound.batch != null and materialLog.materialOutbound.batch != ''">
                and mo.batch regexp #{materialLog.materialOutbound.batch}
            </if>
        </where>
    </select>
north-glass-erp/src/main/resources/mapper/sd/OrderMapper.xml
@@ -432,4 +432,8 @@
        where order_id = #{orderId}
    </select>
    <update id="updateOrderFile">
        update sd.order_file set file_name=#{fileName},file_data=#{dxfData},create_time=now() where orderId=#{orderId} and orderNumber=#{orderNumber}
    </update>
</mapper>