Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override
| | |
| | | pageTotal : 0,//总页数 |
| | | dataTotal : 0,//数据总条数 |
| | | }) |
| | | |
| | | const isFirstLoad = ref(true); |
| | | const sumNum = (list, field) => { |
| | | let count = 0 |
| | | list.forEach(item => { |
| | |
| | | } |
| | | |
| | | //合并显示其他列 |
| | | const handleDynamicColumns = (data,title) => { |
| | | const handleDynamicColumns = (data,title,orderOtherMoney) => { |
| | | // 1. 收集所有行的otherColumns字段(去重) |
| | | const allOtherFields = new Set(); |
| | | /*const allOtherFields = new Set(); |
| | | data.forEach(row => { |
| | | if (!row || !row.otherColumns) return; |
| | | |
| | |
| | | allOtherFields.add(key); |
| | | }); |
| | | } |
| | | }); |
| | | });*/ |
| | | |
| | | // 2. 生成动态子列(作为processList的children) |
| | | const otherColumns = Array.from(allOtherFields).map(field => { |
| | | /*const otherColumns = Array.from(allOtherFields).map(field => { |
| | | // 尝试获取字段对应的label(优先取第一个出现的label) |
| | | let label=field; |
| | | title.forEach(item=>{ |
| | |
| | | |
| | | } |
| | | }; |
| | | });*/ |
| | | |
| | | const otherColumns = []; |
| | | // 容错:确保orderOtherMoney是有效数组 |
| | | if (Array.isArray(orderOtherMoney) && orderOtherMoney.length > 0) { |
| | | orderOtherMoney.forEach(item => { |
| | | // 跳过空数据,避免无效列 |
| | | if (!item || !item.column) return; |
| | | otherColumns.push({ |
| | | title: item.alias || item.column, // 优先用别名,无则用字段名 |
| | | field: `otherColumnsJson.${item.column}`, |
| | | width: 120, |
| | | align: 'center', |
| | | // 格式化取值:兼容解析后的JSON结构 |
| | | formatter: ({ row }) => { |
| | | return row.otherColumnsJson?.[item.column] || ''; |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | // 3. 定义父级列processList,包含动态子列 |
| | | const processList = { |
| | |
| | | orderInfo.reportFormDate = res.data.selectDate |
| | | |
| | | //订单明细报表 |
| | | if (props.childrenData.url === '/order/getOrderReport') { |
| | | if (isFirstLoad.value && props.childrenData.url === '/order/getOrderReport') { |
| | | const dataList = res.data.data || []; |
| | | handleDynamicColumns(dataList,res.data.title) |
| | | const orderOtherMoney = res.data.orderOtherMoney[0] || []; |
| | | handleDynamicColumns(dataList,res.data.title,orderOtherMoney) |
| | | isFirstLoad.value = false; // 首次加载后置为false |
| | | } |
| | | } |
| | | }) |
| New file |
| | |
| | | <!-- ImageSizeEditor.vue --> |
| | | <template> |
| | | <div class="img-grid"> |
| | | <div |
| | | v-for="(img, index) in images" |
| | | :key="getKey(img, index)" |
| | | class="img-box" |
| | | :style="getImgBoxStyle(getKey(img, index))" |
| | | @click="openSizeDialog(img, index)" |
| | | > |
| | | <el-image |
| | | :src="img.imageBase64" |
| | | :fit="fit" |
| | | style="width: 100%; height: 100%; display: block;" |
| | | /> |
| | | </div> |
| | | </div> |
| | | |
| | | <el-dialog |
| | | v-model="dialogVisible" |
| | | :title="dialogTitle" |
| | | width="460px" |
| | | append-to-body |
| | | > |
| | | <div class="form-row"> |
| | | <el-input-number |
| | | v-model="form.w" |
| | | :min="minWidth" |
| | | :max="maxWidth" |
| | | controls-position="right" |
| | | /> |
| | | <span class="mul">×</span> |
| | | <el-input-number |
| | | v-model="form.h" |
| | | :min="minHeight" |
| | | :max="maxHeight" |
| | | controls-position="right" |
| | | /> |
| | | </div> |
| | | |
| | | <div class="ops-row"> |
| | | <!-- <el-switch v-model="applyToAll" active-text="应用到全部图片" />--> |
| | | <div v-if="showHint" class="hint"> |
| | | 当前:{{ form.w }} × {{ form.h }} px |
| | | </div> |
| | | </div> |
| | | |
| | | <template #footer> |
| | | <el-button @click="dialogVisible = false">取消</el-button> |
| | | |
| | | <!-- ✅ 一键全图统一尺寸:不关弹窗,立即应用 --> |
| | | <el-button @click="applyAllNow" :disabled="!canApply"> |
| | | 尺寸相同 |
| | | </el-button> |
| | | |
| | | <!-- ✅ 确定:如果开关打开,则同样会应用全部,否则只应用当前 --> |
| | | <el-button type="primary" @click="confirmSize" :disabled="!canApply"> |
| | | 确定 |
| | | </el-button> |
| | | </template> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { computed, reactive, ref, unref } from 'vue' |
| | | |
| | | const props = defineProps({ |
| | | images: { type: Array, default: () => [] }, |
| | | keyField: { type: String, default: 'orderNumber' }, // 你数据 id=null,推荐 orderNumber |
| | | srcField: { type: String, default: 'imageBase64' }, |
| | | |
| | | sizeMap: { type: Object, default: () => ({}) }, |
| | | |
| | | defaultWidth: { type: Number, default: 600 }, |
| | | defaultHeight: { type: Number, default: 400 }, |
| | | |
| | | minWidth: { type: Number, default: 50 }, |
| | | maxWidth: { type: Number, default: 3000 }, |
| | | minHeight: { type: Number, default: 50 }, |
| | | maxHeight: { type: Number, default: 3000 }, |
| | | |
| | | fit: { type: String, default: 'contain' }, |
| | | marginX: { type: String, default: '30px' }, |
| | | dialogTitle: { type: String, default: '设置图片尺寸' }, |
| | | showHint: { type: Boolean, default: true } |
| | | }) |
| | | |
| | | const emit = defineEmits(['update:sizeMap', 'change', 'changeAll']) |
| | | |
| | | const sizeStore = computed({ |
| | | get: () => props.sizeMap || {}, |
| | | set: (val) => emit('update:sizeMap', val) |
| | | }) |
| | | |
| | | const dialogVisible = ref(false) |
| | | const activeKey = ref(null) |
| | | |
| | | const form = reactive({ |
| | | w: props.defaultWidth, |
| | | h: props.defaultHeight |
| | | }) |
| | | |
| | | const applyToAll = ref(false) |
| | | |
| | | const canApply = computed(() => { |
| | | const w = Number(form.w) |
| | | const h = Number(form.h) |
| | | return w > 0 && h > 0 |
| | | }) |
| | | |
| | | const getKey = (img, index) => { |
| | | const k = img?.[props.keyField] |
| | | return (k !== undefined && k !== null && k !== '') ? String(k) : String(index) |
| | | } |
| | | |
| | | const getSrc = (img) => img?.[props.srcField] |
| | | |
| | | const getSize = (key) => { |
| | | const s = unref(sizeStore.value?.[key]) |
| | | if (s && s.w && s.h) return { w: Number(s.w), h: Number(s.h) } |
| | | return { w: props.defaultWidth, h: props.defaultHeight } |
| | | } |
| | | |
| | | const getImgBoxStyle = (key) => { |
| | | const { w, h } = getSize(key) |
| | | return { |
| | | width: `${w}px`, |
| | | height: `${h}px`, |
| | | marginLeft: props.marginX, |
| | | marginRight: props.marginX |
| | | } |
| | | } |
| | | |
| | | |
| | | const openSizeDialog = (img, index) => { |
| | | const key = getKey(img, index) |
| | | activeKey.value = key |
| | | |
| | | const cur = getSize(key) |
| | | form.w = cur.w |
| | | form.h = cur.h |
| | | |
| | | applyToAll.value = false |
| | | dialogVisible.value = true |
| | | } |
| | | |
| | | // ✅ 应用到当前一张 |
| | | const applyOne = (key, w, h) => { |
| | | sizeStore.value = { ...sizeStore.value, [key]: { w, h } } |
| | | emit('change', key, { w, h }) |
| | | } |
| | | |
| | | // ✅ 一键应用到全部 |
| | | const applyAll = (w, h) => { |
| | | const next = { ...sizeStore.value } |
| | | props.images.forEach((img, idx) => { |
| | | const k = getKey(img, idx) |
| | | next[k] = { w, h } |
| | | }) |
| | | sizeStore.value = next |
| | | emit('changeAll', { w, h }) |
| | | } |
| | | |
| | | // ✅ footer 按钮:立即统一全图尺寸(不关弹窗) |
| | | const applyAllNow = () => { |
| | | if (!canApply.value) return |
| | | const w = Number(form.w) |
| | | const h = Number(form.h) |
| | | applyAll(w, h) |
| | | } |
| | | |
| | | // ✅ 确定:如果开关打开 => 全部;否则只改当前 |
| | | const confirmSize = () => { |
| | | if (!canApply.value) return |
| | | const w = Number(form.w) |
| | | const h = Number(form.h) |
| | | |
| | | if (applyToAll.value) { |
| | | applyAll(w, h) |
| | | dialogVisible.value = false |
| | | return |
| | | } |
| | | |
| | | const key = activeKey.value |
| | | if (key === null || key === undefined) return |
| | | applyOne(key, w, h) |
| | | dialogVisible.value = false |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .img-grid { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 12px; |
| | | } |
| | | |
| | | .form-row { |
| | | display: flex; |
| | | gap: 12px; |
| | | align-items: center; |
| | | } |
| | | |
| | | .mul { |
| | | line-height: 32px; |
| | | } |
| | | |
| | | .ops-row{ |
| | | margin-top: 12px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | gap: 12px; |
| | | flex-wrap: wrap; |
| | | } |
| | | |
| | | .hint { |
| | | font-size: 12px; |
| | | opacity: 0.75; |
| | | } |
| | | </style> |
| | |
| | | import companyInfo from "@/stores/sd/companyInfo"; |
| | | import userInfo from "@/stores/userInfo" |
| | | import {add} from '@/utils/decimal' |
| | | import ImageSizeEditor from '@/components/ImageSizeEditor.vue' |
| | | //语言获取 |
| | | const company = companyInfo() |
| | | const {t} = useI18n() |
| | |
| | | let list = ref() |
| | | const details = ref([]) |
| | | const user=userInfo() |
| | | const imgSizeMap = ref({}) |
| | | |
| | | let totalQuantity = 0; // 用于记录总数量 |
| | | let totalArea = 0; // 用于记录总面积 |
| | |
| | | <!-- <el-button id="printButton" @click="printFlowCard();">{{ $t('basicData.print') }}</el-button>--> |
| | | <div id="printFlowCard"> |
| | | <div id="contentDiv" v-for="(item,id) in produceList" :key="id"> |
| | | <table id="contentTable" style="border-bottom: none"> |
| | | <table id="contentTable" style="border-bottom: none;margin-bottom: 20px"> |
| | | <thead> |
| | | <tr v-for="(itemFlow,index) in item.detail" :key="index"> |
| | | <td colspan="31"> |
| | |
| | | </tr> |
| | | </tfoot> |
| | | </table> |
| | | <el-image |
| | | v-for="(img, index) in getPicturesByDetailList(item.detailList)" |
| | | :key="index" |
| | | :src="img.imageBase64" |
| | | fit="contain" |
| | | style="max-width: 100%;" |
| | | <!-- <el-image--> |
| | | <!-- v-for="(img, index) in getPicturesByDetailList(item.detailList)"--> |
| | | <!-- :key="index"--> |
| | | <!-- :src="img.imageBase64"--> |
| | | <!-- fit="contain"--> |
| | | <!-- style="max-width: 100%;margin: 50px"--> |
| | | <!-- />--> |
| | | <ImageSizeEditor |
| | | :images="getPicturesByDetailList(item.detailList)" |
| | | v-model:sizeMap="imgSizeMap" |
| | | key-field="orderNumber" |
| | | src-field="imageBase64" |
| | | :default-width="300" |
| | | :default-height="300" |
| | | /> |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | } |
| | | |
| | | // 使用一个对象来存储合并后的结果 |
| | | const mergedData = produceList.value.reduce((acc, item) => { |
| | | const processId = item.detail[0].process_id; |
| | | // detail 为空直接跳过 |
| | | const firstDetail = item?.detail?.[0] |
| | | if (!firstDetail) return acc |
| | | |
| | | // 如果该 process_id 尚未在 acc 中,初始化其数组 |
| | | if (!acc[processId]) { |
| | | acc[processId] = { |
| | | const processId = firstDetail.process_id |
| | | const technologyNumber = firstDetail.technologyNumber |
| | | |
| | | const key = company.printReplenishMerge |
| | | ? processId |
| | | : `${processId}_${technologyNumber}` |
| | | |
| | | // 初始化分组 |
| | | if (!acc[key]) { |
| | | acc[key] = { |
| | | processId, |
| | | technologyNumber, |
| | | processList: item.processList, |
| | | detailList: [], |
| | | detail: item.detail |
| | | }; |
| | | } |
| | | } |
| | | |
| | | // 合并 detailList |
| | | acc[processId].detailList = acc[processId].detailList.concat(item.detailList); |
| | | if (Array.isArray(item.detailList) && item.detailList.length) { |
| | | acc[key].detailList.push(...item.detailList) |
| | | } |
| | | |
| | | return acc; |
| | | }, {}); |
| | | return acc |
| | | }, {}) |
| | | |
| | | // 将合并后的对象转换回数组 |
| | | |
| | | if (company.printReplenishMerge){ |
| | | //if (company.printReplenishMerge){ |
| | | produceList.value = Object.values(mergedData); |
| | | } |
| | | //} |
| | | flowCardCount=produceList.value.length |
| | | |
| | | handleSummary() |
| | |
| | | <th style="width: 6%;">序号</th> |
| | | <th style="width: 10%;">楼层编号</th> |
| | | <th style="width: 7%;">箱号</th> |
| | | <th style="width: 17%;" colspan="1">宽X高</th> |
| | | <th style="width: 10%;">数量</th> |
| | | <th style="width: 15%;" colspan="1">宽X高</th> |
| | | <th style="width: 8%;">数量</th> |
| | | <th style="width: 10%;">面积</th> |
| | | <th style="width: 10%;">单价</th> |
| | | <th style="width: 8%;">单价</th> |
| | | <th style="width: 12%;">金额</th> |
| | | <th style="width: 18%;" colspan="2">加工要求</th> |
| | | <th style="width: 12%;" >加工要求</th> |
| | | <th style="width: 12%;">备注</th> |
| | | </tr> |
| | | |
| | | |
| | |
| | | <td>{{items.area}}</td> |
| | | <td>{{items.price}}</td> |
| | | <td>{{items.money}}</td> |
| | | <td colspan="2">{{items.processingNote}}</td> |
| | | <td>{{items.processingNote}}</td> |
| | | <td>{{items.remarks}}</td> |
| | | </tr> |
| | | <tr class="day-in" > |
| | | <td style="font-size: 15px;" colspan="4">小计:</td> |
| | |
| | | <th style="width: 20%;" colspan="2">宽X高</th> |
| | | <th style="width: 10%;">数量</th> |
| | | <th style="width: 10%;">面积</th> |
| | | <th style="width: 32%;" colspan="3">加工要求</th> |
| | | <th style="width: 22%;" colspan="2">加工要求</th> |
| | | <th style="width: 12%;">备注</th> |
| | | </tr> |
| | | |
| | | |
| | |
| | | </td> |
| | | <td>{{items.quantity}}</td> |
| | | <td>{{items.area}}</td> |
| | | <td colspan="3">{{items.processingNote}}</td> |
| | | <td colspan="2">{{items.processingNote}}</td> |
| | | <td>{{items.remarks}}</td> |
| | | </tr> |
| | | <tr class="day-in" > |
| | | <td style="font-size: 15px;" colspan="5">小计:</td> |
| | |
| | | const columns = [ |
| | | {field: 'order_number',fixed:"left", width: 90,title: t('order.OrderNum'),showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | // {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | {field: 'building_number', width: 150, title: t('order.buildingNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'product_name', width: 150, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'glass_child',width: 130, title: t('reportingWorks.glassChild') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order_type', width: 120,title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | |
| | | {field: 'StorageArea',slots: { default: 'show'},width: 120, title: t('report.StorageArea')}, |
| | | {field: 'broken_num',width: 90, title: t('reportingWorks.quantityBroken')}, |
| | | ] |
| | | let column = ['order_number','product_name','order_type','quantity','grossArea','Storage','StorageArea'] |
| | | let column = ['order_number','building_number','product_name','order_type','quantity','grossArea','Storage','StorageArea'] |
| | | let orderType = ref(1) |
| | | |
| | | onMounted(()=>{ |
| | |
| | | import {ElMessage} from "element-plus"; |
| | | import useUserInfoStore from "@/stores/userInfo"; |
| | | import {Bottom, Burger, Food} from "@element-plus/icons-vue"; |
| | | import ImageSizeEditor from '@/components/ImageSizeEditor.vue' |
| | | const company = companyInfo() |
| | | const userStore = useUserInfoStore() |
| | | const username = userStore.user.userName |
| | | let dialogVisible = ref(false) |
| | | |
| | | |
| | | const imgSizeMap = ref({}) |
| | | let props = defineProps({ |
| | | orderId:null, |
| | | dataList:null, |
| | | }) |
| | | let productId=ref({ |
| | | |
| | |
| | | perimeter: 0, |
| | | weight:0 |
| | | }) |
| | | const picture = ref([]) |
| | | const dataFile = ref({ |
| | | printList: [] |
| | | }) |
| | | dataFile.value.printList = JSON.parse(props.dataList) |
| | | |
| | | const getData = () => { |
| | | request.get(`/order/printOrderProductDetail/${props.orderId}/${selectedValues.value}`).then(res => { |
| | | data.value= res.data |
| | |
| | | grossNum.value.perimeter = parseFloat(grossNum.value.perimeter.toFixed(3)) |
| | | grossNum.value.weight = parseFloat(grossNum.value.weight.toFixed(2)) |
| | | |
| | | }) |
| | | |
| | | //订单序号dwg图片查询 |
| | | request.post("/orderFile/getOrderFilePicture", dataFile.value.printList).then((res) => { |
| | | picture.value = res.data |
| | | }) |
| | | } |
| | | |
| | |
| | | defineExpose({ |
| | | printSheet |
| | | }); |
| | | |
| | | // 原始图片数组 picture |
| | | const pictureMap = computed(() => { |
| | | return picture.value |
| | | }) |
| | | |
| | | |
| | | </script> |
| | | |
| | | |
| | |
| | | <td style="font-size: 20px;font-weight: bold;">{{items.quantity}}</td> |
| | | <td style="font-size: 20px;font-weight: bold;">{{items.perimeter}}</td> |
| | | <td style="font-size: 20px;font-weight: bold;">{{items.grossArea.toFixed(2)}}</td> |
| | | <td colspan="2">{{items.processingNote}} |
| | | <td colspan="2" style="text-align: left;border:none;font-weight: bold;font-size: 17px;">{{items.processingNote}} |
| | | {{items.remarks==null?'':'/'}} |
| | | {{items.remarks}}</td> |
| | | </tr> |
| | |
| | | </el-option> |
| | | </el-select> |
| | | </el-dialog> |
| | | |
| | | <ImageSizeEditor |
| | | :images="pictureMap" |
| | | v-model:sizeMap="imgSizeMap" |
| | | key-field="orderNumber" |
| | | src-field="imageBase64" |
| | | :default-width="300" |
| | | :default-height="300" |
| | | /> |
| | | </div> |
| | | |
| | | |
| | |
| | | qualityInspectionDate:ref(["",""]), |
| | | brokenDate:ref(["",""]), |
| | | yieldDate:ref(["",""]), |
| | | replenishDate:ref(["",""]), |
| | | searchOrderListFilter:ref([]),//订单首页筛选] |
| | | searchOrderFilter:{ |
| | | list:ref([]), |
| | |
| | | this.qualityInspectionDate=["",""] |
| | | this.brokenDate=["",""] |
| | | this.yieldDate=["",""] |
| | | this.replenishDate=["",""] |
| | | this.searchOrderFilter={ |
| | | list:[], |
| | | data:{} |
| | |
| | | printRow.value.flashback = flashback.value |
| | | printRow.value.landingSequence=landingSequence.value |
| | | printRow.value.compound = compound.value |
| | | console.log(printRow.value) |
| | | // router.push({path: '/main/processCard/printProcess', query: {printList: JSON.stringify(selectRecords),printMerge:printMergeVal}}) |
| | | if(company.companyName=='常州市吉利玻璃有限公司'){ |
| | | dialogTableVisibleStraight.value = true |
| | |
| | | {field: 'process_id',width: 150, title: t('processCard.processId'),filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged}, |
| | | {field: 'technology_number', width: 110,title: t('processCard.technologyNumber'),showOverflow:"ellipsis",filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged}, |
| | | {field: 'print_status', width: 120,title: t('processCard.numberTimesProcessCardPrinted')}, |
| | | {field: 'print_number', width: 110,title: t('processCard.numberLabelPrintingOperations')}, |
| | | {field: 'order_number', width: 100,title: t('order.OrderNum'),showOverflow:"ellipsis",filters: [{data: ''}], |
| | |
| | | // {field: 'glassNumber', width: 110,title: t('reportingWorks.glassNumber'),showOverflow:"ellipsis",filters: [{data: ''}], |
| | | // slots: {filter: 'num1_filter'}, |
| | | // filterMethod: filterChanged}, |
| | | {field: 'technology_number', width: 110,title: t('processCard.technologyNumber'),showOverflow:"ellipsis",filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged}, |
| | | |
| | | {field: 'quantity', width: 90,title: t('order.quantity')}, |
| | | {field: 'grossArea', width: 90,title: t('order.area')}, |
| | | {field: 'broken_num',width: 90, title: t('reportingWorks.quantityBroken')}, |
| | |
| | | <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/processCard/productionScheduling' }">{{$t('processCard.scheduling')}} |
| | | </el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/processCard/selectPrintFlowCard' }" >{{ $t('basicData.print') }}</el-breadcrumb-item> |
| | | <!-- <el-breadcrumb-item @click="changeRouter(5)" :class="indexFlag===5?'indexTag':''" :to="{ path: '/main/processCard/printProgressProcessCard' }" >{{ $t('processCard.printProgressProcessCard') }}</el-breadcrumb-item>--> |
| | | <el-breadcrumb-item @click="changeRouter(5)" :class="indexFlag===5?'indexTag':''" :to="{ path: '/main/processCard/printProgressProcessCard' }" >{{ $t('processCard.printProgressProcessCard') }}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(6)" :class="indexFlag===6?'indexTag':''" :to="{ path: '/main/processCard/selectPrintProject' }" >{{$t('processCard.engineeringPrinting')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/processCard/selectPrintFlowCard' }" style="display: none">{{ $t('basicData.print') }}</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | |
| | | import PrintCustomLabelProject from "@/components/pp/PrintCustomLabelProject.vue"; |
| | | import PrintProcessConsolidated from '@/components/pp/PrintConsolidatedReplenish.vue' |
| | | import {createTemplate} from "@/hook/createTemplateTag"; |
| | | import useOrderInfoStore from "@/stores/sd/order/orderInfo"; |
| | | const company = companyInfo() |
| | | const orderInfo = useOrderInfoStore() |
| | | //语言获取 |
| | | const {t} = useI18n() |
| | | let router = useRouter() |
| | |
| | | let startTime = form.date1[0] |
| | | let endTime = form.date1[1] |
| | | // 第一次加载查询 |
| | | request.post(`/Replenish/selectPrint/${startTime}/${endTime}`, filterData.value).then((res) => { |
| | | request.post(`/Replenish/selectPrint/${orderInfo.replenishDate}`, filterData.value).then((res) => { |
| | | |
| | | if (res.code == 200) { |
| | | produceList = produceList.value.concat(deepClone(res.data.data)) |
| | | titleSelectJson.value.dataType = res.data.type |
| | | orderInfo.replenishDate = res.data.selectDate |
| | | xGrid.value.reloadData(produceList) |
| | | gridOptions.loading = false |
| | | } else { |
| | |
| | | let endTime = form.date1[1] |
| | | gridOptions.loading=true |
| | | // 第一次加载查询 |
| | | request.post(`/Replenish/selectPrint/${startTime}/${endTime}`, filterData.value).then((res) => { |
| | | request.post(`/Replenish/selectPrint/${orderInfo.replenishDate}`, filterData.value).then((res) => { |
| | | |
| | | if (res.code == 200) { |
| | | |
| | | xGrid.value.loadData(res.data.data) |
| | | orderInfo.replenishDate = res.data.selectDate |
| | | titleSelectJson.value.dataType = res.data.type |
| | | gridOptions.loading = false |
| | | } else { |
| | |
| | | <div style="width: 100%;height: 100%"> |
| | | <div class="head"> |
| | | <el-date-picker |
| | | v-model="form.date1" |
| | | v-model="orderInfo.replenishDate" |
| | | :default-time="defaultTime" |
| | | :end-placeholder="$t('basicData.endDate')" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | format="YYYY/MM/DD" |
| | |
| | | import {reactive, ref} from "vue"; |
| | | import {useRouter} from 'vue-router' |
| | | import request from "@/utils/request"; |
| | | import {ElMessage} from "element-plus"; |
| | | import {ElDatePicker, ElMessage} from "element-plus"; |
| | | import deepClone from "@/utils/deepClone"; |
| | | import {Search} from "@element-plus/icons-vue"; |
| | | import useUserInfoStore from "@/stores/userInfo"; |
| | | import { useI18n } from 'vue-i18n' |
| | | import footSum from "@/hook/footSum"; |
| | | import useOrderInfoStore from "@/stores/sd/order/orderInfo"; |
| | | |
| | | //语言获取 |
| | | const { t } = useI18n() |
| | | |
| | | |
| | | const orderInfo = useOrderInfoStore() |
| | | const userStore = useUserInfoStore() |
| | | const username = userStore.user.userName |
| | | const userid = userStore.user.userId |
| | |
| | | }) |
| | | |
| | | //第一次调用 |
| | | request.post(`/Replenish/SelectReplenish/1/${total.pageSize}/${selectDate.value}`,filterData.value).then((res) => { |
| | | request.post(`/Replenish/SelectReplenish/1/${total.pageSize}/${orderInfo.replenishDate}`,filterData.value).then((res) => { |
| | | |
| | | if(res.code==200){ |
| | | total.dataTotal = res.data.total.total*1 |
| | | total.pageTotal= res.data.total.pageTotal |
| | | |
| | | selectDate.value = res.data.selectDate |
| | | orderInfo.replenishDate = res.data.selectDate |
| | | pageNum.value=1 |
| | | |
| | | produceList = deepClone(res.data.data) |
| | |
| | | }else{ |
| | | filterData.value[column.property] = value |
| | | } |
| | | request.post(`/Replenish/SelectReplenish/1/${total.pageSize}/${selectDate.value}`,filterData.value).then((res) => { |
| | | request.post(`/Replenish/SelectReplenish/1/${total.pageSize}/${orderInfo.replenishDate}`,filterData.value).then((res) => { |
| | | |
| | | if(res.code==200){ |
| | | total.dataTotal = res.data.total.total*1 |
| | | total.pageTotal= res.data.total.pageTotal |
| | | |
| | | selectDate.value = res.data.selectDate |
| | | orderInfo.replenishDate = res.data.selectDate |
| | | pageNum.value=1 |
| | | |
| | | produceList = deepClone(res.data.data) |
| | |
| | | |
| | | const selectOrderList = ()=>{ |
| | | gridOptions.loading = true |
| | | request.post(`/Replenish/SelectReplenish/${pageNum.value}/${total.pageSize}/${selectDate.value}`,filterData.value).then((res) => { |
| | | request.post(`/Replenish/SelectReplenish/${pageNum.value}/${total.pageSize}/${orderInfo.replenishDate}`,filterData.value).then((res) => { |
| | | if(res.code==200){ |
| | | if (res.data.total!=null){ |
| | | total.dataTotal = res.data.total.total*1 |
| | | total.pageTotal= res.data.total.pageTotal |
| | | } |
| | | selectDate.value = res.data.selectDate |
| | | orderInfo.replenishDate = res.data.selectDate |
| | | |
| | | produceList = deepClone(res.data.data) |
| | | xGrid.value.loadData(produceList) |
| | |
| | | <div style="width: 100%;height: 100%"> |
| | | <div class="head"> |
| | | <el-date-picker |
| | | v-model="selectDate" |
| | | type="daterange" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | v-model="orderInfo.replenishDate" |
| | | :default-time="defaultTime" |
| | | :end-placeholder="$t('basicData.endDate')" |
| | | format="YYYY-MM-DD" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | format="YYYY/MM/DD" |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD" |
| | | |
| | | /> |
| | |
| | | //禁用按钮 |
| | | gridOptions.toolbarConfig.buttons[2].disabled = true |
| | | gridOptions.toolbarConfig.buttons[3].disabled = true |
| | | //gridOptions.toolbarConfig.buttons[4].disabled = false |
| | | //gridOptions.toolbarConfig.buttons[4].disabled = true |
| | | //显示复选框 |
| | | xGrid.value.showColumn("select") |
| | | gridOptions.loading=false |
| | |
| | | {'code': 'addToExamine', 'name': t('reportingWorks.saveAndReview'),status: 'primary',icon: 'vxe-icon-save'}, |
| | | {'code': 'toExamine', 'name': t('basicData.review'),status: 'primary'}, |
| | | {'code': 'CounterExamination', 'name': t('basicData.cancelReview'),status: 'primary'}, |
| | | //{'code': 'addOtherOrders','name': t('delivery.orderAdd'),'status': 'primary'} |
| | | //{'code': 'addOtherOrders','name': t('delivery.orderAdd'),status: 'primary'} |
| | | //{'code': 'glassShelf', 'name': t('finishedGlassShelf.finishedGlassShelfEmit'),status: 'primary'} |
| | | ], |
| | | /*import: false, |
| | |
| | | |
| | | const orderTypeState = ref(0) |
| | | |
| | | let deliveryCount = ref(0) |
| | | |
| | | // 定义表头上传数据 |
| | | const titleUploadData = ref({ |
| | | project:'', |
| | |
| | | } |
| | | case 'updateMoney': { |
| | | $grid.clearEdit() |
| | | updateMoney() |
| | | deliveryCount.value=0 |
| | | if(deliveryCount.value>0){ |
| | | ElMessageBox.confirm("订单已存在未审核的发货单,是否修改未审核发货单的单价并重新计算金额", |
| | | t('order.msg.warning'), |
| | | { |
| | | confirmButtonText: t('basicData.confirmButtonText'), |
| | | cancelButtonText: t('basicData.cancelButtonText'), |
| | | distinguishCancelAndClose: true, |
| | | type: 'warning', |
| | | } |
| | | ).then(()=>{ |
| | | updateMoney(1) |
| | | }).catch((action)=>{ |
| | | if (action === 'cancel') { |
| | | updateMoney(2) |
| | | } else if (action === 'close') { |
| | | } |
| | | }) |
| | | |
| | | }else{ |
| | | updateMoney(2) |
| | | } |
| | | |
| | | break |
| | | } |
| | | case 'Craft': { |
| | |
| | | request.post(`/order/getOrderById/${str}`).then((res) => { |
| | | if(res.code==200){ |
| | | titleUploadData.value = res.data.order |
| | | deliveryCount.value = res.data.deliveryCount |
| | | const customer = titleSelectJson.value.customer.filter(item => item.id === titleUploadData.value.customerId) |
| | | projects.value = customer[0].projectList |
| | | newOrderId.value=titleUploadData.value.orderId |
| | |
| | | } |
| | | |
| | | //更新金额重置 |
| | | const updateMoney = () => { |
| | | const updateMoney = (type) => { |
| | | titleUploadData.value.creatorId=userStore.user.userId |
| | | titleUploadData.value.creator=userStore.user.userName |
| | | const updateData = { |
| | | order: titleUploadData.value, |
| | | detail: xGrid.value.getTableData().fullData, |
| | | otherMoney:otherMoney.value |
| | | otherMoney:otherMoney.value, |
| | | type:type |
| | | } |
| | | request.post(`/order/updateOrderMoney`,updateData).then(res => { |
| | | if (res.code == 200){ |
| | |
| | | dataTotal : 0, |
| | | pageSize : 50 |
| | | }) |
| | | |
| | | let printRow = ref({ |
| | | list: null, |
| | | }) |
| | | |
| | | const xGrid = ref() |
| | | const gridOptions = reactive({ |
| | |
| | | return |
| | | } |
| | | ElMessage.warning(t('order.printingNumber')+rowClickIndex.value.printingNumber) |
| | | let selectRecords = ref(null) |
| | | selectRecords=rowClickIndex.value |
| | | printRow.value.list = JSON.stringify([selectRecords]) |
| | | dialogTableVisible.value = true |
| | | sheetIndex.value=4 |
| | | if(rowClickIndex.value.processReview===2 && rowClickIndex.value.orderReview===0){ |
| | |
| | | <print-sheet1 id="child" v-if="sheetIndex===1" :orderId="rowClickIndex.orderId" /> |
| | | <print-sheet2 id="child" v-else-if="sheetIndex===2" :orderId="rowClickIndex.orderId" /> |
| | | <print-sheet3 id="child" v-else-if="sheetIndex===3" :orderId="rowClickIndex.orderId" /> |
| | | <print-sheet4 id="child" v-else-if="sheetIndex===4" :orderId="rowClickIndex.orderId" /> |
| | | <print-sheet4 id="child" v-else-if="sheetIndex===4" :orderId="rowClickIndex.orderId" :dataList="printRow.list"/> |
| | | <print-sheet5 id="child" v-else-if="sheetIndex===5" :orderId="rowClickIndex.orderId" /> |
| | | |
| | | </el-dialog> |
| | |
| | | |
| | | @ApiOperation("补片流程卡明细查询接口") |
| | | @SaCheckPermission("printReplenishFlowCard.search") |
| | | @PostMapping("/selectPrint/{selectTime1}/{selectTime2}") |
| | | @PostMapping("/selectPrint/{selectDate}") |
| | | public Result selectPrint( |
| | | @PathVariable Date selectTime1, |
| | | @PathVariable Date selectTime2, |
| | | @PathVariable List<String> selectDate, |
| | | @RequestBody FlowCard flowCard) { |
| | | return Result.success(replenishService.selectPrintSv(selectTime1,selectTime2, flowCard)); |
| | | return Result.success(replenishService.selectPrintSv(selectDate, flowCard)); |
| | | |
| | | } |
| | | |
| | |
| | | |
| | | Integer getPrintLabelCount(String processId, String technologyNumber); |
| | | |
| | | List<Map<String, String>> selectReplenishPrintMp(Date selectTime1, Date selectTime2, FlowCard flowCard); |
| | | List<Map<String, String>> selectReplenishPrintMp(String selectTime1, String selectTime2, FlowCard flowCard); |
| | | |
| | | List<Map<String, Object>> getRepairPrintCustomData(String processId, String technologyNumber, String reportingWorkId, Integer orderNumber); |
| | | |
| | |
| | | |
| | | OrderDetail selectOrderDetailDeliveryCount(@Param("orderDetail") OrderDetail orderDetail); |
| | | |
| | | List<DeliveryDetail> getDeliverDetailOrderNumber(@Param("orderId") String orderId, |
| | | @Param("orderNumber") Integer orderNumber,@Param("deliveryId") String deliveryId); |
| | | |
| | | List<Delivery> getDeliverOrderNumber(@Param("orderId") String orderId, |
| | | @Param("orderNumber") Integer orderNumber); |
| | | |
| | | Boolean updateDeliveryDetailmonye(@Param("price") Double price,@Param("deliveryDetail") DeliveryDetail deliveryDetail); |
| | | Boolean updateDeliverymonye(@Param("deliveryId") String deliveryId,@Param("money") Double money); |
| | | |
| | | } |
| | |
| | | |
| | | List<Map<String,Object>> selectProcessAttributeConfigOne(); |
| | | List<Map<String,Object>> selectProcessAttributeConfigTow(String belong); |
| | | |
| | | Integer selectDeliveryStateConut(String orderId); |
| | | } |
| | |
| | | |
| | | Integer offset = (pageNum - 1) * pageSize; |
| | | |
| | | // 默认时间范围:过去15天 |
| | | // 默认时间范围:过去7天 |
| | | String endDate = LocalDate.now().toString(); |
| | | String startDate = LocalDate.now().minusDays(15).toString(); |
| | | String startDate = LocalDate.now().minusDays(7).toString(); |
| | | |
| | | // 用户自定义时间段 |
| | | if (selectDate != null && selectDate.size() == 2) { |
| | |
| | | return oddNumbers; |
| | | } |
| | | |
| | | public Object selectPrintSv(java.sql.Date selectTime1, java.sql.Date selectTime2, FlowCard flowCard) { |
| | | public Object selectPrintSv(List<String> selectDate, FlowCard flowCard) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("data", flowCardMapper.selectReplenishPrintMp(selectTime1,selectTime2,flowCard)); |
| | | // 默认时间范围:过去7天 |
| | | String endDate = LocalDate.now().toString(); |
| | | String startDate = LocalDate.now().minusDays(7).toString(); |
| | | |
| | | // 用户自定义时间段 |
| | | if (selectDate != null && selectDate.size() == 2) { |
| | | if (!selectDate.get(0).isEmpty()) { |
| | | startDate = selectDate.get(0); |
| | | } |
| | | if (!selectDate.get(1).isEmpty()) { |
| | | endDate = selectDate.get(1); |
| | | } |
| | | } |
| | | // 返回时间段 |
| | | List<String> list = new ArrayList<>(); |
| | | list.add(startDate); |
| | | list.add(endDate); |
| | | map.put("selectDate", list); |
| | | map.put("data", flowCardMapper.selectReplenishPrintMp(startDate,endDate,flowCard)); |
| | | map.put("type", flowCardMapper.selectType()); |
| | | return map; |
| | | } |
| | |
| | | //判断夹胶和夹胶后工序 |
| | | //Objects.equals(basicData.getNickname(), "stepA") || Objects.equals(basicData.getNickname(), "stepC") |
| | | if(Objects.equals(basicData.getNickname(), "stepA") || Objects.equals(basicData.getNickname(), "stepC")){ |
| | | clos.put(uniqueList.get(i).get("process"), 14+i); |
| | | clos.put(uniqueList.get(i).get("process"), 15+i); |
| | | } |
| | | //判断中空和中空后工序 |
| | | //Objects.equals(basicData.getNickname(), "stepB") || Objects.equals(basicData.getNickname(), "stepD") |
| | |
| | | map.put("totalSum",totalSum); |
| | | return map; |
| | | } |
| | | |
| | | public boolean updateDeliveryMoney(OrderDetail orderDetail,Order order) { |
| | | List<Delivery> deliveryList=deliveryDetailMapper.getDeliverOrderNumber(orderDetail.getOrderId(),orderDetail.getOrderNumber()); |
| | | for (Delivery delivery : deliveryList) { |
| | | if(delivery.getDeliveryState()==0){ |
| | | List<DeliveryDetail> deliveryDetailList=deliveryDetailMapper.getDeliverDetailOrderNumber(orderDetail.getOrderId(),orderDetail.getOrderNumber(),delivery.getDeliveryId()); |
| | | for (DeliveryDetail deliveryDetail : deliveryDetailList) { |
| | | deliveryDetail = updateOrderMoneyComputeds(deliveryDetail,orderDetail,order.getCalculateType()); |
| | | deliveryDetailMapper.updateDeliveryDetailmonye(orderDetail.getPrice(),deliveryDetail); |
| | | } |
| | | BigDecimal money = new BigDecimal("0"); |
| | | List<DeliveryDetail> deliveryDetailListNew=deliveryDetailMapper.getIsNotDeliveryDetail(delivery.getDeliveryId()); |
| | | for (DeliveryDetail deliveryDetail : deliveryDetailListNew) { |
| | | BigDecimal getMoney= BigDecimal.valueOf(deliveryDetail.getMoney()); |
| | | money=money.add(getMoney); |
| | | } |
| | | deliveryDetailMapper.updateDeliverymonye(delivery.getDeliveryId(), (double) Math.round(money.doubleValue())); |
| | | |
| | | } |
| | | |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | private DeliveryDetail updateOrderMoneyComputeds(DeliveryDetail deliveryDetail,OrderDetail orderDetail, Integer calculateType) { |
| | | BigDecimal getPrice= BigDecimal.valueOf(orderDetail.getPrice()); |
| | | BigDecimal getQuantity= BigDecimal.valueOf(deliveryDetail.getQuantity()); |
| | | BigDecimal getComputeGrossArea= BigDecimal.valueOf(deliveryDetail.getArea()); |
| | | BigDecimal getComputeArea= BigDecimal.valueOf(orderDetail.getComputeArea()); |
| | | BigDecimal getWidth= BigDecimal.valueOf(orderDetail.getWidth()); |
| | | BigDecimal getHeight= BigDecimal.valueOf(orderDetail.getHeight()); |
| | | if (calculateType == 3) { |
| | | deliveryDetail.setMoney(getPrice.multiply(getQuantity).setScale(2, RoundingMode.HALF_UP).doubleValue()); |
| | | }else if (calculateType == 4) { |
| | | if(Objects.equals(orderDetail.getArea(), orderDetail.getComputeArea())&&Objects.equals(orderDetail.getGrossArea(), orderDetail.getComputeGrossArea())){ |
| | | deliveryDetail.setMoney(getWidth.multiply(getHeight).multiply(getQuantity).multiply(getPrice). |
| | | divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue()); |
| | | }else{ |
| | | deliveryDetail.setMoney(getPrice.multiply(getComputeGrossArea).setScale(2, RoundingMode.HALF_UP).doubleValue()); |
| | | } |
| | | }else if (calculateType == 1){ |
| | | deliveryDetail.setMoney(getPrice.multiply(getComputeArea).multiply(getQuantity).setScale(2, RoundingMode.HALF_UP).doubleValue()); |
| | | }else{ |
| | | deliveryDetail.setMoney(getPrice.multiply(getComputeGrossArea).setScale(2, RoundingMode.HALF_UP).doubleValue()); |
| | | } |
| | | return deliveryDetail; |
| | | } |
| | | } |
| | |
| | | result = orderDetails.stream() |
| | | .collect(Collectors.collectingAndThen( |
| | | Collectors.toMap( |
| | | map -> map.get("order_id"), |
| | | map -> { |
| | | Object v = map.get("order_id"); |
| | | if (v == null) { |
| | | v = map.get("orderId"); |
| | | } |
| | | return String.valueOf(v); |
| | | }, |
| | | map -> map, |
| | | (existing, replacement) -> existing // 保留第一个出现的 |
| | | (existing, replacement) -> existing // 保留第一个 |
| | | ), |
| | | map -> new ArrayList<>(map.values()) |
| | | m -> new ArrayList<>(m.values()) |
| | | )); |
| | | //循环获取图片 |
| | | List<OrderFile> orderFiles = new ArrayList<>(); |
| | | for (Map<String,Object> obj : result) { |
| | | List<OrderFile> orderFile = orderFileMapper.selectList(new QueryWrapper<OrderFile>() |
| | | |
| | | Object orderId = obj.get("order_id"); |
| | | if (orderId == null) { |
| | | orderId = obj.get("orderId"); |
| | | } |
| | | |
| | | List<OrderFile> orderFile = orderFileMapper.selectList( |
| | | new QueryWrapper<OrderFile>() |
| | | .select("order_id, order_number, image_base64") |
| | | .eq("order_id", obj.get("order_id")) |
| | | .eq("order_id", orderId) |
| | | ); |
| | | if (orderFile != null){ |
| | | |
| | | if (orderFile != null && !orderFile.isEmpty()) { |
| | | orderFiles.addAll(orderFile); |
| | | } |
| | | } |
| | |
| | | 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, BasicOtherMoneyMapper basicOtherMoneyMapper) { |
| | | |
| | | private final DeliveryService deliveryService; |
| | | public OrderService(OrderMapper orderMapper, OrderDetailMapper orderDetailMapper, OrderGlassDetailMapper orderGlassDetailMapper, OrderProcessDetailMapper orderProcessDetailMapper, SysErrorService sysErrorService, OrderOtherMoneyMapper orderOtherMoneyMapper, ProductMapper productMapper, LogService logService, WorkOrderMapper workOrderMapper, FlowCardMapper flowCardMapper, BasicOtherMoneyMapper basicOtherMoneyMapper,DeliveryService deliveryService) { |
| | | this.orderMapper = orderMapper; |
| | | this.orderDetailMapper = orderDetailMapper; |
| | | this.orderGlassDetailMapper = orderGlassDetailMapper; |
| | |
| | | this.workOrderMapper = workOrderMapper; |
| | | this.flowCardMapper = flowCardMapper; |
| | | this.basicOtherMoneyMapper = basicOtherMoneyMapper; |
| | | this.deliveryService = deliveryService; |
| | | } |
| | | |
| | | public boolean saveOrder(Map<String,Object> orderMap) throws Exception { |
| | |
| | | List<OrderDetail> orderDetails = orderDetailMapper.selectList(new QueryWrapper<OrderDetail>().eq("order_id",id)); |
| | | List<OrderOtherMoney> orderOtherMoneyList = orderOtherMoneyMapper.findById(id); |
| | | List<Map<String,String>> orderFileList = orderMapper.selectOrderFileList(id); |
| | | Integer deliveryCount = orderMapper.selectDeliveryStateConut(id); |
| | | Map<String,Object> map = new HashMap<>(); |
| | | map.put("order",order); |
| | | map.put("orderDetails",orderDetails); |
| | | map.put("orderOtherMoneyList",orderOtherMoneyList); |
| | | map.put("orderFile",orderFileList); |
| | | map.put("deliveryCount",deliveryCount); |
| | | return map; |
| | | } |
| | | //订单审核 |
| | |
| | | |
| | | public boolean updateOrderMoney(Map<String, Object> map) { |
| | | JSONObject jsonObject = new JSONObject(map); |
| | | int type = Integer.parseInt(jsonObject.get("type").toString()); |
| | | Order order = JSONObject.parseObject(JSONObject.toJSONString(jsonObject.get("order")), Order.class); |
| | | List<OrderDetail> OrderDetails = JSONArray.parseArray(JSONObject.toJSONString(jsonObject.get("detail")), OrderDetail.class); |
| | | List<OrderOtherMoney> orderOtherMoneyList = JSONArray.parseArray(JSONObject.toJSONString(jsonObject.get("otherMoney")), OrderOtherMoney.class); |
| | |
| | | log.setContent(jsonObject.toString()); |
| | | log.setFunction("updateOrderMoney金额重置:"+order.getOrderId()); |
| | | |
| | | |
| | | //删除其他金额明细表 |
| | | orderOtherMoneyMapper.delete(new LambdaQueryWrapper<OrderOtherMoney>().eq(OrderOtherMoney::getOrderId, order.getOrderId())); |
| | | List<OrderOtherMoney> orderOtherMoneyLists=orderOtherMoneyList; |
| | | |
| | | double money = 0; |
| | | for (OrderDetail orderDetail : OrderDetails) { |
| | | if(type==1){ |
| | | deliveryService.updateDeliveryMoney(orderDetail,order); |
| | | } |
| | | orderDetail = updateOrderMoneyComputed(orderDetail,order.getCalculateType()); |
| | | BigDecimal getGrossAmount= BigDecimal.valueOf(orderDetail.getGrossAmount()); |
| | | money+=getGrossAmount.doubleValue(); |
| | |
| | | } |
| | | 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) { |
| | |
| | | map.put("data",orderDetailList); |
| | | map.put("title",basicOtherMoneyList); |
| | | map.put("total",orderDetailMapper.getOrderReportTotal(offset, pageSize, startDate, endDate, orderDetail,"order")); |
| | | map.put("orderOtherMoney", |
| | | Collections.singletonList( |
| | | basicOtherMoneyMapper.selectList(new QueryWrapper<BasicOtherMoney>().eq("state",1)) |
| | | )); |
| | | List<String> list = new ArrayList<>(); |
| | | list.add(startDate); |
| | | list.add(endDate); |
| | |
| | | <!-- 流程卡进度--> |
| | | <select id="processCardProgressMp"> |
| | | select a.product_name, |
| | | a.building_number, |
| | | b.glass_child, |
| | | d.order_type, |
| | | concat(c.process_id, '/', c.technology_number) as process_id, |
| | |
| | | <result column="freight" property="delivery.freight"/> |
| | | <result column="freight_price" property="delivery.freightPrice"/> |
| | | <result column="freight_quantity" property="delivery.freightQuantity"/> |
| | | <result column="delivery_state" property="delivery.deliveryState"/> |
| | | <result column="money" property="delivery.money"/> |
| | | <result column="other_money" property="delivery.otherMoney"/> |
| | | |
| | | <result column="product_id" property="orderDetail.productId"/> |
| | | <result column="product_name" property="orderDetail.productName"/> |
| | |
| | | group by dd.delivery_id,dd.order_id,od.product_id |
| | | order by dd.delivery_id,dd.delivery_number |
| | | </select> |
| | | |
| | | |
| | | <select id="getDeliverDetailOrderNumber" resultMap="selectDeliveryDetail"> |
| | | select dd.order_id, |
| | | dd.order_Number, |
| | | dd.delivery_number, |
| | | dd.delivery_id, |
| | | dd.quantity, |
| | | dd.price, |
| | | dd.area, |
| | | dd.money, |
| | | dd.other_columns, |
| | | d.delivery_state, |
| | | d.money |
| | | from sd.delivery_detail dd |
| | | left join sd.delivery d on dd.delivery_id=d.delivery_id |
| | | where dd.order_id=#{orderId} and dd.order_number=#{orderNumber} and dd.delivery_id=#{deliveryId} |
| | | |
| | | </select> |
| | | |
| | | <select id="getDeliverOrderNumber"> |
| | | select |
| | | d.delivery_id, |
| | | d.delivery_state, |
| | | d.money |
| | | from sd.delivery_detail dd |
| | | left join sd.delivery d on dd.delivery_id=d.delivery_id |
| | | where dd.order_id=#{orderId} and dd.order_number=#{orderNumber} |
| | | group by d.delivery_id |
| | | </select> |
| | | |
| | | <update id="updateDeliveryDetailmonye"> |
| | | update sd.delivery_detail set price=#{price},money=#{deliveryDetail.money} |
| | | where delivery_id=#{deliveryDetail.deliveryId} and delivery_number=#{deliveryDetail.deliveryNumber} |
| | | </update> |
| | | |
| | | <update id="updateDeliverymonye"> |
| | | update sd.delivery set money=#{money} |
| | | where delivery_id=#{deliveryId} |
| | | </update> |
| | | </mapper> |
| | |
| | | where level=2 and belong=#{belong} |
| | | |
| | | </select> |
| | | |
| | | <select id="selectDeliveryStateConut"> |
| | | select count(*) from sd.delivery_detail dd left join sd.delivery d on dd.delivery_id=d.delivery_id where dd.order_id= #{orderId} and d.delivery_state=0 |
| | | </select> |
| | | </mapper> |