h5_standard/.env.development
@@ -13,9 +13,10 @@ # VUE_APP_API = 'http://192.168.0.12:10012/' # 任康æ¬å° # VUE_APP_API = 'http://192.168.0.15:10021/' VUE_APP_API = 'http://192.168.0.15:10021/' # VUE_APP_API = 'http://192.168.0.127:10021/' VUE_APP_API = 'https://dmtest.ahapp.net/doumeeplant_api/' # VUE_APP_API = 'https://dmtest.ahapp.net/doumeeplant_api/' # VUE_APP_API = 'http://192.168.0.13:10012/' h5_standard/.env.production
@@ -18,7 +18,7 @@ # VUE_APP_API = 'https://hsky.doumee.com/doumeeplant_api/' # æµè¯ # VUE_APP_API = 'https://dmtest.ahapp.net/doumeeplant_api/' VUE_APP_API = 'https://dmtest.ahapp.net/doumeeplant_api/' # æ¼ç¤º VUE_APP_API = 'https://www.mes.red/doumeeplant/' # VUE_APP_API = 'https://www.mes.red/doumeeplant/' h5_standard/src/apis/ExWarehouse.ts
@@ -186,4 +186,13 @@ method: 'post', data }) } // æ ¹æ®ä¾éè®¡åæ¥è¯¢å¯ç¨åºå export function getStockByPlansForStandard(data: any): Promise<any> { return httpRequest({ url: '/ext/workorderRecordExt/getStockByPlansForStandard', method: 'post', data }) } h5_standard/src/apis/PlanningAPI.ts
@@ -104,3 +104,47 @@ method: 'get' }) } // æ ¹æ®å¯¹è±¡ä¿¡æ¯æ¥è¯¢ export function queryOne (data: any): Promise<any> { return httpRequest({ url: '/ext/salaryParam/queryOne', method: 'post', data }) } // ä¸é®æ¥å·¥ export function autoWorkReport (data: any): Promise<any> { return httpRequest({ url: '/ext/plansExt/autoWorkReport', method: 'post', data }) } // æ ¹æ®idæ¥è¯¢ export function getIdPlansExt(id: any): Promise<any> { return httpRequest({ url: `/ext/plansExt/${id}`, method: 'get' }) } // å表æ¥è¯¢ export function categoryExtList (data: any): Promise<any> { return httpRequest({ url: '/ext/categoryExt/list', method: 'post', data }) } // æ¥è¯¢å ¨é¨ export function allUser (data: any): Promise<any> { return httpRequest({ url: '/ext/companyUserExt/allUser', method: 'post', data }) } h5_standard/src/assets/icon/ic_ar@2x.png
h5_standard/src/assets/icon/ic_close@2x.png
h5_standard/src/components/common/Access.vue
@@ -53,7 +53,7 @@ import { choiceStockPageByTransfer } from '@/apis/ExWarehouse' import { model } from '@/interface' import { Attribute } from '@/enum' import { judgmentPlatform } from "@/utils/utils" import { judgmentPlatform } from "@/utils" import vSearch from '@/components/common/Search.vue' import vLableSelection from '@/components/common/LabelSelection.vue' h5_standard/src/components/newCom/Material.vue
@@ -1,13 +1,17 @@ <template> <van-popup v-model:show="props.show" :close-on-click-overlay="false" round position="bottom" :style="{ height: '80%' }"> <div class="title"> <div class="close" @click="close"><van-icon name="arrow-down" size="30" color="#ffffff" /></div> </div> <div class="content"> <div class="content_search content_top"> <div class="title"> <img class="close" src="@/assets/icon/ic_close@2x.png" alt="" style="opacity: 0;" /> <span>éæ©ç产人å</span> <img class="close" src="@/assets/icon/ic_close@2x.png" alt="" @click="close" /> </div> <v-Search @searchInput="searchInput" @submit="submit" :isShow="false" placeholder="æç´¢ç©æåç§°"></v-Search> </div> <div class="content_total">å ±{{form.total}}æ¡æ°æ®</div> @@ -163,21 +167,6 @@ </script> <style lang="scss" scoped> .title { position: fixed; right: 50px; bottom: 100px; z-index: 9; .close { width: 80px; height: 80px; border-radius: 50%; background: #999999; display: flex; align-items: center; justify-content: center; } } .content { .content_code { position: fixed; @@ -197,6 +186,24 @@ position: sticky; top: 88px; z-index: 9; .title { width: 100%; padding: 0 0 30px 0; box-sizing: border-box; display: flex; align-items: center; justify-content: space-between; span { font-size: 30px; font-family: PingFangSC-Medium, PingFang SC; font-weight: 500; color: #222222; } .close { width: 28px; height: 28px; } } .content_search_x { height: 24px; } @@ -209,7 +216,7 @@ color: #666666; position: sticky; z-index: 99; top: 127px; top: 195px; } .content_list { width: 100%; h5_standard/src/components/newCom/MaterialY.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,417 @@ <template> <van-popup v-model:show="props.show" :close-on-click-overlay="false" round position="bottom" :style="{ height: '80%' }"> <div class="title"> <div class="close" @click="close"><van-icon name="arrow-down" size="30" color="#ffffff" /></div> </div> <div class="content"> <div class="content_search content_top"> <v-Search @searchInput="searchInput" @submit="submit" :isShow="false" placeholder="æç´¢ç©æåç§°"></v-Search> </div> <div class="content_total">å ±{{form.total}}æ¡æ°æ®</div> <van-pull-refresh v-model="refreshing" @refresh="onRefresh"> <van-list v-model:loading="loading" :finished="finished" finished-text="æ²¡ææ´å¤äº~" @load="onLoad" > <div class="content_list"> <div class="page_content" v-for="(item1, idx) in list" :key="idx" @click="jump(item1)"> <div class="page_content_title"> <div class="page_content_title_top"> <span v-if="item1.batch">{{ item1.materialName + ' | ' + item1.materialCode }}</span> <span v-else>{{ item1.materialName + ' | ' + item1.materialCode }}</span> <!-- <span>{{item1.num}}{{item1.unitName}}</span> --> </div> <div class="page_content_title_bottom"> <span>{{ item1.locationName }} / </span> <span>{{ item1.num }}{{ item1.unitName }}</span> </div> <div class="page_content_title_bottom"> <span class="green" v-if="item1.qualityType == 0">åæ ¼ <span class="black">/</span> </span> <span class="warning" v-else-if="item1.qualityType == 1">ä¸è¯ <span class="black">/</span> </span> <span class="error" v-else-if="item1.qualityType == 2">æ¥åº <span class="black">/</span> </span> <span v-else>- / </span> <span>{{item1.procedureName ? item1.procedureName : '-'}} / </span> <span>{{item1.batch ? item1.batch : '-'}}</span> </div> </div> </div> <!-- <div class="content_list_item" v-for="(item, i) in props.list" :key="i" @click="jump(item)"> <div class="content_list_item_name">{{item.materialName}}</div> </div> --> </div> <!-- <div class="content_list"> <div class="content_list_item" v-for="(item, i) in list" :key="i" @click="jump(item)"> <div class="content_list_item_name">{{item.mmodelUnionName}}</div> </div> </div> --> </van-list> </van-pull-refresh> </div> </van-popup> </template> <script setup lang="ts"> import { defineProps, defineEmits, onMounted, ref, reactive, watch } from 'vue' import { getStockByPlansForStandard } from '@/apis/ExWarehouse' import { model } from '@/interface' import { judgmentPlatform } from "@/utils/utils" import vSearch from '@/components/common/Search.vue' // æç´¢æ°æ®æ¥å£ interface form extends model { total: number, name: string } const form = reactive<form>({ capacity: 50, page: 0, total: 0, name: '', }) // åè¡¨æ°æ® const list: any = ref([]); const loading = ref(false); const finished = ref(false); const refreshing = ref(false); let isOne = ref(true) // æç´¢æ¡ const searchInput = (data: any) => { form.page = 0 finished.value = false list.value = [] form.name = data onLoad() } // æç´¢æäº¤ const submit = (): void => { form.page = 0 finished.value = false list.value = [] onLoad() } // è¿åä¸ä¸é¡µå¸¦åæ° const jump = (item: any) => { emit('value', item) } // è·åç©æåè¡¨æ°æ® const onLoad = async () => { if (!finished.value) { loading.value = true; form.page = form.page + 1 getStockByPlansForStandard({ capacity: form.capacity, page: form.page, model: { ids: props.ids, materialName: form.name, deviceId: props.deviceId, plansId: props.plansId } }).then(res => { isOne.value = false if (refreshing.value) { list.value = [] refreshing.value = false; } loading.value = false; if (res.code === 200 && res.data.records && res.data.records.length !== 0) { form.total = res.data.total list.value.push(...res.data.records) } else { finished.value = true; } }).catch((err: any) => { loading.value = false; finished.value = true; if (refreshing.value) { list.value = [] refreshing.value = false; } }) } } // 䏿巿°ä¼åé¡µé¢ const onRefresh = () => { finished.value = false; form.page = 0 loading.value = true; onLoad() } let status = ref<boolean>(false) const props = defineProps({ show: { type: Boolean, required: true }, plansId: { type: String, required: true }, deviceId: { type: String, required: true }, ids: { type: String, required: false } }) const emit = defineEmits(['close', 'value']) // å ³éåè° const close = () => { emit('close') } onMounted(() => { status.value = judgmentPlatform() }) watch(() => props.show, (news) => { if (news && !isOne.value) { list.value = [] finished.value = false; form.page = 0 form.name = '' loading.value = true; onLoad() } }) </script> <style lang="scss" scoped> .title { position: fixed; right: 50px; bottom: 100px; z-index: 9; .close { width: 80px; height: 80px; border-radius: 50%; background: #999999; display: flex; align-items: center; justify-content: center; } } .content { .content_code { position: fixed; right: 30px; bottom: 100px; img { width: 138px; height: 138px; } } .content_top { top: 0 !important; } .content_search { padding: 30px; background: white; position: sticky; top: 88px; z-index: 9; .content_search_x { height: 24px; } } .content_total { padding: 24px 30px; background: #F7F7F7; font-size: 24px; font-weight: 400; color: #666666; position: sticky; z-index: 99; top: 127px; } .content_list { width: 100%; height: 100%; display: flex; flex-direction: column; .page_content { margin-top: 36px; padding: 0 30px; box-sizing: border-box; .page_content_title { display: flex; flex-direction: column; margin-bottom: 10px; .page_content_title_top { display: flex; align-items: center; justify-content: space-between; span { &:nth-child(1) { font-size: 30px; font-weight: 500; color: #222222; } &:nth-child(2) { flex-shrink: 0; font-size: 24px; font-weight: 400; color: #333333; span { font-size: 24px; color: $nav-color; } } } } .page_content_title_loa { font-size: 26px; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: #333333; margin-top: 10px; } .page_content_title_bottom { margin-top: 10px; .green { color: $nav-stateColor7 !important; .black { color: black !important; } } .warning { color: $nav-stateColor5 !important; .black { color: black !important; } } .error { color: $nav-stateColor4 !important; .black { color: black !important; } } span { font-size: 24px; font-weight: 400; color: #666666; } } } .lineBorder { border: none !important; padding-bottom: 0 !important; margin-bottom: 24px; } .page_content_list { width: 100%; display: flex; align-items: center; flex-wrap: wrap; &:first-child { margin: 0; } &:last-child { border: none; } .page_content_list_nums { width: 30%; display: flex; .page_content_list_num_label { font-size: 26px; font-weight: 400; color: #666666; } .page_content_list_num_nr { font-size: 26px; font-weight: 400; color: #222222; } } .page_content_list_num { width: 70%; display: flex; .page_content_list_num_label { font-size: 26px; font-weight: 400; color: #666666; } .page_content_list_num_nr { font-size: 26px; font-weight: 400; color: #222222; } } .page_content_list_items { width: 30%; display: flex; margin-top: 24px; .page_content_list_item_label { font-size: 26px; font-weight: 400; color: #666666; flex-shrink: 0; } .page_content_list_item_nr { font-size: 26px; font-weight: 400; color: #222222; } } .page_content_list_item { width: 70%; display: flex; .page_content_list_item_label { font-size: 26px; font-weight: 400; color: #666666; flex-shrink: 0; } .page_content_list_item_nr { font-size: 26px; font-weight: 400; color: #222222; } } } } .content_list_item { padding: 30px; display: flex; border-bottom: 1px solid #ececec; .serious { color: $nav-stateColor4 !important; } .success { color: $nav-stateColor2 !important; } .warning { color: $nav-stateColor5 !important; } .content_list_item_status { font-size: 28px; margin-right: 10px; } .content_list_item_name { font-size: 28px; } } } } </style> h5_standard/src/components/newCom/location.vue
@@ -1,6 +1,8 @@ <template> <van-popup v-model:show="props.show" :close-on-click-overlay="false" round position="bottom" :style="{ height: '60%' }"> <div class="title"> h5_standard/src/components/newCom/productionProcess.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,258 @@ <template> <van-popup v-model:show="props.show" :close-on-click-overlay="false" round position="bottom" :style="{ height: '60%' }"> <div class="title"> <div class="close" @click="close"><van-icon name="arrow-down" size="30" color="#ffffff" /></div> </div> <div class="content"> <div class="content_list"> <div class="content_list_item" v-for="(item, i) in props.list" :key="i" @click="jump(item)"> <div class="content_list_item_name">{{item.name}}</div> </div> </div> </div> </van-popup> </template> <script setup lang="ts"> import { defineProps, defineEmits, ref } from 'vue' // è¿åä¸ä¸é¡µå¸¦åæ° const jump = (item: any) => { emit('value', item) } const props: any = defineProps({ show: { type: Boolean, required: true }, list: { type: Array, required: true } }) const emit = defineEmits(['close', 'value']) // å ³éåè° const close = () => { emit('close') } </script> <style lang="scss" scoped> .title { position: fixed; right: 50px; bottom: 100px; z-index: 9; .close { width: 80px; height: 80px; border-radius: 50%; background: #999999; display: flex; align-items: center; justify-content: center; } } .content { .content_code { position: fixed; right: 30px; bottom: 100px; img { width: 138px; height: 138px; } } .content_top { top: 0 !important; } .content_search { padding: 30px; background: white; position: sticky; top: 88px; z-index: 9; .content_search_x { height: 24px; } } .content_total { padding: 24px 30px; background: #F7F7F7; font-size: 24px; font-weight: 400; color: #666666; position: sticky; z-index: 99; top: 127px; } .content_list { width: 100%; height: 100%; display: flex; flex-direction: column; .page_content { margin-top: 36px; padding: 0 30px; box-sizing: border-box; .page_content_title { display: flex; flex-direction: column; margin-bottom: 10px; .page_content_title_top { display: flex; align-items: center; justify-content: space-between; span { &:nth-child(1) { font-size: 30px; font-weight: 500; color: #222222; } &:nth-child(2) { flex-shrink: 0; font-size: 24px; font-weight: 400; color: #333333; span { font-size: 24px; color: $nav-color; } } } } .page_content_title_bottom { .green { color: $nav-stateColor7 !important; .black { color: black !important; } } .warning { color: $nav-stateColor5 !important; .black { color: black !important; } } .error { color: $nav-stateColor4 !important; .black { color: black !important; } } span { font-size: 24px; font-weight: 400; color: #666666; } } } .lineBorder { border: none !important; padding-bottom: 0 !important; margin-bottom: 24px; } .page_content_list { width: 100%; display: flex; align-items: center; flex-wrap: wrap; &:first-child { margin: 0; } &:last-child { border: none; } .page_content_list_nums { width: 30%; display: flex; .page_content_list_num_label { font-size: 26px; font-weight: 400; color: #666666; } .page_content_list_num_nr { font-size: 26px; font-weight: 400; color: #222222; } } .page_content_list_num { width: 70%; display: flex; .page_content_list_num_label { font-size: 26px; font-weight: 400; color: #666666; } .page_content_list_num_nr { font-size: 26px; font-weight: 400; color: #222222; } } .page_content_list_items { width: 30%; display: flex; margin-top: 24px; .page_content_list_item_label { font-size: 26px; font-weight: 400; color: #666666; flex-shrink: 0; } .page_content_list_item_nr { font-size: 26px; font-weight: 400; color: #222222; } } .page_content_list_item { width: 70%; display: flex; .page_content_list_item_label { font-size: 26px; font-weight: 400; color: #666666; flex-shrink: 0; } .page_content_list_item_nr { font-size: 26px; font-weight: 400; color: #222222; } } } } .content_list_item { padding: 30px; display: flex; border-bottom: 1px solid #ececec; .serious { color: $nav-stateColor4 !important; } .success { color: $nav-stateColor2 !important; } .warning { color: $nav-stateColor5 !important; } .content_list_item_status { font-size: 28px; margin-right: 10px; } .content_list_item_name { font-size: 28px; } } } } </style> h5_standard/src/components/newCom/quality.vue
@@ -1,6 +1,7 @@ <template> <van-popup v-model:show="props.show" :close-on-click-overlay="false" position="bottom" :style="{ height: '60%' }"> <div class="title"> h5_standard/src/components/newCom/user.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,330 @@ <template> <van-popup v-model:show="props.show" :close-on-click-overlay="false" position="bottom" round :style="{ height: '80%' }"> <div class="content"> <div class="content_search content_top"> <div class="title"> <img class="close" src="@/assets/icon/ic_close@2x.png" alt="" style="opacity: 0;" /> <span>éæ©ç产人å</span> <img class="close" src="@/assets/icon/ic_close@2x.png" alt="" @click="close" /> </div> <v-Search @searchInput="searchInput" @submit="submit" :isShow="false" placeholder="æç´¢å§å"></v-Search> </div> <div class="content_total">å ±{{form.total}}æ¡æ°æ®</div> <div class="content_list"> <div class="content_list_item" v-for="(item, i) in list" :key="i" @click="jump(item)"> <div class="content_list_item_name">{{item.name}} | {{item.dmodel.name}}</div> </div> </div> </div> </van-popup> </template> <script setup lang="ts"> import { defineProps, defineEmits, onMounted, ref, reactive } from 'vue' import { materialDistributeExt } from '@/apis/ExWarehouse' import { getFindAll, allUser } from '@/apis/PlanningAPI' import { model } from '@/interface' import { judgmentPlatform } from "@/utils/utils" import vSearch from '@/components/common/Search.vue' // æç´¢æ°æ®æ¥å£ interface form extends model { total: number, name: string } const form = reactive<form>({ capacity: 50, page: 0, total: 0, name: '', }) // åè¡¨æ°æ® const list: any = ref([]); const loading = ref(false); const finished = ref(false); const refreshing = ref(false) // æç´¢æ¡ const searchInput = (data: any) => { form.page = 0 finished.value = false list.value = [] form.name = data onLoad() } // æç´¢æäº¤ const submit = (): void => { form.page = 0 finished.value = false list.value = [] onLoad() } // è¿åä¸ä¸é¡µå¸¦åæ° const jump = (item: any) => { emit('value', item) } // è·åç©æåè¡¨æ°æ® const onLoad = async () => { loading.value = true; allUser({ name: form.name }) .then(res => { loading.value = false; if (res.code === 200 && res.data && res.data.length !== 0) { form.total = res.data.length list.value = res.data } else { finished.value = true; } }).catch((err: any) => { loading.value = false; finished.value = true; if (refreshing.value) { list.value = [] refreshing.value = false; } }) } const props = defineProps({ show: { type: Boolean, required: true } }) const emit = defineEmits(['close', 'value']) // å ³éåè° const close = () => { emit('close') } onMounted(() => { onLoad() }) </script> <style lang="scss" scoped> .content { .content_code { position: fixed; right: 30px; bottom: 100px; img { width: 138px; height: 138px; } } .content_top { top: 0 !important; } .content_search { padding: 30px; background: white; position: sticky; top: 88px; z-index: 9; .title { width: 100%; padding: 0 0 30px 0; box-sizing: border-box; display: flex; align-items: center; justify-content: space-between; span { font-size: 30px; font-family: PingFangSC-Medium, PingFang SC; font-weight: 500; color: #222222; } .close { width: 28px; height: 28px; } } .content_search_x { height: 24px; } } .content_total { padding: 24px 30px; background: #F7F7F7; font-size: 24px; font-weight: 400; color: #666666; position: sticky; z-index: 99; top: 195px; } .content_list { width: 100%; height: 100%; display: flex; flex-direction: column; .page_content { margin-top: 36px; padding: 0 30px; box-sizing: border-box; .page_content_title { display: flex; flex-direction: column; margin-bottom: 10px; .page_content_title_top { display: flex; align-items: center; justify-content: space-between; span { &:nth-child(1) { font-size: 30px; font-weight: 500; color: #222222; } &:nth-child(2) { flex-shrink: 0; font-size: 24px; font-weight: 400; color: #333333; span { font-size: 24px; color: $nav-color; } } } } .page_content_title_bottom { .green { color: $nav-stateColor7 !important; .black { color: black !important; } } .warning { color: $nav-stateColor5 !important; .black { color: black !important; } } .error { color: $nav-stateColor4 !important; .black { color: black !important; } } span { font-size: 24px; font-weight: 400; color: #666666; } } } .lineBorder { border: none !important; padding-bottom: 0 !important; margin-bottom: 24px; } .page_content_list { width: 100%; display: flex; align-items: center; flex-wrap: wrap; &:first-child { margin: 0; } &:last-child { border: none; } .page_content_list_nums { width: 30%; display: flex; .page_content_list_num_label { font-size: 26px; font-weight: 400; color: #666666; } .page_content_list_num_nr { font-size: 26px; font-weight: 400; color: #222222; } } .page_content_list_num { width: 70%; display: flex; .page_content_list_num_label { font-size: 26px; font-weight: 400; color: #666666; } .page_content_list_num_nr { font-size: 26px; font-weight: 400; color: #222222; } } .page_content_list_items { width: 30%; display: flex; margin-top: 24px; .page_content_list_item_label { font-size: 26px; font-weight: 400; color: #666666; flex-shrink: 0; } .page_content_list_item_nr { font-size: 26px; font-weight: 400; color: #222222; } } .page_content_list_item { width: 70%; display: flex; .page_content_list_item_label { font-size: 26px; font-weight: 400; color: #666666; flex-shrink: 0; } .page_content_list_item_nr { font-size: 26px; font-weight: 400; color: #222222; } } } } .content_list_item { padding: 30px; display: flex; border-bottom: 1px solid #ececec; .serious { color: $nav-stateColor4 !important; } .success { color: $nav-stateColor2 !important; } .warning { color: $nav-stateColor5 !important; } .content_list_item_status { font-size: 28px; margin-right: 10px; } .content_list_item_name { font-size: 28px; } } } } </style> h5_standard/src/main.ts
@@ -1,4 +1,5 @@ import { createApp } from 'vue' import mitt from 'mitt' // import VConsole from 'vconsole' import App from './App.vue' import router from './router' @@ -16,6 +17,8 @@ const app = createApp(App) app.config.globalProperties.$Bus = mitt() app.config.globalProperties.$onWait = new Promise((resolve) => { app.config.globalProperties.$reslove = resolve }) h5_standard/src/router/module/workOrder/index.ts
@@ -192,9 +192,18 @@ name: 'reportingForWork', meta: { title: 'ä¸é®æ¥å·¥', keepAlive: false keepAlive: true }, component: () => import('@/views/workOrder/reportingForWork.vue') }, { path: '/workOrder/processPlans', name: 'processPlans', meta: { title: '鿩工åºè®¡å', keepAlive: false }, component: () => import('@/views/workOrder/processPlan.vue') } ] } h5_standard/src/views/LogInAgain.vue
@@ -80,7 +80,7 @@ // let res = await testLogin({ // è±åå§ // username: '18055151023', // password: '123456', // companyId: '1', // companyId: '8', // uuid: '0000', // code: '0000' // }) h5_standard/src/views/needToBeDealtWith/addWarehousing.vue
@@ -29,7 +29,7 @@ </div> <van-swipe-cell v-for="(item, index) in list" :key="index"> <div class="rework_qd_list"> <div class="rework_qd_item" @click="openL(index)"> <div class="rework_qd_item" @click="openL(index)" v-if="location"> <span><b>*</b>å ¥åºè´§ä½</span> <div class="rework_qd_item_right"> <span :class="item.locationName ? 'black' : ''">{{item.locationName ? item.locationName : 'è¯·éæ©'}}</span> @@ -43,13 +43,13 @@ <van-icon name="arrow" size="20" color="#999999" /> </div> </div> <!-- <div class="rework_qd_item" v-if="form.type != 25"> <div class="rework_qd_item" v-if="form.type != 25" @click="openGX(index)"> <span>ç产工åº</span> <div class="rework_qd_item_right"> <span :class="item.procedureName ? 'black' : ''">{{item.procedureName ? item.procedureName : 'è¯·éæ©'}}</span> <van-icon name="arrow" size="20" color="#999999" /> </div> </div> --> </div> <div class="rework_qd_item" @click="openQ(index)"> <span><b>*</b>è´¨é屿§</span> <div class="rework_qd_item_right"> @@ -87,8 +87,10 @@ <Quality :show="qualityShow" @close="close2" @value="getValue2" /> <!-- éæ©è´§ä½ --> <Location :show="locationShow" :list="locationList" @close="close3" @value="getValue3" /> <!-- å·¥åº --> <ProductionProcess :show="productionShow" :list="productionList" @close="close4" @value="getValue4" /> <!-- åæ®ç±»å --> <van-popup v-model:show="typeShow" position="bottom" :style="{ height: '50%' }"> <van-popup v-model:show="typeShow" round position="bottom" :style="{ height: '50%' }"> <van-picker :columns="columns" @confirm="onConfirm1" @@ -103,11 +105,13 @@ import { onMounted, ref, reactive } from 'vue' import { useRouter } from 'vue-router' import { Toast } from 'vant' import { createForStandard, getListByWarehouseId, wOutBoundForStockUp } from '@/apis/WorkOrderAPI' import { getListByWarehouseId, wOutBoundForStockUp } from '@/apis/WorkOrderAPI' import { getListByMaterialId } from '@/apis/ExWarehouse' import Warehouse from '@/components/common/Warehouse.vue' import Material from '@/components/newCom/Material.vue' import Quality from '@/components/newCom/quality.vue' import Location from '@/components/newCom/location.vue' import ProductionProcess from '@/components/newCom/productionProcess.vue' const router = useRouter() // è¡¨åæ°æ® @@ -119,6 +123,8 @@ }) let locationList: any = ref([]) let location: any = ref(true) let productionList: any = ref([]) let i = ref(0) @@ -150,6 +156,7 @@ let qualityShow = ref<boolean>(false) let locationShow = ref<boolean>(false) let typeShow = ref<boolean>(false) let productionShow = ref<boolean>(false) // æå¼éæ©ç©æ const openMaterial = (index: number) => { @@ -160,6 +167,11 @@ const openQ = (index: number) => { i.value = index qualityShow.value = true } // æå¼å·¥åº const openGX = (index: number) => { i.value = index productionShow.value = true } // æå¼éæ©è´§ä½ const openL = (index: number) => { @@ -188,6 +200,12 @@ const onConfirm1 = (value: any) => { form.typeName = value.name form.type = value.id if (value.id == 25) { list.value.forEach(item => { item.procedureId = '' item.procedureName = '' }) } typeShow.value = false }; const onCancel = () => { @@ -265,6 +283,10 @@ const close3 = (): void => { locationShow.value = false } // å ³éè´§ä½éæ©å¼¹æ¡ const close4 = (): void => { productionShow.value = false } // éæ©ä»åºåè° const getValue = (item: any): void => { form.warehouseName = item.name @@ -273,21 +295,39 @@ .then(res => { if (res.code === 200) { locationList.value = res.data list.value.forEach(item => { item.locationId = '' item.locationName = '' }) if (res.data.length === 1) { location.value = false list.value.forEach(item => { item.locationId = res.data[0].id item.locationName = res.data[0].unionName }) } else { location.value = true list.value.forEach(item => { item.locationId = '' item.locationName = '' }) } } }) warehouseShow.value = false } // éæ©ç©æ const getValue1 = (item: any): void => { console.log(item) list.value[i.value].materialName = item.mmodelUnionName list.value[i.value].materialId = item.id list.value[i.value].unitId = item.unitId list.value[i.value].unitName = item.umodelName // è·åç©æä¸å·¥åº getListByMaterialId({ materialId: item.id }).then(res => { if (res.code === 200) { productionList.value = res.data list.value[i.value].procedureId = '' list.value[i.value].procedureName = '' } }) materialsShow.value = false } // éæ©è´¨é屿§ @@ -302,6 +342,12 @@ list.value[i.value].locationName = item.unionName locationShow.value = false } // éæ©å·¥åº const getValue4 = (item: any): void => { list.value[i.value].procedureId = item.id list.value[i.value].procedureName = item.name productionShow.value = false } onMounted(() => { // è·åå·¥è£ ä¿¡æ¯ // getLKInfo(route.query.id as string) h5_standard/src/views/needToBeDealtWith/outbound.vue
@@ -61,7 +61,7 @@ <Warehouse :show="warehouseShow" @close="close" @value="getValue" /> <Materials ref="Material" :show="materialsShow" :id="form.warehouseId.toString()" @close="close1" @value="getValue1" /> <!-- åæ®ç±»å --> <van-popup v-model:show="typeShow" position="bottom" :style="{ height: '50%' }"> <van-popup v-model:show="typeShow" round position="bottom" :style="{ height: '50%' }"> <van-picker :columns="columns" @confirm="onConfirm1" @@ -124,6 +124,8 @@ // æäº¤ const onConfirm = () => { if (!form.type) return Toast('è¯·éæ©åæ®ç±»å') if (!form.warehouseId) return Toast('è¯·éæ©åºåºä»åº') if (list.value.length === 0) return Toast('è³å°éæ©ä¸æ¡åºåºç©æ') for (let i = 0; i < list.value.length; i++) { if (!list.value[i].num || list.value[i].num == '' || list.value[i].num == 0) { return Toast(`第${i + 1}个åºåºç©ææ°éå¿ é¡»å¤§äº0`) h5_standard/src/views/workOrder/afterWorkReport.vue
@@ -357,15 +357,17 @@ }).then(res => { if (res.code === 200) { if (res.data.length > 0) { res.data.forEach((item: any) => { if (item.doneType === 1) { produceFrom.undesirable = item.num produceFrom.undesirableId = item.id } else { produceFrom.qualified = item.num produceFrom.qualifiedId = item.id } }) produceFrom.qualified = res.data[0].qualifiedNum produceFrom.undesirable = res.data[0].unqualifiedNum // res.data.forEach((item: any) => { // if (item.doneType === 1) { // produceFrom.undesirable = item.num // produceFrom.undesirableId = item.id // } else { // produceFrom.qualified = item.num // produceFrom.qualifiedId = item.id // } // }) } // res.data.forEach((item: any) => { // if (item.doneType === 0) { // åæ ¼ h5_standard/src/views/workOrder/index.vue
@@ -150,7 +150,7 @@ num: '0' }, { id: [2,3], id: [2,3,7], name: 'ç产ä¸', num: '0' }, @@ -213,6 +213,7 @@ // 忢åç±» const clickTag = (id: any): void => { console.log() form.total = 0 form.statusList = id form.page = 0 h5_standard/src/views/workOrder/processPlan.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,232 @@ <template> <div class="content"> <van-pull-refresh v-model="refreshing" @refresh="onRefresh"> <van-list v-model:loading="loading" :finished="finished" finished-text="æ²¡ææ´å¤äº~" @load="onLoad"> <div class="content_list"> <van-swipe-cell v-for="(item, i) in listData" :key="i"> <div class="content_list_item" @click="clickItem(item)"> <div class="content_list_item_title"> <span>{{item.materialName}}ï½{{item.produceName}}</span> <div class="content_list_item_title_tips" v-if="item.urgent">ä¼å {{ item.urgent }}</div> </div> <div class="content_list_item_nr"> <div class="content_list_item_nr_box"> <div class="label">ç©æç¼ç ï¼</div> <div class="cr">{{item.materialName}}丨{{item.materialCode}}</div> </div> <div class="content_list_item_nr_box"> <div class="label">è®¡åæ°éï¼</div> <div class="cr">{{item.num}}{{item.umodel.name}}</div> </div> <div class="content_list_item_nr_box"> <div class="label">è®¡åæ¥æï¼</div> <div class="cr">{{item.workPlanStartDate}} ~ {{item.workPlanEndDate}}</div> </div> <div class="content_list_item_nr_box"> <div class="label">计ååï¼</div> <div class="cr">{{item.planUserName}}</div> </div> <div class="content_list_item_nr_box"> <div class="label">çäº§æ¹æ¬¡ï¼</div> <div class="cr">{{item.batch}}</div> </div> <div class="content_list_item_nr_box" v-if="item.salesOrder"> <div class="label">éå®è®¢åï¼</div> <div class="cr">{{ item.salesOrder }}</div> </div> </div> </div> </van-swipe-cell> </div> </van-list> </van-pull-refresh> </div> </template> <script setup lang="ts"> import { reactive, ref, onBeforeUnmount, getCurrentInstance } from "vue" import { useRouter, useRoute } from "vue-router" import { getList } from "@/apis/PlanningAPI" const route = useRoute() const router = useRouter() const { $Bus } = getCurrentInstance().appContext.config.globalProperties // å页æ¥è¯¢æ°æ® const pageData = reactive({ capacity: 10, page: 0, total: 0 }) // åè¡¨æ°æ® let listData: any = ref([]) const loading = ref(false) const finished = ref(false) const refreshing = ref(false) const clickItem = (obj: any) => { $Bus.emit('callback', obj) router.go(-1) } // å表 const onLoad = () => { if (!finished.value) { pageData.page = pageData.page + 1 loading.value = true getList({ capacity: pageData.capacity, page: pageData.page, model: { statusList: [1, 4], paused: 0 }, sorts: [ { direction: 'DESC', property: 'CREATE_TIME' } ] }).then(res => { if (refreshing.value) { listData.value = [] refreshing.value = false; } loading.value = false if (res.code === 200 && res.data.records && res.data.records.length !== 0) { pageData.total = res.data.total listData.value.push(...res.data.records) } else { finished.value = true } }).catch(err => { loading.value = false finished.value = true if (refreshing.value) { listData.value = [] refreshing.value = false; } }) } } // 䏿巿°ä¼åé¡µé¢ const onRefresh = () => { finished.value = false; pageData.page = 0 loading.value = true; onLoad(); } onBeforeUnmount(() => { $Bus.all.delete("changeOdr") }) </script> <style lang="scss" scoped> .content { width: 100%; // height: 100%; position: absolute; background: #F7F7F7; .content_list { width: 100%; height: 100%; display: flex; flex-direction: column; .content_list_item { padding: 30px; background: #ffffff; margin-bottom: 20px; .content_list_item_title { display: flex; align-items: center; .content_list_item_title_tips { padding: 4px 8px; box-sizing: border-box; background: #DE5243; border-radius: 8px; font-size: 22px; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: #FFFFFF; margin-left: 16px; } .warning { color: $nav-stateColor1 !important; } .green { color: $nav-stateColor6 !important; } span { font-size: 32px; font-family: PingFangSC-Medium, PingFang SC; font-weight: 500; color: #333333; } } .content_list_item_nr { padding: 24px 30px; background: #F7F7F7; border-radius: 16px; margin-top: 30px; display: flex; justify-content: space-between; flex-wrap: wrap; .content_list_item_nr_boxs { width: 45%; display: flex; margin-top: 24px; &:nth-child(1) { margin-top: 0; } &:nth-child(2) { margin-top: 0; } .warning { color: $nav-stateColor4 !important; } .label { flex-shrink: 0; font-size: 24px; font-weight: 400; color: #666666; } .cr { flex: 1; font-size: 24px; font-weight: 400; color: #222222; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow:ellipsis; } } .content_list_item_nr_box { width: 100%; display: flex; margin-top: 24px; &:nth-child(1) { margin-top: 0; } .label { font-size: 24px; font-weight: 400; color: #666666; flex-shrink: 0; } .cr { font-size: 24px; font-weight: 400; color: #222222; } } } } } } </style> h5_standard/src/views/workOrder/reportingForWork.vue
@@ -1,42 +1,84 @@ <template> <div class="bg"> <!-- æææç»/åæ ¼äº§åºæç»/ä¸è¯äº§åºæç» --> <div class="bg_plan" @click="selectPlan"> <div class="bg_plan_label" v-if="!from.processPlan"> <span><b>*</b>å·¥åºç产计å</span> </div> <div class="bg_plan_nr" v-else> <span>{{ from.processPlan.materialName }} | {{ from.processPlan.materialCode }} | {{ from.processPlan.produceName }}</span> <span>{{ from.processPlan.batch }}{{ from.processPlan.salesOrder ? ` / ${from.processPlan.salesOrder}` : '' }}</span> <span>è®¡åæ¶é´ï¼{{ from.processPlan.workPlanStartDate }} ~ {{ from.processPlan.workPlanEndDate }}</span> <span>计åè¿åº¦ï¼{{from.processPlan.num}}/{{from.processPlan.workorderDistributNum}}{{ from.processPlan.unitName }}</span> </div> <div class="bg_plan_label_val"> <span v-if="!from.processPlan">è¯·éæ©</span> <img src="@/assets/icon/ic_ar@2x.png" alt="" /> </div> </div> <div class="bg_list"> <div class="bg_list_item"> <div class="bg_list_item_top"> <div class="bg_list_item_top_left"> <div class="bg_list_item_top_left_x"></div> <span>æææç»</span> <!-- <span class="blue left">{{tlTotal()}}</span> --> </div> <div class="bg_list_item_top_right" @click="jumpTL" v-if="proxy.$auth('h5:workorderinput:create') && (info.bomType !== 1 || info.bomType == 0 || !info.bomType)"> <img src="@/assets/icon/gongdan_ic_shoudong@2x.png" alt="" /> <span>æå¨å½å ¥</span> <span>ç产信æ¯</span> </div> </div> <template v-if="feedingData && feedingData.length > 0"> <van-swipe-cell v-for="(item, index) in feedingData" :key="index"> <div class="bg_list_item_num"> <div class="bg_list_item_num_item"> <!-- <span>{{item.code}}</span> --> <div class="bg_list_item_num_item_wl"> <span> {{ item.materialName }}{{ item.procedureName ? ` | ${item.procedureName}` : '' }}</span> <div class="bg_list_item_num_item_wl_lx"> <span class="green" v-if="item.qualityType == 0">åæ ¼ / </span> <span class="yellow" v-if="item.qualityType == 1">ä¸è¯ / </span> <span class="red" v-if="item.qualityType == 2">æ¥åº / </span> <span>{{ item.locationName }}</span> <span>{{ item.batch ? ` / ${item.batch}` : '' }}</span> <div class="bg_list_item_h"> <div class="bg_list_item_num" @click="openDev"> <div class="bg_list_item_num_item"> <span>ç产设å¤</span> <div class="bg_list_item_num_item_sr"> <span :style="{color: from.deviceName ? '#333' : ''}">{{from.deviceName ? from.deviceName : 'è¯·éæ©'}}</span> <img src="@/assets/icon/ic_ar@2x.png" alt="" /> </div> </div> </div> <div class="bg_list_item_num" @click="userShow = true"> <div class="bg_list_item_num_item"> <span>ç产人å</span> <div class="bg_list_item_num_item_sr"> <span :style="{color: from.userName ? '#333' : ''}">{{from.userName ? from.userName : 'è¯·éæ©'}}</span> <img src="@/assets/icon/ic_ar@2x.png" alt="" /> </div> </div> </div> </div> </div> <div class="bg_list_item"> <div class="bg_list_item_top"> <div class="bg_list_item_top_left"> <div class="bg_list_item_top_left_x"></div> <span>ç产信æ¯</span> </div> <div class="bg_list_item_top_right" @click="openMaterial" v-if="(hasBom == 1 && bomType != 1) || hasBom == 0"> <img src="@/assets/icon/gongdan_ic_shoudong@2x.png" alt="" /> <span>æ°å¢ææ</span> </div> </div> <template v-if="wuList.length > 0"> <van-swipe-cell v-for="(item, index) in wuList" :key="index"> <div class="bg_list_item_h"> <div class="bg_list_item_num"> <div class="bg_list_item_num_item"> <div class="bg_list_item_num_item_wl"> <span>{{ item.materialName }}{{ item.procedureName ? ` | ${item.procedureName}` : '' }}</span> <div class="bg_list_item_num_item_wl_lx"> <span class="green" v-if="item.qualityType == 0">åæ ¼ / </span> <span class="yellow" v-if="item.qualityType == 1">ä¸è¯ / </span> <span class="red" v-if="item.qualityType == 2">æ¥åº / </span> <span>{{ item.locationName }} / </span> <span>{{ item.batch }}</span> </div> </div> </div> <div class="bg_list_item_num_item_sr"> <input v-model="item.num" :disabled="!proxy.$auth('h5:workorderinput:update')" @blur="change(item.id, item.num, 'T', item.maxNum, item, item.unitAttribute)" type="number" /> <span>{{item.unitName}}</span> <div class="bg_list_item_num_item_sr"> <input type="number" v-model="item.num" @input="inputwl(index)" /> <span>{{ item.unitName }}</span> </div> </div> </div> </div> <template #right v-if="proxy.$auth('h5:workorderinput:delete')"> <van-button style="height: 100%;" square text="å é¤" @click="deleItem(item.id, 'T')" type="danger" /> <template #right> <van-button style="height: 100%;" @click="deleItem(index)" square text="å é¤" type="danger" /> </template> </van-swipe-cell> </template> @@ -45,993 +87,538 @@ <span>ææ æ°æ®</span> </div> </template> <div class="kong" v-if="hasBom == 1 && bomType == 1"> <span>å½åå·¥åºæ éææ</span> </div> </div> <div class="bg_list_item"> <div class="bg_list_item bottomval"> <div class="bg_list_item_top"> <div class="bg_list_item_top_left"> <div class="bg_list_item_top_left_x"></div> <span>äº§åºæç»</span> </div> </div> <!-- <template v-if="produceData && produceData.length > 0"> --> <!-- v-for="(item, index) in produceData" :key="index" --> <van-swipe-cell> <div class="bg_list_item_num"> <div class="bg_list_item_num_item"> <span>è¯åæ°</span> <div class="bg_list_item_num_item_sr"> <!-- :disabled="!proxy.$auth('h5:workorderoutput:update')" --> <!-- @blur="change(item.id, item.num, 'C', item.maxNum, item)" --> <input type="number" v-model="produceFrom.qualified" @blur="changeCC('0', produceFrom.qualified, produceFrom.qualifiedId)" placeholder="请è¾å ¥" /> <span v-if="info.umodel">{{info.umodel.name}}</span> </div> <div class="bg_list_item_h"> <div class="bg_list_item_num"> <div class="bg_list_item_num_item"> <span><b>*</b>è¯åæ°</span> <div class="bg_list_item_num_item_sr"> <input type="number" v-model="from.qualified" @input="changeNum(1)" placeholder="请è¾å ¥" /> <span>å</span> </div> </div> </van-swipe-cell> <van-swipe-cell> <div class="bg_list_item_num"> <!-- @blur="change(item.id, item.num, 'C', item.maxNum, item)" --> <div class="bg_list_item_num_item"> <span>ä¸è¯æ°</span> <div class="bg_list_item_num_item_sr"> <!-- :disabled="!proxy.$auth('h5:workorderoutput:update')" --> <!-- @blur="change(item.id, item.num, 'C', item.maxNum, item)" --> <input type="number" v-model="produceFrom.undesirable" @blur="changeCC('1', produceFrom.undesirable, produceFrom.undesirableId)" placeholder="请è¾å ¥" /> <span v-if="info.umodel">{{info.umodel.name}}</span> </div> </div> </div> </van-swipe-cell> <!-- <van-swipe-cell> <div class="bg_list_item_num"> <div class="bg_list_item_num_item" @click="show = true"> <span>ä¸è¯é¡¹</span> <div class="bg_list_item_num_item_sr"> <span>设置 ></span> </div> </div> </div> </van-swipe-cell> --> <!-- </template> <template v-else> <div class="kong"> <span>ææ æ°æ®</span> </div> </template> --> <div class="bg_list_item_num"> <div class="bg_list_item_num_item"> <span>ä¸è¯æ°</span> <div class="bg_list_item_num_item_sr"> <input type="number" v-model="from.undesirable" @input="changeNum(2)" placeholder="请è¾å ¥" /> <span>å</span> </div> </div> </div> <div class="bg_list_item_num" v-if="from.undesirable > 0"> <div class="bg_list_item_num_item" @click="show = true"> <span><b>*</b>ä¸è¯é¡¹</span> <div class="bg_list_item_num_item_sr"> <span class="wulll" :style="{color: from.defectiveName ? '#305ED5' : ''}">{{from.defectiveName ? from.defectiveName : '设置'}}</span> <img src="@/assets/icon/ic_ar@2x.png" alt="" /> </div> </div> </div> </div> </div> <!-- <div class="bg_list_item"> <div class="bg_plan" @click="TimeShow = true"> <div class="bg_plan_label"> <span><b>*</b>æ¥å·¥æ¶é¿</span> </div> <div class="bg_plan_label_val"> <span :style="{color: from.durationName ? '#333' : ''}">{{from.durationName ? from.durationName : 'è¯·éæ©'}}</span> <img src="@/assets/icon/ic_ar@2x.png" alt="" /> </div> </div> <div class="bg_list_item" v-if="infoBox"> <div class="bg_list_item_top"> <div class="bg_list_item_top_left"> <div class="bg_list_item_top_left_x"></div> <span>åæ ¼äº§åºæç»</span> <span class="blue left">{{ccTotal()}}</span> </div> <div class="bg_list_item_top_right" @click="jumpCC" v-if="proxy.$auth('h5:workorderoutput:create')"> <img src="@/assets/icon/gongdan_ic_shoudong@2x.png" alt="" /> <span>æå¨å½å ¥</span> <span>å·¥èµç»©æ</span> </div> </div> <template v-if="produceData && produceData.length > 0"> <van-swipe-cell v-for="(item, index) in produceData" :key="index"> <div class="bg_list_item_num"> <div class="bg_list_item_num_item"> <span>{{item.code}}</span> <div class="bg_list_item_num_item_sr"> <input v-model="item.num" :disabled="!proxy.$auth('h5:workorderoutput:update')" @blur="change(item.id, item.num, 'C', item.maxNum, item)" type="number" /> <span>{{item.company}}</span> </div> <div class="bg_list_item_h"> <div class="bg_list_item_num"> <div class="bg_list_item_num_item"> <span>计件æ¹å¼</span> <div class="bg_list_item_num_item_list"> <div class="bg_list_item_num_item_list_item active" v-if="infoBox.type == 0">计件</div> <div class="bg_list_item_num_item_list_item active" v-if="infoBox.type == 1">计æ¶</div> </div> </div> <template #right v-if="proxy.$auth('h5:workorderoutput:delete')"> <van-button style="height: 100%;" square text="å é¤" @click="deleItem(item.id, 'C')" type="danger" /> </template> </van-swipe-cell> </template> <template v-else> <div class="kong"> <span>ææ æ°æ®</span> </div> </template> </div> <div class="bg_list_item"> <div class="bg_list_item_top"> <div class="bg_list_item_top_left"> <div class="warning"></div> <span>ä¸è¯äº§åºæç»</span> <span class="yellow left">{{blTotal()}}</span> </div> </div> <template v-if="undesirable && undesirable.length > 0"> <van-swipe-cell v-for="(item, index) in undesirable" :key="index"> <div class="bg_list_item_num"> <div class="bg_list_item_num_item"> <span>{{item.code}}</span> <div class="bg_list_item_num_item_sr"> <input v-model="item.num" :disabled="!proxy.$auth('h5:workorderoutput:update')" @blur="change(item.id, item.num, 'C', item.maxNum, item)" type="number" /> <span>{{item.company}}</span> </div> <div class="bg_list_item_num"> <div class="bg_list_item_num_item"> <span>å·¥èµåä»·</span> <div class="bg_list_item_num_item_sr"> <span class="color1">{{infoBox.salary}}å /{{infoBox.type == 0 ? 'ä»¶' : 'æ¶'}}</span> </div> </div> <template #right v-if="proxy.$auth('h5:workorderoutput:delete')"> <van-button style="height: 100%;" square text="å é¤" @click="deleItem(item.id, 'C')" type="danger" /> </template> </van-swipe-cell> </template> <template v-else> <div class="kong"> <span>ææ æ°æ®</span> </div> </template> </div> <div class="bg_list_item"> <div class="bg_list_item_top"> <div class="bg_list_item_top_left"> <div class="error"></div> <span>æ¥åºäº§åºæç»</span> <span class="red left">{{bfTotal()}}</span> </div> </div> <template v-if="scrap && scrap.length > 0"> <van-swipe-cell v-for="(item, index) in scrap" :key="index"> <div class="bg_list_item_num"> <div class="bg_list_item_num_item"> <span>{{item.code}}</span> <div class="bg_list_item_num_item_sr"> <input v-model="item.num" :disabled="!proxy.$auth('h5:workorderoutput:update')" @blur="change(item.id, item.num, 'C', item.maxNum, item)" type="number" /> <span>{{item.company}}</span> </div> <div class="bg_list_item_num"> <div class="bg_list_item_num_item"> <span>é¢è®¡å·¥èµ</span> <div class="bg_list_item_num_item_sr"> <span class="color1">{{expectedSalary}}å </span> </div> </div> <template #right v-if="proxy.$auth('h5:workorderoutput:delete')"> <van-button style="height: 100%;" square text="å é¤" @click="deleItem(item.id, 'C')" type="danger" /> </template> </van-swipe-cell> </template> <template v-else> <div class="kong"> <span>ææ æ°æ®</span> </div> </template> </div> --> </div> <div class="details_dj"> <div class="details_dj_title"> <div class="details_dj_title_left"> <div class="details_x"></div> <span>çäº§ç¹æ£</span> </div> <div class="details_dj_title_right" @click="jumpdj" v-if="proxy.$auth('h5:workorder:processRecord')"> <img src="@/assets/icon/gongdan_ic_shoudong@2x.png" alt="" /> <span>æå¨å½å ¥</span> </div> </div> <div class="details_dj_list"> <van-list v-model:loading="loading" :finished="finished" finished-text="æ²¡ææ´å¤äº~" @load="pageDJs"> <van-swipe-cell v-for="(item, index) in djData" :key="index"> <div class="details_dj_list_item"> <span>{{item.attrName}}ï¼{{item.val}}</span> <span>{{item.userName}} {{item.createTime}}</span> <div class="bg_list_item_num"> <div class="bg_list_item_num_item"> <span>è¾¾æ ç</span> <div class="bg_list_item_num_item_sr"> <span class="color1">{{complianceRate}}%</span> </div> </div> <template #right> <van-button square type="danger" style="height: 100%;" @click="dele(item.id)" text="å é¤" /> </template> </van-swipe-cell> </van-list> </div> </div> </div> </div> <!-- æ¥å·¥æé® --> <template v-if="info.status === 2 || info.procedureNeedcheck === 1"> <div class="bh_zw"></div> <div class="bg_footer"> <div class="bg_footer_submit" @click="submit">确认æ¥å·¥</div> </div> </template> <!-- æ«ç ç»ä»¶ --> <v-ScanCode :openCode="openCode" :infos="['è¯·æ«æå·¥è£ ç ']" @closePopup="closePopup" @onDecode="onDecode" /> <!-- æ¥å·¥ç»è®¡æ°æ® --> <van-popup v-model:show="statistics" round :closeable="true" position="bottom" :style="{ height: '53%' }"> <div class="tg"> <div class="tg_header">请确认æ¥å·¥ä¿¡æ¯</div> <div class="tg_table"> <div class="tg_table_header"> <div class="tg_table_header_item">ç±»å</div> <div class="tg_table_header_item">ç©æåç§°</div> <!-- <div class="tg_table_header_item">å·¥è£ æ°é</div> --> <div class="tg_table_header_item">ç©ææ°é</div> </div> <div class="nr" v-if="statisticsData.length > 0"> <div class="tg_table_nr" v-for="(item, index) in statisticsData" :key="index"> <div class="tg_table_nr_item">{{item.name}}</div> <div class="tg_table_nr_item">{{item.materialName}}</div> <!-- <div class="tg_table_nr_item">{{item.gznum}}</div> --> <div class="tg_table_nr_item" :style="item.name === 'å·¥åæªææ' ? 'color: #DE5243' : ''">{{item.num}}</div> </div> </div> <div class="nr" v-else> <div class="tg_table_nr"> <div class="tg_table_nr_item1">ææ æ°æ®</div> </div> </div> </div> <div class="tg_footer"> <button class="tg_footer_qr" @click="submitBG" v-if="proxy.$auth('h5:workorderoutput:confirm') && isSubmit">确认æ¥å·¥</button> <div class="tg_footer_fh" @click="gofh" v-else-if="!isSubmit">è¿åä¿®æ¹</div> </div> </div> </van-popup> <div class="bh_zw"></div> <div class="bg_footer"> <div class="bg_footer_submit1">ç»§ç»æ¥å·¥</div> <div class="bg_footer_submit" @click="submit">æäº¤</div> </div> <!-- éæ©ä¸è¯é¡¹ --> <van-popup v-model:show="show" round position="bottom" :style="{ height: '53%' }"> <div class="bl"> <div class="bl_head"> <span @click="show = false">åæ¶</span> <img src="@/assets/icon/ic_close@2x.png" style="opacity: 0;" alt="" /> <span>ä¸è¯é¡¹</span> <span>确认</span> <!-- <span>确认</span> --> <img src="@/assets/icon/ic_close@2x.png" @click="show = false" alt="" /> </div> <div class="bl_list"> <div class="bl_list_item" v-for="(item, i) in 12" :key="i"> <div class="bl_list_item" v-for="(item, i) in cateList" :key="i" @click="changeChecked(i)"> <div class="bl_list_item_left"> <input type="checkbox" :checked="true" name="" id="" /> <span>æåç</span> <input type="checkbox" :checked="item.active" /> <span>{{ item.name }}</span> </div> <div class="bl_list_item_right"> <input type="number" placeholder="请è¾å ¥" /> <input type="number" @click.stop v-model="item.num" placeholder="0" /> </div> </div> </div> <div class="bl_footer" @click="onConfirm3">确认</div> </div> </van-popup> <!-- å ¥åºç©æ --> <MaterialY :show="show1" :plansId="String(plansId)" :ids="ids" :deviceId="String(deviceId)" @close="close" @value="getValue" /> <!-- è®¾å¤ --> <van-popup v-model:show="deviceShow" round position="bottom" :style="{ height: '50%' }"> <van-picker :columns="deviceList" @confirm="onConfirm" @cancel="onCancel" :columns-field-names="customFieldName" /> </van-popup> <!-- 人å --> <user :show="userShow" @close="onCancel1" @value="onConfirm1" /> <!-- æ¶é´ --> <van-popup v-model:show="TimeShow" round position="bottom" :style="{ height: '50%' }"> <van-datetime-picker v-model="from.time" type="time" title="éæ©æ¶é´" @confirm="onConfirm2" @cancel="onCancel2" /> </van-popup> </div> </template> <script setup lang="ts"> import { getCurrentInstance, nextTick, onMounted, ref, reactive } from 'vue' import { useRouter, useRoute } from "vue-router" import { Dialog, Toast } from 'vant' import { REGULAR } from '@/utils/utils' import { getBarcodeContent, queryById, getOrocessRecord, deleteCT, updateById, comfirmDone, comfirmDoneStandard, getListByCondition, allForStandard, pageDJ, deletedj, dealWorkorderRecordStandard, getWorkorderRecordListStandard } from '@/apis/WorkOrderAPI' import { QRCodeType } from '@/enum' const { proxy }: any = getCurrentInstance() import VWorkOrderInfo from '@/components/common/WorkOrderInfo.vue' import { onMounted, ref, reactive, getCurrentInstance, computed } from 'vue' import { useRouter } from 'vue-router' import { getDeviceByCondition, getFindAll, queryOne, autoWorkReport, getIdPlansExt, categoryExtList } from '@/apis/PlanningAPI' import MaterialY from '@/components/newCom/MaterialY.vue' import user from '@/components/newCom/user.vue' import { Toast } from 'vant' const {$Bus} = getCurrentInstance().appContext.config.globalProperties const router = useRouter() const route = useRoute() const loading = ref(false); const finished = ref(false); let show = ref(false) // ç¹æ£æ°æ® let djData: any = ref([]) // å页æ¥è¯¢æ°æ® let page = reactive({ capacity: 10, page: 0 let show1 = ref(false) let TimeShow = ref(false) let deviceId = ref('') let plansId = ref('') let ids = ref('') let total: any = ref('') // 坿æ°é let from: any = reactive({ processPlan: null, deviceId: '', deviceName: '', userId: '', userName: '', qualified: '', // è¯åæ° undesirable: '', // ä¸è¯æ° duration: '', durationName: '', time: '', defective: [], defectiveName: '' }) // 产åºåæ ¼/ä¸è¯ let produceFrom = reactive({ qualifiedId: '', qualified: '', // åæ ¼ undesirableId: '', undesirable: '' // ä¸è¯ }) let infoBox: any = ref(null) // å·¥èµç»©æ // è¯¦æ æ°æ® const info: any = ref({}) let bomType: any = ref('') let hasBom: any = ref('') let deviceShow = ref(false) let deviceList = ref([]) let cateList:any = ref([]) const customFieldName = { text: 'name' }; let userShow = ref(false) let userList = ref([]) let wuList: any = ref([]) // 夿æ¯å¦è½æäº¤ let isSubmit: any = ref<boolean>(false) // ä¸è¯æç» let undesirable: any = ref([]) // æ¥åºæç» let scrap: any = ref([]) // æ«ç ç±»å let type: any = ref('') // ç»è®¡æ°æ® let statisticsData: any = ref([ // { // name: '工忿', // materialName: '黿²', // num: 0 // }, // { // name: 'å·¥ååæ ¼äº§åº', // materialName: '黿²', // num: 0 // }, // { // name: 'å·¥åä¸è¯äº§åº', // materialName: '黿²', // num: 0 // }, // { // name: 'å·¥åæªææ', // materialName: '黿²', // num: 0 // } ]) // æææ°æ® const feedingData: any = ref([]) // äº§åºæ°æ® const produceData: any = ref([]) // æ§å¶æ«ç æ¾ç¤ºéè const openCode = ref<boolean>(false) // æ§å¶æ¥å·¥ç»è®¡ const statistics = ref<boolean>(false) // ææç»è®¡ const tlTotal = (): string => { if (feedingData.value.length > 0) { let total: number = 0 feedingData.value.forEach((element: any) => { total = total + element.num }) return `${total}` // äº§åºæ°ééªè¯ const changeNum = (type: number) => { let num = total.value - (Number(from.qualified) + Number(from.undesirable)) if (type == 2) { from.defective = [] from.defectiveName = '' } return '' } // ä¿®æ¹äº§åº const changeCC = (downType: string, num: number, recordId: string) => { if (!num) return console.log(produceFrom.qualified + produceFrom.undesirable) if ((produceFrom.qualified + produceFrom.undesirable) > info.value.planNum) { return Toast.fail({ message: 'äº§åºæ°éä¸è½å¤§äºè®¡åæ°é', duration: 2000 }) } if (num >= 0) { dealWorkorderRecordStandard({ downType, num, recordId, workorderId: route.query.id }).then(res => { if (res.code === 200) { getOrocessRecordCC() } }) } else { if (downType == 0) { produceFrom.qualified = 0 if (num < 0) { Toast('äº§åºæ°éä¸è½å¤§äºå¯äº§åºæ°éï¼') if (type == 1) { from.qualified = '' } else { produceFrom.undesirable = 0 from.undesirable = '' } Toast.fail({ message: 'äº§åºæ°éä¸è½å°äº0', duration: 2000 }) } } // è·³è½¬ç¹æ£ const jumpdj = () => { router.push({ name: 'spotCheck', query: { id: route.query.id } }) } // å é¤ç¹æ£ const dele = (id: string | number): void => { deletedj(id) .then(res => { if (res.code === 200) { djData.value = [] finished.value = false page.page = 0 pageDJs() } }) } // ç¹æ£æ°æ® const pageDJs = () => { if (!finished.value) { page.page = page.page + 1 loading.value = true pageDJ({ capacity: page.capacity, page: page.page, model: { workorderId: route.query.id } }).then(res => { if (res.code === 200 && res.data && res.data.records.length !== 0) { djData.value.push(...res.data.records) } else { finished.value = true } loading.value = false }).catch(err => { loading.value = false finished.value = true }) // éªè¯ç©ææ°é const inputwl = (i: number) => { if (wuList.value[i].num > wuList.value[i].total) { wuList.value[i].num = '' Toast('æææ°éä¸è½å¤§äºåºåæ°é') } } // ç»è®¡ const ccTotal = (): string => { if (produceData.value.length > 0) { let total: number = 0 produceData.value.forEach((element: any) => { total = total + element.num }) return `${total}${produceData.value[0].company}` } return '' const changeChecked = (i: number) => { cateList.value[i].active = !cateList.value[i].active } // ç»è®¡ const blTotal = (): string => { if (undesirable.value.length > 0) { let total: number = 0 undesirable.value.forEach((element: any) => { total = total + element.num }) return `${total}${undesirable.value[0].company}` } return '' } // ç»è®¡ const bfTotal = (): string => { if (scrap.value.length > 0) { let total: number = 0 scrap.value.forEach((element: any) => { total = total + element.num }) return `${total}${scrap.value[0].company}` } return '' } // å é¤äº§åº/ææ const deleItem = (id: any, type: string) => { Dialog.confirm({ title: 'æç¤º', message: 'ç¡®å®å 餿¤æ¡è®°å½åï¼', }).then(() => { deleteCT(id) .then(res => { if (res.code === 200 && type === 'C') { getOrocessRecordCC() } else if (res.code === 200 && type === 'T') { getOrocessRecords() } }) }).catch(() => { // on cancel const onConfirm3 = () => { let isOpen = false cateList.value.forEach((item: any, index: number) => { if (item.active) { isOpen = true } }) } // 跳转æå¨äº§åº const jumpCC = () => { router.push({ name: 'manualOutput', query: { id: route.query.id, num: produceData.value.length > 0 ? produceData.value[0].num : '' } }) } // 跳转æå¨ææ const jumpTL = () => { router.push({ name: 'manualFeeding', query: { id: route.query.id } }) } // å ³éæ«ç ç»ä»¶ const closePopup = (): void => { openCode.value = false } // è·åæ«ç å¼ const onDecode = (data: string[]): void => { getBarcodeContent({ barcode: data[0] }).then(res => { if (res.code === 200) { if (res.data.barcodeType === QRCodeType.GZ) { if (type.value === 'tl') { // æææä½ getListByCondition({ id: res.data.id }) .then(gz => { if (gz.code === 200) { if (gz.data[0].status !== 1) { router.push({ name: 'codeScanningFeeding', query: { id: route.query.id, gzId: res.data.id } }) } else { Toast.fail({ message: 'æ«æçå·¥è£ ç¶æä¸è½ä¸ºç©º', duration: 2000 }) } } }) } if (type.value === 'cc') { // äº§åºæä½ router.push({ name: 'codeScanningOutput', query: { id: route.query.id, gzId: res.data.id } }) } } else { Toast({ message: 'è¯·æ«ææ£ç¡®ç篮çç ', duration: 2000 }) if (!isOpen) return Toast('è¯·éæ©ä¸è¯é¡¹') let arr: any = [] let total: any = 0 let name: any = '' cateList.value.forEach((item: any, index: number) => { if (item.active) { if (item.num <= 0) { return Toast('ä¸è¯æ°éå¿ é¡»å¤§äº0') } total = total += item.num arr.push(item) name += item.name + item.num + 'ï¼' } }) nextTick(() => { openCode.value = false }) if (total !== from.undesirable) return Toast('ä¸è¯æ°å¿ é¡»çäºäº§åºä¸è¯æ°') from.defective = arr from.defectiveName = name show.value = false } // 跳转æå¨ææ const jump = () => { router.push({ name: 'manualFeeding', query: { id: route.query.id } }) } // 跳转æ«ç ææ const jump1 = (types: string) => { type.value = types openCode.value = true } // æ¥è¯¢å·¥å详æ const queryByIds = () => { queryById(route.query.id).then(res => { if (res.code === 200) { info.value = res.data } }) } // æ¥è¯¢å·¥åç产记å½---ææ const getOrocessRecords = () => { feedingData.value = [] allForStandard({ workorderId: route.query.id, type: 0 }).then(res => { if (res.code === 200) { feedingData.value = res.data // res.data.forEach((item: any) => { // feedingData.value.push({ id: item.id, company: item.umodel.name, gz: item.amodel.code, name: item.mmodel.name, code: item.amodel.code + ' - ' + item.mmodel.name, num: item.num, ynum: item.num, maxNum: item.amodel.num }) // }) } }) } // æ¥è¯¢å·¥åç产记å½---äº§åº const getOrocessRecordCC = () => { produceData.value = [] undesirable.value = [] scrap.value = [] getWorkorderRecordListStandard({ workorderId: route.query.id }).then(res => { if (res.code === 200) { if (res.data.length > 0) { res.data.forEach((item: any) => { if (item.doneType === 1) { produceFrom.undesirable = item.num produceFrom.undesirableId = item.id } else { produceFrom.qualified = item.num produceFrom.qualifiedId = item.id } }) } // res.data.forEach((item: any) => { // if (item.doneType === 0 || !item.doneType) { // åæ ¼ | æ··å // produceData.value.push({ id: item.id, company: item.umodel.name, name: item.mmodel.name, code: item.amodel.code + ' - ' + item.mmodel.name, num: item.num, ynum: item.num, maxNum: item.amodel.num }) // } else if (item.doneType === 1) { // ä¸è¯ // undesirable.value.push({ id: item.id, company: item.umodel.name, name: item.mmodel.name, code: item.amodel.code + ' - ' + item.mmodel.name, num: item.num, ynum: item.num, maxNum: item.amodel.num }) // } else if (item.doneType === 2) { // æ¥åº // scrap.value.push({ id: item.id, company: item.umodel.name, name: item.mmodel.name, code: item.amodel.code + ' - ' + item.mmodel.name, num: item.num, ynum: item.num, maxNum: item.amodel.num }) // } // }) } }) } // ç¼è¾ææ/äº§åº const change = (id: any, num: any, type: any, maxNum: number, item: object, unitAttribute: number): void => { let obj: any = item if (type === 'T') { if (unitAttribute == 0 && num != '') { if(!REGULAR.positiveInteger.test(num)){ obj.num = obj.ynum Toast({ message: 'åªè½è¾å ¥æ£æ´æ°' }) return } } if (unitAttribute == 1 && num != '') { if(!REGULAR.number.test(num)){ Toast({ message: 'åªè½è¾å ¥æ£æ´æ°æå°æ°ï¼æå¤åä½ï¼' }) obj.num = obj.ynum return } } if (num > maxNum) { obj.num = obj.ynum Toast.fail({ message: 'è¶ åºå·¥è£ æ»æ°' }) return } } else if (type === 'C' && num > info.value.planNum) { obj.num = obj.ynum Toast.fail({ message: 'äº§åºæ°éä¸è½è¶ è¿è®¡åæ°é' }) return } updateById({ id: id, num: num }).then(res => { if (res.code === 200 && type === 'T') { getOrocessRecords() } else if (res.code === 200 && type === 'C') { getOrocessRecordCC() } }) } // 确认æ¥å·¥ const submit = () => { if (info.value.bomType === 1) { // æå¼ console.log('æå¼') statisticsData.value = [] if (info.value.hasBom === 0) { console.log('æ bom') // let data: any = [ // { name: '工忿', gznum: feedingData.value.length, wlmc: feedingData.value.length > 0 ? feedingData.value[0].name : '', wlnum: 0 }, // { name: 'å·¥ååæ ¼äº§åº', gznum: produceData.value.length, wlmc: produceData.value.length > 0 ? produceData.value[0].name : '', wlnum: 0 }, // { name: 'å·¥åä¸è¯äº§åº', gznum: 0, wlmc: '', wlnum: 0 }, // { name: 'å·¥åæªææ', gznum: '', wlmc: feedingData.value.length > 0 ? feedingData.value[0].name : '', wlnum: 0 } // ] // if (undesirable.value.length > 0) { // å¤æææ²¡æä¸è¯ // data[2].wlmc = undesirable.value[0].name // data[2].gznum = data[2].gznum + undesirable.value.length // } // if (scrap.value.length > 0) { // å¤æææ²¡æä¸è¯ // data[2].wlmc = scrap.value[0].name // data[2].gznum = data[2].gznum + scrap.value.length // } // let tl: number = 0 // let cc: number = 0 // let bl: number = 0 // undesirable.value.forEach((item: any) => { // ä¸è¯ // bl = bl + item.num // }) // scrap.value.forEach((item: any) => { // æ¥åº // bl = bl + item.num // }) // if (produceData.value.length > 0) { // å¤æææ²¡æåæ ¼äº§åº // produceData.value.forEach((item: any) => { // äº§åº // cc = cc + item.num // }) // } // feedingData.value.forEach((item: any) => { // ææ // tl = tl + item.num // }) // data[0].wlnum = tl.toString() + info.value.umodel.name // if (produceData.value.length > 0) { // data[1].wlnum = cc.toString() + info.value.umodel.name // } // data[2].wlnum = bl.toString() + info.value.umodel.name // let total: number = info.value.planNum - (Number(cc) + Number(bl)) // data[data.length - 1].wlnum = (info.value.planNum - Number(cc) - Number(bl)).toString() + info.value.umodel.name // if (total === 0) { // isSubmit.value = true // } else { // isSubmit.value = false // } let arr: any = [] let tl = 0 let res = getGroupNum(feedingData.value) for (let i in res) { let num = 0 res[i].forEach((item: any) => { num += item.num }) arr.push({ name: '工忿', materialName: i + res[i][0].procedureName, num: num }) } feedingData.value.forEach((item: any) => { tl += item.num }) statisticsData.value = [...statisticsData.value, ...arr] statisticsData.value.push({ name: 'å·¥ååæ ¼äº§åº', materialName: info.value.mmodel.name + '-' + info.value.procedureName, num: produceFrom.qualified }) statisticsData.value.push({ name: 'å·¥åä¸è¯äº§åº', materialName: info.value.mmodel.name + '-' + info.value.procedureName, num: produceFrom.undesirable }) statisticsData.value.push({ name: 'å·¥åæªææ', materialName: '', num: info.value.planNum - Number(produceFrom.qualified) - Number(produceFrom.undesirable) }) let total: number = info.value.planNum - (Number(produceFrom.qualified) + Number(produceFrom.undesirable)) if (total === 0) { isSubmit.value = true } else { isSubmit.value = false } // if (Number(tl) <= info.value.planNum) { // let total: number = Number(tl) - Number(cc) - Number(bl) // æ¯å¦æä½ // data[data.length - 1].wlnum = (Number(tl) - Number(cc) - Number(bl)).toString() + info.value.umodel.name // if (total === 0) { // isSubmit.value = true // } else { // isSubmit.value = false // } // } else { // isSubmit.value = false // } // statisticsData.value = data } else if (info.value.hasBom === 1) { // æbomæ åµ console.log('æbom') // let cc: number = 0 // let bl: number = 0 // let newData: any = {} // if (feedingData.value.length > 0) { // ææ // feedingData.value.forEach((e: any) => { // if (Object.keys(newData).indexOf('' + e.name) === -1) { // newData[e.name] = [] // } // newData[e.name].push(e) // }) // for (let key in newData) { // let obj = { name: '工忿', gznum: newData[key].length, wlmc: key, wlnum: 0, num: 0 } // newData[key].forEach((item: any) => { // obj.wlnum = obj.wlnum + item.num // obj.num = item.num // }) // obj.wlnum = obj.wlnum.toString() + newData[key][0].company as never // statisticsData.value.push(obj) // } // } // if (produceData.value.length > 0) { // äº§åº // produceData.value.forEach((item: any) => { // cc = cc + item.num // }) // statisticsData.value.push({ name: 'å·¥ååæ ¼äº§åº', gznum: produceData.value.length, wlmc: info.value.mmodel.name, wlnum: cc + info.value.umodel.name, num: cc }) // } // if (undesirable.value.length > 0 || scrap.value.length > 0) { // ä¸è¯/æ¥åº // undesirable.value.forEach((item: any) => { // bl = bl + item.num // }) // scrap.value.forEach((item: any) => { // bl = bl + item.num // }) // statisticsData.value.push({ name: 'å·¥åä¸è¯äº§åº', gznum: undesirable.value.length + scrap.value.length, wlmc: info.value.mmodel.name, wlnum: bl + info.value.umodel.name, num: bl }) // } // let totaltl: number = 0 // let totalcc: number = 0 // let totalbl: number = 0 // statisticsData.value.forEach((item: any) => { // if (item.name === '工忿') { // totaltl = totaltl + item.num // } else if (item.name === 'å·¥ååæ ¼äº§åº') { // totalcc = totalcc + item.num // } else if (item.name === 'å·¥åä¸è¯äº§åº') { // totalbl = totalbl + item.num // } // }) // isSubmit.value = totalcc + totalbl <= info.value.planNum; let arr: any = [] let tl = 0 let res = getGroupNum(feedingData.value) for (let i in res) { let num = 0 res[i].forEach((item: any) => { num += item.num }) arr.push({ name: '工忿', materialName: i, num: num }) } feedingData.value.forEach((item:any) => { tl += item.num }) statisticsData.value = [...statisticsData.value, ...arr] statisticsData.value.push({ name: 'å·¥ååæ ¼äº§åº', materialName: info.value.mmodel.name + '-' + info.value.procedureName, num: produceFrom.qualified }) statisticsData.value.push({ name: 'å·¥åä¸è¯äº§åº', materialName: info.value.mmodel.name + '-' + info.value.procedureName, num: produceFrom.undesirable }) isSubmit.value = produceFrom.qualified + produceFrom.undesirable <= info.value.planNum; } if (!from.processPlan) return Toast('计åä¸è½ä¸ºç©º') if (!from.deviceId) return Toast('设å¤ä¸è½ä¸ºç©º') if (!from.userId) return Toast('ç产人åä¸è½ä¸ºç©º') if (hasBom.value == 1 && bomType.value == 1) { console.log('ä¸éè¦ææ') } else { console.log('æ¨å¼') if (feedingData.value.length === 0) { Toast.fail({ message: 'æææç»ä¸è½ä¸ºç©º' }) return } statisticsData.value = [] if (info.value.hasBom === 0) { console.log('æ bom') // let data: any = [ // { name: '工忿', gznum: feedingData.value.length, wlmc: feedingData.value.length > 0 ? feedingData.value[0].name : '', wlnum: 0 }, // { name: 'å·¥ååæ ¼äº§åº', gznum: produceData.value.length, wlmc: produceData.value.length > 0 ? produceData.value[0].name : '', wlnum: 0 }, // { name: 'å·¥åä¸è¯äº§åº', gznum: 0, wlmc: '', wlnum: 0 }, // { name: 'å·¥åæªææ', gznum: '', wlmc: feedingData.value.length > 0 ? feedingData.value[0].name : '', wlnum: 0 } // ] // if (undesirable.value.length > 0) { // å¤æææ²¡æä¸è¯ // data[2].wlmc = undesirable.value[0].name // data[2].gznum = data[2].gznum + undesirable.value.length // } // if (scrap.value.length > 0) { // å¤æææ²¡æä¸è¯ // data[2].wlmc = scrap.value[0].name // data[2].gznum = data[2].gznum + scrap.value.length // } // let tl = 0 // let cc = 0 // let bl = 0 // undesirable.value.forEach((item: any) => { // ä¸è¯ // bl = bl + item.num // }) // scrap.value.forEach((item: any) => { // æ¥åº // bl = bl + item.num // }) // if (produceData.value.length > 0) { // å¤æææ²¡æåæ ¼äº§åº // produceData.value.forEach((item: any) => { // äº§åº // cc = cc + item.num // }) // } // feedingData.value.forEach((item: any) => { // ææ // tl = tl + item.num // }) // data[0].wlnum = tl.toString() + info.value.umodel.name // if (produceData.value.length > 0) { // data[1].wlnum = cc.toString() + info.value.umodel.name // } // data[2].wlnum = bl.toString() + info.value.umodel.name // if (Number(tl) <= info.value.planNum) { // let total: number = Number(tl) - Number(cc) - Number(bl) // æ¯å¦æä½ // data[data.length - 1].wlnum = (Number(tl) - Number(cc) - Number(bl)).toString() + info.value.umodel.name // if (total === 0) { // isSubmit.value = true // } else { // isSubmit.value = false // } // } else { // isSubmit.value = false // } // statisticsData.value = data let arr: any = [] let tl = 0 let res = getGroupNum(feedingData.value) for (let i in res) { let num = 0 res[i].forEach((item: any) => { num += item.num }) arr.push({ name: '工忿', materialName: i + '-' + res[i][0].procedureName, num: num }) } feedingData.value.forEach((item:any) => { tl += item.num }) statisticsData.value = [...statisticsData.value, ...arr] statisticsData.value.push({ name: 'å·¥ååæ ¼äº§åº', materialName: info.value.mmodel.name + '-' + info.value.procedureName, num: produceFrom.qualified }) statisticsData.value.push({ name: 'å·¥åä¸è¯äº§åº', materialName: info.value.mmodel.name + '-' + info.value.procedureName, num: produceFrom.undesirable }) if (Number(tl) <= info.value.planNum) { let total: number = Number(tl) - Number(produceFrom.qualified) - Number(produceFrom.undesirable) // æ¯å¦æä½ statisticsData.value.push({ name: 'å·¥åæªææ', materialName: '', num: (Number(tl) - Number(produceFrom.qualified) - Number(produceFrom.undesirable)).toFixed(2) }) if (total === 0) { isSubmit.value = true } else { isSubmit.value = false } } else { isSubmit.value = false } } else if (info.value.hasBom === 1) { // æbomæ åµ console.log('æbom') let arr: any = [] let tl = 0 let res = getGroupNum(feedingData.value) for (let i in res) { let num = 0 res[i].forEach((item: any) => { num += item.num }) arr.push({ name: '工忿', materialName: i, num: num }) } feedingData.value.forEach((item:any) => { tl += item.num }) statisticsData.value = [...statisticsData.value, ...arr] statisticsData.value.push({ name: 'å·¥ååæ ¼äº§åº', materialName: info.value.mmodel.name + '-' + info.value.procedureName, num: produceFrom.qualified }) statisticsData.value.push({ name: 'å·¥åä¸è¯äº§åº', materialName: info.value.mmodel.name + '-' + info.value.procedureName, num: produceFrom.undesirable }) // isSubmit.value = produceFrom.qualified + produceFrom.undesirable <= info.value.planNum; isSubmit.value = true } if (!wuList.value.length === 0) return Toast('ææä¸è½ä¸ºç©º') } statistics.value = true } // æ ¹æ®æä¸ªåæ®µè¿è¡åç» const getGroupNum = (arr: any) => { let newArry: any = {}; for (let i = 0; i < arr.length; i++) { if (newArry[arr[i].materialName]) { newArry[arr[i].materialName].push(arr[i]) } else { newArry[arr[i].materialName] = [arr[i]] } if (!from.qualified) return Toast('è¯åæ°ä¸è½ä¸ºç©º') // æä¸è¯æ° if (from.undesirable > 0) { if (from.defective.length === 0) return Toast('ä¸è¯é¡¹ä¸è½ä¸ºç©º') } return newArry; } // è¿åä¿®æ¹ const gofh = () => { statistics.value = false } // 确认æ¥å·¥ const submitBG = () => { comfirmDoneStandard({ id: route.query.id if (!from.duration) return Toast('æ¥å·¥æ¶é¿ä¸è½ä¸ºç©º') autoWorkReport({ createWorkorderRecordDTO: { duration: from.duration, qualifiedNum: from.qualified, unQualifiedNum: from.undesirable }, plansId: from.processPlan.id, proGroupId: deviceId.value, proUserList: [from.userId], recordList: wuList.value.map((item: any) => { return { wstockId: item.id, num: item.num } }), createUnqualifiedDTOList: from.defective.map((item: any) => { return { categoryId: item.id, unQualifiedNum: item.num } }) }).then(res => { if (res.code === 200) { Toast.success({ message: 'æ¥å·¥æå', forbidClick: true, duration: 2000 }) Toast.success({message: 'æ¥å·¥æåï¼'}) setTimeout(() => { router.go(-2) }, 2000) router.go(-1) }, 2000); } }) } // é¢è®¡å·¥èµ const expectedSalary = computed(() => { if (!infoBox.value) return 0 // æä»¶è®¡ç® if (infoBox.value.type == 0) { console.log('计件') if (!from.qualified) return 0 if (infoBox.value.unqualified == 1) { // æ¯å¦è®¡å ¥ä¸è¯å let total = Number(from.qualified) + Number(from.undesirable) return total * infoBox.value.salary } else { return Number(from.qualified) * infoBox.value.salary } } else { console.log('计æ¶') if (!from.duration) return 0; let h = (from.duration / 60 / 60).toFixed(2) return Number(h) * infoBox.value.salary } }) // è¾¾æ ç const complianceRate = computed(() => { if (!infoBox.value) return 0; if (!from.qualified) return 0; if (!from.duration) return 0; // æä»¶è®¡ç® // if (infoBox.value.type == 0) { // if (infoBox.value.unqualified == 1) { // æ¯å¦è®¡å ¥ä¸è¯å let a = ((Number(from.qualified) + Number(from.undesirable)) / (from.duration / 60 / 60)).toFixed(2) let b = (infoBox.value.num / (infoBox.value.times / 60 / 60)).toFixed(2) console.log(a) console.log(b) return (Number(a) / Number(b)).toFixed(2) // let total = (Number(from.qualified) + Number(from.undesirable)) / ((from.duration * 60 * 60) * infoBox.value.num / ) // return total * infoBox.value.salary; // } else { // return Number(from.qualified) * infoBox.value.salary; // } // } else { // console.log('ææ¶é¿') // } }) const deleItem = (index: number) => { if (wuList.value.length === 1) return Toast('è³å°ä¿çä¸é¡¹å 容') wuList.value.splice(index, 1) } const openDev = () => { if (!from.processPlan) return Toast('请å 鿩工åºç产计å') deviceShow.value = true } const openMaterial = () => { if (!plansId.value) return Toast('请å 鿩工åºç产计å') if (!deviceId.value) return Toast('请å éæ©ç产设å¤') show1.value = true } const onConfirm1 = (e: any) => { from.userId = e.userId from.userName = e.name userShow.value = false } const onConfirm2 = (e: string) => { let h = Number(e.substring(0, 2)) let m = Number(e.substring(3, 5)) let s = 0 if (h > 0) { s += h * 60 * 60 } if (m > 0) { s += m * 60 } from.duration = s from.durationName = `${h}å°æ¶${m}åé` TimeShow.value = false } const onCancel1 = () => { userShow.value = false } const onCancel2 = () => { TimeShow.value = false } const onConfirm = (e: any) => { from.deviceId = e.id from.deviceName = e.name deviceId.value = e.id from.userId = '' from.userName = '' // getFindAll({ // deviceId: e.id, // planId: from.processPlan.id // }).then(res => { // if (res.code === 200) { // res.data.forEach((item: any) => { // item.name = item.umodel.name + '-' + item.tmodel.name // }) // userList.value = res.data // } // }) deviceShow.value = false } const onCancel = () => { deviceShow.value = false } const selectPlan = () => { router.push({ name: 'processPlans' }) } const close = () => { show1.value = false } const getData = () => { categoryExtList({ cateType: "3" }).then(res => { if (res.code === 200) { res.data.forEach((item: any) => { item.active = false item.num = '' }) cateList.value = res.data } }) } // éæ©ç©æ const getValue = (val: any) => { let obj = JSON.parse(JSON.stringify(val)) obj.total = val.num wuList.value.unshift(obj) let arr = wuList.value.map((item: any) => item.id) ids.value = arr.join(',') show1.value = false } onMounted(() => { pageDJs() queryByIds() getOrocessRecords() getOrocessRecordCC() getData() $Bus.on('callback', (res: any)=>{ from.processPlan = res plansId.value = res.id from.deviceId = '' from.deviceName = '' deviceId.value = '' from.userId = '' from.userName = '' total.value = res.num - res.workorderDistributNum // è·åè®¾å¤ getDeviceByCondition({ procedureId: res.procedureId }) .then(res1 => { if (res1.code === 200) { deviceId.value = res1.data[0].id from.deviceId = res1.data[0].id from.deviceName = res1.data[0].name deviceList.value = res1.data } }) // è·åç±»å getIdPlansExt(res.id) .then(res2 => { if (res.code === 200) { bomType.value = res2.data.bomType hasBom.value = res2.data.hasBom } }) // è·åå·¥èµç»©ææ°æ® queryOne({ deleted: 0, departId: res.factoryId, materialId: res.materialId, procedureId: res.procedureId }).then(result => { if (result.code === 200) { infoBox.value = result.data } }) }) }) </script> <style lang="scss" scoped> .bg { width: 100%; /*height: 100%;*/ position: absolute; background: #F7F7F7; .details_cz { .bg_plan { width: 100%; // height: 98px; padding: 30px; box-sizing: border-box; background: #FFFFFF; margin-bottom: 40px; display: flex; align-items: center; justify-content: space-between; .details_cz_sdtl { width: 330px; height: 76px; background: #FFFFFF; border-radius: 36px; display: flex; align-items: center; justify-content: center; img { width: 28px; height: 28px; margin-right: 14px; } span { font-size: 26px; font-weight: 400; color: #222222; span { font-size: 30px; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: #222222; b { color: red; } } .details_cz_smtl { /*width: 330px;*/ flex: 1; height: 76px; background: $nav-color; border-radius: 36px; .bg_plan_nr { display: flex; flex-direction: column; span { font-size: 24px; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: #666666; margin-top: 20px; &:first-child { font-size: 32px; font-family: PingFangSC-Medium, PingFang SC; font-weight: 500; color: #333333; margin-top: 0 !important; } } } .bg_plan_label_val { display: flex; align-items: center; justify-content: center; img { width: 28px; height: 28px; margin-right: 14px; } span { font-size: 26px; font-size: 28px; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: #ffffff; color: #999999; } img { width: 12px; height: 24px; margin-left: 20px; } } } @@ -1039,7 +626,9 @@ width: 100%; display: flex; flex-direction: column; margin-top: 30px; .bottomval { margin-bottom: 20px !important; } .bg_list_item { display: flex; flex-direction: column; @@ -1111,172 +700,165 @@ } } } .bg_list_item_num { .top { margin-top: 20px !important; } .bg_list_item_h { width: 100%; background: white; padding: 0 30px; box-sizing: border-box; .kong { text-align: center; font-size: 25px; padding: 30px 0; background: #ffffff; } .bg_list_item_num_item { background: white; .bg_list_item_num { width: 100%; min-height: 98px; background: white; display: flex; justify-content: center; align-items: center; // height: 118px; padding: 15px 0; box-sizing: border-box; justify-content: space-between; border-bottom: 1px solid #E5E5E5; border-bottom: 1PX solid #E5E5E5; &:last-child { border: none; border: none !important; } .bg_list_item_num_item_wl { flex-shrink: 0; .kong { text-align: center; font-size: 25px; padding: 30px 0; background: #ffffff; } .bg_list_item_num_item { width: 100%; height: 100%; display: flex; flex-direction: column; span { font-size: 34px; color: #222222; align-items: center; // height: 118px; padding: 15px 0; box-sizing: border-box; justify-content: space-between; border-bottom: 1px solid #E5E5E5; &:last-child { border: none; } .bg_list_item_num_item_wl_lx { margin-top: 10px; span { color: #222222; font-size: 28px; .bg_list_item_num_item_list { display: flex; align-items: center; .active { background: #305ED5 !important; color: #FFFFFF !important; } .bg_list_item_num_item_list_item { width: 116px; height: 62px; line-height: 62px; text-align: center; background: #F2F2F2; border-radius: 8px; font-size: 26px; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: #333333; margin-right: 20px; &:last-child { margin: 0 !important; } } } } .warning { color: $nav-stateColor5 !important; } .err { color: $nav-stateColor4 !important; } span { flex-shrink: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; .bg_list_item_num_item_wl { flex-shrink: 0; display: flex; flex-direction: column; span { font-size: 34px; color: #222222; } .bg_list_item_num_item_wl_lx { margin-top: 10px; span { color: #222222; font-size: 28px; } } } .warning { color: $nav-stateColor5 !important; margin-right: 5px; } .err { color: $nav-stateColor4 !important; margin-right: 5px; } &:nth-child(1) { font-size: 30px; font-weight: 400; color: #222222; } &:nth-child(2) { font-size: 28px; font-weight: 400; color: #333333; flex-shrink: 0; } } .bg_list_item_num_item_sr { flex: 1; display: flex; align-items: center; justify-content: flex-end; input::-webkit-input-placeholder { font-size: 28px; } input { text-align: right; width: 180px; height: 60px; border-radius: 8px; border: 1PX solid #E5E5E5; margin-right: 20px; font-size: 28px; font-weight: 400; color: #333333; padding: 0 30px img { width: 12px; height: 24px; margin-left: 20px; } span { font-size: 28px; font-weight: 400; color: #666666; flex-shrink: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; b { font-size: 30px; color: red; margin-right: 5px; } .warning { color: $nav-stateColor5 !important; margin-right: 5px; } .err { color: $nav-stateColor4 !important; margin-right: 5px; } &:nth-child(1) { font-size: 30px; font-weight: 400; color: #222222; } &:nth-child(2) { font-size: 28px; font-weight: 400; color: #333333; flex-shrink: 0; } } } } } } } .details_dj { display: flex; flex-direction: column; .details_dj_title { width: 100%; display: flex; align-items: center; justify-content: space-between; padding: 0 30px 30px 30px; box-sizing: border-box; .details_dj_title_left { display: flex; align-items: center; .details_x { width: 8px; height: 30px; background: $nav-color; border-radius: 2px; margin-right: 12px; } span { font-size: 32px; font-weight: 500; color: #222222; } } .details_dj_title_right { display: flex; align-items: center; img { width: 28px; height: 28px; margin-right: 12px; } span { font-size: 28px; font-weight: 400; color: $nav-color; } } } .details_dj_list { width: 100%; /*padding: 30px;*/ box-sizing: border-box; background: #ffffff; display: flex; flex-direction: column; .details_dj_list_item { display: flex; flex-direction: column; border-bottom: 1px solid #E5E5E5; padding: 30px; /*margin: 30px;*/ /*padding-bottom: 30px;*/ /*margin-bottom: 30px !important;*/ span { &:nth-child(1) { font-size: 28px; font-weight: 400; color: #222222; } &:nth-child(2) { font-size: 24px; font-weight: 400; color: #999999; margin-top: 24px; .bg_list_item_num_item_sr { flex: 1; display: flex; align-items: center; justify-content: flex-end; .color1 { font-size: 28px; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: #333333; } input::-webkit-input-placeholder { font-size: 28px; } input { text-align: right; width: 180px; height: 60px; border-radius: 8px; border: 1PX solid #E5E5E5; margin-right: 20px; font-size: 28px; font-weight: 400; color: #333333; padding: 0 30px } .wulll { width: 400px; text-align: right; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } span { font-size: 28px; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: #999999; } } } } } @@ -1290,10 +872,27 @@ bottom: 0; left: 0; width: 100%; z-index: 9; padding: 0 30px 60px 30px; box-sizing: border-box; display: flex; align-items: center; justify-content: space-between; .bg_footer_submit1 { width: 334px; height: 88px; line-height: 88px; text-align: center; background: #FFFFFF; box-shadow: 0px 0px 12px 0px rgba(0,0,0,0.08); border-radius: 8px; font-size: 30px; font-family: PingFangSC-Medium, PingFang SC; font-weight: 500; color: #305ED5; } .bg_footer_submit { width: 690px; width: 334px; height: 88px; background: $nav-color; box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.08); @@ -1304,108 +903,6 @@ display: flex; align-items: center; justify-content: center; } } .tg { width: 100%; height: 100%; padding: 30px; box-sizing: border-box; .tg_header { width: 100%; height: 45px; text-align: center; line-height: 45px; font-size: 30px; font-weight: 500; color: #222222; } .tg_table { width: 100%; margin-top: 40px; .tg_table_header { width: 100%; height: 72px; background: #EFF2FC; display: flex; align-items: center; .tg_table_header_item { flex: 1; font-size: 26px; font-weight: 500; color: #333333; display: flex; align-items: center; justify-content: center; } } } .nr { max-height: 400px; overflow-x: scroll; .tg_table_nr { width: 100%; padding: 24px 10px; box-sizing: border-box; display: flex; align-items: center; background: white; box-shadow: inset 0px -2px 0px 0px #E5E5E5; .tg_table_nr_item { flex: 1; font-size: 26px; font-weight: 500; color: #333333; display: flex; align-items: center; justify-content: center; } .tg_table_nr_item1 { flex: 1; font-size: 26px; font-weight: 500; color: #333333; display: flex; align-items: center; justify-content: center; } } } } .tg_footer { width: calc(100% - 60px); position: fixed; bottom: 0; display: flex; justify-content: space-between; align-items: center; box-sizing: border-box; padding-bottom: 40px; .tg_footer_fh { width: 100%; height: 88px; display: flex; align-items: center; justify-content: center; background: rgba(66, 117, 252, 0.05); border-radius: 8px; border: 1PX solid #4275FC; font-size: 32px; font-weight: 500; color: $nav-color; } .tg_footer_qr { width: 100%; height: 88px; border: none; display: flex; align-items: center; justify-content: center; background: $nav-color; border-radius: 8px; font-size: 32px; font-weight: 500; color: #FFFFFF; } } .bl { @@ -1425,21 +922,38 @@ font-size: 32px !important; } } img { width: 28px; height: 28px; } } .bl_footer { width: 100%; height: 88px; line-height: 88px; text-align: center; background: #305ED5; border-radius: 8px; font-size: 32px; font-family: PingFangSC-Medium, PingFang SC; font-weight: 500; color: #FFFFFF; margin-top: 30px; } .bl_list { width: 100%; height: 580px; height: 550px; overflow-y: scroll; margin-top: 30px; .bl_list_item { width: 100%; height: 60px; height: 96px; display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; border-bottom: 1PX solid #E5E5E5; &:last-child { margin-bottom: 0 !important; border: none !important; } .bl_list_item_left { flex: 1; @@ -1448,6 +962,7 @@ input { width: 30px; height: 30px; border: 1PX solid #CCCCCC; margin: 0 !important; } span { @@ -1464,9 +979,19 @@ padding-left: 5px; width: 160px; height: 100%; padding: 0 30px; box-sizing: border-box; text-align: right; font-size: 28px; color: #333333; border-radius: 10px; border: 2px solid #999999 border: 1PX solid #CCCCCC; &::-webkit-input-placeholder { font-size: 28px; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: #999999; } } } } h5_standard/src/views/wxLogin.vue
@@ -45,8 +45,8 @@ }) const login = async () => { if (!from.openid) return Toast('openidä¸è½ä¸ºç©º') if (!from.unionid) return Toast('unionidä¸è½ä¸ºç©º') // if (!from.openid) return Toast('openidä¸è½ä¸ºç©º') // if (!from.unionid) return Toast('unionidä¸è½ä¸ºç©º') if (!from.companyId) return Toast('ä¼ä¸ä»£ç ä¸è½ä¸ºç©º') if (!from.username) return Toast('ææºå·ä¸è½ä¸ºç©º') if (!from.password) return Toast('å¯ç ä¸è½ä¸ºç©º') server/src/main/java/doumeemes/api/business/SalaryParamController.java
@@ -11,13 +11,21 @@ import doumeemes.dao.ext.dto.SalaryParamDTO; import doumeemes.service.business.SalaryParamService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** @@ -89,4 +97,24 @@ public ApiResponse findById(@PathVariable Integer id) { return ApiResponse.success(salaryParamService.findById(id)); } @ApiOperation(value = "æ¹éå¯¼å ¥è®¡å", notes = "æ¹éå¯¼å ¥è®¡å", httpMethod = "POST", position = 6) @ApiImplicitParams({ @ApiImplicitParam(name = "folder", value = "æä»¶å¤¹", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class), }) @PostMapping(value = "/importBatch", headers = "content-type=multipart/form-data") // @RequiresPermissions("business:salaryparam:create") public ApiResponse importBatch(String folder, HttpServletRequest request, HttpServletResponse response) throws Exception { CommonsMultipartResolver multipartResovler = new CommonsMultipartResolver(); if (multipartResovler.isMultipart(request)) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Iterator<String> it = multipartRequest.getFileNames(); while (it.hasNext()) { MultipartFile file = multipartRequest.getFile((String) it.next()); salaryParamService.importPlans(file); break; } } return ApiResponse.success( null); } } server/src/main/java/doumeemes/api/business/UnqualifiedRecordController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,71 @@ package doumeemes.api.business; import doumeemes.api.BaseController; import doumeemes.core.annotation.excel.ExcelExporter; import doumeemes.core.annotation.pr.PreventRepeat; import doumeemes.core.model.ApiResponse; import doumeemes.core.model.PageWrap; import doumeemes.core.model.PageData; import doumeemes.dao.business.model.UnqualifiedRecord; import doumeemes.service.business.UnqualifiedRecordService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; /** * @author æ±è¹è¹ * @since 2023/08/16 14:15 */ @Api(tags = "å·¥åç±»-æ¥å·¥ä¸è¯è®°å½ç±»å表") @RestController @RequestMapping("/business/unqualifiedRecord") public class UnqualifiedRecordController extends BaseController { @Autowired private UnqualifiedRecordService unqualifiedRecordService; @PreventRepeat @ApiOperation("æ°å»º") @PostMapping("/create") @RequiresPermissions("business:unqualifiedrecord:create") public ApiResponse create(@RequestBody UnqualifiedRecord unqualifiedRecord) { return ApiResponse.success(unqualifiedRecordService.create(unqualifiedRecord)); } @ApiOperation("æ ¹æ®IDå é¤") @GetMapping("/delete/{id}") @RequiresPermissions("business:unqualifiedrecord:delete") public ApiResponse deleteById(@PathVariable Integer id) { unqualifiedRecordService.deleteById(id); return ApiResponse.success(null); } @ApiOperation("æ ¹æ®IDä¿®æ¹") @PostMapping("/updateById") @RequiresPermissions("business:unqualifiedrecord:update") public ApiResponse updateById(@RequestBody UnqualifiedRecord unqualifiedRecord) { unqualifiedRecordService.updateById(unqualifiedRecord); return ApiResponse.success(null); } @ApiOperation("å页æ¥è¯¢") @PostMapping("/page") @RequiresPermissions("business:unqualifiedrecord:query") public ApiResponse<PageData<UnqualifiedRecord>> findPage (@RequestBody PageWrap<UnqualifiedRecord> pageWrap) { return ApiResponse.success(unqualifiedRecordService.findPage(pageWrap)); } @ApiOperation("æ ¹æ®IDæ¥è¯¢") @GetMapping("/{id}") @RequiresPermissions("business:unqualifiedrecord:query") public ApiResponse findById(@PathVariable Integer id) { return ApiResponse.success(unqualifiedRecordService.findById(id)); } } server/src/main/java/doumeemes/api/ext/CategoryExtController.java
@@ -154,6 +154,15 @@ return ApiResponse.success(categoryExtService.findPage(pageWrap)); } @ApiOperation("å表æ¥è¯¢") @PostMapping("/list") @RequiresPermissions("ext:categoryext:query") public ApiResponse<List<CategoryExtListVO>> list(@RequestBody QueryCategoryExtDTO queryCategoryExtDTO) { queryCategoryExtDTO.setDeleted(Constants.ZERO); queryCategoryExtDTO.setRootDepartId(getLoginUser().getRootDepartment().getId()); return ApiResponse.success(categoryExtService.findList(queryCategoryExtDTO)); } @ApiOperation("导åºExcel") @PostMapping("/exportExcel") @RequiresPermissions("ext:categoryext:exportExcel") server/src/main/java/doumeemes/api/ext/PlansExtController.java
@@ -223,7 +223,6 @@ return ApiResponse.success(plansExtService.pageCount(param)); } @ApiOperation("ä¸é®æ¥å·¥") @PostMapping("/autoWorkReport") public ApiResponse autoWorkReport (@RequestBody AutoWorkReportDTO autoWorkReportDTO) { server/src/main/java/doumeemes/api/ext/SalaryParamExtController.java
@@ -79,7 +79,7 @@ @ApiOperation("æ ¹æ®å¯¹è±¡ä¿¡æ¯æ¥è¯¢") @PostMapping("/queryOne") @RequiresPermissions("business:salaryparam:query") public ApiResponse queryOne(@RequestBody SalaryParam salaryParam) { public ApiResponse<SalaryParam> queryOne(@RequestBody SalaryParam salaryParam) { SalaryParam data = salaryParamService.findOne(salaryParam); return ApiResponse.success(data); } server/src/main/java/doumeemes/config/shiro/ShiroRealm.java
@@ -37,6 +37,7 @@ import java.util.Date; import java.util.List; import java.util.Objects; /** * èªå®ä¹Realmï¼å¤ç认è¯åæé @@ -130,8 +131,10 @@ if(com == null){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对ä¸èµ·ï¼è¯¥è´¦æ·å¼å¸¸ï¼"); } if(com.getOepnValidDate().before(new Date())){ if(Constants.equalsInteger( com.getStatus(),Constants.ZERO) ){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对ä¸èµ·ï¼è¯¥ä¼ä¸å·²è¿ç¦ç¨ï¼"); } if(com.getOepnValidDate() != null && com.getOepnValidDate().before(new Date())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对ä¸èµ·ï¼è¯¥ä¼ä¸å·²è¿ä½¿ç¨æææï¼"); } //妿æ¯ä¼ä¸ç¨æ· server/src/main/java/doumeemes/core/utils/excel/EasyExcelUtil.java
@@ -87,6 +87,9 @@ } /** * * titleRows : æ é¢å å è¡ * headerRows : åå å è¡ * excel常è§å¯¼å ¥(é»è®¤åªè¯»å第ä¸å¼ sheetå·¥ä½ç°¿) */ public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass){ @@ -150,4 +153,4 @@ } return list; } } } server/src/main/java/doumeemes/dao/business/UnqualifiedRecordMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ package doumeemes.dao.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import doumeemes.dao.business.model.UnqualifiedRecord; /** * @author æ±è¹è¹ * @since 2023/08/16 14:15 */ public interface UnqualifiedRecordMapper extends BaseMapper<UnqualifiedRecord> { } server/src/main/java/doumeemes/dao/business/dto/AutoWorkReportDTO.java
@@ -33,4 +33,7 @@ @ApiModelProperty(value = "产åºè®°å½") private CreateWorkorderRecordDTO createWorkorderRecordDTO; @ApiModelProperty(value = "ä¸è¯åå类记å½") private List<CreateUnqualifiedDTO> createUnqualifiedDTOList ; } server/src/main/java/doumeemes/dao/business/dto/CreateUnqualifiedDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package doumeemes.dao.business.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @author æ±è¹è¹ * @date 2022/05/12 10:18 */ @Data public class CreateUnqualifiedDTO { @ApiModelProperty(value = "ä¸è¯ç±»å«ä¸»é®" ) private Integer categoryId; @ApiModelProperty(value = "æ£éªä¸åæ ¼æ°é") private BigDecimal unQualifiedNum; } server/src/main/java/doumeemes/dao/business/model/UnqualifiedRecord.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,79 @@ package doumeemes.dao.business.model; import doumeemes.core.annotation.excel.ExcelColumn; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import java.util.Date; import java.math.BigDecimal; /** * å·¥åç±»-æ¥å·¥ä¸è¯è®°å½ç±»å表 * @author æ±è¹è¹ * @since 2023/08/16 14:15 */ @Data @ApiModel("å·¥åç±»-æ¥å·¥ä¸è¯è®°å½ç±»å表") @TableName("`unqualified_record`") public class UnqualifiedRecord { @TableId(type = IdType.AUTO) @ApiModelProperty(value = "主é®", example = "1") @ExcelColumn(name="主é®") private Integer id; @ApiModelProperty(value = "æ¯å¦å·²å é¤ 0æªå é¤ 1å·²å é¤", example = "1") @ExcelColumn(name="æ¯å¦å·²å é¤ 0æªå é¤ 1å·²å é¤") private Integer deleted; @ApiModelProperty(value = "å建人ç¼ç ", example = "1") @ExcelColumn(name="å建人ç¼ç ") private Integer createUser; @ApiModelProperty(value = "å建æ¶é´") @ExcelColumn(name="å建æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") private Date createTime; @ApiModelProperty(value = "æ´æ°äººç¼ç ", example = "1") @ExcelColumn(name="æ´æ°äººç¼ç ") private Integer updateUser; @ApiModelProperty(value = "æ´æ°æ¶é´") @ExcelColumn(name="æ´æ°æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") private Date updateTime; @ApiModelProperty(value = "夿³¨") @ExcelColumn(name="夿³¨") private String remark; @ApiModelProperty(value = "主ç»ç»ç¼ç ï¼å ³èdepartmentè¡¨æ ¹ç»ç»ï¼", example = "1") @ExcelColumn(name="主ç»ç»ç¼ç ï¼å ³èdepartmentè¡¨æ ¹ç»ç»ï¼") private Integer rootDepartId; @ApiModelProperty(value = "å ¬å¸çº§ç»ç»ç¼ç ï¼å ³èdepartment表ï¼", example = "1") @ExcelColumn(name="å ¬å¸çº§ç»ç»ç¼ç ï¼å ³èdepartment表ï¼") private Integer departId; @ApiModelProperty(value = "å·¥å主é®", example = "1") @ExcelColumn(name="å·¥å主é®") private Integer workorderId; @ApiModelProperty(value = "产åºè®°å½ä¸»é®", example = "1") @ExcelColumn(name="产åºè®°å½ä¸»é®") private Integer recordId; @ApiModelProperty(value = "ç±»å«ä¸»é®", example = "1") @ExcelColumn(name="ç±»å«ä¸»é®") private Integer categoryId; @ApiModelProperty(value = "æ£éªä¸åæ ¼æ°é", example = "1") @ExcelColumn(name="æ£éªä¸åæ ¼æ°é") private BigDecimal unqualifiedNum; } server/src/main/java/doumeemes/dao/business/vo/SalaryParamVO.java
@@ -14,14 +14,15 @@ public class SalaryParamVO { @ApiModelProperty(value = "主é®") @ExcelColumn(name="åºå·",index = 1) private Integer id; @ApiModelProperty(value = "å建人ç¼ç ") @ExcelColumn(name="å建人ç¼ç ") @ExcelColumn(name="å建人ç¼ç ",index = 11) private String createUserName; @ApiModelProperty(value = "å建æ¶é´") @ExcelColumn(name="å建æ¶é´") @ExcelColumn(name="å建æ¶é´",index = 10, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date createTime; @ApiModelProperty(value = "主ç»ç»ç¼ç ï¼å ³èdepartmentè¡¨æ ¹ç»ç»ï¼") @@ -39,42 +40,42 @@ private Integer procedureId; @ApiModelProperty(value = "å·¥åºç¼ç ï¼å ³èprocedure表ï¼") @ExcelColumn(name="å·¥åºç¼ç ï¼å ³èprocedure表ï¼") // @ExcelColumn(name="å·¥åºç¼ç ï¼å ³èprocedure表ï¼") @NotEmpty(message = "å·¥åºç¼ç ä¸è½ä¸ºç©º") private Integer procedureCode; @ApiModelProperty(value = "å·¥åºç¼ç ï¼å ³èprocedure表ï¼") @ExcelColumn(name="å·¥åºç¼ç ï¼å ³èprocedure表ï¼") @ExcelColumn(name="å·¥åºåç§°",index =5) private String procedureName; @ApiModelProperty(value = "产ååç§°" ) @Excel(name="产ååç§°",orderNum ="3") @ExcelColumn(name="ç©æåç§°",index =3) private String materialName; @ApiModelProperty(value = "产åç¼ç " ) @Excel(name="产åç¼ç ",orderNum ="4") @ExcelColumn(name="ç©æç¼ç ",index =4) private String materialCode; @ApiModelProperty(value = "ç©æç¼ç ï¼å ³èmaterial_distribute表ï¼", example = "1") private Integer materialId; @ApiModelProperty(value = "å·¥èµåä»·ï¼å )") @ExcelColumn(name="å·¥èµåä»·ï¼å )") @ExcelColumn(name="å·¥èµåä»·ï¼å )",index =6) private BigDecimal salary; @ApiModelProperty(value = "æ åæ°é") @ExcelColumn(name="æ åæ°é") @ExcelColumn(name="æ å产åº",index =7) private Integer num; @ApiModelProperty(value = "æ åæ¶é¿ï¼ç§ï¼") @ExcelColumn(name="æ åæ¶é¿ï¼ç§ï¼") @ExcelColumn(name="æ åæ¶é¿ï¼ç§ï¼",index =8) private String times; @ApiModelProperty(value = "ä¸è¯åæ¯å¦è®¡å ¥ 0å¦ 1æ¯") @ExcelColumn(name="ä¸è¯åæ¯å¦è®¡å ¥ 0å¦ 1æ¯") @ExcelColumn(name="ä¸è¯åæ¯å¦è®¡å ¥ 0å¦ 1æ¯",index = 9 ,valueMapping = "0=å¦;1=æ¯") private Integer unqualified; @ApiModelProperty(value = "计价æ¹å¼ 0计件 1计æ¶") @ExcelColumn(name="计价æ¹å¼ 0计件 1计æ¶") @ExcelColumn(name="计价æ¹å¼",index = 2 ,valueMapping = "0=计件;1=计æ¶") private Integer type; } server/src/main/java/doumeemes/dao/business/vo/WorkPlansVO.java
@@ -57,7 +57,7 @@ private Integer factoryId; @ApiModelProperty(value = "å·¥ååç§°", example = "1") @ExcelColumn(name="å·¥ååç§°",index = 4,width =15) @ExcelColumn(name="å·¥ååç§°",index = 5,width =15) private String factoryName; @ApiModelProperty(value = "æ¥æº 0人工å建ã1Excelå¯¼å ¥", example = "1") @@ -67,12 +67,12 @@ @ExcelColumn(name="计åç¼ç ",index = 0,width =15) private String planCode; @ApiModelProperty(value = "è®¡åæ¥æ") @ExcelColumn(name="è®¡åæ¥æ",index = 3,width =15) @ApiModelProperty(value = "计åå®ææ¥æ") @ExcelColumn(name="è®¡åæ¥æ",index = 4,width =15) @JsonFormat(pattern = "yyyy-MM-dd") private Date planDate; @ApiModelProperty(value = "计åå¼å§æ¥æ") @ExcelColumn(name="计åå¼å§æ¥æ",index = 17,width =15) @ExcelColumn(name="计åå¼å§æ¥æ",index = 3,width =15) @JsonFormat(pattern = "yyyy-MM-dd") private Date startDate; @ApiModelProperty(value = "éå®åå·" ) @@ -94,26 +94,26 @@ private Integer unitId; @ApiModelProperty(value = "åä½ç¼ç åç§°", example = "1") @ExcelColumn(name="åä½åç§°",index = 6,width =15) @ExcelColumn(name="åä½åç§°",index = 7,width =15) private String unitName; @ApiModelProperty(value = "è®¡åæ°é", example = "1") @ExcelColumn(name="è®¡åæ°é",index = 5,width =15) @ExcelColumn(name="è®¡åæ°é",index = 6,width =15) private Integer num; @ApiModelProperty(value = "æ¹æ¬¡å·") @ExcelColumn(name="æ¹æ¬¡å·",index = 7,width =15) @ExcelColumn(name="æ¹æ¬¡å·",index = 8,width =15) private String batch; @ApiModelProperty(value = "ç¶æ 1=å·²çæ;2=å·²åå¸ã3已忶ã4å·²åé ã5å·²æåã6å·²å®å·¥ã7å·²å ¥åºã8å·²å ³é", example = "1") @ExcelColumn(name="计åç¶æ",valueMapping = "0=å·²çæ;1=æ§è¡ä¸;3=已忶;4=å·²åé ;5=å·²æå;6=å·²å®å·¥;7=å·²å ¥åº;8=å·²å ³é;",index = 8,width =15) @ExcelColumn(name="计åç¶æ",valueMapping = "0=å·²çæ;1=æ§è¡ä¸;3=已忶;4=å·²åé ;5=å·²æå;6=å·²å®å·¥;7=å·²å ¥åº;8=å·²å ³é;",index = 9,width =15) private Integer status; @ApiModelProperty(value = "å¯¼å ¥æ¹å·ï¼å ³èplan_import表)", example = "1") private Integer importId; @ApiModelProperty(value = "æ¯å¦æå 0æªæå 1å·²æå", example = "1") @ExcelColumn(name="æ¯å¦æå",valueMapping = "0=å¦;1=æ¯",index = 9,width =15) @ExcelColumn(name="æ¯å¦æå",valueMapping = "0=å¦;1=æ¯",index = 10,width =15) private Integer paused; @ApiModelProperty(value = "计ååç¼ç ï¼ä¸system_userè¡¨å ³èï¼", example = "1") @@ -123,31 +123,31 @@ private Integer urgent; @ApiModelProperty(value = "计ååå§å", example = "1") @ExcelColumn(name="计ååå§å",index = 14,width =15) @ExcelColumn(name="计ååå§å",index = 15,width =15) private String userName; @ApiModelProperty(value = "计ååææºå·", example = "1") @ExcelColumn(name="计ååææºå·",index = 15,width =15) @ExcelColumn(name="计ååææºå·",index = 16,width =15) private String userMobile; @ApiModelProperty(value = "计åå叿¶é´") @JsonFormat(pattern = "yyyy-MM-dd") @ExcelColumn(name="计åå叿¶é´",index = 13,width =15) @ExcelColumn(name="计åå叿¶é´",index = 14,width =15) private Date publishDate; @ApiModelProperty(value = "ç¨æ·é¨é¨åç§°", example = "1") private String userDepartName; @ApiModelProperty(value = "å®å·¥æ°é", example = "1") @ExcelColumn(name="å®å·¥æ°é" ,index = 10,width =15) @ExcelColumn(name="å®å·¥æ°é" ,index = 11,width =15) private Integer finishNum; @ApiModelProperty(value = "å®å·¥åæ ¼æ°é", example = "1") @ExcelColumn(name="å®å·¥åæ ¼æ°é",index = 11,width =15) @ExcelColumn(name="å®å·¥åæ ¼æ°é",index = 12,width =15) private Integer finishQualifiedNum; @ApiModelProperty(value = "å®å·¥ä¸è¯æ°é", example = "1") @ExcelColumn(name="å®å·¥ä¸è¯æ°é",index = 12,width =15) @ExcelColumn(name="å®å·¥ä¸è¯æ°é",index = 13,width =15) private Integer finishUnQualifiedNum; @ApiModelProperty(value = "å计åæç»ä¿¡æ¯", example = "1") server/src/main/java/doumeemes/dao/ext/dto/QueryPlansExtDTO.java
@@ -441,8 +441,8 @@ private String mixParam; @ApiModelProperty(value = "å¼å§æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") private Date startDate; private String planDateStartDate; @ApiModelProperty(value = "æªæ¢æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") private Date endDate; private String planDateEndDate; } server/src/main/java/doumeemes/dao/ext/dto/QueryUserSalaryListDTO.java
@@ -28,10 +28,10 @@ private Integer rootDepartId; @ApiModelProperty(value = "å¼å§æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") private Date startDate; private String startDate; @ApiModelProperty(value = "ç»ææ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") private Date endDate; private String endDate; @ApiModelProperty(value = "æ°æ®æéé¨é¨ç¼ç éå" ,hidden = true) private List<Integer> departIds; server/src/main/java/doumeemes/dao/ext/dto/SalaryParamImportDTO.java
@@ -1,6 +1,7 @@ package doumeemes.dao.ext.dto; import cn.afterturn.easypoi.excel.annotation.Excel; import cn.afterturn.easypoi.excel.annotation.ExcelTarget; import io.swagger.annotations.ApiModel; import lombok.Data; @@ -12,6 +13,7 @@ */ @Data @ApiModel("绩æå·¥èµé ç½®å¯¼å ¥") @ExcelTarget("SalaryParamImportDTO") public class SalaryParamImportDTO { @Excel(name="计价æ¹å¼",orderNum ="1") @@ -20,10 +22,10 @@ @Excel(name="å·¥ååç§°",orderNum ="2") private String departName; @Excel(name="产ååç§°",orderNum ="3") @Excel(name="ç©æåç§°",orderNum ="3") private String materialName; @Excel(name="产åç¼ç ",orderNum ="4") @Excel(name="ç©æç¼ç ",orderNum ="4") private String materialCode; @Excel(name="å·¥åºåç§°",orderNum ="5") @@ -33,7 +35,7 @@ private BigDecimal salary; @Excel(name="æ å产åº",orderNum ="7") private Integer NUM; private String num; @Excel(name="æ åå·¥æ¶",orderNum ="8") private String timesName; server/src/main/java/doumeemes/dao/ext/vo/BomExtListVO.java
@@ -60,8 +60,8 @@ @ExcelColumn(name="å ¬å¸çº§ç»ç»ç¼ç ï¼å ³èdepartment表ï¼") private Integer departId; @ApiModelProperty(value = "ç©æIDï¼å ³èmaterial表ï¼", example = "1") @ExcelColumn(name="ç©æIDï¼å ³èmaterial表ï¼") @ApiModelProperty(value = "ç©æIDï¼è¯¥åæ®µå ³è material_distribute 表ID ï¼ï¼ï¼ï¼ ï¼", example = "1") @ExcelColumn(name="ç©æIDï¼å ³èmaterial_distribute表ï¼") private Integer materialId; @ApiModelProperty(value = "çæ¬å·") @@ -157,5 +157,6 @@ @ApiModelProperty(value = "å·¥åºåç§°") private String procedureName; @ApiModelProperty(value = "material id") private Integer realMaterialId; } server/src/main/java/doumeemes/dao/ext/vo/CompanyExtListVO.java
@@ -165,4 +165,7 @@ @ApiModelProperty(value = "ç¾ç¾å¹³å°åºç¨åæ°ï¼jsonæ ¼å¼åå¨{app_key:,aes_key:,app_secret:}" ) private String lingyangInfo; @ApiModelProperty(value = "ç¶æ 1 å¼å¯ 0 ç¦ç¨") private Integer status; } server/src/main/java/doumeemes/dao/ext/vo/PlansExtListVO.java
@@ -71,7 +71,7 @@ private Integer lessDistributNum; @ApiModelProperty(value = "计åç±»å 0æ£å¸¸1å¼å¸¸2è¿å·¥", example = "1") @ExcelColumn(name="计åç±»å",valueMapping = "0=æ£å¸¸;1=å¼å¸¸;2=è¿å·¥;",index = 11,width =15) @ExcelColumn(name="计åç±»å",valueMapping = "0=æ£å¸¸;1=å¼å¸¸;2=è¿å·¥;",index = 12,width =15) private Integer type; @ApiModelProperty(value = "ç产工åºç¼ç ï¼å ³èprocedures表ï¼", example = "1") @@ -84,15 +84,15 @@ private Integer unitId; @ApiModelProperty(value = "è®¡åæ°é", example = "1") @ExcelColumn(name="è®¡åæ°é",index = 6,width =15) @ExcelColumn(name="è®¡åæ°é",index = 7,width =15) private Integer num; @ApiModelProperty(value = "æ¹æ¬¡å·") @ExcelColumn(name="çäº§æ¹æ¬¡å·",index = 8,width =15) @ExcelColumn(name="çäº§æ¹æ¬¡å·",index = 9,width =15) private String batch; @ApiModelProperty(value = "ä¼å çº§ï¼æåºç ï¼å段", example = "1") @ExcelColumn(name="ä¼å 级",index = 9,width =15) @ExcelColumn(name="ä¼å 级",index = 10,width =15) private Integer urgent; @ApiModelProperty(value = "å¯¼å ¥æ¹å·ï¼å ³èplan_import表)", example = "1") @@ -102,14 +102,14 @@ private Integer userId; @ApiModelProperty(value = "ç¶æ 0å·²çæã1å·²åå¸ã2å·²æ¤åã3已忶ã4å·²åé ã5å·²æåã6å·²å®å·¥ã7å·²å ¥åºã8å·²å ³é", example = "1") @ExcelColumn(name="计åç¶æ",valueMapping = "0=å·²çæ;1=å·²åå¸;2=å·²æ¤å;3=已忶;4=å·²åé ;5=å·²æå;6=å·²å®å·¥;7=å·²å ¥åº;8=å·²å ³é;",index = 10,width =15) @ExcelColumn(name="计åç¶æ",valueMapping = "0=å·²çæ;1=å·²åå¸;2=å·²æ¤å;3=已忶;4=å·²åé ;5=å·²æå;6=å·²å®å·¥;7=å·²å ¥åº;8=å·²å ³é;",index = 11,width =15) private Integer status; @ApiModelProperty(value = "è¿ä¿®ç³è¯·åå·ï¼å ³èbackorder表ï¼", example = "1") private Integer backorderId; @ApiModelProperty(value = "计åå叿¶é´") @ExcelColumn(name="å叿¥æ",index = 15,width =15) @ExcelColumn(name="å叿¥æ",index = 16,width =15) @JsonFormat(pattern = "yyyy-MM-dd") private Date publishDate; @@ -133,20 +133,29 @@ @ApiModelProperty(value = "å·²å®å·¥æ°é", example = "0") private Integer doneNum; @ApiModelProperty(value = "åæ ¼æ°é", example = "0") @ExcelColumn(name="åæ ¼æ°é",index = 13,width =15) @ExcelColumn(name="åæ ¼æ°é",index = 14,width =15) private Integer qulifiedNum; @ApiModelProperty(value = "ä¸è¯æ°é", example = "0") @ExcelColumn(name="ä¸è¯æ°é",index = 14,width =15) @ExcelColumn(name="ä¸è¯æ°é",index = 15,width =15) private Integer unqulifiedNum; @ApiModelProperty(value = "å·²åé ç产æ°é", example = "1",hidden = true) private Integer distributNum; @ApiModelProperty(value = "å·¥åå·²åé ç产æ°é", example = "1",hidden = true) private Integer workorderDistributNum; @ApiModelProperty(value = "å·²åé æªå®å·¥ç产æ°é", example = "1",hidden = true) @ExcelColumn(name="å·²åé æªå®å·¥ç产æ°é",index = 12,width =15) @ExcelColumn(name="å·²åé æªå®å·¥ç产æ°é",index = 13,width =15) private Integer distributNoDoneNum; @ApiModelProperty(value = "åºåæ¯å¦æ»¡è¶³ 0䏿»¡è¶³ 1满足", example = "0") private Integer isStock; @ApiModelProperty(value = "æ¯å¦å»¶æ") private Boolean hasExpire; @ApiModelProperty(value = "æå计åå¼å§æ¥æ") @ExcelColumn(name="è®¡åæ¥æ",index = 4,width =15) @JsonFormat(pattern = "yyyy-MM-dd") private Date workPlanPlanDate; @ApiModelProperty(value = "æå计åå¼å§æ¥æ") @JsonFormat(pattern = "yyyy-MM-dd") private Date workPlanStartDate; @ExcelColumn(name="ç©æåç§°",index = 1,width =15) @@ -155,16 +164,16 @@ @ExcelColumn(name="ç©æç¼ç ",index = 2,width =15) private String materialCode; @ExcelColumn(name="å·¥å",index = 4,width =15) @ExcelColumn(name="å·¥å",index = 5,width =15) private String factoryName; @ExcelColumn(name="å·¥åº",index = 5,width =15) @ExcelColumn(name="å·¥åº",index = 6,width =15) private String produceName; @ExcelColumn(name="计åå",index = 16,width =15) @ExcelColumn(name="计åå",index = 17,width =15) private String planUserName; @ExcelColumn(name="åä½åç§°",index = 7,width =15) @ExcelColumn(name="åä½åç§°",index = 8,width =15) private String unitName; @ExcelColumn(name="æå计åç¼ç ") @@ -173,14 +182,16 @@ @ExcelColumn(name="éå®è®¢å") private String salesOrder; @ApiModelProperty(value = "æå计åå¼å§æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") private Date workPlanStartDate; @ApiModelProperty(value = "æå计åç»ææ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") private Date workPlanEndDate; @ApiModelProperty(value = "å·²ç产æ°é") private Integer produceNum; @ApiModelProperty(value = "æ¯å¦æbomé ç½® 0æ 1æ", example = "1") private Integer hasBom; @ApiModelProperty(value = "bomæææ¹å¼ 0æ¨å¼ 1æå¼", example = "1") private Integer bomType; } server/src/main/java/doumeemes/service/business/UnqualifiedRecordService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,97 @@ package doumeemes.service.business; import doumeemes.core.model.PageData; import doumeemes.core.model.PageWrap; import doumeemes.dao.business.model.UnqualifiedRecord; import java.util.List; /** * å·¥åç±»-æ¥å·¥ä¸è¯è®°å½ç±»å表Serviceå®ä¹ * @author æ±è¹è¹ * @since 2023/08/16 14:15 */ public interface UnqualifiedRecordService { /** * å建 * * @param unqualifiedRecord å®ä½å¯¹è±¡ * @return Integer */ Integer create(UnqualifiedRecord unqualifiedRecord); /** * 主é®å é¤ * * @param id ä¸»é® */ void deleteById(Integer id); /** * å é¤ * * @param unqualifiedRecord å®ä½å¯¹è±¡ */ void delete(UnqualifiedRecord unqualifiedRecord); /** * æ¹é主é®å é¤ * * @param ids 主é®é */ void deleteByIdInBatch(List<Integer> ids); /** * 䏻鮿´æ° * * @param unqualifiedRecord å®ä½å¯¹è±¡ */ void updateById(UnqualifiedRecord unqualifiedRecord); /** * æ¹é䏻鮿´æ° * * @param unqualifiedRecords å®ä½é */ void updateByIdInBatch(List<UnqualifiedRecord> unqualifiedRecords); /** * 䏻鮿¥è¯¢ * * @param id ä¸»é® * @return UnqualifiedRecord */ UnqualifiedRecord findById(Integer id); /** * æ¡ä»¶æ¥è¯¢åæ¡è®°å½ * * @param unqualifiedRecord å®ä½å¯¹è±¡ * @return UnqualifiedRecord */ UnqualifiedRecord findOne(UnqualifiedRecord unqualifiedRecord); /** * æ¡ä»¶æ¥è¯¢ * * @param unqualifiedRecord å®ä½å¯¹è±¡ * @return List<UnqualifiedRecord> */ List<UnqualifiedRecord> findList(UnqualifiedRecord unqualifiedRecord); /** * å页æ¥è¯¢ * * @param pageWrap å页对象 * @return PageData<UnqualifiedRecord> */ PageData<UnqualifiedRecord> findPage(PageWrap<UnqualifiedRecord> pageWrap); /** * æ¡ä»¶ç»è®¡ * * @param unqualifiedRecord å®ä½å¯¹è±¡ * @return long */ long count(UnqualifiedRecord unqualifiedRecord); } server/src/main/java/doumeemes/service/business/impl/CompanyOpenServiceImpl.java
@@ -11,14 +11,18 @@ import doumeemes.dao.business.model.Company; import doumeemes.dao.business.model.CompanyLog; import doumeemes.dao.business.model.CompanyOpen; import doumeemes.dao.ext.vo.CompanyExtListVO; import doumeemes.service.business.CompanyLogService; import doumeemes.service.business.CompanyOpenService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import doumeemes.service.ext.DepartmentExtService; import org.apache.shiro.SecurityUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -43,6 +47,10 @@ @Autowired CompanyLogService companyLogService; @Autowired @Lazy private DepartmentExtService departmentExtService; @Override public Integer create(CompanyOpen companyOpen) { @@ -90,7 +98,7 @@ company.setOepnValidDate(companyOpen.getValidDate()); company.setOepnType(companyOpen.getOepnType()); companyMapper.updateById(company); Company company1 = companyMapper.selectById(companyOpen.getCompanyId()); CompanyLog companyLog = new CompanyLog(); companyLog.setDeleted((byte) Constants.ZERO); @@ -103,6 +111,15 @@ companyLog.setUpdateType(Constants.CompanyUpdateType.UPDATE_VAIL_DATE.getKey()); companyLog.setDetail("æææä»"+format.format(cyResult.getOepnValidDate())+"æ¥è°æ´è³"+format.format(companyOpen.getValidDate())); companyLogService.create(companyLog); initRedisCache(company1); } private void initRedisCache(Company com) { CompanyExtListVO c = new CompanyExtListVO(); BeanUtils.copyProperties(com,c); departmentExtService.loadComDepart(c); departmentExtService.initCompnayCodesByCom(com); } @Override @@ -131,7 +148,7 @@ QueryWrapper<CompanyOpen> wrapper = new QueryWrapper<>(companyOpen); return companyOpenMapper.selectList(wrapper); } @Override public PageData<CompanyOpen> findPage(PageWrap<CompanyOpen> pageWrap) { IPage<CompanyOpen> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); server/src/main/java/doumeemes/service/business/impl/CompanyServiceImpl.java
@@ -14,6 +14,7 @@ import doumeemes.dao.business.model.CompanyLog; import doumeemes.dao.business.model.Multifiles; import doumeemes.dao.ext.dto.DingDingConfig; import doumeemes.dao.ext.vo.CompanyExtListVO; import doumeemes.service.business.CompanyLogService; import doumeemes.service.business.CompanyService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -21,9 +22,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import doumeemes.service.business.MultifilesService; import doumeemes.service.ext.DepartmentExtService; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -46,6 +50,10 @@ @Autowired private CompanyLogService companyLogService; @Autowired @Lazy private DepartmentExtService departmentExtService; @Override @@ -115,36 +123,35 @@ update.setStatus(company.getStatus()); update.setDingdingInfo(company.getDingdingInfo()); companyMapper.updateById(update); // æ´æ°è®°å½ CompanyLog companyLog = new CompanyLog(); companyLog.setDeleted((byte)Constants.ZERO); companyLog.setUpdateUser(principal.getId()); companyLog.setCreateUser(principal.getId()); companyLog.setCreateTime(new Date()); companyLog.setUpdateTime(new Date()); companyLog.setCompanyId(company.getId()); if(Objects.nonNull(company.getStatus())){ CompanyLog companyLog = new CompanyLog(); companyLog.setDeleted((byte)Constants.ZERO); companyLog.setUpdateUser(principal.getId()); companyLog.setCreateUser(principal.getId()); companyLog.setCreateTime(new Date()); companyLog.setUpdateTime(new Date()); companyLog.setRemark(company.getStatus() == 1 ? "æ°æ®å¯ç¨" : "æ°æ®ç¦ç¨"); companyLog.setCompanyId(company.getId()); companyLog.setUpdateType(company.getStatus() == 1 ? Constants.CompanyUpdateType.UPDATE_ENABLE.getKey() : Constants.CompanyUpdateType.UPDATE_DISABLE.getKey()); companyLog.setDetail(company.getStatus() == 1 ? "æ°æ®å¯ç¨" : "æ°æ®ç¦ç¨"); companyLogService.create(companyLog); }else { CompanyLog companyLog = new CompanyLog(); companyLog.setDeleted((byte)Constants.ZERO); companyLog.setUpdateUser(principal.getId()); companyLog.setCreateUser(principal.getId()); companyLog.setCreateTime(new Date()); companyLog.setUpdateTime(new Date()); companyLog.setRemark("æ´æ°ä¼ä¸æ°æ®"); companyLog.setCompanyId(company.getId()); companyLog.setUpdateType(Constants.CompanyUpdateType.UPDATE_CONTENT.getKey()); companyLog.setDetail("æ´æ°ä¼ä¸æ°æ®"); companyLogService.create(companyLog); } companyLogService.create(companyLog); Company company1 = companyMapper.selectById(company.getId()); initRedisCache(company1); } private void initRedisCache(Company com) { CompanyExtListVO c = new CompanyExtListVO(); BeanUtils.copyProperties(com,c); departmentExtService.loadComDepart(c); departmentExtService.initCompnayCodesByCom(com); } private Boolean isParseObject(String dingdingInfo){ @@ -185,7 +192,7 @@ QueryWrapper<Company> wrapper = new QueryWrapper<>(company); return companyMapper.selectList(wrapper); } @Override public PageData<Company> findPage(PageWrap<Company> pageWrap) { IPage<Company> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); server/src/main/java/doumeemes/service/business/impl/SalaryParamServiceImpl.java
@@ -54,19 +54,24 @@ @Override public Integer create(SalaryParam salaryParam) { LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); SalaryParam insert = new SalaryParam(); insert.setRootDepartId(salaryParam.getRootDepartId()); insert.setDepartId(salaryParam.getDepartId()); insert.setProcedureId(salaryParam.getProcedureId()); insert.setMaterialId(salaryParam.getMaterialId()); insert.setDeleted((byte) Constants.ZERO); if(findOne(insert) != null){ throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"åä¸ä¸ªç©æå¨ç¸åå·¥åºä¸è½éå¤é ç½®å¦ï¼"); } insert.setCreateUser(principal.getId()); insert.setCreateTime(new Date()); insert.setUpdateUser(principal.getId()); insert.setUpdateTime(new Date()); insert.setRemark(salaryParam.getRemark()); insert.setRootDepartId(salaryParam.getRootDepartId()); insert.setDepartId(salaryParam.getDepartId()); insert.setProcedureId(salaryParam.getProcedureId()); insert.setMaterialId(salaryParam.getMaterialId()); insert.setSalary(salaryParam.getSalary()); insert.setNum(salaryParam.getNum()); insert.setTimes(salaryParam.getTimes()); @@ -109,9 +114,9 @@ .set(SalaryParam::getUpdateTime,new Date()) .set(SalaryParam::getUpdateUser,principal.getId()) .set(SalaryParam::getType,salaryParam.getType()) .set(SalaryParam::getDepartId,salaryParam.getDepartId()) .set(SalaryParam::getMaterialId,salaryParam.getMaterialId()) .set(SalaryParam::getProcedureId,salaryParam.getProcedureId()) // .set(SalaryParam::getDepartId,salaryParam.getDepartId()) // .set(SalaryParam::getMaterialId,salaryParam.getMaterialId()) // .set(SalaryParam::getProcedureId,salaryParam.getProcedureId()) .set(SalaryParam::getSalary,salaryParam.getSalary()) .set(SalaryParam::getNum,salaryParam.getNum()) .set(SalaryParam::getTimes,salaryParam.getTimes()) @@ -137,6 +142,7 @@ @Override public SalaryParam findOne(SalaryParam salaryParam) { QueryWrapper<SalaryParam> wrapper = new QueryWrapper<>(salaryParam); wrapper.last("limit 1"); return salaryParamMapper.selectOne(wrapper); } @@ -178,7 +184,7 @@ || Objects.isNull(s.getDepartName()) || Objects.isNull(s.getMaterialCode()) || Objects.isNull(s.getProcedureName()) || Objects.isNull(s.getNUM())){ || Objects.isNull(s.getNum())){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "å¯¼å ¥æ°æ®å 容æè¯¯ï¼"); } }); @@ -214,7 +220,7 @@ proceduresWrapper.lambda() .eq(Procedures::getName,salaryParamImportDTO.getProcedureName()) .eq(Procedures::getRootDepartId,department.getRootId()) .eq(Procedures::getDepartId,department.getId()) .eq(Procedures::getOrgId,department.getId()) .last("limit 1"); Procedures procedures = proceduresMapper.selectOne(proceduresWrapper); if (Objects.isNull(procedures)){ @@ -226,10 +232,8 @@ salaryParam.setProcedureId(procedures.getId()); salaryParam.setMaterialId(material.getId()); salaryParam.setSalary(salaryParamImportDTO.getSalary()); salaryParam.setNum(new BigDecimal(salaryParamImportDTO.getNUM())); salaryParam.setNum(new BigDecimal(salaryParamImportDTO.getNum())); salaryParam.setTimes(getIntegerTimes(salaryParamImportDTO.getTimesName())); Integer unqualified = Optional.ofNullable(salaryParamImportDTO.getUnqualified()).map(s -> { if ("å¦".equals(s)) { return 0; @@ -265,7 +269,7 @@ m = Integer.parseInt(a.substring(hIndex >=0?hIndex+2:0,mIndex)); } if(sIndex > mIndex){ s = Integer.parseInt(a.substring(mIndex >=0?mIndex+2:0,mIndex)); s = Integer.parseInt(a.substring(mIndex >= 0 ? mIndex+2 : 0, sIndex)); } return h*3600+m*60+s; }catch (Exception e){ server/src/main/java/doumeemes/service/business/impl/UnqualifiedRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,124 @@ package doumeemes.service.business.impl; import doumeemes.core.model.PageData; import doumeemes.core.model.PageWrap; import doumeemes.core.utils.Utils; import doumeemes.dao.business.UnqualifiedRecordMapper; import doumeemes.dao.business.model.UnqualifiedRecord; import doumeemes.service.business.UnqualifiedRecordService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.List; /** * å·¥åç±»-æ¥å·¥ä¸è¯è®°å½ç±»å表Serviceå®ç° * @author æ±è¹è¹ * @since 2023/08/16 14:15 */ @Service public class UnqualifiedRecordServiceImpl implements UnqualifiedRecordService { @Autowired private UnqualifiedRecordMapper unqualifiedRecordMapper; @Override public Integer create(UnqualifiedRecord unqualifiedRecord) { unqualifiedRecordMapper.insert(unqualifiedRecord); return unqualifiedRecord.getId(); } @Override public void deleteById(Integer id) { unqualifiedRecordMapper.deleteById(id); } @Override public void delete(UnqualifiedRecord unqualifiedRecord) { UpdateWrapper<UnqualifiedRecord> deleteWrapper = new UpdateWrapper<>(unqualifiedRecord); unqualifiedRecordMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List<Integer> ids) { if (CollectionUtils.isEmpty(ids)) { return; } unqualifiedRecordMapper.deleteBatchIds(ids); } @Override public void updateById(UnqualifiedRecord unqualifiedRecord) { unqualifiedRecordMapper.updateById(unqualifiedRecord); } @Override public void updateByIdInBatch(List<UnqualifiedRecord> unqualifiedRecords) { if (CollectionUtils.isEmpty(unqualifiedRecords)) { return; } for (UnqualifiedRecord unqualifiedRecord: unqualifiedRecords) { this.updateById(unqualifiedRecord); } } @Override public UnqualifiedRecord findById(Integer id) { return unqualifiedRecordMapper.selectById(id); } @Override public UnqualifiedRecord findOne(UnqualifiedRecord unqualifiedRecord) { QueryWrapper<UnqualifiedRecord> wrapper = new QueryWrapper<>(unqualifiedRecord); return unqualifiedRecordMapper.selectOne(wrapper); } @Override public List<UnqualifiedRecord> findList(UnqualifiedRecord unqualifiedRecord) { QueryWrapper<UnqualifiedRecord> wrapper = new QueryWrapper<>(unqualifiedRecord); return unqualifiedRecordMapper.selectList(wrapper); } @Override public PageData<UnqualifiedRecord> findPage(PageWrap<UnqualifiedRecord> pageWrap) { IPage<UnqualifiedRecord> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper<UnqualifiedRecord> queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.lambda() .eq(pageWrap.getModel().getId() != null, UnqualifiedRecord::getId, pageWrap.getModel().getId()) .eq(pageWrap.getModel().getDeleted() != null, UnqualifiedRecord::getDeleted, pageWrap.getModel().getDeleted()) .eq(pageWrap.getModel().getCreateUser() != null, UnqualifiedRecord::getCreateUser, pageWrap.getModel().getCreateUser()) .ge(pageWrap.getModel().getCreateTime() != null, UnqualifiedRecord::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime())) .le(pageWrap.getModel().getCreateTime() != null, UnqualifiedRecord::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime())) .eq(pageWrap.getModel().getUpdateUser() != null, UnqualifiedRecord::getUpdateUser, pageWrap.getModel().getUpdateUser()) .ge(pageWrap.getModel().getUpdateTime() != null, UnqualifiedRecord::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime())) .le(pageWrap.getModel().getUpdateTime() != null, UnqualifiedRecord::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime())) .eq(pageWrap.getModel().getRemark() != null, UnqualifiedRecord::getRemark, pageWrap.getModel().getRemark()) .eq(pageWrap.getModel().getRootDepartId() != null, UnqualifiedRecord::getRootDepartId, pageWrap.getModel().getRootDepartId()) .eq(pageWrap.getModel().getDepartId() != null, UnqualifiedRecord::getDepartId, pageWrap.getModel().getDepartId()) .eq(pageWrap.getModel().getWorkorderId() != null, UnqualifiedRecord::getWorkorderId, pageWrap.getModel().getWorkorderId()) .eq(pageWrap.getModel().getRecordId() != null, UnqualifiedRecord::getRecordId, pageWrap.getModel().getRecordId()) .eq(pageWrap.getModel().getCategoryId() != null, UnqualifiedRecord::getCategoryId, pageWrap.getModel().getCategoryId()) .eq(pageWrap.getModel().getUnqualifiedNum() != null, UnqualifiedRecord::getUnqualifiedNum, pageWrap.getModel().getUnqualifiedNum()) ; for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } return PageData.from(unqualifiedRecordMapper.selectPage(page, queryWrapper)); } @Override public long count(UnqualifiedRecord unqualifiedRecord) { QueryWrapper<UnqualifiedRecord> wrapper = new QueryWrapper<>(unqualifiedRecord); return unqualifiedRecordMapper.selectCount(wrapper); } } server/src/main/java/doumeemes/service/business/impl/WOutboundServiceImpl.java
@@ -2126,6 +2126,9 @@ WOutboundInBodyBean wOutboundInBodyBean = wOutboundInBodyBeans.get(Constants.ZERO); //ç´¯è®¡å ¥åºæ°é wOutboundInBodyBean.setNum(wOutboundInBodyBeans.stream().map(s -> s.getNum()).reduce(BigDecimal.ZERO, BigDecimal::add)); if(wOutboundInBodyBean.getNum().compareTo(BigDecimal.ZERO)<=Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "æ°éå¼å¸¸,è¯·æ£æ¥æ°é!"); } WOutboundDetail wOutboundDetail = new WOutboundDetail(); //æ¥è¯¢ç©ææ°æ® MaterialDistribute materialDistribute = materialDistributeMapper.selectById(wOutboundInBodyBean.getMaterialId()); server/src/main/java/doumeemes/service/ext/CategoryExtService.java
@@ -33,4 +33,6 @@ CategoryExtListVO getByCategoryId(Integer comid, Integer id); CategoryExtListVO getByCategoryId(Integer comid, Integer id,List<CategoryExtListVO> allList); void loadAll(); List<CategoryExtListVO> findList(QueryCategoryExtDTO queryCategoryExtDTO); } server/src/main/java/doumeemes/service/ext/impl/CategoryExtServiceImpl.java
@@ -49,6 +49,12 @@ } @Override public List<CategoryExtListVO> findList(QueryCategoryExtDTO queryCategoryExtDTO) { List<CategoryExtListVO> result = categoryExtMapper.selectList(queryCategoryExtDTO); return result; } @Override public List<CategoryExtListVO> getListByType(String type,Integer rootDepartId,String cateType,String id) { QueryCategoryExtDTO queryCategoryExtDTO=new QueryCategoryExtDTO(); queryCategoryExtDTO.setDeleted(Constants.ZERO); server/src/main/java/doumeemes/service/ext/impl/DepartmentExtServiceImpl.java
@@ -37,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.PostConstruct; import java.util.*; import java.util.stream.Collectors; @@ -443,6 +444,7 @@ //å å ¥redisç¼åï¼åå¨ä¼ä¸ä¿¡æ¯ RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_DEPART_TREE_KEY+com.getId(),rootDepart); } @PostConstruct @Override public void loadAllDepart() { QueryCompanyExtDTO dto = new QueryCompanyExtDTO(); @@ -796,7 +798,7 @@ for (Department department:departmentList ) { this.dealDepartmentData(department,user); } } } } public void dealDepartmentData(Department department,LoginUserInfo user){ server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java
@@ -16,6 +16,8 @@ import doumeemes.core.utils.excel.EasyExcelUtil; import doumeemes.core.utils.redis.RedisUtil; import doumeemes.dao.business.PlansMapper; import doumeemes.dao.business.UnqualifiedRecordMapper; import doumeemes.dao.business.WorkorderMapper; import doumeemes.dao.business.dto.*; import doumeemes.dao.business.model.*; import doumeemes.dao.ext.*; @@ -34,6 +36,7 @@ import org.springframework.web.multipart.MultipartFile; import java.math.BigDecimal; import java.time.LocalDate; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -64,7 +67,8 @@ private WorkorderHistoryExtMapper workorderHistoryExtMapper; @Autowired private WorkorderRecordExtMapper workorderRecordExtMapper; @Autowired private WorkorderMapper workorderMapper; @Autowired private RouteProcedureExtMapper routeProcedureExtMapper; @Autowired @@ -89,6 +93,8 @@ private WStockExtService wStockExtService; @Autowired private WorkorderRecordStandardService workorderRecordStandardService; @Autowired private UnqualifiedRecordMapper unqualifiedRecordMapper; @Override public PlansExtListVO findById(Integer id){ @@ -139,6 +145,19 @@ // //ç»è®¡å·²å®å·¥æ°é // param.setStatus(Constants.WORKORDER_STATUS.done); // plan.setDoneNum(workorderExtMapper.sumOrderNum(param)); QueryBomExtDTO bb = new QueryBomExtDTO(); bb.setDepartId(plan.getDepartId()); bb.setDeleted(Constants.ZERO); bb.setRootDepartId(user.getRootDepartment().getId()); bb.setMaterialId(plan.getMaterialId()); bb.setProcedureId(plan.getProcedureId()); BomExtListVO versionBom = bomExtMapper.selectByModel( bb); if(versionBom == null || StringUtils.isBlank(versionBom.getVersion()) || versionBom.getBomVersionId() == null){ plan.setHasBom(Constants.ZERO); }else { plan.setBomType(Constants.formatIntegerNum(versionBom.getType())); plan.setHasBom(Constants.ONE); } return plan; } @@ -197,6 +216,14 @@ // p.setDistributNum(tp.getDistributNum()); // p.setDoneNum(tp.getDoneNum()); p.setIsStock(wStockExtService.isStockForPlan(p)); p.setHasExpire(false); p.setStatus(Constants.formatIntegerNum(p.getStatus())); if ( !p.getStatus().equals(Constants.PLAN_STATUS.done) && !p.getStatus().equals(Constants.PLAN_STATUS.close)){ if (Objects.nonNull(p.getPlanDate())){ p.setHasExpire(DateUtil.toDateLocalDateTime(p.getWorkPlanPlanDate()).toLocalDate().isBefore(LocalDate.now())); } } } } return PageData.from(new PageInfo<>(result)); @@ -592,7 +619,7 @@ if(Constants.equalsInteger(mp.getPaused(),Constants.ONE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对ä¸èµ·ï¼è®¡åå·²æåï¼"); } if(Constants.formatIntegerNum(mp.getDistributNum())+thisPlanNum > Constants.formatIntegerNum(mp.getNum())){ if(Constants.formatIntegerNum(mp.getWorkorderDistributNum())+thisPlanNum > Constants.formatIntegerNum(mp.getNum())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对ä¸èµ·ï¼ç´¯è®¡åé æ°é大äºè®¡åæ°éï¼"); } if(!Constants.equalsInteger(mp.getStatus(),Constants.PLAN_STATUS.publish)&&!Constants.equalsInteger(mp.getStatus(),Constants.PLAN_STATUS.distribute)){ @@ -678,9 +705,9 @@ if(ulist == null){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对ä¸èµ·ï¼ç产人åä¿¡æ¯ä¸æ£ç¡®ï¼è¯·å·æ°é¡µé¢éè¯ï¼"); } if(ulist.size() < param.getProUserList().size()){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对ä¸èµ·ï¼åå¨ç产人åä¿¡æ¯ä¸æ£ç¡®ï¼è¯·å·æ°é¡µé¢éè¯ï¼"); } // if(ulist.size() < param.getProUserList().size()){ // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对ä¸èµ·ï¼åå¨ç产人åä¿¡æ¯ä¸æ£ç¡®ï¼è¯·å·æ°é¡µé¢éè¯ï¼"); // } List<WorkorderUser> userList = new ArrayList<>(); for(UserDeviceExtListVO uModel : ulist){ WorkorderUser u = new WorkorderUser(); @@ -1507,7 +1534,7 @@ } /** * æ¢å¤è®¡å * @param p * @param */ @Transactional(rollbackFor = {BusinessException.class,Exception.class}) @Override @@ -1563,7 +1590,7 @@ if(Objects.isNull(plans)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"æªæ¥è¯¢å°å·¥åºè®¡åæ°æ®"); } if(!(plans.getStatus().equals(Constants.PLAN_STATUS.create)||plans.getStatus().equals(Constants.PLAN_STATUS.distribute))){ if(!(plans.getStatus().equals(Constants.PLAN_STATUS.create)||plans.getStatus().equals(Constants.PLAN_STATUS.publish)||plans.getStatus().equals(Constants.PLAN_STATUS.distribute))){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"å·¥åºè®¡åå·²æµè½¬ï¼æ æ³æä½"); } if(plans.getPaused().equals(Constants.ONE)){ @@ -1573,7 +1600,8 @@ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"åæ°é误ï¼äº§åºæ°æ®"); } //æ¥è¯¢å·¥åºè®¡åå·²åé æ°é List<Workorder> workorderList = workorderExtMapper.selectList(new QueryWrapper<Workorder>().eq("PLAN_ID",plans.getId()).notIn("STATUS",7,8)); List<Workorder> workorderList = workorderMapper.selectList(new QueryWrapper<Workorder>().eq("PLAN_ID",plans.getId()) .eq("STATUS",Constants.WORKORDER_STATUS.baogong)); //æ¬æ¬¡äº§åºæ°é BigDecimal num = autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum().add(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum()); if(num.compareTo(BigDecimal.ZERO)<=Constants.ZERO){ @@ -1590,7 +1618,7 @@ param.setPlanDate(new Date()); param.setProGroupId(autoWorkReportDTO.getProGroupId()); param.setProUserList(autoWorkReportDTO.getProUserList()); param.setPlanNum(plans.getNum()); param.setPlanNum(num.intValue()); //çæå·¥åä¿¡æ¯ Workorder workorder = this.distributeDone(user,param,plans.getNum()); //å·¥åææè®°å½ @@ -1601,7 +1629,8 @@ workorderRecordStandardService.createMaterialStandard(createMaterialDTO); } //å·¥å产åºè®°å½ workorderRecordStandardService.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user); autoWorkReportDTO.getCreateWorkorderRecordDTO().setWorkorderId(workorder.getId()); WorkorderRecord workorderRecord = workorderRecordStandardService.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user); //工忥工 workorderRecordStandardService.comfirmDone(workorder); //æ´æ°å·¥åç¶æ @@ -1613,8 +1642,35 @@ } } plansExtMapper.updateById(plans); //å卿¥å·¥ä¸è¯é¡¹æ°æ® if(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().compareTo(BigDecimal.ZERO)<=Constants.ZERO){ if(!Objects.isNull(autoWorkReportDTO.getCreateUnqualifiedDTOList())&&autoWorkReportDTO.getCreateUnqualifiedDTOList().size()>Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"ä¸è¯é¡¹é误ï¼è¯·æ£æ¥ä¸è¯é¡¹æ°æ®"); } }else{ List<CreateUnqualifiedDTO> createUnqualifiedDTOList = autoWorkReportDTO.getCreateUnqualifiedDTOList(); BigDecimal unqualified = createUnqualifiedDTOList.stream().map(s -> s.getUnQualifiedNum()).reduce(BigDecimal.ZERO, BigDecimal::add); if(unqualified.compareTo(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum())!=Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"ä¸è¯é¡¹é误ï¼è¯·æ£æ¥ä¸è¯é¡¹æ°æ®"); } for (CreateUnqualifiedDTO createUnqualifiedDTO:createUnqualifiedDTOList) { if(createUnqualifiedDTO.getUnQualifiedNum().compareTo(BigDecimal.ZERO)==Constants.ZERO ||Objects.isNull(createUnqualifiedDTO.getCategoryId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"ä¸è¯é¡¹é误ï¼è¯·æ£æ¥ä¸è¯é¡¹æ°æ®"); } UnqualifiedRecord unqualifiedRecord = new UnqualifiedRecord(); unqualifiedRecord.setDeleted(Constants.ZERO); unqualifiedRecord.setCreateUser(user.getId()); unqualifiedRecord.setCreateTime(new Date()); unqualifiedRecord.setRootDepartId(plans.getRootDepartId()); unqualifiedRecord.setDepartId(plans.getDepartId()); unqualifiedRecord.setWorkorderId(workorder.getId()); unqualifiedRecord.setRecordId(workorderRecord.getId()); unqualifiedRecord.setCategoryId(createUnqualifiedDTO.getCategoryId()); unqualifiedRecord.setUnqualifiedNum(createUnqualifiedDTO.getUnQualifiedNum()); unqualifiedRecordMapper.insert(unqualifiedRecord); } } } server/src/main/java/doumeemes/service/ext/impl/WorkPlansExtServiceImpl.java
@@ -175,12 +175,16 @@ i.setFinishUnQualifiedNum(Objects.isNull(plansExtListVO.getUnqulifiedNum())?Constants.ZERO:plansExtListVO.getUnqulifiedNum()); i.setFinishNum(Objects.isNull(plansExtListVO.getDoneNum())?Constants.ZERO:plansExtListVO.getDoneNum()); } if (Objects.nonNull(i.getPlanDate())){ i.setHasExpire(DateUtil.toDateLocalDateTime(i.getPlanDate()).toLocalDate().isBefore(LocalDate.now())); }else { i.setHasExpire(false); i.setHasExpire(false); i.setStatus(Constants.formatIntegerNum(i.getStatus())); if ( !i.getStatus().equals(Constants.WORKPLANHISTORY_TYPE.done) && !i.getStatus().equals(Constants.WORKPLANHISTORY_TYPE.close)){ if (Objects.nonNull(i.getPlanDate())){ i.setHasExpire(DateUtil.toDateLocalDateTime(i.getPlanDate()).toLocalDate().isBefore(LocalDate.now())); } } }); } return PageData.from(new PageInfo<>(result)); server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
@@ -669,13 +669,13 @@ if (bomDetailList == null || bomDetailList.size() == 0) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对ä¸èµ·ï¼è¯¥çäº§ç©æçbomé ç½®æè¯¯ï¼è¯·è系管çåï¼"); } for (BomDetailExtListVO i :bomDetailList) { //æ¥è¯¢æ¯å¦ææ if(workorderRecordExtMapper.selectCount(new QueryWrapper<WorkorderRecord>() .eq("DELETED",Constants.ZERO).eq("MATERIAL_ID",i.getMaterialId()).eq("TYPE",Constants.ZERO))<=0){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"å卿ªææBOMç©æï¼æ æ³è¿è¡æ¥å·¥"); } } // for (BomDetailExtListVO i :bomDetailList) { // //æ¥è¯¢æ¯å¦ææ // if(workorderRecordExtMapper.selectCount(new QueryWrapper<WorkorderRecord>() // .eq("DELETED",Constants.ZERO).eq("MATERIAL_ID",i.getMaterialId()).eq("TYPE",Constants.ZERO))<=0){ // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"å卿ªææBOMç©æï¼æ æ³è¿è¡æ¥å·¥"); // } // } } WOutbound outbound = new WOutbound(); @@ -794,6 +794,126 @@ // private void dealAppliancePro(Workorder mp // , LoginUserInfo user // , List<WorkorderRecordExtListVO> allRecordList // , List<Appliances> updateApplianceList // , List<Appliances> updateApplianceProList // , List<WOutboundDetail> outboundDetailList // , List<WStock> stockList) { // WOutbound outbound = new WOutbound(); // outbound.setDeleted(Constants.ZERO); // outbound.setCreateTime(DateUtil.getCurrentDate()); // outbound.setDealDate(outbound.getCreateTime()); // outbound.setValidDate(outbound.getCreateTime()); // outbound.setCreateUser(user.getId()); // outbound.setRootDepartId(mp.getRootDepartId()); // outbound.setDepartId(mp.getDepartId()); // outbound.setStatus(Constants.WOUTBOUND_STATUS.dealed); // outbound.setType(Constants.WOUTBOUND_TYPE.in); // //2022å¹´7æ1æ¥14:42:41 å å ¥åæ®ç±»å« // outbound.setBillType(Constants.WOUTBOUND_BILLTYPE.workerOrderIn); // outbound.setCode(wOutboundService.getNextInCode(user.getCompany().getId())); // outbound.setOrigin(Constants.ONE); // outbound.setOriginType(Constants.WOUTBOUND_ORIGIN_TYPE.produce); // outbound.setOriginCode(mp.getCode()); // outbound.setOriginId(mp.getId()); // outbound.setPlanDate(DateUtil.getCurrentDate()); // outbound.setProcedureId(mp.getProcedureId()); // outbound.setUserId(user.getId()); // outbound.setWarehouseId(mp.getFinishWarehouseId()); // wOutboundService.create(outbound); // // List<WOutboundDetail> detailList = new ArrayList<>(); // List<WOutboundRecord> recordList = new ArrayList<>(); // for(WorkorderRecordExtListVO tModel :allRecordList){ // if(Constants.equalsInteger(tModel.getType(),Constants.WORKORDER_RECORD_TYPE.produce)){ // if(tModel.getNum().compareTo(BigDecimal.ZERO)<=Constants.ZERO){ // continue; // } // //妿æ¯äº§åº // mp.setHasProduceNum(Constants.formatBigdecimal(tModel.getNum()).intValue()+Constants.formatIntegerNum(mp.getHasProduceNum())); // // //ç©æ+æ¹æ¬¡+å·¥åº+è´¨é屿§å»é // WOutboundDetail detail =getWoutbondDetailByList(tModel,detailList); // if(detail!=null){ // detail.setNum(Constants.formatBigdecimal(detail.getNum()).add(tModel.getNum())); // }else{ // detail = new WOutboundDetail(); // detail.setDeleted(Constants.ZERO); // detail.setCreateTime(DateUtil.getCurrentDate()); // detail.setCreateUser(user.getId()); // detail.setOutboundId(outbound.getId()); // detail.setRootDepartId(outbound.getRootDepartId()); // detail.setWarehouseId(outbound.getWarehouseId()); // detail.setLocationId(mp.getFinishWarehouseLocationId()); // detail.setNum(tModel.getNum()); // detail.setStatus(Constants.ONE); // detail.setDoneNum(tModel.getNum()); // detail.setDoneDate(new Date()); // detail.setUnitId(tModel.getUnitId()); // detail.setBatch(tModel.getMaterialBatch()); // detail.setProcedureId(tModel.getProcedureId()); // detail.setMaterialId(tModel.getMaterialId()); // detail.setQualityType(tModel.getDoneType()); // detail.setWOutboundRecordInList(new ArrayList<>()); // detailList.add(detail); // } // // WOutboundRecord record = new WOutboundRecord(); // record.setDeleted(Constants.ZERO); // record.setCreateTime(DateUtil.getCurrentDate()); // record.setCreateUser(user.getId()); // record.setAppliancesId(tModel.getAppliancesId()); // record.setBatch(detail.getBatch()); // record.setRootDepartId(mp.getRootDepartId()); // record.setNum(tModel.getNum()); // record.setOutboundId(detail.getOutboundId()); // record.setUnitId(detail.getUnitId()); // record.setWarehouseId(detail.getWarehouseId()); // record.setMaterialId(detail.getMaterialId()); // record.setProcedureId(detail.getProcedureId()); // record.setLocationId(detail.getLocationId()); // record.setQualityType(detail.getQualityType()); // detail.getWOutboundRecordInList().add(record); // // WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(), // tModel.getProcedureId(),tModel.getDoneType(),stockList); // if(stock!=null){ // //妿åºå对象已åå¨ï¼ç´æ¥å¢å 对åºçåºåé // stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum()))); // }else{ // stock = new WStock(); // stock.setMaterialId(detail.getMaterialId()); // stock.setBatch(detail.getBatch()); // stock.setWarehouseId(outbound.getWarehouseId()); // stock.setLocationId(mp.getFinishWarehouseLocationId()); // stock.setUnitId(detail.getUnitId()); // stock.setNum(Constants.formatBigdecimal(tModel.getNum())); // stock.setProcedureId(tModel.getProcedureId()); // stock.setQualityType(tModel.getDoneType()); // //å¾ æ´æ°åºåä¿¡æ¯ // stockList.add(stock); // } // } // } // for(WOutboundDetail detail : detailList){ // wOutboundDetailExtMapper.insert(detail); // //è®°å½åºååå¨è®°å½ // wStockRecordExtService.saveRecord(Constants.ONE,detail.getId(),user); // if(detail.getWOutboundRecordInList()!=null){ // for(WOutboundRecord r : detail.getWOutboundRecordInList()){ // r.setDetailId(detail.getId()); // wOutboundRecordExtMapper.insert(r); // } // } // } // if(Constants.formatIntegerNum(mp.getHasProduceNum()) >Constants.formatIntegerNum(mp.getPlanNum())){ // throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对ä¸èµ·ï¼è¯¥å·¥åçäº§åºæ°éä¸è½å¤§äºå·¥åè®¡åæ°éï¼"); // } // } private void dealAppliancePro(Workorder mp , LoginUserInfo user , List<WorkorderRecordExtListVO> allRecordList @@ -833,78 +953,10 @@ } //妿æ¯äº§åº mp.setHasProduceNum(Constants.formatBigdecimal(tModel.getNum()).intValue()+Constants.formatIntegerNum(mp.getHasProduceNum())); if(tModel.getDoneType() == null){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对ä¸èµ·ï¼å·¥è£ å¨å ·ã"+tModel.getAmodel().getCode()+"ã产åºè´¨é屿§ä¸ºç©ºï¼æ æ³æ¥å·¥ï¼"); } if(!Constants.equalsInteger(tModel.getDoneType(),Constants.ZERO)){ //妿ä¸è¯ï¼ç´¯è®¡å·¥åçä¸è¯äº§åº mp.setUnqualifiedNum(Constants.formatIntegerNum(mp.getUnqualifiedNum())+(Constants.formatBigdecimal(tModel.getNum()).intValue())); }else{ //妿æ¯åæ ¼ï¼ç´¯è®¡å·¥åçåæ ¼æ°é mp.setQualifiedNum(Constants.formatIntegerNum(mp.getQualifiedNum())+(Constants.formatBigdecimal(tModel.getNum()).intValue())); } //ç©æ+æ¹æ¬¡+å·¥åº+è´¨é屿§å»é WOutboundDetail detail =getWoutbondDetailByList(tModel,detailList); if(detail!=null){ detail.setNum(Constants.formatBigdecimal(detail.getNum()).add(tModel.getNum())); }else{ detail = new WOutboundDetail(); detail.setDeleted(Constants.ZERO); detail.setCreateTime(DateUtil.getCurrentDate()); detail.setCreateUser(user.getId()); detail.setOutboundId(outbound.getId()); detail.setRootDepartId(outbound.getRootDepartId()); detail.setWarehouseId(outbound.getWarehouseId()); detail.setLocationId(mp.getFinishWarehouseLocationId()); detail.setNum(tModel.getNum()); detail.setStatus(Constants.ONE); detail.setDoneNum(tModel.getNum()); detail.setDoneDate(new Date()); detail.setUnitId(tModel.getUnitId()); detail.setBatch(tModel.getMaterialBatch()); detail.setProcedureId(tModel.getProcedureId()); detail.setMaterialId(tModel.getMaterialId()); detail.setQualityType(tModel.getDoneType()); detail.setWOutboundRecordInList(new ArrayList<>()); detailList.add(detail); } WOutboundRecord record = new WOutboundRecord(); record.setDeleted(Constants.ZERO); record.setCreateTime(DateUtil.getCurrentDate()); record.setCreateUser(user.getId()); record.setAppliancesId(tModel.getAppliancesId()); record.setBatch(detail.getBatch()); record.setRootDepartId(mp.getRootDepartId()); record.setNum(tModel.getNum()); record.setOutboundId(detail.getOutboundId()); record.setUnitId(detail.getUnitId()); record.setWarehouseId(detail.getWarehouseId()); record.setMaterialId(detail.getMaterialId()); record.setProcedureId(detail.getProcedureId()); record.setLocationId(detail.getLocationId()); record.setQualityType(detail.getQualityType()); detail.getWOutboundRecordInList().add(record); WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(), tModel.getProcedureId(),tModel.getDoneType(),stockList); if(stock!=null){ //妿åºå对象已åå¨ï¼ç´æ¥å¢å 对åºçåºåé stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum()))); }else{ stock = new WStock(); stock.setMaterialId(detail.getMaterialId()); stock.setBatch(detail.getBatch()); stock.setWarehouseId(outbound.getWarehouseId()); stock.setLocationId(mp.getFinishWarehouseLocationId()); stock.setUnitId(detail.getUnitId()); stock.setNum(Constants.formatBigdecimal(tModel.getNum())); stock.setProcedureId(tModel.getProcedureId()); stock.setQualityType(tModel.getDoneType()); //å¾ æ´æ°åºåä¿¡æ¯ stockList.add(stock); } //产åºåæ ¼ this.createOutDetail(user,outbound,mp,tModel,Constants.ZERO,detailList,stockList); //产åºä¸è¯ this.createOutDetail(user,outbound,mp,tModel,Constants.ONE,detailList,stockList); } } for(WOutboundDetail detail : detailList){ @@ -922,6 +974,68 @@ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对ä¸èµ·ï¼è¯¥å·¥åçäº§åºæ°éä¸è½å¤§äºå·¥åè®¡åæ°éï¼"); } } public void createOutDetail(LoginUserInfo user,WOutbound outbound,Workorder mp,WorkorderRecordExtListVO tModel,Integer doneType ,List<WOutboundDetail> detailList,List<WStock> stockList ){ //ç©æ+æ¹æ¬¡+å·¥åº+è´¨é屿§å»é WOutboundDetail detail = new WOutboundDetail(); detail.setDeleted(Constants.ZERO); detail.setCreateTime(DateUtil.getCurrentDate()); detail.setCreateUser(user.getId()); detail.setOutboundId(outbound.getId()); detail.setRootDepartId(outbound.getRootDepartId()); detail.setWarehouseId(outbound.getWarehouseId()); detail.setLocationId(mp.getFinishWarehouseLocationId()); detail.setNum(BigDecimal.valueOf(doneType.equals(Constants.ZERO)?tModel.getQualifiedNum():tModel.getUnqualifiedNum())); detail.setStatus(Constants.ONE); detail.setDoneNum(detail.getNum()); detail.setDoneDate(new Date()); detail.setUnitId(tModel.getUnitId()); detail.setBatch(tModel.getMaterialBatch()); detail.setProcedureId(tModel.getProcedureId()); detail.setMaterialId(tModel.getMaterialId()); detail.setQualityType(doneType); detail.setWOutboundRecordInList(new ArrayList<>()); detailList.add(detail); WOutboundRecord record = new WOutboundRecord(); record.setDeleted(Constants.ZERO); record.setCreateTime(DateUtil.getCurrentDate()); record.setCreateUser(user.getId()); record.setAppliancesId(tModel.getAppliancesId()); record.setBatch(detail.getBatch()); record.setRootDepartId(mp.getRootDepartId()); record.setNum(tModel.getNum()); record.setOutboundId(detail.getOutboundId()); record.setUnitId(detail.getUnitId()); record.setWarehouseId(detail.getWarehouseId()); record.setMaterialId(detail.getMaterialId()); record.setProcedureId(detail.getProcedureId()); record.setLocationId(detail.getLocationId()); record.setQualityType(detail.getQualityType()); detail.getWOutboundRecordInList().add(record); WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(), tModel.getProcedureId(),tModel.getDoneType(),stockList); if(stock!=null){ //妿åºå对象已åå¨ï¼ç´æ¥å¢å 对åºçåºåé stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum()))); }else{ stock = new WStock(); stock.setMaterialId(detail.getMaterialId()); stock.setBatch(detail.getBatch()); stock.setWarehouseId(outbound.getWarehouseId()); stock.setLocationId(mp.getFinishWarehouseLocationId()); stock.setUnitId(detail.getUnitId()); stock.setNum(Constants.formatBigdecimal(tModel.getNum())); stock.setProcedureId(tModel.getProcedureId()); stock.setQualityType(tModel.getDoneType()); //å¾ æ´æ°åºåä¿¡æ¯ stockList.add(stock); } } private WStock initMaterialNum(Integer materialId, BigDecimal num) { WStock s = new WStock(); @@ -1247,16 +1361,14 @@ workorderRecord.setSalaryPrice(salaryParam.getSalary()); workorderRecord.setSalaryType(salaryParam.getType()); workorderRecord.setSalaryUnqualified(salaryParam.getUnqualified()); //è®¡ä»¶å·¥èµ if(salaryParam.getType().equals(Constants.ZERO)){ workorderRecord.setSalaryNum(salaryParam.getNum()); workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ZERO?num:createWorkorderRecordDTO.getUnQualifiedNum())); workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ONE?num:createWorkorderRecordDTO.getQualifiedNum())); }else{ workorderRecord.setDuration(createWorkorderRecordDTO.getDuration()); workorderRecord.setSalary(BigDecimal.valueOf(createWorkorderRecordDTO.getDuration()).multiply(salaryParam.getSalary()).divide(new BigDecimal(3600))); } //æå ¥å·¥åæä½è®°å½ï¼å¹¶ä¸å¤ææ¯å¦æ´æ¹ä¸ºå·¥åçç¶æãç产ä¸ã updateOrderInfo(loginUserInfo,workorder,Constants.WORKORDER_HISTORY_STATUS.produce); workorderRecordExtMapper.insert(workorderRecord); server/src/main/resources/mappers/PlansExtMapper.xml
@@ -123,7 +123,7 @@ <select id="selectByModel" parameterType="doumeemes.dao.ext.dto.QueryPlansExtDTO" resultMap="PlansExtListVO"> SELECT `a`.* ,( SELECT sum( b.PLAN_NUM ) FROM workorder b WHERE b.deleted = 0 AND b.PLAN_ID = a.id and b.status !=6) AS workorderDistributNum ,ifnull(( SELECT sum( b.PLAN_NUM ) FROM workorder b WHERE b.deleted = 0 AND b.PLAN_ID = a.id and b.status not in (7,8) ),0) AS workorderDistributNum from plans a <where> <if test="id != null"> @@ -363,13 +363,13 @@ `usermodel`.`SYSTEMID` AS USERMODEL_SYSTEMID, `usermodel`.`INVALID_TIME` AS USERMODEL_INVALID_TIME, `usermodel`.`TYPE` AS USERMODEL_TYPE ,( SELECT sum( b.PLAN_NUM ) FROM workorder b WHERE b.deleted = 0 AND b.PLAN_ID = a.id and b.status !=6) AS workorderDistributNum , , ifnull(( SELECT sum( b.PLAN_NUM ) FROM workorder b WHERE b.deleted = 0 AND b.PLAN_ID = a.id and b.status !=6),0) AS workorderDistributNum , `mmodel`.name as materialName , `mmodel`.code as materialCode ,`fmodel`.name as factoryName , `pmodel`.name as produceName , concat(`usermodel`.realname,' ',`usermodel`.mobile) as planUserName , `umodel`.name as unitName , w.PLAN_CODE as workPlanCode , w.SALESORDER as salesOrder , w.START_DATE as workPlanStartDate , w.PLAN_DATE as workPlanEndDate, w.`PLAN_DATE` as workPlanPlanDate, ifnull((select sum(worder.PLAN_NUM) from workorder worder where worder.PLAN_ID = a.id and worder.STATUS not in (7,8) ),0) as produceNum FROM `plans` `a` LEFT JOIN `department` `dmodel` ON a.DEPART_ID=dmodel.ID LEFT JOIN `material_distribute` `mdmodel` ON a.MATERIAL_ID=mdmodel.ID @@ -422,6 +422,12 @@ </if> <if test="planDate != null"> AND `a`.`PLAN_DATE` = #{planDate} </if> <if test="planDateStartDate != null and planDateStartDate != ''"> AND `a`.`PLAN_DATE` >= concat(#{planDateStartDate},' 00:00:00') </if> <if test="planDateEndDate != null and planDateEndDate != ''"> AND concat(#{planDateEndDate},' 23:59:59') >= `a`.`PLAN_DATE` </if> <if test="materialId != null"> AND `a`.`MATERIAL_ID` = #{materialId} @@ -765,12 +771,12 @@ <if test="usermodelInvalidTime != null"> AND `usermodel`.`INVALID_TIME` = #{usermodelInvalidTime} </if> <if test="startDate != null"> AND `a`.`PLAN_DATE` >= #{startDate} </if> <if test="endDate != null"> AND #{endDate} >= `a`.`PLAN_DATE` </if> <!-- <if test="startDate != null">--> <!-- AND `a`.`PLAN_DATE` >= #{startDate}--> <!-- </if>--> <!-- <if test="endDate != null">--> <!-- AND #{endDate} >= `a`.`PLAN_DATE`--> <!-- </if>--> <if test="mixParam != null and mixParam!=''"> AND (mmodel.name like concat('%',#{mixParam},'%') or mmodel.code like concat('%',#{mixParam},'%') or pmodel.name like concat('%',#{mixParam},'%')) </if> server/src/main/resources/mappers/SalaryParamMapper.xml
@@ -13,14 +13,16 @@ from salary_param sp LEFT JOIN procedures p on p.ID = sp.PROCEDURE_ID LEFT JOIN material m on m.ID = sp.MATERIAL_ID LEFT JOIN material_distribute md on md.ID = sp.MATERIAL_ID LEFT JOIN material m on m.ID = md.MATERIAL_ID LEFT JOIN `system_user` su on su.ID = sp.CREATE_USER where sp.DELETED = 0 <if test="model.keyWord != null and model.keyWord != ''"> and ( p`NAME` like concat('%',#{model.keyWord},'%') or p.`CODE` = #{model.keyWord})</if> and ( m.`NAME` like concat('%',#{model.keyWord},'%') or m.`CODE` = #{model.keyWord})</if> <if test="model.procedureName != null and model.procedureName != ''"> and p.`NAME` like concat('%',#{model.procedureName},'%')</if> <if test="model.type != null"> and sp.`TYPE` = #{model.type}</if> order by sp.CREATE_TIME desc </select> </mapper> server/src/main/resources/mappers/UserDeviceExtMapper.xml
@@ -201,7 +201,7 @@ AND `umodel`.`ROOT_DEPART_ID` = #{umodelRootDepartId} </if> <if test="umodelName != null and umodelName != ''"> AND `umodel`.`NAME` = #{umodelName} AND `umodel`.`NAME` like concat('%', #{umodelName} , '%') </if> <if test="umodelPhone != null and umodelPhone != ''"> AND `umodel`.`PHONE` = #{umodelPhone} server/src/main/resources/mappers/WorkPlansExtMapper.xml
@@ -156,10 +156,10 @@ AND `a`.`SALESORDER` like concat('%',#{salesorder},'%') </if> <if test="startDateStart != null and startDateStart != ''"> AND `a`.`START_DATE` >= concat(#{planDateStart},' 00:00:00') AND `a`.`START_DATE` >= concat(#{startDateStart},' 00:00:00') </if> <if test="startDateEnd != null and startDateEnd != ''"> AND concat(#{planDateEnd},' 23:59:59') >= `a`.`START_DATE` AND concat(#{startDateEnd},' 23:59:59') >= `a`.`START_DATE` </if> <if test="planDateStart != null and planDateStart != ''"> AND `a`.`PLAN_DATE` >= concat(#{planDateStart},' 00:00:00') @@ -168,7 +168,7 @@ AND concat(#{planDateEnd},' 23:59:59') >= `a`.`PLAN_DATE` </if> </where> order by a.PLAN_DATE desc, a.CREATE_TIME desc order by a.START_DATE desc, a.CREATE_TIME desc </select> server/src/main/resources/mappers/WorkorderRecordExtMapper.xml
@@ -453,11 +453,11 @@ <if test="materialName != null and materialName !=''"> AND (c.`name` like concat('%', #{materialName},'%') or c.`code` like concat('%', #{materialName},'%')) </if> <if test="startDate != null"> AND a.`CREATE_TIME` >= #{startDate} <if test="startDate != null and startDate != ''"> AND a.`CREATE_TIME` >= concat(#{startDate},' 00:00:00') </if> <if test="endDate != null"> AND #{endDate} >= a.`CREATE_TIME` <if test="endDate != null and endDate != ''"> AND concat(#{endDate},' 23:59:59') >= a.`CREATE_TIME` </if> <if test="userId != null"> AND a.`CREATE_USER` = #{userId} @@ -479,10 +479,10 @@ AND `CREATE_USER` = #{userId} </if> <if test="startDate != null"> AND a.`CREATE_TIME` >= #{startDate} AND `CREATE_TIME` >= #{startDate} </if> <if test="endDate != null"> AND #{endDate} >= a.`CREATE_TIME` AND #{endDate} >= `CREATE_TIME` </if> group by `CREATE_USER` <!-- order by `CREATE_TIME` desc-->