| | |
| | | </tr> |
| | | <tr v-for="(items,index) in item.detail" :key="index"> |
| | | <td class="tdNowrap">客æ·åç§°ï¼</td> |
| | | <td colspan="2">{{ items.customer_name }}</td> |
| | | <td colspan="4">{{ items.customer_name }}</td> |
| | | <td class="tdNowrap">项ç®åç§°ï¼</td> |
| | | <td colspan="4" style="min-width: 250px;">{{ items.projectBatch }}</td> |
| | | <td colspan="3" style="min-width: 250px;">{{ items.projectBatch }}</td> |
| | | <td class="tdNowrap">å·¥èºæµç¨ï¼</td> |
| | | <td :colspan="2+item.processList.length*2" style="width: 500px">{{ items.process }}</td> |
| | | </tr> |
| | | <tr v-for="(itemTr,index) in item.detail" :key="index"> |
| | | <td class="tdNowrap">磨边类åï¼</td> |
| | | <td v-if="name=='天津åç»ç»çå·¥ä¸ææ¯æéå
¬å¸ï¼TJBB-QR7.1-01ï¼'" colspan="2">{{ itemTr.other_remarks }}</td> |
| | | <td v-else colspan="2">{{ itemTr.edging_type }}</td> |
| | | <td v-if="name=='天津åç»ç»çå·¥ä¸ææ¯æéå
¬å¸ï¼TJBB-QR7.1-01ï¼'" colspan="4">{{ itemTr.other_remarks }}</td> |
| | | <td v-else colspan="4">{{ itemTr.edging_type }}</td> |
| | | <td class="tdNowrap">åçåç§°ï¼</td> |
| | | <td colspan="4">{{ itemTr.glass_child }}</td> |
| | | <td colspan="3">{{ itemTr.glass_child }}</td> |
| | | <td class="tdNowrap">产ååç§°ï¼</td> |
| | | <td :colspan="2+item.processList.length*2">{{ itemTr.product_name }}</td> |
| | | </tr> |
| | |
| | | <td rowspan='2'>åºå·</td> |
| | | <td rowspan='2'>å¾å·</td> |
| | | <td rowspan='2'>ç¼å·</td> |
| | | <td rowspan="2">å°ç顺åº</td> |
| | | <td rowspan="2">å±å·</td> |
| | | <td rowspan='2' style="width: 90px">宽(å¼§é¿)*é«</td> |
| | | <td rowspan='2' >æ°é</td> |
| | | <td rowspan='2'>é¢ç§¯</td> |
| | |
| | | <td colspan="2"></td> |
| | | <td colspan="2"></td> |
| | | <td colspan="2"></td> |
| | | <td colspan="2"></td> |
| | | <td colspan="1"></td> |
| | | <template v-for=" n in item.processList.length"> |
| | | <td colspan="2"></td> |
| | | </template> |
| | |
| | | <td colspan="2"></td> |
| | | <td colspan="2"></td> |
| | | <td colspan="2"></td> |
| | | <td colspan="2"></td> |
| | | <td colspan="1"></td> |
| | | <template v-for=" n in item.processList.length"> |
| | | <td colspan="2"></td> |
| | | </template> |
| | |
| | | :key="index" |
| | | :src="img.imageBase64" |
| | | fit="contain" |
| | | style="max-width: 400px;max-lines: 600px" |
| | | style="max-width: 100%;" |
| | | /> |
| | | </div> |
| | | </div> |
| | |
| | | <th style="text-align: left;border:none;" colspan="4">客æ·åç§°ï¼<span>{{itme1.delivery.customerName}}</span></th> |
| | | <th style="text-align: left;border:none;" v-if="itme1.data[0].DeliveryDetail.order.batch!==''" colspan="3"> |
| | | 项ç®åç§°ï¼<span>{{itme1.delivery.project}}({{itme1.data[0].DeliveryDetail.order.batch}})</span></th> |
| | | <th style="text-align: left;border:none;" colspan="3">项ç®åç§°ï¼<span>{{itme1.delivery.project}}</span></th> |
| | | <th style="text-align: left;border:none;" v-else colspan="3">项ç®åç§°ï¼<span>{{itme1.delivery.project}}</span></th> |
| | | <th style="text-align: left;border:none;" colspan="2">è系人ï¼<span>{{itme1.delivery.contacts}}</span></th> |
| | | </tr> |
| | | <tr> |
| | |
| | | <th style="text-align: left;border:none;" colspan="4">客æ·åç§°ï¼<span>{{itme1.delivery.customerName}}</span></th> |
| | | <th style="text-align: left;border:none;" v-if="itme1.data[0].DeliveryDetail.order.batch!==''" colspan="3"> |
| | | 项ç®åç§°ï¼<span>{{itme1.delivery.project}}({{itme1.data[0].DeliveryDetail.order.batch}})</span></th> |
| | | <th style="text-align: left;border:none;" colspan="3">项ç®åç§°ï¼<span>{{itme1.delivery.project}}</span></th> |
| | | <th style="text-align: left;border:none;" v-else colspan="3">项ç®åç§°ï¼<span>{{itme1.delivery.project}}</span></th> |
| | | <th style="text-align: left;border:none;" colspan="2">è系人ï¼<span>{{itme1.delivery.contacts}}</span></th> |
| | | </tr> |
| | | <tr> |
| New file |
| | |
| | | <script setup> |
| | | import request from "@/utils/request" |
| | | import {computed, onMounted, ref} from "vue" |
| | | import PrintFoot from "@/components/sd/order/PrintFoot.vue" |
| | | import companyInfo from "@/stores/sd/companyInfo" |
| | | import deepClone from "@/utils/deepClone"; |
| | | import {ElMessage} from "element-plus"; |
| | | import {add,multiply,multiplyAuto,divideAuto} from '@/utils/decimal'; |
| | | |
| | | |
| | | /*ä¸è¡ä¸¤ååè´§åæå°*/ |
| | | |
| | | const company = companyInfo() |
| | | let produceList = ref([]) |
| | | let otherMoney = [] |
| | | let otherMoney1 = [] |
| | | let delivery = ref([]) |
| | | let money = ref("") |
| | | let otherMoneys = 0 |
| | | let sumMoney = 0 |
| | | let takeCare =ref("注æ:请妥åä¿ç®¡å¥½æå¸çç»çæ¶ï¼å¦æä¸¢å¤±ææåï¼æ1500å
åªèµå¿ã谢谢é
å!") |
| | | let remark =ref(company.deliveryRemark) |
| | | |
| | | |
| | | |
| | | let props = defineProps({ |
| | | deliveryId:null |
| | | }) |
| | | const form = ref({ |
| | | }) |
| | | let produceList2 = ref([]) |
| | | |
| | | |
| | | |
| | | const getData = () => { |
| | | if(props.deliveryId===null || props.deliveryId===undefined || props.deliveryId===''){ |
| | | return |
| | | } |
| | | form.value.deliveryId=props.deliveryId |
| | | form.value.type=company.productName |
| | | |
| | | |
| | | request.post(`/delivery/getSelectDeliveryPrinting`,form.value).then((res) => { |
| | | if(res.code==200){ |
| | | produceList.value = deepClone(res.data) |
| | | for(let i=0;i<produceList.value.length;i++){ |
| | | let produceList1= ({ |
| | | data:null, |
| | | otherMoney:null, |
| | | otherMoney1:null, |
| | | delivery:null, |
| | | money:null, |
| | | otherMoneys:0, |
| | | sumMoney:0 |
| | | }) |
| | | produceList1.data=produceList.value[i].data |
| | | produceList1.delivery=produceList.value[i].delivery |
| | | produceList1.money=produceList.value[i].money |
| | | produceList1.otherMoney=produceList.value[i].otherMoney |
| | | for(let j=0;j<produceList1.data.length;j++){ |
| | | produceList1.sumMoney+=produceList1.data[j].DeliveryDetail.money |
| | | } |
| | | otherMoney1=[] |
| | | for(let i=0;i<produceList1.otherMoney.length;i++){ |
| | | if(produceList1.otherMoney[i].DeliveryDetailOtherMoney.monery!=null){ |
| | | produceList1.otherMoneys+=produceList1.otherMoney[i].DeliveryDetailOtherMoney.monery |
| | | if(otherMoney1.length===0){ |
| | | otherMoney1.push(produceList1.otherMoney[i]) |
| | | } |
| | | else{ |
| | | for(let s=0;s<otherMoney1.length;s++){ |
| | | if(produceList1.otherMoney[i].DeliveryDetailOtherMoney.alias===otherMoney1[s].DeliveryDetailOtherMoney.alias){ |
| | | |
| | | otherMoney1[s].DeliveryDetailOtherMoney.count=add(produceList1.otherMoney[i].DeliveryDetailOtherMoney.count,otherMoney1[s].DeliveryDetailOtherMoney.count) |
| | | otherMoney1[s].DeliveryDetailOtherMoney.monery =add(produceList1.otherMoney[i].DeliveryDetailOtherMoney.monery,otherMoney1[s].DeliveryDetailOtherMoney.monery) |
| | | break |
| | | } |
| | | if(s+1===otherMoney1.length){ |
| | | otherMoney1.push(produceList1.otherMoney[i]) |
| | | break |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | produceList1.otherMoney1=otherMoney1 |
| | | produceList2.value.push(produceList1) |
| | | } |
| | | for(let j=0;j<produceList2.value.length;j++){ |
| | | |
| | | if(produceList2.value[j].delivery.money.toFixed(0)!==(produceList2.value[j].otherMoneys |
| | | +produceList2.value[j].sumMoney+produceList2.value[j].delivery.freight).toFixed(0)){ |
| | | console.log(produceList2.value[j]) |
| | | console.log(produceList2.value[j].delivery.money) |
| | | console.log((produceList2.value[j].otherMoneys |
| | | +produceList2.value[j].sumMoney).toFixed(0)) |
| | | console.log(produceList2.value[j].delivery.deliveryId) |
| | | } |
| | | |
| | | } |
| | | |
| | | }else{ |
| | | ElMessage.warning(res.msg) |
| | | router.push("/login") |
| | | } |
| | | }) |
| | | } |
| | | |
| | | onMounted(() => { |
| | | getData() |
| | | }) |
| | | |
| | | const stringToJson = (productList) => { |
| | | productList.forEach(item => { |
| | | item.otherColumns = JSON.parse(item.otherColumns) |
| | | }) |
| | | } |
| | | |
| | | const getQuantity = (productList) => { |
| | | let quantity = 0 |
| | | productList.forEach(item => { |
| | | quantity += item.quantity |
| | | }) |
| | | return parseFloat(quantity.toFixed(3)) |
| | | |
| | | } |
| | | |
| | | const getArea = (productList) => { |
| | | let area = 0 |
| | | productList.forEach(item => { |
| | | area += item.grossArea |
| | | }) |
| | | return parseFloat(area.toFixed(3)) |
| | | |
| | | } |
| | | |
| | | const getPerimeter = (productList) => { |
| | | let perimeter = 0 |
| | | productList.forEach(item => { |
| | | perimeter += item.perimeter |
| | | }) |
| | | return parseFloat(perimeter.toFixed(3)) |
| | | } |
| | | |
| | | const printSheet = () => { |
| | | } |
| | | |
| | | |
| | | const groupedData = computed(() => { |
| | | // åç»å½æ°ï¼å°æ°ç»ææ¯2æ¡æå |
| | | const groupArray = (arr, size) => { |
| | | const result = []; |
| | | for (let i = 0; i < arr.length; i += size) { |
| | | result.push(arr.slice(i, i + size)); |
| | | } |
| | | return result; |
| | | }; |
| | | |
| | | // 对æ¯ä¸ªitemçDeliveryDetailListè¿è¡åç» |
| | | return produceList2.value.map(produce => { |
| | | const groupedDetails = produce.data.map(item => ({ |
| | | ...item, |
| | | // 对å½åitemçæç»è¿è¡åç»ï¼æ¯2æ¡ä¸ç»ï¼ |
| | | groupedDeliveryDetails: groupArray(item.DeliveryDetailList, 2) |
| | | })); |
| | | return { ...produce, data: groupedDetails }; |
| | | }); |
| | | }); |
| | | |
| | | |
| | | |
| | | defineExpose({ |
| | | printSheet |
| | | }); |
| | | </script> |
| | | |
| | | <template> |
| | | <div id="sheet"> |
| | | <table class="pages" v-for="(itme1, index) in groupedData" :key="index" > |
| | | <thead> |
| | | <tr class="title-s"> |
| | | <th colspan="11"> |
| | | <h1> |
| | | {{company.companyName}} |
| | | </h1> |
| | | </th> |
| | | </tr> |
| | | |
| | | <tr class="title-s"> |
| | | <th colspan="2" style="width: 20%"></th> |
| | | <th colspan="7" style="width: 60%;"> |
| | | <h4 v-if="!company.showDeliveryCreator" >éåå¸ä¹å¨æºè½ç§ææéå
¬å¸</h4> |
| | | <h3>éå®åè´§å</h3> |
| | | </th> |
| | | <th colspan="2" style="width: 20%;text-align: left;">åè´§åå·ï¼<span>{{itme1.delivery.deliveryId}}</span></th> |
| | | </tr> |
| | | <tr> |
| | | <th style="text-align: left;border:none;" colspan="3">客æ·åç§°ï¼<span>{{itme1.delivery.customerName}}</span></th> |
| | | <th style="text-align: left;border:none;" colspan="6">项ç®åç§°ï¼<span>{{itme1.delivery.project}}</span></th> |
| | | <th style="text-align: left;border:none;" colspan="2">è系人ï¼<span>{{itme1.delivery.contacts}}</span></th> |
| | | </tr> |
| | | <tr> |
| | | <th style="text-align: left;border:none;" colspan="9">éè´§å°åï¼<span>{{itme1.delivery.deliveryAddress}}</span></th> |
| | | <th style="text-align: left;border:none;" colspan="2">èç³»çµè¯ï¼<span>{{itme1.delivery.contactNumber}}</span></th> |
| | | </tr> |
| | | |
| | | |
| | | </thead> |
| | | <tr style="border-style: none"> |
| | | <td colspan="11" style="border-style: none"> |
| | | <table style="border-style: none;width: 100%;height: 100%;"> |
| | | <template v-for="(item, index) in itme1.data" :key="index" > |
| | | <thead> |
| | | <tr v-if="index===0"> |
| | | <th style="width: 14%;" colspan="3">宽Xé«</th> |
| | | <th style="width: 8%;">æ°é</th> |
| | | <th style="width: 9%;">é¢ç§¯</th> |
| | | <th style="width: 1%;"></th> |
| | | <th style="width: 14%;" colspan="3">宽Xé«</th> |
| | | <th style="width: 8%;">æ°é</th> |
| | | <th style="width: 9%;">é¢ç§¯</th> |
| | | </tr> |
| | | |
| | | |
| | | </thead> |
| | | <tr> |
| | | <td style="font-size: 15px;text-align: left" colspan="5">产ååç§°:<span>{{item.DeliveryDetail.orderDetail.productName}}</span></td> |
| | | <td style="font-size: 15px;text-align: left" colspan="3">æ¹æ¬¡:<span>{{item.DeliveryDetail.order.batch}}</span></td> |
| | | <td style="font-size: 15px;text-align: left" colspan="3">订åç¼å·:<span>{{item.DeliveryDetail.orderDetail.orderId}}</span></td> |
| | | </tr> |
| | | |
| | | <tr class="day-in" v-for="(group, groupIndex) in item.groupedDeliveryDetails" :key="groupIndex"> |
| | | <!-- 第ä¸åæ°æ®ï¼ç»å
ç¬¬ä¸æ¡ï¼ --> |
| | | <td style="font-size: 15px;font-weight: bold;" colspan="3"> |
| | | {{ group[0].parsedOtherColumns?.S02 ? `(${group[0].parsedOtherColumns.S02})` : '' }} |
| | | {{ group[0].width }}x{{ group[0].height }} |
| | | </td> |
| | | <td>{{ group[0].quantity }}</td> |
| | | <td>{{ group[0].area }}</td> |
| | | <td></td> <!-- åéå --> |
| | | |
| | | <!-- 第äºåæ°æ®ï¼ç»å
ç¬¬äºæ¡ï¼è¥åå¨ï¼ --> |
| | | <td style="font-size: 15px;font-weight: bold;" colspan="3" v-if="group[1]"> |
| | | {{ group[1].parsedOtherColumns?.S02 ? `(${group[1].parsedOtherColumns.S02})` : '' }} |
| | | {{ group[1].width }}x{{ group[1].height }} |
| | | </td> |
| | | <td v-if="group[1]">{{ group[1].quantity }}</td> |
| | | <td v-if="group[1]">{{ group[1].area }}</td> |
| | | |
| | | <!-- è¥ç»å
åªæä¸æ¡æ°æ®ï¼ç¬¬äºåç空 --> |
| | | <td v-else colspan="5"></td> |
| | | </tr> |
| | | <tr class="day-in" > |
| | | <td style="font-size: 15px;" colspan="9">å°è®¡:</td> |
| | | <td>{{item.DeliveryDetail.quantity}}</td> |
| | | <td>{{item.DeliveryDetail.area}}</td> |
| | | </tr> |
| | | |
| | | </template> |
| | | <tr class="day-in"> |
| | | <td style="font-size: 15px;" colspan="9">å计:</td> |
| | | <td>{{itme1.delivery.quantity}}</td> |
| | | <td>{{itme1.delivery.area}}</td> |
| | | </tr> |
| | | |
| | | |
| | | |
| | | <!-- <el-row :gutter="24"> |
| | | <el-col :span="4"><div style="font-size: 12px" class="bottom">å¶ååï¼{{data.order.creator}}<span style="font-size: 10px"></span></div></el-col> |
| | | <el-col :span="6"><div style="font-size: 12px" class="bottom">å¶åæ¥æï¼{{data.order.createTime}}<span style="font-size: 10px"></span></div></el-col> |
| | | <el-col :span="4"><div style="font-size: 12px" class="bottom">å®¡æ ¸åï¼{{data.order.verifier}}</div></el-col> |
| | | <el-col :span="6"><div style="font-size: 12px" class="bottom">å®¡æ ¸æ¥æï¼{{data.order.updateTime}}</div></el-col> |
| | | <el-col :span="4"><div style="font-size: 12px" class="bottom">æå°äººï¼{{username}}</div></el-col> |
| | | |
| | | </el-row>--> |
| | | |
| | | <tr class="day-in" style="border: 0;" v-if="company.showDeliveryCreator"> |
| | | <td colspan="11" style="border: 0"> |
| | | <div style="display:flex;text-align: left" class="bottom"> |
| | | <div style="width: 15%">å¶ååï¼{{ itme1.delivery.creator }}</div> |
| | | <div style="width: 25%">å¶åæ¥æï¼{{ itme1.delivery.createTime }}</div> |
| | | <div style="width: 10%">åè´§åï¼</div> |
| | | <div style="width: 10%">叿ºï¼</div> |
| | | <div style="width: 15%">客æ·ç¾åï¼</div> |
| | | <div style="width: 15%">ç¾æ¶æ¥æï¼</div> |
| | | </div> |
| | | </td> |
| | | </tr> |
| | | <tr class="day-in" style="border: 0;" v-if="company.showDeliveryCreator"> |
| | | <td colspan="11" style="border: 0;"> |
| | | <div style="display:flex;" class="bottom"> |
| | | æ¶å åª |
| | | {{takeCare}} |
| | | </div> |
| | | </td> |
| | | </tr> |
| | | <tr class="day-in" style="border: 0;"> |
| | | <td colspan="11" style="border: 0;"> |
| | | <div style="display:flex;text-align: left;border: 0;margin-top: 10px " class="bottom" > |
| | | <el-input type="textarea" :autosize="{ minRows: 7, maxRows: 20 }" v-model="remark"/> |
| | | </div> |
| | | |
| | | </td> |
| | | </tr> |
| | | |
| | | <tr class="day-in" style="border: 0" v-if="!company.showDeliveryCreator"> |
| | | <td colspan="11" style="border: 0"> |
| | | <div style="width: 100%;height: 50px"></div> |
| | | </td> |
| | | </tr> |
| | | <tr class="day-in" style="border: 0" v-if="!company.showDeliveryCreator"> |
| | | <td colspan="11" style="border: 0"> |
| | | <div style="display:flex;text-align: left" class="bottom"> |
| | | <div style="width: 15%">å¶ååï¼{{ itme1.delivery.creator }}</div> |
| | | <div style="width: 15%">å¶åæ¥æï¼{{ itme1.delivery.createTime1 }}</div> |
| | | <div style="width: 15%">åè´§åï¼</div> |
| | | <div style="width: 15%">叿ºï¼</div> |
| | | <div style="width: 15%">客æ·ç¾åï¼</div> |
| | | <div style="width: 15%">ç¾æ¶æ¥æï¼</div> |
| | | </div> |
| | | </td> |
| | | </tr> |
| | | |
| | | </table> |
| | | </td> |
| | | </tr> |
| | | |
| | | </table> |
| | | |
| | | |
| | | |
| | | </div> |
| | | |
| | | |
| | | </template> |
| | | |
| | | |
| | | |
| | | |
| | | <style scoped> |
| | | @media print { |
| | | @page { |
| | | margin: 12mm 10mm 20mm 10mm !important; |
| | | } |
| | | .pages { |
| | | page-break-after: always; |
| | | } |
| | | |
| | | @page { |
| | | @top-right { |
| | | margin-top: 50px; |
| | | content: "第 " counter(page) " 页"; /* 使ç¨counteræ·»å 页ç */ |
| | | } |
| | | } |
| | | } |
| | | h1,h3{ |
| | | left:0; |
| | | right:0; |
| | | top:0; |
| | | bottom:0; |
| | | margin:auto; |
| | | } |
| | | h1{ |
| | | font-size: 1.5rem; |
| | | } |
| | | h3{ |
| | | font-size: 1.2rem; |
| | | font-weight: bolder; |
| | | } |
| | | |
| | | |
| | | table{ |
| | | border-collapse: collapse; |
| | | width: 100%; |
| | | text-align: center; |
| | | } |
| | | tr,td,th{ |
| | | border: 1px solid black; |
| | | } |
| | | |
| | | th,.no-change-row { |
| | | white-space: nowrap; |
| | | } |
| | | |
| | | .title-1{ |
| | | width: 76px; |
| | | } |
| | | .title-s,.title-s th{ |
| | | border:0 |
| | | } |
| | | |
| | | .hr-border{ |
| | | height: 2px; |
| | | width: 100%; |
| | | background-color: black; |
| | | color: black; |
| | | } |
| | | table { |
| | | border-collapse: collapse; |
| | | width: 100%; |
| | | |
| | | } |
| | | td > table { |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | |
| | | |
| | | |
| | | </style> |
| | |
| | | icon:"",//åæ åæ°ï¼æ²¡æä¸ºç©º |
| | | printShowTitle:false,//æµç¨å¡èªå®ä¹æå°æ¯å¦æ¾ç¤ºæ ç¾ |
| | | longSide:null,//订åå建æé¿è¾¹æç¤ºé¢è² nullä¸æç¤ºé¢è² |
| | | showDeliveryCreator:false,//åè´§åå建人å
æ¾ç¤ºæè
åæ¾ç¤º falseåæ¾ç¤º |
| | | showDeliveryCreator:true,//åè´§åå建人å
æ¾ç¤ºæè
åæ¾ç¤º falseåæ¾ç¤º |
| | | deliveryRemark: ['温馨æç¤ºï¼æå¸è´è´£åªéä¸å¸ãè´§å°å·¥å°æå·¥ååï¼è¯·äºäºå¤©å
å®è£
宿¯ï¼å¦æªè½åæ¶å®è£
宿¯ï¼è¯·æ¾ç½®äºé´åå¹²ç¥å¤ï¼å¹¶å好鲿鲿·çæªæ½ï¼é²æ¢ç»çåéï¼ææåçéèç»ç请å¿ç¨å¸¦é
¸æ§æç¢±æ§çæ¶²ä½æ¸
æ´èé¢ã', |
| | | '声æï¼è´§å°å·¥å°æå·¥ååï¼å¦è¥è´µå¸ä¸åæ¶çå®è£
ææªå鲿鲿·æªæ½å¯¼è´çç»çåéï¼æå¸æ¦ä¸è´è´£ã', |
| | | 'æ¶è´§æ¶ééªæ¶äº§åæ°éãè§æ ¼åææ ç ´æï¼å¦åç°é®é¢éäºæ¶è´§ä¸æ¥å
ï¼ä»¥ä¹¦é¢éç¥å¹¶éä¸ç°åºè¯æææï¼å¦ç ´æç
§ççï¼ï¼ç¸å
³è¯æèµæä¸è¶³ï¼æå¨ä¸è¿°æ¥æå
æªæåºè´¨éå¼è®®çï¼é¾æè§ä¸ºäº§ååæ ¼ï¼æå¸å°ä¸äºæ¿æ
ä»»ä½è´£ä»»ãæ¬è¯·çæï¼'],//æå°åè´§åç夿³¨ |
| | |
| | | {field: 'width', |
| | | width: 100, |
| | | title: t('order.width'), |
| | | editRender: { name: 'input' }, |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'height', |
| | | width: 100, |
| | | title: t('order.height'), |
| | | editRender: { name: 'input' }, |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'quantity', |
| | | width: 150, |
| | | title: t('order.quantity'), |
| | | editRender: { name: 'input' }, |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | sortable: true |
| | |
| | | body: { |
| | | options: [ |
| | | [ |
| | | {code: 'setAmount', name: '设置ç»ä¸ç£¨é',}, |
| | | {code: 'setAmount', name: '设置ç»ä¸ç£¨é',prefixIcon:'vxe-icon-edit'}, |
| | | {code: 'addRow', name: 'æ·»å 临æ¶å°ç', prefixIcon: 'vxe-icon-add', visible: true, disabled: false}, |
| | | {code: 'displayProcessCard', name: 'æ¾ç¤ºæµç¨å¡',}, |
| | | {code: 'hideProcessCard', name: 'éèæµç¨å¡',}, |
| | | {code: 'setShape', name: '设置å¾å½¢',}, |
| | | {code: 'Export', name: 'æ°æ®å¯¼åº', prefixIcon: 'vxe-icon-download', visible: true, disabled: false}, |
| | | {code: 'safeDXF', name: 'å¾å½¢å¦å为DXF',}, |
| | | {code: 'exportOPTIMA', name: 'å¯¼åºæ°æ®å°OPTIMA',}, |
| | | {code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false }, |
| | | {code: 'copyAll', name: t('basicData.sameAfterwards'), prefixIcon: 'vxe-icon-feedback', visible: true, disabled: false }, |
| | | { |
| | | code: 'copyChecked', |
| | | name: t('basicData.selectSame'), |
| | | prefixIcon: 'vxe-icon-copy', |
| | | visible: true, |
| | | disabled: false |
| | | }, |
| | | { |
| | | code: 'copyAll', |
| | | name: t('basicData.sameAfterwards'), |
| | | prefixIcon: 'vxe-icon-feedback', |
| | | visible: true, |
| | | disabled: false |
| | | }, |
| | | ], |
| | | [] |
| | | ] |
| | |
| | | } |
| | | }, |
| | | { |
| | | code: 'Export', // å¯¼åºæä»¶æä½çé
ç½® |
| | | successMsg: 'æä»¶å¯¼åºæåï¼', |
| | | code: 'addRow', |
| | | successMsg: '已添å ', |
| | | gridRef: xGrid, |
| | | requiresRow: false, |
| | | addNewRow: async () => { |
| | | // è·åå½åç磨éé
ç½® |
| | | let currentGrindConfig = null; |
| | | try { |
| | | const res = await request.post(`/glassOptimize/getConfiguration/磨é/${username}`); |
| | | if (res.code == "200" && res.data.data && res.data.data.length > 0) { |
| | | const rawData = res.data.data[0]; |
| | | currentGrindConfig = {}; |
| | | for (const key in rawData) { |
| | | if (typeof rawData[key] === 'string') { |
| | | currentGrindConfig[key] = rawData[key].replace(/^\"|\"$/g, ''); |
| | | } else { |
| | | currentGrindConfig[key] = rawData[key]; |
| | | } |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.warn('è·å磨éé
置失败:', error); |
| | | } |
| | | |
| | | // æ ¹æ®ç£¨éé
置设置é»è®¤å¼ |
| | | let defaultLongGrind1 = 0; |
| | | let defaultLongGrind2 = 0; |
| | | let defaultShortGrind1 = 0; |
| | | let defaultShortGrind2 = 0; |
| | | |
| | | if (currentGrindConfig) { |
| | | defaultLongGrind1 = parseFloat(currentGrindConfig.leftEdge) || 0; |
| | | defaultLongGrind2 = parseFloat(currentGrindConfig.rightEdge) || 0; |
| | | defaultShortGrind1 = parseFloat(currentGrindConfig.upEdge) || 0; |
| | | defaultShortGrind2 = parseFloat(currentGrindConfig.downEdge) || 0; |
| | | } |
| | | |
| | | // å建æ°è¡æ°æ®ï¼å° widthãheightãquantity 设置为æ°å¼ç±»å |
| | | const newRow = { |
| | | order_number: 0, |
| | | width: 0, |
| | | height: 0, |
| | | quantity: 0, |
| | | longGrind1: defaultLongGrind1, |
| | | longGrind2: defaultLongGrind2, |
| | | shortGrind1: defaultShortGrind1, |
| | | shortGrind2: defaultShortGrind2, |
| | | shape: '', |
| | | process_id: '', |
| | | productName: '', |
| | | price: 0, |
| | | remark: '', |
| | | buildingNumber: '', |
| | | perimeter: 0, |
| | | area: 0, |
| | | rackNo: 1, |
| | | layer: 1, |
| | | glass_child: '', |
| | | markIcon: '', |
| | | processId: '', |
| | | totalLayer: 0, |
| | | patchState: 0, |
| | | heatLayoutId: 0, |
| | | process: '', |
| | | orderNo: '', |
| | | customerName: '', |
| | | processingNote: '', |
| | | projectName: '' |
| | | }; |
| | | |
| | | // å°æ°è¡æ·»å å°è¡¨æ ¼æ°æ®ä¸ |
| | | const currentData = gridOptions.data || []; |
| | | const updatedData = [...currentData, newRow]; |
| | | gridOptions.data = updatedData; |
| | | xGrid.value.loadData(updatedData); |
| | | |
| | | // è·åæ°æ·»å è¡çç´¢å¼ |
| | | const newIndex = updatedData.length - 1; |
| | | |
| | | // éä¸å¹¶ç¼è¾æ°è¡ |
| | | await nextTick(); |
| | | xGrid.value.setActiveRow(newRow); |
| | | } |
| | | }, |
| | | { |
| | | code: 'safeDXF', |
| | |
| | | if (config.code === 'Export') { |
| | | config.gridRef.value.exportData(); |
| | | ElMessage.success(config.successMsg); |
| | | return; |
| | | } |
| | | if (config.code === 'addRow') { |
| | | // æ·»å 确认æç¤ºå¼¹çªï¼è¯¢é®ç¨æ·æ¯å¦è¿è¡å½åæä½ |
| | | ElMessageBox.confirm('æ¯å¦æ·»å 临æ¶å°çï¼', '确认æä½', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | config.addNewRow(); |
| | | ElMessage.success(config.successMsg); |
| | | }).catch(() => { |
| | | ElMessage.info('已忶æä½'); |
| | | }); |
| | | return; |
| | | } |
| | | if (config.code === 'copyChecked') { |
| | |
| | | rackNoValue = item.rackNo; |
| | | } |
| | | return { |
| | | width: item.width, |
| | | height: item.height, |
| | | width: parseFloat(item.width) || 0, |
| | | height: parseFloat(item.height) || 0, |
| | | processId: item.processId, |
| | | layer: item.layer, |
| | | totalLayer: item.totalLayer, |
| | | orderSort: item.order_number, |
| | | markIcon: item.markIcon, |
| | | quantity: item.quantity, |
| | | quantity: parseInt(item.quantity) || 0, |
| | | patchState: item.patchState, |
| | | upGrind: item.longGrind1, |
| | | downGrind: item.longGrind2, |
| | |
| | | } |
| | | } |
| | | ); |
| | | |
| | | // åç¬å¤çéä¸åçæ°æ®çé»è¾ |
| | | watch( |
| | | () => props.CheckboxChangeData, |
| | |
| | | |
| | | //å¤ææ©æç |
| | | titleUploadData.value.classes=t('reportingWorks.early') |
| | | titleUploadData.value.reportingWorkTime = formatCurrentTime() |
| | | titleUploadData.value.reportingWorkTime = res.data.reportingWorkTiem |
| | | |
| | | |
| | | //ç»å®ä¸æ¹è¡¨æ ¼ |
| | |
| | | { |
| | | "label": t('orderBasicData.saleMan'), |
| | | "value": "saleMan" |
| | | }, |
| | | { |
| | | "label": t('order.edgingType'), |
| | | "value": "edgingType" |
| | | } |
| | | ] |
| | | }, |
| | |
| | | { |
| | | "label": t('orderBasicData.saleMan'), |
| | | "value": "saleMan" |
| | | }, |
| | | { |
| | | "label": t('order.edgingType'), |
| | | "value": "edgingType" |
| | | } |
| | | ] |
| | | }, |
| | |
| | | import { saveAs } from "file-saver" |
| | | import companyInfo from "@/stores/sd/companyInfo"; |
| | | import PrintSheet3 from "@/components/sd/delivery/PrintSheet3.vue"; |
| | | import PrintSheet4 from "@/components/sd/delivery/PrintSheet4.vue"; |
| | | |
| | | //è¯è¨è·å |
| | | const { t } = useI18n() |
| | |
| | | break |
| | | |
| | | } |
| | | case 'sheet8': { |
| | | const selectRecords = $grid.getCheckboxRecords() |
| | | if (selectRecords.length === 0) { |
| | | if(rowClickIndex.value.deliveryState>0){ |
| | | ElMessage.warning(t('order.printingNumber')+rowClickIndex.value.printingNumber) |
| | | let delivery=([]) |
| | | delivery.push(rowClickIndex.value) |
| | | flowData.value.delivery=delivery |
| | | dialogTableVisible.value = true |
| | | sheetIndex.value=8 |
| | | }else{ |
| | | ElMessage.warning(t('order.orderNotApproved')) |
| | | } |
| | | }else{ |
| | | let a=0 |
| | | selectRecords.forEach((item) => { |
| | | if(item.deliveryState==0){ |
| | | ElMessage.warning(t('order.orderNotApproved')) |
| | | a=1 |
| | | } |
| | | }) |
| | | if(a==0){ |
| | | flowData.value.delivery=selectRecords |
| | | dialogTableVisible.value = true |
| | | sheetIndex.value=8 |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | break |
| | | |
| | | } |
| | | } |
| | | } |
| | | }, |
| | |
| | | { code: 'sheet5', name: t('delivery.print2'), prefixIcon: 'vxe-icon-file-txt', visible: false}, |
| | | { code: 'sheet6', name: t('delivery.print2')+ t('delivery.noMoney'), prefixIcon: 'vxe-icon-file-txt', visible: false}, |
| | | { code: 'sheet7', name: t('æå°ä¸è¡ä¿©å'), prefixIcon: 'vxe-icon-file-txt', visible: true}, |
| | | { code: 'sheet8', name: t('æå°ä¸è¡ä¿©å')+ t('delivery.noMoney'), prefixIcon: 'vxe-icon-file-txt', visible: true}, |
| | | ] |
| | | ] |
| | | } |
| | |
| | | <print-sheet-luoyang-details id="child" v-if="sheetIndex===5" :deliveryId="flowData.delivery" :type="3" :optionVal='optionVal'/> |
| | | <print-sheet-luoyang-details id="child" v-if="sheetIndex===6" :deliveryId="flowData.delivery" :type="4" :optionVal='optionVal'/> |
| | | <print-sheet3 id="child" v-if="sheetIndex===7" :deliveryId="flowData.delivery" /> |
| | | <print-sheet4 id="child" v-if="sheetIndex===8" :deliveryId="flowData.delivery" /> |
| | | |
| | | </el-dialog> |
| | | </div> |
| | |
| | | const shapeList = ref([ |
| | | {label:t('order.universalShape'),value:'1'}, {label:t('order.alien'),value:'2'} |
| | | ]) |
| | | const edgingTypeList = ref([]) |
| | | const newOrderId = ref([]) |
| | | |
| | | const orderTypeState = ref(0) |
| | |
| | | orderClassify:[], |
| | | packType:[], |
| | | customer:[], |
| | | saleMan:[] |
| | | saleMan:[], |
| | | edgingType:[] |
| | | }) |
| | | let filterData = ref({}) |
| | | let rowIndex = ref(null) |
| | |
| | | filters:[{ data: '' }], |
| | | slots: { filter: 'num1_filter',edit:'shape_edit',default:'default_shape' }, sortable: true,filterMethod:filterChanged}, |
| | | {field: 'bendRadius',width:160, title: t('order.bendRadius'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}, |
| | | {field: 'edgingType',width:160, title: t('order.edgingType'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}, |
| | | {field: 'edgingType',width:160, title: t('order.edgingType'),editRender: { name: 'input'},filters:[{ data: '' }], |
| | | slots: { filter: 'num1_filter',edit:'edgingType_edit' }, sortable: true,filterMethod:filterChanged}, |
| | | {field: 'processingNote',width:200, title: t('order.processingNote'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}, |
| | | {field: 'fileName',width:200, title: t('order.drawingNo'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}, |
| | | {field: 'remarks',width:140, title: t('basicData.remarks'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}, |
| | |
| | | |
| | | }) |
| | | } |
| | | titleSelectJson.value.edgingType.forEach(item=>{ |
| | | let type= {label:item.basicName,value:item.basicName} |
| | | edgingTypeList.value.push(type) |
| | | }) |
| | | //è¿å
¥é¡µé¢ä¸ææ¡è®¾ç½®é»è®¤å¼ |
| | | titleUploadData.value.orderType = titleSelectJson.value.orderType[0].basicName |
| | | titleUploadData.value.orderClassify = titleSelectJson.value.orderClassify[0].basicName |
| | |
| | | <template #shape_edit="{ row }"> |
| | | <vxe-select v-model="row.shape" transfer :options="shapeList" placeholder=" "/> |
| | | </template> |
| | | <template #edgingType_edit="{ row }"> |
| | | <vxe-select v-model="row.edgingType" transfer :options="edgingTypeList" placeholder=" "/> |
| | | </template> |
| | | |
| | | |
| | | </vxe-grid> |
| | |
| | | item.separation = JSON.parse(item.separation) |
| | | }) |
| | | productTotal.value = res.data.title |
| | | productGlassTypeStore.GlassType =[res.data.title.typeId.substring(0,2),res.data.title.typeId] |
| | | if(res.data.title.typeId.length===2){ |
| | | productGlassTypeStore.GlassType =[res.data.title.typeId.substring(0,2)] |
| | | }else{ |
| | | productGlassTypeStore.GlassType =[res.data.title.typeId.substring(0,2),res.data.title.typeId] |
| | | } |
| | | |
| | | //BasicData.value = res.data |
| | | }else{ |
| | | ElMessage.warning(res.msg) |
| | |
| | | ElMessage.warning(t('product.msg.glassType')) |
| | | return |
| | | } |
| | | productTotal.value.typeId = productGlassTypeStore.GlassType[1] |
| | | if(productGlassTypeStore.GlassType[1]!==undefined){ |
| | | productTotal.value.typeId = productGlassTypeStore.GlassType[1] |
| | | }else{ |
| | | productTotal.value.typeId = productGlassTypeStore.GlassType[0] |
| | | } |
| | | |
| | | |
| | | let productName = "" |
| | | productDetailList.value.forEach(item =>{ |
| | |
| | | Map<String, Object> getProjectState(String projectNo); |
| | | |
| | | void updateProjectTemperingId(String projectNumber); |
| | | |
| | | List<Map<String, Object>> optimizeTemp(String projectNo); |
| | | } |
| | |
| | | |
| | | List<Map<String, String>> selectProcessCompletedMp(Date selectTime1, Date selectTime2, String orderId, String inputProject, String selectProcesses, String laminating, Report report); |
| | | |
| | | Map<String,Float> ProcessCompletedFootSum(Date selectTime1, Date selectTime2, String orderId, String inputProject, String selectProcesses, Report report); |
| | | |
| | | |
| | | // Map<String, Integer> getWorkInProgressTotal( |
| | |
| | | } else { |
| | | dataList = glassOptimizeMapper.directOptimization(projectNo); |
| | | } |
| | | List<Map<String, Object>> tempDataList = null; |
| | | if (Integer.parseInt(stringObjectMap.get("optimize_state").toString())==1) { |
| | | tempDataList = glassOptimizeMapper.optimizeTemp(projectNo); |
| | | } |
| | | |
| | | // è·å磨éé
ç½®æ°æ® |
| | | List<Map<String, Object>> grindingTrimmingList = glassOptimizeMapper.getGrindingOptimize(username); |
| | |
| | | } |
| | | } |
| | | } |
| | | if (tempDataList != null && !tempDataList.isEmpty()) { |
| | | dataList.addAll(tempDataList); |
| | | } |
| | | map.put("optimizeState", Integer.parseInt(stringObjectMap.get("optimize_state").toString())); |
| | | map.put("data", dataList); |
| | | map.put("project", glassOptimizeMapper.selectProjectCount(projectNo)); |
| | |
| | | //å·¥èºæµç¨ |
| | | map.put("technologicalProcess", technologicalProcess); |
| | | |
| | | //è·åæå¡å¨æ¶é´ |
| | | map.put("reportingWorkTiem", LocalDateTime.now()); |
| | | //设å¤ä¸ææ¡ |
| | | map.put("device", reportingWorkMapper.SelectWorkBasicDeviceMp(process)); |
| | | //çç»ä¸ææ¡ |
| | |
| | | public Map<String,Object> defaultDateProduct(Integer pageNum, Integer pageSize, List<String> glassType,Map<String,Object> config) { |
| | | Integer offset = (pageNum-1)*pageSize; |
| | | String glassTypeId = null; |
| | | if(glassType.size()>1){ |
| | | glassTypeId = glassType.get(1); |
| | | if(glassType.size()==2){ |
| | | if(!Objects.equals(glassType.get(0), "")&&!Objects.equals(glassType.get(1), "")){ |
| | | glassTypeId = glassType.get(1); |
| | | } |
| | | }else if(glassType.size()==1){ |
| | | if(!Objects.equals(glassType.get(0), "")&& !Objects.equals(glassType.get(0), "undefined")){ |
| | | glassTypeId = glassType.get(0); |
| | | } |
| | | |
| | | } |
| | | JSONObject orderJson = new JSONObject(config); |
| | | Product product = JSONObject.parseObject(JSONObject.toJSONString(orderJson.get("filter")), Product.class); |
| | |
| | | c.project_no, |
| | | d.child_width as 'width', |
| | | d.child_height as 'height', |
| | | (d.child_width + d.child_height) * 2 as 'perimeter', |
| | | (d.child_width + d.child_height) * 2/ 1000 as 'perimeter', |
| | | c.quantity, |
| | | od.shape, |
| | | concat( c.process_id, '-', c.technology_number ) AS 'process_id', |
| | |
| | | c.project_no, |
| | | d.child_width as 'width', |
| | | d.child_height as 'height', |
| | | (d.child_width + d.child_height) * 2 as 'perimeter', |
| | | (d.child_width + d.child_height) * 2/ 1000 as 'perimeter', |
| | | c.patch_num as quantity, |
| | | od.shape, |
| | | concat( c.process_id, '-', c.technology_number ) AS 'process_id', |
| | |
| | | # h.layout_id as heatLayoutId, |
| | | h.width AS width, |
| | | h.height AS height, |
| | | (h.width + h.height) * 2 as 'perimeter', |
| | | (h.width + h.height) * 2 / 1000 as 'perimeter', |
| | | od.shape, |
| | | count( 1 ) AS quantity, |
| | | concat( h.process_id, '-', h.layer ) AS process_id, |
| | |
| | | WHERE |
| | | project_no = #{projectNo} |
| | | </select> |
| | | <select id="optimizeTemp" resultType="java.util.Map" parameterType="java.lang.String"> |
| | | SELECT |
| | | project_no, |
| | | layer, |
| | | o_width as width, |
| | | o_height as height, |
| | | rack_no as rackNo, |
| | | COUNT(*) as quantity, |
| | | ROUND((o_width + o_height) * 2 / 1000, 2) as perimeter, |
| | | ROUND(o_width * o_height * COUNT(*) / 1000000, 4) as area |
| | | FROM |
| | | pp.`optimize_detail` |
| | | WHERE |
| | | project_no = #{projectNo} |
| | | AND process_id = '' |
| | | GROUP BY |
| | | project_no, |
| | | layer, |
| | | o_width, |
| | | o_height, |
| | | rack_no |
| | | ORDER BY |
| | | o_width, |
| | | o_height |
| | | </select> |
| | | |
| | | |
| | | </mapper> |
| | |
| | | SUM(t.breakageQuantity) as breakageQuantity, |
| | | SUM(t.breakageArea) as breakageArea, |
| | | t.responsibleTeam, |
| | | CONCAT(ROUND(ROUND(SUM(t.area)/(SUM(t.area) + SUM(t.breakageArea)),2)*100), '%') as finished, |
| | | CONCAT(ROUND(TRUNCATE(SUM(t.area)/(SUM(t.area) + SUM(t.breakageArea)),2)*100), '%') as finished, |
| | | t.product_name |
| | | FROM |
| | | ( |
| | |
| | | GROUP BY hz.project,hz.batch,glass_child |
| | | </select> |
| | | |
| | | <select id="yieldProcessMp"> |
| | | SELECT |
| | | t.this_process as process, |
| | | SUM(t.completed_quantity) as completedQuantity, |
| | | SUM(t.area) as completedArea, |
| | | SUM(t.breakageQuantity) as breakageQuantity, |
| | | SUM(t.breakageArea) as breakageArea, |
| | | CONCAT(ROUND(TRUNCATE(SUM(t.area)/(SUM(t.area) + SUM(t.breakageArea)),2)*100), '%') as finished |
| | | FROM |
| | | ( |
| | | SELECT |
| | | rw.reporting_work_time, |
| | | rw.this_process, |
| | | o.project, |
| | | o.batch, |
| | | rw.process_id, |
| | | rwd.completed_quantity AS completed_quantity, |
| | | ROUND(MAX(ogd.child_width) * MAX(ogd.child_height) * rwd.completed_quantity / 1000000, 2) AS area, |
| | | IFNULL(dd.breakage_quantity,0) as breakageQuantity, |
| | | IFNULL(ROUND(MAX(ogd.child_width) * MAX(ogd.child_height) * dd.breakage_quantity / 1000000, 2),0) AS breakageArea, |
| | | IFNULL(dd.responsible_team,'') as responsibleTeam, |
| | | od.product_name |
| | | |
| | | FROM |
| | | reporting_work AS rw |
| | | LEFT JOIN reporting_work_detail AS rwd |
| | | ON rwd.reporting_work_id = rw.reporting_work_id |
| | | LEFT JOIN damage_details as dd on dd.reporting_work_id = rw.reporting_work_id |
| | | LEFT JOIN flow_card AS fc |
| | | ON fc.order_id = rw.order_id |
| | | AND fc.process_id = rw.process_id |
| | | AND fc.order_number = rwd.order_number |
| | | AND fc.technology_number = rwd.technology_number |
| | | LEFT JOIN sd.order_glass_detail AS ogd |
| | | ON ogd.order_id = fc.order_id |
| | | AND ogd.order_number = fc.order_number |
| | | AND ogd.technology_number = fc.technology_number |
| | | LEFT JOIN sd.order_detail AS od |
| | | ON od.order_id = ogd.order_id |
| | | AND od.order_number = ogd.order_number |
| | | LEFT JOIN sd.`order` AS o |
| | | ON o.order_id = od.order_id |
| | | WHERE |
| | | o.create_order > 0 |
| | | AND rw.reviewed_state >= 0 |
| | | AND rwd.completed_quantity + IFNULL(dd.breakage_quantity,0)> 0 |
| | | AND rw.reporting_work_time >= #{selectTime1} |
| | | AND rw.reporting_work_time <= #{selectTime2} |
| | | GROUP BY |
| | | rw.reporting_work_id, |
| | | rw.process_id, |
| | | rw.this_process, |
| | | rw.teams_groups_name, |
| | | rwd.order_number, |
| | | rwd.technology_number |
| | | ) t |
| | | GROUP BY |
| | | t.this_process |
| | | </select> |
| | | </mapper> |
| | |
| | | when 'stepA' then 3 |
| | | when 'stepD' then 4 |
| | | when 'stepB' then 4 |
| | | end as sort |
| | | else 1 |
| | | end as sort, |
| | | b.sort as 'sort2' |
| | | |
| | | |
| | | from order_process_detail |
| | | left join (select DISTINCT basic_name,nickname from basic_data where basic_category = 'process') as b |
| | | left join (select DISTINCT basic_name,nickname,sort from basic_data where basic_category = 'process') as b |
| | | on b.basic_name = process |
| | | where order_id = #{orderId} |
| | | group by process) as a |
| | |
| | | group by opd.id) as a |
| | | GROUP BY process) as sort1 |
| | | on sort1.process = a.process |
| | | order by sort,sort1.count,id |
| | | order by sort,sort2,sort1.count,id |
| | | |
| | | </select> |
| | | |
| | |
| | | left join basic_glass_type bgt on bgt.type_id = a.type_id |
| | | <where> |
| | | <if test="glassTypeId != null and glassTypeId != ''"> |
| | | and a.type_id like concat('%',#{glassTypeId},'%') |
| | | and a.type_id = #{glassTypeId} |
| | | </if> |
| | | <if test="product.id != null and product.id != ''"> |
| | | and a.id like concat('%',#{product.id},'%') |