Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override
| | |
| | | }, |
| | | teamsGroupsName:'上工序报工', |
| | | productionReport:'生产报表', |
| | | workInProgressReport:'在制品报表', |
| | | workInProgressReport:'在制品明细报表', |
| | | WorkInProgressCombination:'在制品汇总报表', |
| | | processToBeCompleted:'工序待完成报表', |
| | | productionAndShippingProgress:'生产发货进度报表', |
| | |
| | | import deepClone from "@/utils/deepClone"; |
| | | import {ElDatePicker, ElMessage} from "element-plus"; |
| | | import {useI18n} from 'vue-i18n' |
| | | import exportExcel from "@/hook/exportExcel"; |
| | | import footSum from "@/hook/footSum" |
| | | import {changeFilterEvent} from "@/hook" |
| | | //语言获取 |
| | |
| | | |
| | | }) |
| | | |
| | | function exportExcel(url, fileName,date) { |
| | | if(date===null){ |
| | | ElMessage.warning(t('report.pleaseSelectADateFirst')) |
| | | return |
| | | } |
| | | |
| | | |
| | | const date1 = new Date(date[0]); |
| | | const date2 = new Date(date[1]); |
| | | const timeDiff = Math.abs(date2.getTime() - date1.getTime()); |
| | | const daysDiff = timeDiff / (1000 * 3600 * 24); |
| | | if(Math.floor(daysDiff)>180){ |
| | | ElMessage.warning(t('report.theFilteringTimeForExportCannotExceed180Days')) |
| | | return |
| | | } |
| | | let dataMp = ref({ |
| | | date: date, |
| | | }) |
| | | request.post(url,dataMp.value,{responseType :'blob'}).then(res => { |
| | | const blob = new Blob([res]) |
| | | if ('download' in document.createElement('a')) { // 非IE下载 |
| | | const elink = document.createElement('a') |
| | | elink.download = `${fileName}.xlsx` |
| | | elink.style.display = 'none' |
| | | elink.href = URL.createObjectURL(blob) |
| | | document.body.appendChild(elink) |
| | | elink.click() |
| | | URL.revokeObjectURL(elink.href) // 释放URL 对象 |
| | | document.body.removeChild(elink) |
| | | } else { // IE10+下载 |
| | | navigator.msSaveBlob(blob, fileName) |
| | | } |
| | | |
| | | }) |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | |
| | | |
| | | <el-sub-menu index="1" > |
| | | <template #title >{{$t('report.productionReport')}}</template> |
| | | <!-- <el-menu-item index="/main/report/WorkInProgressCombination">{{$t('report.WorkInProgressCombination')}}</el-menu-item>--> |
| | | <el-menu-item index="/main/report/WorkInProgressCombination">{{$t('report.WorkInProgressCombination')}}</el-menu-item> |
| | | <el-menu-item index="/main/report/WorkInProgress">{{$t('report.workInProgressReport')}}</el-menu-item> |
| | | <el-menu-item index="/main/report/ProcessToBeCompleted">{{$t('report.processToBeCompleted')}}</el-menu-item> |
| | | <el-menu-item index="/main/report/ProductionSchedule">{{$t('report.productionAndShippingProgress')}}</el-menu-item> |
| | |
| | | <script setup> |
| | | |
| | | import {reactive, ref} from "vue"; |
| | | import {onMounted, reactive, ref} from "vue"; |
| | | import {useRouter} from 'vue-router' |
| | | import request from "@/utils/request"; |
| | | import deepClone from "@/utils/deepClone"; |
| | | import {ElDatePicker, ElMessage} from "element-plus"; |
| | | import {useI18n} from 'vue-i18n' |
| | | import footSum from "@/hook/footSum" |
| | | import {addListener, toolbarButtonClickEvent} from "@/hook/mouseMove" |
| | | import {VxeUI} from "vxe-pc-ui"; |
| | | //语言获取 |
| | | const {t} = useI18n() |
| | | let router = useRouter() |
| | |
| | | return [start, end]; |
| | | } |
| | | |
| | | onMounted(() => { |
| | | //启用表格拖动选中 |
| | | addListener(xGrid.value, gridOptions) |
| | | |
| | | }) |
| | | |
| | | //第一次加载获取近七天时间和默认状态 |
| | | form.date1 = getNowTime() |
| | |
| | | |
| | | }) |
| | | } |
| | | |
| | | const handleCellDblClick = ({ row, column, cell, $event }) => { |
| | | VxeUI.clipboard.copy(row[column.property]) |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | |
| | | height="100%" |
| | | v-bind="gridOptions" |
| | | @filter-change="filterChanged" |
| | | @cell-dblclick="handleCellDblClick" |
| | | |
| | | > |
| | | <!-- @toolbar-button-click="toolbarButtonClickEvent"--> |
| | |
| | | width: 100%; |
| | | height: calc(100% - 35px); |
| | | } |
| | | .vxe-grid { |
| | | /* 禁用浏览器默认选中 */ |
| | | -webkit-user-select: none; |
| | | -moz-user-select: none; |
| | | -ms-user-select: none; |
| | | user-select: none; |
| | | } |
| | | </style> |
| | |
| | | <script setup> |
| | | |
| | | import {reactive, ref} from "vue"; |
| | | import {onMounted, reactive, ref} from "vue"; |
| | | import {useRouter} from 'vue-router' |
| | | import request from "@/utils/request"; |
| | | import deepClone from "@/utils/deepClone"; |
| | |
| | | import {useI18n} from 'vue-i18n' |
| | | //import {changeFilterEvent, filterChanged} from "@/hook" |
| | | import footSum from "@/hook/footSum" |
| | | import {addListener} from "@/hook/mouseMove"; |
| | | import {VxeUI} from "vxe-pc-ui"; |
| | | //语言获取 |
| | | const {t} = useI18n() |
| | | let router = useRouter() |
| | |
| | | let pageNum = ref(1) |
| | | let pageState = null |
| | | |
| | | |
| | | onMounted(() => { |
| | | //启用表格拖动选中 |
| | | addListener(xGrid.value, gridOptions) |
| | | }) |
| | | |
| | | //第一次加载 |
| | | let selectProcesses = value.value |
| | |
| | | const List = ["quantity",'stockNum','stockArea',] |
| | | if (List.includes(column.field)) { |
| | | //return footSum(data, column.field) |
| | | return total.value?.[column.field] ?? 0 |
| | | return footSum(data, column.field) |
| | | } |
| | | return '' |
| | | }) |
| | |
| | | // VXETable.updateColumns(tableRef.value, columns); |
| | | // } |
| | | } |
| | | |
| | | const handleCellDblClick = ({ row, column, cell, $event }) => { |
| | | VxeUI.clipboard.copy(row[column.property]) |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | |
| | | v-bind="gridOptions" |
| | | :optimize="true" |
| | | @filter-change="filterChanged" |
| | | |
| | | @cell-dblclick="handleCellDblClick" |
| | | > |
| | | <!-- @toolbar-button-click="toolbarButtonClickEvent"--> |
| | | <!-- 下拉显示所有信息插槽--> |
| | |
| | | width: 100%; |
| | | height: calc(100% - 35px); |
| | | } |
| | | .vxe-grid { |
| | | /* 禁用浏览器默认选中 */ |
| | | -webkit-user-select: none; |
| | | -moz-user-select: none; |
| | | -ms-user-select: none; |
| | | user-select: none; |
| | | } |
| | | </style> |
| | |
| | | <script setup> |
| | | |
| | | import {reactive, ref} from "vue"; |
| | | import {onMounted, reactive, ref} from "vue"; |
| | | import {useRouter} from 'vue-router' |
| | | import request from "@/utils/request"; |
| | | import deepClone from "@/utils/deepClone"; |
| | | import {ElCheckbox, ElDatePicker, ElMessage} from "element-plus"; |
| | | import {useI18n} from 'vue-i18n' |
| | | //import {changeFilterEvent, filterChanged} from "@/hook" |
| | | import { filterChanged} from "@/hook" |
| | | import footSum from "@/hook/footSum" |
| | | import {addListener} from "@/hook/mouseMove"; |
| | | import {VxeUI} from "vxe-pc-ui"; |
| | | //语言获取 |
| | | const {t} = useI18n() |
| | | let router = useRouter() |
| | |
| | | let pageNum = ref(1) |
| | | let pageState = null |
| | | |
| | | |
| | | onMounted(() => { |
| | | //启用表格拖动选中 |
| | | addListener(xGrid.value, gridOptions) |
| | | }) |
| | | |
| | | //第一次加载 |
| | | let selectProcesses = value.value |
| | |
| | | // total.dataTotal = res.data.total.total*1 |
| | | // total.pageTotal= res.data.total.pageTotal |
| | | // pageTotal.value = res.data.total |
| | | // total.value = res.data.total |
| | | total.value = res.data.total |
| | | // produceList = produceList.value.concat(deepClone(res.data.data)) |
| | | titleSelectJson.value.processType = res.data.process |
| | | titleSelectJson.value.processType.splice(0,1) |
| | |
| | | // total.dataTotal = res.data.total.total * 1 |
| | | // total.pageTotal = res.data.total.pageTotal |
| | | // pageTotal.value = res.data.total |
| | | // total.value = res.data.total |
| | | total.value = res.data.total |
| | | xGrid.value.loadData(res.data.data) |
| | | gridOptions.loading = false |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | } |
| | | //handleUpdateData(produceList) |
| | | }) |
| | | } |
| | | |
| | |
| | | $panel.changeOption(event, !!option.data, option) |
| | | } |
| | | |
| | | function filterChanged(column){ |
| | | gridOptions.loading = true |
| | | //筛选条件发生变化条件发生变化 |
| | | let value = column.datas[0] != undefined ? column.datas[0] : '' |
| | | value = value.trim() |
| | | //判断是否存在外键 |
| | | if (column.property.indexOf('.') > -1) { |
| | | const columnArr = column.property.split('.') |
| | | filterData.value[columnArr[0]] = { |
| | | [columnArr[1]]: value |
| | | } |
| | | } else { |
| | | filterData.value[column.property] = value |
| | | } |
| | | |
| | | getWorkOrder() |
| | | |
| | | |
| | | } |
| | | |
| | | /*后端返回结果多层嵌套展示*/ |
| | | const hasDecimal = (value) => { |
| | |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | { |
| | | field: 'thisProcess', width: 120, title: t('report.workingProcedure'), |
| | | visible: true |
| | | visible: true, filters: [{data: ''}],slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged, |
| | | }, |
| | | { |
| | | field: 'project', width: 120, title: t('order.project'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged, |
| | | visible: true |
| | | }, |
| | | {field: 'stockNum', width: 120, title: t('productStock.inventoryQuantity'),visible: true}, |
| | | {field: 'stockArea', width: 120, title: t('report.inventoryArea'),visible: true}, |
| | | {field: 'glassName', width: 120, title: t('report.workProcessName'),visible: true}, |
| | | {field: 'glassName', width: 420, title: t('report.workProcessName'),visible: true, filters: [{data: ''}] |
| | | ,slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged,}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | const List = ["quantity",'stockNum','stockArea',] |
| | | if (List.includes(column.field)) { |
| | | //return footSum(data, column.field) |
| | | return total.value?.[column.field] ?? 0 |
| | | return footSum(data, column.field) |
| | | } |
| | | return '' |
| | | }) |
| | |
| | | }, |
| | | |
| | | }) |
| | | |
| | | function onlandingSequenceChange(checked) { |
| | | projectSummary.value = checked ? 0 : 1 |
| | | } |
| | | |
| | | function exportExcel(url, fileName,date) { |
| | | let processes = value.value |
| | |
| | | }) |
| | | } |
| | | |
| | | const handleUpdateData = (data) =>{ |
| | | |
| | | // const usedColumns = new Set(); |
| | | // data.forEach(row => { |
| | | // Object.keys(row).forEach(key => { |
| | | // usedColumns.add(key); |
| | | // }); |
| | | // }); |
| | | // // 更新 columns 数组的 visible 属性来控制列的显示 |
| | | // gridOptions.columns.forEach(column => { |
| | | // |
| | | // column.visible = usedColumns.has(column.field); |
| | | // }); |
| | | |
| | | //const columns = gridOptions.columns; |
| | | // const ageColumn = columns.find(col => col.property === 'age'); |
| | | // if (ageColumn) { |
| | | // ageColumn.visible = !ageColumn.visible; |
| | | // VXETable.updateColumns(tableRef.value, columns); |
| | | // } |
| | | } |
| | | function onlandingSequenceChange(checked) { |
| | | projectSummary.value = checked ? 0 : 1 |
| | | const handleCellDblClick = ({ row, column, cell, $event }) => { |
| | | VxeUI.clipboard.copy(row[column.property]) |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <div style="width: 100%;height: 100%"> |
| | | <div class="head"> |
| | | <el-input v-model="form.orderId" :placeholder="$t('order.orderId')" clearable style="width: 130px"></el-input> |
| | | <el-input v-model="form.orderId" :placeholder="$t('order.orderId')" clearable style="width: 130px;display: none"></el-input> |
| | | |
| | | <el-input v-model="form.project" clearable :placeholder="$t('order.project')" style="width: 130px"></el-input> |
| | | |
| | | <el-input v-model="form.project" clearable :placeholder="$t('order.project')" style="width: 130px;display: none"></el-input> |
| | | {{$t('report.workingProcedure')}}: |
| | | <el-select v-model="value" clearable :placeholder="$t('reportingWorks.selectProcess')" default-value="default_city" style="width: 120px"> |
| | | <el-option |
| | | v-for="item in titleSelectJson['processType']" |
| | |
| | | height="100%" |
| | | v-bind="gridOptions" |
| | | :optimize="true" |
| | | @filter-change="filterChanged" |
| | | |
| | | @cell-dblclick="handleCellDblClick" |
| | | > |
| | | <!-- @toolbar-button-click="toolbarButtonClickEvent"--> |
| | | <!-- 下拉显示所有信息插槽--> |
| | |
| | | <template #num1_filter="{ column, $panel }"> |
| | | <div> |
| | | <div v-for="(option, index) in column.filters" :key="index"> |
| | | <input v-model="option.data" type="text" |
| | | <input type="text" |
| | | v-model="option.data" |
| | | @keyup.enter.native="$panel.confirmFilter()" |
| | | @input="changeFilterEvent($event, option, $panel)"/> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <template #pager> |
| | | <!--使用 pager 插槽--> |
| | | <!-- 'PrevJump','NextJump', --> |
| | | <vxe-pager |
| | | v-model:current-page="pageNum" |
| | | v-model:page-size="total.pageSize" |
| | | v-model:pager-count="total.pageTotal" |
| | | :layouts="[ 'PrevPage', 'Jump','PageCount', 'NextPage', 'Total']" |
| | | :total="total.dataTotal" |
| | | @page-change="handlePageChange" |
| | | > |
| | | </vxe-pager> |
| | | </template> |
| | | <!-- <template #pager>--> |
| | | <!-- <!–使用 pager 插槽–>--> |
| | | <!-- <!– 'PrevJump','NextJump', –>--> |
| | | <!-- <vxe-pager--> |
| | | <!-- v-model:current-page="pageNum"--> |
| | | <!-- v-model:page-size="total.pageSize"--> |
| | | <!-- v-model:pager-count="total.pageTotal"--> |
| | | <!-- :layouts="[ 'PrevPage', 'Jump','PageCount', 'NextPage', 'Total']"--> |
| | | <!-- :total="total.dataTotal"--> |
| | | <!-- @page-change="handlePageChange"--> |
| | | <!-- >--> |
| | | <!-- </vxe-pager>--> |
| | | <!-- </template>--> |
| | | <template #toolbar_buttons> |
| | | <vxe-button style="margin-right: 0.5rem" |
| | | @click="exportExcel('/report/exportWorkInProgress', |
| | | t('report.workInProgressReport'), |
| | | @click="exportExcel('/report/exportWorkInProgressCombination', |
| | | t('report.WorkInProgressCombination'), |
| | | form.date1)"> |
| | | {{t('basicData.export')}}</vxe-button> |
| | | </template> |
| | |
| | | width: 100%; |
| | | height: calc(100% - 35px); |
| | | } |
| | | .vxe-grid { |
| | | /* 禁用浏览器默认选中 */ |
| | | -webkit-user-select: none; |
| | | -moz-user-select: none; |
| | | -ms-user-select: none; |
| | | user-select: none; |
| | | } |
| | | </style> |
| | |
| | | package com.example.erp.controller.pp; |
| | | |
| | | import cn.dev33.satoken.annotation.SaCheckPermission; |
| | | import cn.hutool.core.date.DateTime; |
| | | import com.example.erp.common.Constants; |
| | | import com.example.erp.common.Result; |
| | | import com.example.erp.dto.pp.*; |
| | | import com.example.erp.entity.pp.DamageDetails; |
| | | import com.example.erp.entity.pp.FlowCard; |
| | | import com.example.erp.entity.pp.Report; |
| | | import com.example.erp.entity.sd.Order; |
| | | import com.example.erp.entity.sd.OrderDetail; |
| | | import com.example.erp.entity.sd.OrderGlassDetail; |
| | | import com.example.erp.exception.ServiceException; |
| | | import com.example.erp.service.pp.ReportService; |
| | | import com.example.erp.service.pp.WorkOrderService; |
| | | import com.example.erp.tools.DownExcel; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.sql.Date; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.concurrent.ExecutionException; |
| | | |
| | | @RestController |
| | | @Api(value = "生产报表controller", tags = {"生产报表操作接口"}) |
| | |
| | | |
| | | @ApiOperation("次破明细报表导出") |
| | | @PostMapping("/exportDamageReport") |
| | | public void exportDamageReport(HttpServletResponse response, @RequestBody List<LocalDate> dates) throws IOException, IllegalAccessException, InstantiationException { |
| | | public void exportDamageReport(HttpServletResponse response, @RequestBody Map<String, Object> dates) throws IOException, IllegalAccessException, InstantiationException { |
| | | //参数:相应的数据,实体类信息,相应的方法(数据获取),生成的excel名字 |
| | | DownExcel.download(response, DamageReportDTO.class, reportService.exportDamageReportSv(dates), "DamageReport"); |
| | | } |
| | |
| | | DownExcel.download(response, WorkInProgressDTO.class, reportService.exportWorkInProgressSv(dates), "WorkInProgress"); |
| | | } |
| | | |
| | | @ApiOperation("在制品汇总报表导出") |
| | | @PostMapping("/exportWorkInProgressCombination") |
| | | public void exportWorkInProgressCombination(HttpServletResponse response, |
| | | @RequestBody Map<String, Object> dates) |
| | | throws IOException, IllegalAccessException, InstantiationException { |
| | | //参数:相应的数据,实体类信息,相应的方法(数据获取),生成的excel名字 |
| | | DownExcel.download(response, WorkInProgressCombinationDTO.class, reportService.exportWorkInProgressCombinationSv(dates), "WorkInProgressCombination"); |
| | | } |
| | | |
| | | // |
| | | |
| | | @ApiOperation("任务完成情况导出") |
| | | @PostMapping("/exportTaskCompletionStatus") |
| | | public void exportTaskCompletionStatus(HttpServletResponse response, @RequestBody List<LocalDate> dates) throws IOException, IllegalAccessException, InstantiationException { |
| | | //参数:相应的数据,实体类信息,相应的方法(数据获取),生成的excel名字 |
| | | DownExcel.download(response, TaskCompletionStatusDTO.class, reportService.exportDamageReportSv(dates), "TaskCompletionStatus"); |
| | | } |
| | | // @ApiOperation("任务完成情况导出") |
| | | // @PostMapping("/exportTaskCompletionStatus") |
| | | // public void exportTaskCompletionStatus(HttpServletResponse response, @RequestBody List<LocalDate> dates) throws IOException, IllegalAccessException, InstantiationException { |
| | | // //参数:相应的数据,实体类信息,相应的方法(数据获取),生成的excel名字 |
| | | // DownExcel.download(response, TaskCompletionStatusDTO.class, reportService.exportDamageReportSv(dates), "TaskCompletionStatus"); |
| | | // } |
| | | |
| | | @ApiOperation("原片领料导出") |
| | | @PostMapping("/exportRawMaterialRequisition") |
| New file |
| | |
| | | package com.example.erp.dto.pp; |
| | | |
| | | import com.alibaba.excel.annotation.ExcelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class WorkInProgressCombinationDTO { |
| | | @ExcelProperty("工序") |
| | | private String thisProcess; |
| | | @ExcelProperty("项目名称") |
| | | private String project; |
| | | |
| | | @ExcelProperty("库存数") |
| | | private Integer stockNum; |
| | | @ExcelProperty("库存面积") |
| | | private Double stockArea; |
| | | @ExcelProperty("在制品名称") |
| | | private String glassName; |
| | | } |
| | |
| | | |
| | | import java.sql.Date; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | |
| | | |
| | | List<String> selectProcess(); |
| | | |
| | | Map<String,Object> getWorkInProgressCombinationFootSum(String process, String laminating, String optionVal); |
| | | |
| | | List<WorkInProgressCombinationDTO> exportWorkInProgressCombination(String process, String laminating, String inputVal); |
| | | |
| | | |
| | | // Map<String, Integer> getWorkInProgressTotal( |
| | | // @Param("selectTime1") Date selectTime1, @Param("selectTime2") Date selectTime2, |
| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.sql.Date; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.hutool.core.convert.Convert.toDouble; |
| | | |
| | | @Service |
| | | @DS("pp") |
| | |
| | | Map<String, Object> map = new HashMap<>(); |
| | | List<WorkInProgressDTO> dataList2 =reportMapper.workInProgressMpdataList2(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO); |
| | | if (optionVal.equals("1")){ |
| | | System.out.println(1); |
| | | /* 根据销售单号汇总*/ |
| | | //map.put("data", reportMapper.workInProgressOrderMp(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO)); |
| | | List<WorkInProgressDTO> dataList1 =reportMapper.workInProgressOrderMpList1(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO); |
| | |
| | | // map.put("total", reportMapper.workInProgressOrderTotal(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO)); |
| | | map.put("total" ,reportMapper.workInProgressOrderFootSum(offset, pageSize,orderId, inputProject, selectProcesses, workInProgressDTO)); |
| | | }else if(optionVal.equals("2")){ |
| | | System.out.println(2); |
| | | /* 根据流程卡号汇总*/ |
| | | //map.put("data", reportMapper.workInProgressProcessMp(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO)); |
| | | List<WorkInProgressDTO> dataList1 =reportMapper.workInProgressProcessMpList1(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO); |
| | |
| | | return reportMapper.exportCrossProcessBreakingMp(dates); |
| | | } |
| | | |
| | | public List exportDamageReportSv(List<LocalDate> dates) { |
| | | if (dates != null && dates.size() > 1) { |
| | | dates.set(1, dates.get(1).plusDays(1)); // 将第二个日期加一天 |
| | | } |
| | | return reportMapper.exportDamageReportMp(dates); |
| | | // public List exportTeamOutputSv(Map<String, Object> dates) { |
| | | // List<LocalDate> date= (List<LocalDate>) dates.get("date"); |
| | | // String process= (String) dates.get("processes"); |
| | | // if (process.equals("全部")){ |
| | | // process=""; |
| | | // } |
| | | // String laminating = reportMapper.getLaminating(process); |
| | | // return reportMapper.exportTeamOutputMp(date,process,laminating); |
| | | // } |
| | | public List exportDamageReportSv(Map<String, Object> dates) { |
| | | List<LocalDate> date= (List<LocalDate>) dates.get("date"); |
| | | return reportMapper.exportDamageReportMp(date); |
| | | } |
| | | |
| | | public List exportOrderPlanDecompositionSv(List<LocalDate> dates) { |
| | |
| | | return reportMapper.exportTeamOutputMp(date,process,laminating); |
| | | } |
| | | |
| | | public Map<String, Object> workInProgressCombinationSv(Integer pageNum, Integer pageSize,String orderId, String inputProject, String selectProcesses, String optionVal, WorkInProgressDTO workInProgressDTO) { |
| | | public Map<String, Object> workInProgressCombinationSv( |
| | | Integer pageNum, Integer pageSize, |
| | | String orderId, String inputProject, String selectProcesses, |
| | | String optionVal, WorkInProgressDTO workInProgressDTO) { |
| | | |
| | | Integer offset = (pageNum - 1) * pageSize; |
| | | |
| | | if ("null".equals(orderId)) { |
| | | orderId = ""; |
| | | } |
| | |
| | | inputProject = ""; |
| | | } |
| | | if ("null".equals(optionVal)) { |
| | | optionVal = (""); |
| | | optionVal = ""; |
| | | } |
| | | if (selectProcesses.equals("全部")){ |
| | | if ("全部".equals(selectProcesses)) { |
| | | selectProcesses=""; |
| | | } |
| | | |
| | | String laminating = ""; |
| | | Map<String, Object> map = new HashMap<>(); |
| | | Map<String, Double> totalSumMap = new HashMap<>(); |
| | | |
| | | double totalStockNum = 0; |
| | | double totalStockArea = 0; |
| | | |
| | | // 获取所有工序 |
| | | List<String> processList = reportMapper.selectProcess(); |
| | | // 遍历每个工序并调用新方法 |
| | | List<Map<String, Object>> resultList = new ArrayList<>(); |
| | | if (selectProcesses!=""){ |
| | | laminating = reportingWorkMapper.getProcessLaminating(selectProcesses); |
| | | List<Map<String, Object>> singleResult = reportMapper.getWorkInProgressCombination(selectProcesses,laminating,optionVal); |
| | | |
| | | // 最终数据集合 |
| | | List<Map<String, Object>> resultList = new ArrayList<>(); |
| | | |
| | | if (!"".equals(selectProcesses)) { |
| | | laminating = reportingWorkMapper.getProcessLaminating(selectProcesses); |
| | | List<Map<String, Object>> singleResult = |
| | | reportMapper.getWorkInProgressCombination(selectProcesses, laminating, optionVal); |
| | | if (singleResult != null && !singleResult.isEmpty()) { |
| | | resultList.addAll(singleResult); |
| | | } |
| | | |
| | | Map<String, Object> total = |
| | | reportMapper.getWorkInProgressCombinationFootSum(selectProcesses, laminating, optionVal); |
| | | if (total != null) { |
| | | BigDecimal stockNum = (BigDecimal) total.get("stockNum"); |
| | | BigDecimal stockArea = (BigDecimal) total.get("stockArea"); |
| | | |
| | | if (stockNum != null) { |
| | | totalStockNum += stockNum.doubleValue(); |
| | | } |
| | | if (stockArea != null) { |
| | | totalStockArea += stockArea.doubleValue(); |
| | | } |
| | | } |
| | | |
| | | }else { |
| | | for (String process : processList) { |
| | | //获取报工工序是否为复合工程 |
| | | laminating = reportingWorkMapper.getProcessLaminating(process); |
| | | List<Map<String, Object>> singleResult = reportMapper.getWorkInProgressCombination(process,laminating,optionVal); |
| | | |
| | | List<Map<String, Object>> singleResult = |
| | | reportMapper.getWorkInProgressCombination(process, laminating, optionVal); |
| | | |
| | | if (singleResult != null && !singleResult.isEmpty()) { |
| | | resultList.addAll(singleResult); |
| | | } |
| | | |
| | | Map<String, Object> total = |
| | | reportMapper.getWorkInProgressCombinationFootSum(process, laminating, optionVal); |
| | | if (total != null) { |
| | | BigDecimal stockNum = (BigDecimal) total.get("stockNum"); |
| | | BigDecimal stockArea = (BigDecimal) total.get("stockArea"); |
| | | |
| | | if (stockNum != null) { |
| | | totalStockNum += stockNum.doubleValue(); |
| | | } |
| | | if (stockArea != null) { |
| | | totalStockArea += stockArea.doubleValue(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | totalSumMap.put("stockNum", totalStockNum); |
| | | totalSumMap.put("stockArea", totalStockArea); |
| | | |
| | | map.put("data",resultList); |
| | | map.put("total", totalSumMap); |
| | | map.put("process", productionSchedulingMapper.selectProcess()); |
| | | |
| | | return map; |
| | | } |
| | | |
| | | public List exportWorkInProgressCombinationSv(Map<String, Object> dates) { |
| | | String process= (String) dates.get("processes"); |
| | | if (process.equals("全部")){ |
| | | process=""; |
| | | } |
| | | String inputVal= (String) dates.get("inputVal"); |
| | | String project= (String) dates.get("project"); |
| | | if ("null".equals(inputVal)) { |
| | | inputVal = ""; |
| | | } |
| | | if ("null".equals(project)) { |
| | | project = ""; |
| | | } |
| | | |
| | | String laminating = ""; |
| | | |
| | | // 获取所有工序 |
| | | List<String> processList = reportMapper.selectProcess(); |
| | | |
| | | // 最终数据集合 |
| | | List<WorkInProgressCombinationDTO> resultList = new ArrayList<>(); |
| | | |
| | | if (!"".equals(process)) { |
| | | laminating = reportingWorkMapper.getProcessLaminating(process); |
| | | List<WorkInProgressCombinationDTO> singleResult = |
| | | reportMapper.exportWorkInProgressCombination(process, laminating, inputVal); |
| | | if (singleResult != null && !singleResult.isEmpty()) { |
| | | resultList.addAll((Collection<? extends WorkInProgressCombinationDTO>) singleResult); |
| | | } |
| | | |
| | | |
| | | } else { |
| | | for (String processVal : processList) { |
| | | laminating = reportingWorkMapper.getProcessLaminating(processVal); |
| | | |
| | | List<WorkInProgressCombinationDTO> singleResult = |
| | | reportMapper.exportWorkInProgressCombination(processVal, laminating, inputVal); |
| | | |
| | | if (singleResult != null && !singleResult.isEmpty()) { |
| | | resultList.addAll((Collection<? extends WorkInProgressCombinationDTO>) singleResult); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return resultList; |
| | | } |
| | | } |
| | |
| | | fc.quantity, |
| | | round(ogd.total_area, 2) as total_area, |
| | | od.perimeter, |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),'')) as bend_radius, |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius, |
| | | concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks, |
| | | od.other_columns, |
| | | round(ogd.child_width) as width, |
| | |
| | | fc.quantity, |
| | | round(ogd.total_area, 2) as total_area, |
| | | od.perimeter, |
| | | if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),od.bend_radius) as bend_radius, |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius, |
| | | concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks, |
| | | od.other_columns, |
| | | round(ogd.child_width) as width, |
| | |
| | | ogd.glass_child, |
| | | #{process} as process, |
| | | JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S01')) AS glassNumber, |
| | | if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),od.bend_radius) as bend_radius |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius |
| | | 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 |
| | |
| | | fc.quantity, |
| | | round(ogd.total_area, 2) as total_area, |
| | | od.perimeter, |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),'')) as bend_radius, |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius, |
| | | concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks, |
| | | od.other_columns, |
| | | round(ogd.child_width) as width, |
| | |
| | | sum(fc.quantity) as quantity, |
| | | round(ogd.total_area, 2) as total_area, |
| | | od.perimeter, |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),'')) as bend_radius, |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius, |
| | | concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks, |
| | | od.other_columns, |
| | | round(ogd.child_width) as width, |
| | |
| | | count(*) as quantity, |
| | | round(ogd.child_width*ogd.child_height*count(*)/1000000, 2) as total_area, |
| | | round((ogd.child_width+ogd.child_height)*2*count(*)/1000, 2) as perimeter, |
| | | if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),od.bend_radius) as bend_radius, |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius, |
| | | concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks, |
| | | od.other_columns, |
| | | round(ogd.child_width) as width, |
| | |
| | | sum(pl.patch_num) as quantity, |
| | | round(ogd.total_area, 2) as total_area, |
| | | od.perimeter, |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),'')) as bend_radius, |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius, |
| | | concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks, |
| | | od.other_columns, |
| | | round(ogd.child_width) as width, |
| | |
| | | (pl.rework_num) as quantity, |
| | | round(ogd.total_area, 2) as total_area, |
| | | od.perimeter, |
| | | if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),od.bend_radius) as bend_radius, |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius, |
| | | concat(od.processing_note, od.remarks) as remarks, |
| | | od.other_columns, |
| | | round(ogd.child_width) as width, |
| | |
| | | SUM(fc.quantity) as quantity, |
| | | round(SUM(ogd.total_area), 2) as total_area, |
| | | SUM(od.perimeter) as perimeter, |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),'')) as bend_radius, |
| | | if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius, |
| | | concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks, |
| | | od.other_columns, |
| | | round(ogd.child_width) as width, |
| | |
| | | SELECT g.* |
| | | ,GROUP_CONCAT(g.glass_child SEPARATOR '+') as childName |
| | | from( SELECT f.*, |
| | | e.reporting_work_num-f.reporting_work_num as quantity, |
| | | (e.reporting_work_num-f.reporting_work_num)*f.area as glassArea |
| | | e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num as quantity, |
| | | (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)*f.area as glassArea |
| | | from (SELECT a.order_id, |
| | | a.project, |
| | | C.product_id, |
| | | b.order_number, |
| | | b.process_id, |
| | | b.technology_number, |
| | | b.reporting_work_num, |
| | | b.reporting_work_num_count, |
| | | d.`group` , |
| | | b.broken_num, |
| | | b.id, |
| | | c.area, |
| | | d.glass_child |
| | | d.glass_child, |
| | | ifnull(cb.patchNumSum,0) as patchNumSum |
| | | |
| | | FROM sd.`order` as a |
| | | LEFT JOIN sd.order_process_detail as b |
| | |
| | | on a.order_id = c.order_id and b.order_number =c.order_number |
| | | left join sd.order_glass_detail as d |
| | | on d.order_id =a.order_id and d.order_number = b.order_number and d.technology_number = b.technology_number |
| | | LEFT JOIN ( |
| | | SELECT |
| | | IFNULL(sum( rw.rework_num ),0) AS 'patchNumSum', |
| | | rw.process_id, |
| | | rw.order_sort, |
| | | rw.technology_number, |
| | | rwk.this_process |
| | | FROM |
| | | pp.rework AS rw |
| | | LEFT JOIN pp.reporting_work AS rwk ON rw.reporting_work_id = rwk.reporting_work_id |
| | | WHERE |
| | | position( #{process} IN rwk.this_process ) |
| | | AND rw.review_status >= 0 |
| | | GROUP BY |
| | | rw.process_id, |
| | | rw.order_sort, |
| | | rw.technology_number |
| | | ) AS cb ON cb.process_id = b.process_id |
| | | AND cb.order_sort = b.order_number |
| | | AND cb.technology_number = b.technology_number |
| | | where a.processing_card>0 |
| | | and a.warehousing!=2 |
| | | and (c.quantity-b.reporting_work_num)>0 |
| | | and (c.quantity-b.reporting_work_num_count)>0 |
| | | GROUP BY b.process_id, b.order_number, |
| | | b.technology_number) as f |
| | | LEFT JOIN sd.order_process_detail as e |
| | | on e.id=(f.id-1) and e.process_id = f.process_id and e.order_number = f.order_number and e.technology_number =f.technology_number |
| | | where |
| | | e.id is not null |
| | | and e.reporting_work_num-f.reporting_work_num>0 ) as g |
| | | and (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)>0 ) as g |
| | | <choose> |
| | | <when test="laminating == 'stepC' and process == '预压'"> |
| | | GROUP BY g.process_id, g.order_number, g.technology_number |
| | | </when> |
| | | <when test="laminating == 'stepC'"> |
| | | GROUP BY g.process_id, g.order_number, g.`group` |
| | | </when> |
| | |
| | | </choose> |
| | | |
| | | </select> |
| | | |
| | | <select id="getWorkInProgressCombinationFootSum"> |
| | | select |
| | | SUM(h.quantity) as stockNum, |
| | | SUM(h.glassArea) as stockArea |
| | | from ( |
| | | SELECT g.* |
| | | ,GROUP_CONCAT(g.glass_child SEPARATOR '+') as childName |
| | | from( SELECT f.*, |
| | | e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num as quantity, |
| | | (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)*f.area as glassArea |
| | | from (SELECT a.order_id, |
| | | a.project, |
| | | C.product_id, |
| | | b.order_number, |
| | | b.process_id, |
| | | b.technology_number, |
| | | b.reporting_work_num_count, |
| | | d.`group` , |
| | | b.broken_num, |
| | | b.id, |
| | | c.area, |
| | | d.glass_child, |
| | | ifnull(cb.patchNumSum,0) as patchNumSum |
| | | |
| | | FROM sd.`order` as a |
| | | LEFT JOIN sd.order_process_detail as b |
| | | on b.process = #{process} and a.order_id =b.order_id |
| | | LEFT JOIN sd.order_detail as c |
| | | on a.order_id = c.order_id and b.order_number =c.order_number |
| | | left join sd.order_glass_detail as d |
| | | on d.order_id =a.order_id and d.order_number = b.order_number and d.technology_number = b.technology_number |
| | | LEFT JOIN ( |
| | | SELECT |
| | | IFNULL(sum( rw.rework_num ),0) AS 'patchNumSum', |
| | | rw.process_id, |
| | | rw.order_sort, |
| | | rw.technology_number, |
| | | rwk.this_process |
| | | FROM |
| | | pp.rework AS rw |
| | | LEFT JOIN pp.reporting_work AS rwk ON rw.reporting_work_id = rwk.reporting_work_id |
| | | WHERE |
| | | position( #{process} IN rwk.this_process ) |
| | | AND rw.review_status >= 0 |
| | | GROUP BY |
| | | rw.process_id, |
| | | rw.order_sort, |
| | | rw.technology_number |
| | | ) AS cb ON cb.process_id = b.process_id |
| | | AND cb.order_sort = b.order_number |
| | | AND cb.technology_number = b.technology_number |
| | | where a.processing_card>0 |
| | | and a.warehousing!=2 |
| | | and (c.quantity-b.reporting_work_num_count)>0 |
| | | GROUP BY b.process_id, b.order_number, |
| | | b.technology_number) as f |
| | | LEFT JOIN sd.order_process_detail as e |
| | | on e.id=(f.id-1) and e.process_id = f.process_id and e.order_number = f.order_number and e.technology_number =f.technology_number |
| | | where |
| | | e.id is not null |
| | | and e.reporting_work_num_count-f.reporting_work_num_count>0 ) as g |
| | | <choose> |
| | | <when test="laminating == 'stepC' and process == '预压'"> |
| | | GROUP BY g.process_id, g.order_number, g.technology_number |
| | | </when> |
| | | <when test="laminating == 'stepC'"> |
| | | GROUP BY g.process_id, g.order_number, g.`group` |
| | | </when> |
| | | <when test="laminating == 'stepD'"> |
| | | GROUP BY g.process_id, g.order_number |
| | | </when> |
| | | <otherwise> |
| | | GROUP BY g.process_id, g.order_number, g.technology_number |
| | | </otherwise> |
| | | </choose> |
| | | |
| | | |
| | | ) as h |
| | | |
| | | </select> |
| | | |
| | | <select id="exportWorkInProgressCombination"> |
| | | select |
| | | #{process} as thisProcess, |
| | | if(#{inputVal} = 1,'',h.project) as project, |
| | | SUM(h.quantity) as stockNum, |
| | | SUM(h.glassArea) as stockArea, |
| | | if(#{inputVal} = 1,'',h.childName) as glassName |
| | | |
| | | from ( |
| | | |
| | | SELECT g.* |
| | | ,GROUP_CONCAT(g.glass_child SEPARATOR '+') as childName |
| | | from( SELECT f.*, |
| | | e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num as quantity, |
| | | (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)*f.area as glassArea |
| | | from (SELECT a.order_id, |
| | | a.project, |
| | | C.product_id, |
| | | b.order_number, |
| | | b.process_id, |
| | | b.technology_number, |
| | | b.reporting_work_num_count, |
| | | d.`group` , |
| | | b.broken_num, |
| | | b.id, |
| | | c.area, |
| | | d.glass_child, |
| | | ifnull(cb.patchNumSum,0) as patchNumSum |
| | | |
| | | FROM sd.`order` as a |
| | | LEFT JOIN sd.order_process_detail as b |
| | | on b.process = #{process} and a.order_id =b.order_id |
| | | LEFT JOIN sd.order_detail as c |
| | | on a.order_id = c.order_id and b.order_number =c.order_number |
| | | left join sd.order_glass_detail as d |
| | | on d.order_id =a.order_id and d.order_number = b.order_number and d.technology_number = b.technology_number |
| | | LEFT JOIN ( |
| | | SELECT |
| | | IFNULL(sum( rw.rework_num ),0) AS 'patchNumSum', |
| | | rw.process_id, |
| | | rw.order_sort, |
| | | rw.technology_number, |
| | | rwk.this_process |
| | | FROM |
| | | pp.rework AS rw |
| | | LEFT JOIN pp.reporting_work AS rwk ON rw.reporting_work_id = rwk.reporting_work_id |
| | | WHERE |
| | | position( #{process} IN rwk.this_process ) |
| | | AND rw.review_status >= 0 |
| | | GROUP BY |
| | | rw.process_id, |
| | | rw.order_sort, |
| | | rw.technology_number |
| | | ) AS cb ON cb.process_id = b.process_id |
| | | AND cb.order_sort = b.order_number |
| | | AND cb.technology_number = b.technology_number |
| | | where a.processing_card>0 |
| | | and a.warehousing!=2 |
| | | and (c.quantity-b.reporting_work_num_count)>0 |
| | | GROUP BY b.process_id, b.order_number, |
| | | b.technology_number) as f |
| | | LEFT JOIN sd.order_process_detail as e |
| | | on e.id=(f.id-1) and e.process_id = f.process_id and e.order_number = f.order_number and e.technology_number =f.technology_number |
| | | where |
| | | e.id is not null |
| | | and (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)>0 ) as g |
| | | <choose> |
| | | <when test="laminating == 'stepC' and process == '预压'"> |
| | | GROUP BY g.process_id, g.order_number, g.technology_number |
| | | </when> |
| | | <when test="laminating == 'stepC'"> |
| | | GROUP BY g.process_id, g.order_number, g.`group` |
| | | </when> |
| | | <when test="laminating == 'stepD'"> |
| | | GROUP BY g.process_id, g.order_number |
| | | </when> |
| | | <otherwise> |
| | | GROUP BY g.process_id, g.order_number, g.technology_number |
| | | </otherwise> |
| | | </choose> |
| | | |
| | | |
| | | ) as h |
| | | <choose> |
| | | <when test="inputVal == 1"> |
| | | GROUP BY thisProcess |
| | | </when> |
| | | <otherwise> |
| | | GROUP BY h.project,h.childName |
| | | </otherwise> |
| | | </choose> |
| | | </select> |
| | | </mapper> |
| | |
| | | </select> |
| | | |
| | | <select id="SelectWorkBasicTeamsMp"> |
| | | select * from erp_user_info.`user` WHERE address=#{process} |
| | | select id,login_name,user_name,address from erp_user_info.`user` WHERE address=#{process} |
| | | </select> |
| | | |
| | | <!-- 查询流程卡工艺流程--> |