From 73be6b08f5a94e71550fe788c5d74705daa91be0 Mon Sep 17 00:00:00 2001 From: guoyuji <guoyujie@ng.com> Date: 星期五, 22 三月 2024 16:48:07 +0800 Subject: [PATCH] 订单首页右键查询流程卡进度 --- north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue | 79 ++++++++--- north-glass-erp/northglass-erp/src/lang/en.js | 4 north-glass-erp/northglass-erp/src/views/pp/report/ProcessCardProgress.vue | 127 +++++++++-------- north-glass-erp/target/classes/mapper/sd/OrderProcessDetail.xml | 26 +++ north-glass-erp/src/main/resources/mapper/pp/Report.xml | 46 ++++++ north-glass-erp/northglass-erp/src/lang/zh.js | 4 north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java | 36 ++++ north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportMapper.java | 2 north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java | 5 north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetail.xml | 26 +++ north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportController.java | 15 + 11 files changed, 279 insertions(+), 91 deletions(-) diff --git a/north-glass-erp/northglass-erp/src/lang/en.js b/north-glass-erp/northglass-erp/src/lang/en.js index 9248a3b..b727c55 100644 --- a/north-glass-erp/northglass-erp/src/lang/en.js +++ b/north-glass-erp/northglass-erp/src/lang/en.js @@ -127,6 +127,10 @@ msgDeleteSuccess:'Successfully delete', deleteConfirm:'Confirm order deletion?', orderType:'Order Type', + processFlows:'Process flows:', + msgList:{ + checkOrder:'No order information is found. Please click Order first' + } }, craft:{ glassAddress:'Glass Address', diff --git a/north-glass-erp/northglass-erp/src/lang/zh.js b/north-glass-erp/northglass-erp/src/lang/zh.js index 4c38e6e..a13eb89 100644 --- a/north-glass-erp/northglass-erp/src/lang/zh.js +++ b/north-glass-erp/northglass-erp/src/lang/zh.js @@ -182,6 +182,10 @@ msgDeleteSuccess:'鍒犻櫎鎴愬姛', deleteConfirm:'纭鍒犻櫎璁㈠崟?', orderType:'璁㈠崟绫诲瀷', + processFlows:'娴佺▼鍗¤繘搴�', + msgList:{ + checkOrder:'鏈煡璇㈠埌璁㈠崟淇℃伅锛岃鍏堝崟鍑昏鍗�' + } }, craft:{ diff --git a/north-glass-erp/northglass-erp/src/views/pp/report/ProcessCardProgress.vue b/north-glass-erp/northglass-erp/src/views/pp/report/ProcessCardProgress.vue index cb03764..dd7d1f9 100644 --- a/north-glass-erp/northglass-erp/src/views/pp/report/ProcessCardProgress.vue +++ b/north-glass-erp/northglass-erp/src/views/pp/report/ProcessCardProgress.vue @@ -1,40 +1,28 @@ <script setup> import request from "@/utils/request" -import deepClone from "@/utils/deepClone" import {ElDatePicker, ElMessage} from "element-plus" -import useProductGlassTypeStore from "@/stores/sd/product/productGlassType" import {nextTick, onMounted, onUnmounted, reactive, ref, watch} from "vue" import {Search} from "@element-plus/icons-vue" -import GlassType from "@/components/sd/product/GlassType.vue" import {useRouter} from 'vue-router' -import Sortable from 'sortablejs' -import BasicTable from '@/components/basic/BasicTable.vue' -import {VXETable} from "vxe-table"; -import useUserInfoStore from "@/stores/userInfo"; import {changeFilterEvent, filterChanged} from "@/hook" -import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove"; + import { useI18n } from 'vue-i18n' //璇█鑾峰彇 const { t } = useI18n() let router=useRouter() -const getTableRow = (row,type) =>{ - switch (type) { - case 'edit' :{ - //alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑缂栬緫淇℃伅') - router.push({path: '/main/reportingWorks/ReportingWorkDetail', query: { id: row.id }}) - break - } - case 'delete':{ - alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑鍒犻櫎淇℃伅') - break - } - case 'setType':{ - alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑鍙嶅鐘舵��') - break - } + +let props = defineProps({ + orderId:null +}) +onMounted(()=>{ + if(props.orderId===null || props.orderId===undefined || props.orderId===''){ + return } -} + form.orderId = props.orderId + getWorkOrder() +}) + //琛ㄥ熬姹傚拰 const sumNum = (list, field) => { @@ -66,24 +54,57 @@ computeGrossArea: '', processingNote: '', } - }) - - +const columns = [ + {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, + {field: 'product_name', width: 150, title: '浜у搧鍚嶇О',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, + {field: 'glass_child',width: 130, title: '鍗曠墖鍚嶇О' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, + {field: 'order_type', width: 120,title: '璁㈠崟绫诲瀷',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, + {field: 'process_id',width: 110, title: '娴佺▼鍗″彿',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, + {field: 'technology_number', width: 90,title: '鏍囪',showOverflow:"ellipsis"}, + {field: 'quantity', width: 90,title: '鏁伴噺'}, + {field: 'broken_num',width: 90, title: '娆$牬鏁伴噺'}, + {field: 'inventoryArea',width: 120, title: '鍏ュ簱闈㈢Н'}, +] +//闇�瑕佸悎骞剁殑鍒� +let column = [1,3,8] //鐐瑰嚮鏌ヨ const getWorkOrder = () => { - let inputVal = form.orderId - - request.post(`/processCard/flowCard/${inputVal}`, filterData.value).then((res) => { + request.post(`/report/processCardProgress/${form.orderId}`,column).then((res) => { if (res.code == 200) { - - pageTotal.value = res.data.total + if(res.data.data.length===0){ + ElMessage.warning('鏈煡璇㈠埌姝よ鍗曟祦绋嬪崱鏁版嵁') + return + } + gridOptions.columns = JSON.parse(JSON.stringify(columns)) + res.data.title.forEach(item =>{ + let column = {slots: { default: 'quantitySum' }, width: 90,title: item.process} + gridOptions.columns.push(column) + }) + res.data.data.forEach(item => { + item.reportWorkQuantity=JSON.parse(item.reportWorkQuantity) + item.reportWorkQuantityCount=JSON.parse(item.reportWorkQuantityCount) + }) + mergeCells.value = res.data.mergeCells + console.log(res.data.mergeCells) xGrid.value.loadData(res.data.data) - gridOptions.loading = false } else { ElMessage.warning(res.msg) } }) +} +const quantitySum = ( row,column )=>{ + const reportWorkQuantity = row.reportWorkQuantity[column.title] || 0 + const reportWorkQuantityCount = row.reportWorkQuantityCount[column.title] || 0 + if(reportWorkQuantity===reportWorkQuantityCount){ + return reportWorkQuantity + } + + return (reportWorkQuantity + +'(' + +reportWorkQuantityCount + +')' ) + //return } @@ -93,7 +114,6 @@ return regex.test(value); // 杩斿洖true/false } -//瀛愮粍浠舵帴鏀跺弬鏁� const xGrid = ref() const gridOptions = reactive({ border: "full",//琛ㄦ牸鍔犺竟妗� @@ -123,29 +143,15 @@ mode: 'row', showStatus: true },//琛ㄥご鍙傛暟 - columns:[ - {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, - {field: '1', width: 150, title: '浜у搧鍚嶇О',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, - {field: '2',width: 130, title: '鍗曠墖鍚嶇О' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, - {field: '3', width: 120,title: '璁㈠崟绫诲瀷',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, - {field: '4',width: 110, title: '娴佺▼鍗″彿',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, - {field: '5', width: 90,title: '鏍囪',showOverflow:"ellipsis"}, - {field: '6', width: 90,title: '鏁伴噺'}, - {field: '7',width: 90, title: '娆$牬鏁伴噺'}, - - {field: '8',width: 120, title: '鍒囧壊'}, - {field: '9',width: 120, title: '纾ㄨ竟'}, - {field: '10',width: 120, title: '閽㈠寲'}, - {field: '11',width: 120, title: '鍏ュ簱闈㈢Н'}, - ],//琛ㄥご鎸夐挳 + columns:[],//琛ㄥご鎸夐挳 toolbarConfig: { // buttons: [{ // // }], - import: false, - export: true, - print: true, + // import: false, + // export: true, + // print: true, zoom: true, custom: true }, @@ -177,11 +183,6 @@ }) const mergeCells = ref([ - { row: 0, col: 1, rowspan: 3, colspan: 0}, - { row: 3, col: 1, rowspan: 3, colspan: 0}, - - { row: 0, col: 6, rowspan: 3, colspan: 0}, - { row: 3, col: 6, rowspan: 3, colspan: 0}, ]) @@ -191,9 +192,15 @@ <div class="main-div-customer" > <div id="selectForm"> <el-row :gutter="0"> - <el-input v-model="form.orderId" clearable :placeholder="$t('order.orderId')" style="width: 130px"></el-input> + <el-input + v-model="form.orderId" + clearable + :disabled="props.orderId" + :placeholder="$t('order.orderId')" + style="width: 130px"></el-input> <el-button + :disabled="props.orderId" @click="getWorkOrder" id="select" type="primary" :icon="Search">{{$t('basicData.search')}} @@ -231,6 +238,10 @@ </div> </template> + <template #quantitySum="{ row,column }"> + <span>{{ quantitySum(row,column) }} </span> + </template> + </vxe-grid> </div> diff --git a/north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue b/north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue index b08eaed..c71f53f 100644 --- a/north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue +++ b/north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue @@ -8,9 +8,21 @@ import {ElMessage} from "element-plus" import {VXETable} from "vxe-table" import {useI18n} from "vue-i18n" + import {toolbarButtonClickEvent} from "@/hook/mouseMove"; const { t } = useI18n() const router = useRouter() - + let rowClickIndex = ref(null) + const dialogTableVisible = ref(false) + let orderType = ref("2") + let selectDate = ref(["",""]) + let filterData = ref({}) + let orderList = ref([]) + let pageNum=ref(1) + let total = reactive({ + pageTotal : 0, + dataTotal : 0, + pageSize : 100 + }) const xGrid = ref() const gridOptions = reactive({ @@ -40,7 +52,17 @@ trigger: 'click', mode: 'row', showStatus: true - },//琛ㄥご鍙傛暟 + }, + menuConfig: { + body: { + options: [ + [ + { code: 'getProcessList', name: t('searchOrder.processFlows'), prefixIcon: 'vxe-icon-file-txt', visible: true} + ] + ] + } + }, + //琛ㄥご鍙傛暟 columns:[ {type:'expand',slots: { content:'content' },width: 50,fixed:"left",}, {title: t('basicData.operate'), width: 110, slots: { default: 'button_slot' },fixed:"left",}, @@ -73,7 +95,9 @@ //{field: '14',width:120, title: '澶囨敞',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, {field: 'deliveryAddress',width:120, title: t('order.deliveryAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true} - ],//琛ㄥご鎸夐挳 + ], + + //琛ㄥご鎸夐挳 toolbarConfig: { buttons: [ @@ -110,7 +134,7 @@ if ($grid) { switch (code) { case 'checkList': { - if($grid.getCheckboxRecords().length==0){ + if($grid.getCheckboxRecords().length===0){ VXETable.modal.message( t('searchOrder.msg')) return } @@ -120,18 +144,27 @@ } } }, + menuClick ({ menu, row, column }) { + const $grid = xGrid.value + if ($grid) { + switch (menu.code) { + case 'getProcessList': { + if(rowClickIndex.value===null){ + ElMessage.warning(t('searchOrder.msgList.checkOrder')) + return + } + dialogTableVisible.value = true + break + } + + } + } + }, + cellClick({ row }){ + rowClickIndex.value = row + } } - const dialogTableVisible = ref(false) - let orderType = ref("2") - let selectDate = ref(["",""]) - let filterData = ref({}) - let orderList = ref([]) - let pageNum=ref(1) - let total = reactive({ - pageTotal : 0, - dataTotal : 0, - pageSize : 100 - }) + //鍔犺浇璇锋眰 request.post(`/order/getOrderList/1/${total.pageSize}/${orderType.value}/${selectDate.value}`,filterData).then((res) => { if(res.code==200){ @@ -179,9 +212,7 @@ } //鍙屽嚮琛ㄦ牸琛� - const cellClickEvent =()=>{ - dialogTableVisible.value = true - } + const selectOrderList = ()=>{ request.post(`/order/getOrderList/${pageNum.value}/${total.pageSize}/${orderType.value}/${selectDate.value}` ,filterData).then((res) => { @@ -261,11 +292,11 @@ <el-button @click="changeDate" style="margin-top: -5px" id="searchButton" type="primary" :icon="Search">{{ $t('basicData.search') }}</el-button> <vxe-grid @filter-change="filterChanged" - @cell-dblclick="cellClickEvent" max-height="100%" class="mytable-scrollbar" ref="xGrid" v-bind="gridOptions" + v-on="gridEvents" > <!-- 涓嬫媺鏄剧ず鎵�鏈変俊鎭彃妲�--> @@ -332,8 +363,14 @@ </template> </vxe-grid> - <el-dialog v-model="dialogTableVisible" title="娴佺▼鍗¤繘搴�" style="width: 80%;height:75% "> - <ProcessCardProgress style="width: 100%;height: 100%" /> + <el-dialog + v-model="dialogTableVisible" + destroy-on-close + :title="$t('searchOrder.processFlows')" + style="width: 80%;height:75% "> + <ProcessCardProgress + :orderId="rowClickIndex.orderId" + style="width: 100%;height: 100%" /> </el-dialog> </div> </template> diff --git a/north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportController.java b/north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportController.java index 6ebc1c9..8574f65 100644 --- a/north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportController.java +++ b/north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportController.java @@ -13,21 +13,24 @@ import org.springframework.web.bind.annotation.*; import java.sql.Date; +import java.util.List; import java.util.Map; @RestController @Api(value="鐢熶骇鎶ヨ〃controller",tags={"鐢熶骇鎶ヨ〃鎿嶄綔鎺ュ彛"}) @RequestMapping("/report") public class ReportController { - @Autowired - ReportService reportService; + private final ReportService reportService; + + public ReportController(ReportService reportService) { + this.reportService = reportService; + } //娴佺▼鍗¤繘搴� @ApiOperation("娴佺▼鍗¤繘搴�") @PostMapping ("/processCardProgress/{orderId}") - public Result processCardProgress( - @PathVariable String orderId, - @RequestBody FlowCard flowCard){ - return Result.seccess(reportService.processCardProgressSv(orderId,flowCard)); + public Result processCardProgress(@PathVariable String orderId, @RequestBody List<Integer> columns){ + return Result.seccess(reportService.processCardProgressSv(orderId,columns)); } + } diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportMapper.java index 0675066..270762f 100644 --- a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportMapper.java +++ b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportMapper.java @@ -13,5 +13,5 @@ @Mapper public interface ReportMapper { - List<Map<String, String>> processCardProgressMp(String orderId, FlowCard flowCard); + List<Map<String, String>> processCardProgressMp(String orderId); } diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java index cf3289e..bb54147 100644 --- a/north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java +++ b/north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java @@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; @Mapper @DS("sd") @@ -14,4 +15,8 @@ boolean insertOrderProcessDetail(@Param("processDetailList") List<OrderProcessDetail> processDetailList); void updateQuantity(String reportingWorkId,String process,String type); + + List<Map<String,String>> filterOrderProcess(String orderId); + + List<Map<String,Integer>> getGlassLRow(String orderId); } diff --git a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java index 11d24f4..0bcecbb 100644 --- a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java +++ b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java @@ -7,24 +7,50 @@ import com.example.erp.entity.pp.FlowCard; import com.example.erp.mapper.pp.ReportMapper; +import com.example.erp.mapper.sd.OrderProcessDetailMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.sql.Date; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service -@DS("sd") +@DS("pp") public class ReportService { - @Autowired - ReportMapper reportMapper; + private final ReportMapper reportMapper; + + private final OrderProcessDetailMapper orderProcessDetailMapper; + + public ReportService(ReportMapper reportMapper, OrderProcessDetailMapper orderProcessDetailMapper) { + this.reportMapper = reportMapper; + this.orderProcessDetailMapper = orderProcessDetailMapper; + } - public Map<String, Object> processCardProgressSv(String orderId, FlowCard flowCard) { + public Map<String, Object> processCardProgressSv(String orderId, List<Integer> columns) { Map<String, Object> map = new HashMap<>(); - map.put("data", reportMapper.processCardProgressMp(orderId, flowCard)); + map.put("data", reportMapper.processCardProgressMp(orderId)); + map.put("title", orderProcessDetailMapper.filterOrderProcess(orderId)); + List<Map<String,Integer>> getRowCount = orderProcessDetailMapper.getGlassLRow(orderId); + List<Map<String,Integer>> rowCount = new ArrayList<>(); + columns.forEach(col ->{ + getRowCount.forEach(row ->{ + Map<String,Integer> getRow = new HashMap<>(); + // { row: 0, col: 1, rowspan: 3, colspan: 0}, + getRow.put("row",row.get("RowNum")); + getRow.put("col",col); + getRow.put("rowspan",row.get("rowCount")); + getRow.put("colspan",0); + rowCount.add(getRow); + }); + }); + + + map.put("mergeCells",rowCount); + return map; } } diff --git a/north-glass-erp/src/main/resources/mapper/pp/Report.xml b/north-glass-erp/src/main/resources/mapper/pp/Report.xml index 703b4fe..43b3c62 100644 --- a/north-glass-erp/src/main/resources/mapper/pp/Report.xml +++ b/north-glass-erp/src/main/resources/mapper/pp/Report.xml @@ -52,6 +52,52 @@ <!-- 娴佺▼鍗¤繘搴�--> <select id="processCardProgressMp"> + select + a.product_name, + b.glass_child, + d.order_type, + concat(c.process_id,'/',c.technology_number) as process_id, + c.technology_number, + c.quantity, + e.reportWorkQuantity, + e.reportWorkQuantityCount, + e.broken_num, + round(ifnull(f.inventory,0)*a.area,2) as inventoryArea + + from + flow_card as c + left join + sd.order_detail as a + on c.order_id = a.order_id + and c.order_number = a.order_number + left join sd.order_glass_detail as b + on c.order_id = b.order_id + and b.order_number = c.order_number + and c.technology_number = b.technology_number + left join sd.`order` as d + on c.order_id = d.order_id + left join mm.finished_goods_inventory as f + on c.order_id = f.order_id and f.order_number = c.order_number + left join ( + SELECT process_id, + technology_number, + sum(a.broken_num) as broken_num, + concat('{', + GROUP_CONCAT(concat("\"",process,"\":\"",reporting_work_num,"\"")), + '}' + ) as reportWorkQuantity, + concat('{', + GROUP_CONCAT(concat("\"",process,"\":\"",reporting_work_num_count,"\"")), + '}' + ) as reportWorkQuantityCount + FROM sd.order_process_detail as a + where a.order_id=#{orderId} + GROUP BY process_id,a.technology_number + ) as e + on e.process_id = c.process_id + and e.technology_number = c.technology_number + + where a.order_id = #{orderId} </select> </mapper> \ No newline at end of file diff --git a/north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetail.xml b/north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetail.xml index 2307263..c7dec8a 100644 --- a/north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetail.xml +++ b/north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetail.xml @@ -69,4 +69,30 @@ </update> + <!--鏌ヨ绛涢�夊悗鍞竴鐨勬祦绋嬪崱鍙�--> + <select id="filterOrderProcess"> + select process + from order_process_detail + where order_id = #{orderId} + group by process + + </select> + <select id="getGlassLRow"> + select + max(a.technology_number) as rowCount, + RowNum + from order_process_detail as a + left join + (select min((@i:=@i+1)) AS RowNum,c.* + from sd.order_glass_detail as c, + (SELECT @i:=-1) as d + where order_id = #{orderId} + GROUP BY order_number + ) as b + on b.order_number = a.order_number + where a.order_id = #{orderId} + group by a.order_number + + </select> + </mapper> \ No newline at end of file diff --git a/north-glass-erp/target/classes/mapper/sd/OrderProcessDetail.xml b/north-glass-erp/target/classes/mapper/sd/OrderProcessDetail.xml index 2307263..c7dec8a 100644 --- a/north-glass-erp/target/classes/mapper/sd/OrderProcessDetail.xml +++ b/north-glass-erp/target/classes/mapper/sd/OrderProcessDetail.xml @@ -69,4 +69,30 @@ </update> + <!--鏌ヨ绛涢�夊悗鍞竴鐨勬祦绋嬪崱鍙�--> + <select id="filterOrderProcess"> + select process + from order_process_detail + where order_id = #{orderId} + group by process + + </select> + <select id="getGlassLRow"> + select + max(a.technology_number) as rowCount, + RowNum + from order_process_detail as a + left join + (select min((@i:=@i+1)) AS RowNum,c.* + from sd.order_glass_detail as c, + (SELECT @i:=-1) as d + where order_id = #{orderId} + GROUP BY order_number + ) as b + on b.order_number = a.order_number + where a.order_id = #{orderId} + group by a.order_number + + </select> + </mapper> \ No newline at end of file -- Gitblit v1.8.0