Merge remote-tracking branch 'origin/master'
# Conflicts:
# server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
| | |
| | | VUE_APP_ROUTER_MODE = 'hash' |
| | | |
| | | # 项ç®ä¸ä¸æè·¯å¾ |
| | | VUE_APP_CONTEXT_PATH = '/' |
| | | VUE_APP_CONTEXT_PATH = '/fn_admin/#/' |
| | | |
| | | # æ¥å£åç¼ |
| | | VUE_APP_API_PREFIX = '/gateway_interface' |
¶Ô±ÈÐÂÎļþ |
| | |
| | | # å¼åç¯å¢é
ç½® |
| | | NODE_ENV = 'development' |
| | | # 项ç®ä¸ä¸æè·¯å¾ |
| | | VUE_APP_CONTEXT_PATH = './' |
| | | |
| | | #VUE_APP_API_URL = 'http://localhost:10010' |
| | | VUE_APP_API_URL = 'http://192.168.0.163:10010' |
| | | # VUE_APP_API_URL = 'https://dmtest.ahapp.net/fn_admin' |
| | | # VUE_APP_API_URL = 'http://10.50.250.253:8088/gateway_interface' |
| | | |
| | |
| | | .DS_Store |
| | | coderd.json |
| | | node_modules |
| | | .env.development |
| | | # .env.development |
| | | /dist |
| | | |
| | | |
| | |
| | | .env.*.local |
| | | unpackage |
| | | admin |
| | | fn_admin |
| | | # Log files |
| | | npm-debug.log* |
| | | yarn-debug.log* |
| | |
| | | export function list (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywCustomer/list', data) |
| | | } |
| | | |
| | | // éå®è¿ç»´ - æ¥è¯¢è系人å表 |
| | | export function ywList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/member/ywList', data) |
| | | } |
| | | |
| | |
| | | .window__body { |
| | | // width: 1100px; |
| | | // margin: 0 auto; |
| | | // background-color: #fff; |
| | | background-color: #fff; |
| | | width: 100%; |
| | | height: 100%; |
| | | overflow-y: auto; |
| | | padding: 12px 16px; |
| | | padding: 0 16px 12px 16px; |
| | | // æ ç¾ |
| | | // .el-form-item__label { |
| | | // float: none; |
| | |
| | | |
| | | const router = new VueRouter({ |
| | | // + (process.env.VUE_APP_ROUTER_MODE === 'hash' ? '#' : '') |
| | | // base: process.env.VUE_APP_CONTEXT_PATH, |
| | | base: '/', |
| | | mode: 'hash', |
| | | routes: [ |
| | | // ç»å½ |
| | |
| | | <el-form-item label="è¯ä»¶å·ç " prop="member.idcardNo"> |
| | | <el-input v-model="form.member.idcardNo" placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="é®ç®±" prop="email"> |
| | | <el-form-item label="é®ç®±" prop="member.email" :rules="[ |
| | | { required: false, type: 'email', message: '请è¾å
¥æ£ç¡®çé®ç®±æ ¼å¼'} |
| | | ]"> |
| | | <el-input v-model="form.member.email" placeholder="请è¾å
¥é®ç®±" v-trim /> |
| | | </el-form-item> |
| | | </template> |
| | |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <el-form-item label="è¯ä»¶å·ç " prop="member.idcardNo"> |
| | | <el-input v-model="form.idcardNo" placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="é®ç®±" prop="email"> |
| | | <el-form-item label="é®ç®±" prop="email" :rules="[ |
| | | { required: false, type: 'email', message: '请è¾å
¥æ£ç¡®çé®ç®±æ ¼å¼'} |
| | | ]"> |
| | | <el-input v-model="form.email" placeholder="请è¾å
¥é®ç®±" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="æ§å«"> |
| | |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | roundedUp: [{ required: true, message: 'è¯·éæ©' }], |
| | | companyId: [{ required: true, message: 'è¯·éæ©' }], |
| | | renterName: [{ required: true, message: 'è¯·éæ©' }], |
| | | memberName: [{ required: true, message: 'è¯·éæ©' }], |
| | | memberId: [{ required: true, message: 'è¯·éæ©' }], |
| | | zlDeposit: [{ required: true, message: '请è¾å
¥' }], |
| | | zlPayType: [{ required: true, message: 'è¯·éæ©' }], |
| | | wyDeposit: [{ required: true, message: '请è¾å
¥' }], |
| | |
| | | :confirm-working="isWorking" |
| | | @close="close" |
| | | @confirm="confirm"> |
| | | <div class="home_title" v-if="info"> |
| | | <div class="left"> |
| | | <span class="mr10">åä½åç§°ï¼{{info.renterName}}</span> |
| | | <el-tag type="success" v-if="info.status === 0">å¾
æ§è¡</el-tag> |
| | | <el-tag type="success" v-if="info.status === 1">æ£å¸¸æ§è¡ä¸</el-tag> |
| | | <el-tag type="info" v-if="info.status === 2">已尿</el-tag> |
| | | <el-tag type="info" v-if="info.status === 3">éç§ç»ç®ä¸</el-tag> |
| | | <el-tag type="info" v-if="info.status === 4">å·²éç§</el-tag> |
| | | <div style="width: 100%; position: sticky; top: 0; left: 0; z-index: 999; background: #ffffff;"> |
| | | <div class="home_title" v-if="info"> |
| | | <div class="left"> |
| | | <span class="mr10">åä½åç§°ï¼{{info.renterName}}</span> |
| | | <el-tag type="success" v-if="info.status === 0">å¾
æ§è¡</el-tag> |
| | | <el-tag type="success" v-if="info.status === 1">æ£å¸¸æ§è¡ä¸</el-tag> |
| | | <el-tag type="info" v-if="info.status === 2">已尿</el-tag> |
| | | <el-tag type="info" v-if="info.status === 3">éç§ç»ç®ä¸</el-tag> |
| | | <el-tag type="info" v-if="info.status === 4">å·²éç§</el-tag> |
| | | </div> |
| | | <el-button plain type="danger" v-if="[0, 1, 2].includes(info.status)" @click="refund">éç§</el-button> |
| | | </div> |
| | | <el-button plain type="danger" v-if="[0, 1, 2].includes(info.status)" @click="refund">éç§</el-button> |
| | | </div> |
| | | <div class="remark" v-if="info">{{info.remark}}</div> |
| | | <div class="tabs"> |
| | | <div class="tab" :class="{ active: activeTabs === 0 }" @click="tabsClick(0)">ååä¿¡æ¯</div> |
| | | <div class="tab" :class="{ active: activeTabs === 1 }" @click="tabsClick(1)">å
³èè´¦å</div> |
| | | <div class="tab" :class="{ active: activeTabs === 2 }" @click="tabsClick(2)">æä½è®°å½</div> |
| | | <div class="remark" v-if="info">{{info.remark}}</div> |
| | | <div class="remark" v-if="info && info.status === 3">{{info.btRemark}}</div> |
| | | <div class="tabs"> |
| | | <div class="tab" :class="{ active: activeTabs === 0 }" @click="tabsClick(0)">ååä¿¡æ¯</div> |
| | | <div class="tab" :class="{ active: activeTabs === 1 }" @click="tabsClick(1)">å
³èè´¦å</div> |
| | | <div class="tab" :class="{ active: activeTabs === 2 }" @click="tabsClick(2)">æä½è®°å½</div> |
| | | </div> |
| | | </div> |
| | | <div class="main" v-if="activeTabs === 0 && info"> |
| | | <div class="title">åºç¡ä¿¡æ¯</div> |
| | |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">ååç§èµæ°</div> |
| | | <div class="val">{{ info.totalArea }}</div> |
| | | <div class="val">{{ info.totalArea }}ã¡</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">æå±å
¬å¸</div> |
| | |
| | | <div class="list" style="background: #F7F7F7; padding: 15px 20px;" v-if="info.type === 2 || info.type === 0"> |
| | | <div class="item"> |
| | | <div class="la">æ¼ééé¢</div> |
| | | <div class="val">{{ info.zlDeposit }}</div> |
| | | <div class="val">{{ info.zlDeposit }}å
</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">仿¬¾æ¹å¼</div> |
| | |
| | | <el-table :data="info.zlDetailList" stripe style="margin-bottom: 20px;" v-if="info.type === 2 || info.type === 0"> |
| | | <el-table-column prop="startDate" label="å¼å§æ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="endDate" label="ç»ææ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="price" label="åååä»·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="advanceDays" label="仿¬¾æå天æ°" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column label="åååä»·" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | {{row.price}} {{returnUnit(row.circleType)}} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="仿¬¾æå天æ°" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | {{row.advanceDays}}天 |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="title" v-if="info.type === 1 || info.type === 0">ç©ä¸è´¹æ¡æ¬¾</div> |
| | | <div class="list" style="background: #F7F7F7; padding: 15px 20px;" v-if="info.type === 1 || info.type === 0"> |
| | | <div class="item"> |
| | | <div class="la">æ¼ééé¢</div> |
| | | <div class="val">{{ info.wyDeposit }}</div> |
| | | <div class="val">{{ info.wyDeposit }}å
</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">仿¬¾æ¹å¼</div> |
| | |
| | | <el-table :data="info.wyDetailList" stripe style="margin-bottom: 20px;" v-if="info.type === 1 || info.type === 0"> |
| | | <el-table-column prop="startDate" label="å¼å§æ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="endDate" label="ç»ææ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="price" label="åååä»·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="advanceDays" label="仿¬¾æå天æ°" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column label="åååä»·" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | {{row.price}} {{returnUnit(row.circleType)}} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="仿¬¾æå天æ°" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | {{row.advanceDays}}天 |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="title">ååéä»¶</div> |
| | | <div class="list"> |
| | | <el-table :data="info.fileList" stripe> |
| | | <el-table-column prop="name" label="éä»¶åç§°" show-overflow-tooltip /> |
| | | <el-table-column label="éä»¶åç§°" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <u style="color: #0c6ce3; cursor: pointer;" @click="xiazai(row.fileurlFull)">{{row.name}}</u> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="userName" label="æä½äºº" show-overflow-tooltip /> |
| | | <el-table-column prop="createDate" label="æä½æ¶é´" show-overflow-tooltip /> |
| | | </el-table> |
| | |
| | | <el-table-column |
| | | :key="Date.now()" |
| | | prop="receivableFee" |
| | | label="åºæ¶éé¢"> |
| | | :label="`åº${type === 0 ? 'æ¶' : 'ä»'}éé¢`"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="actReceivableFee" |
| | | label="宿¶éé¢"> |
| | | :label="`å®${type === 0 ? 'æ¶' : 'ä»'}éé¢`"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="needReceivableFee" |
| | | label="éæ¶éé¢"> |
| | | :label="`é${type === 0 ? 'æ¶' : 'ä»'}éé¢`"> |
| | | <template slot-scope="{row}"> |
| | | <el-tag type="success" v-if="row.needReceivableFee > 0">æ¶</el-tag> |
| | | <el-tag type="warning" v-else>ä»</el-tag> |
| | | <template v-if="type === 0"> |
| | | <el-tag type="success" v-if="row.needReceivableFee > 0">æ¶</el-tag> |
| | | <el-tag type="warning" v-else-if="row.needReceivableFee < 0">ä»</el-tag> |
| | | </template> |
| | | <template v-else> |
| | | <el-tag type="warning" v-if="row.needReceivableFee !== 0">ä»</el-tag> |
| | | </template> |
| | | <span style="margin-left: 10px;">{{Math.abs(row.needReceivableFee)}}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | width="200" |
| | | label="è®¡è´¹å¨æ"> |
| | | <template slot-scope="{row}"> |
| | | {{ row.startDate }} ~ {{ row.endDate }} |
| | |
| | | this.id = id |
| | | this.getData() |
| | | }, |
| | | xiazai (url) { |
| | | window.open(url) |
| | | }, |
| | | returnUnit (type) { |
| | | switch (type) { |
| | | case 0: |
| | | return 'å
/m²·天' |
| | | case 1: |
| | | return 'å
/m²·æ' |
| | | case 2: |
| | | return 'å
/m²·年' |
| | | case 3: |
| | | return 'å
/天' |
| | | case 4: |
| | | return 'å
/æ' |
| | | case 5: |
| | | return 'å
/å¹´' |
| | | case 6: |
| | | return 'å
/åº' |
| | | } |
| | | }, |
| | | getData () { |
| | | getById(this.id) |
| | | .then(res => { |
| | |
| | | capacity: this.pageSize, |
| | | page: this.page, |
| | | model: { |
| | | status: 0, |
| | | billType: this.type, |
| | | contractId: this.info.id |
| | | } |
| | |
| | | <template> |
| | | <!-- :text="activeTabs === 0 ? 'ä¸ä¸æ¥' : 'æäº¤'"--> |
| | | <!-- :backText="activeTabs === 0 ? 'è¿å' : 'ä¸ä¸æ¥'"--> |
| | | <GlobalWindow |
| | | width="100%" |
| | | :title="title" |
| | |
| | | <el-date-picker type="date" v-model="form.endDate" @change="getHouseData" :clearable="false" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="å½å±é¡¹ç®" prop="projectId"> |
| | | <el-select v-model="form.projectId" placeholder="è¯·éæ©"> |
| | | <el-select v-model="form.projectId" @change="getHouseTree" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in projectList" :key="index" :value="item.id" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | <el-input v-model="form.renterName" readonly placeholder="请ç¹å»éæ©ç§å®¢" /> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="è系人" prop="memberName"> |
| | | <el-input v-model="form.memberName" readonly placeholder="请ç¹å»éæ©ç§å®¢" /> |
| | | <el-form-item label="è系人" prop="memberId"> |
| | | <el-select v-model="form.memberId" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in contactsList" :key="index" :value="item.id" :label="item.name"></el-option> |
| | | </el-select> |
| | | <!-- <el-input v-model="form.memberName" readonly placeholder="请ç¹å»éæ©ç§å®¢" />--> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | |
| | | :default-expanded-keys="ids" |
| | | :default-checked-keys="ids" |
| | | :props="{ children: 'projectDataVOList', label: 'name' }"> |
| | | <span class="custom-tree-node" style="width: 100%; display: flex; align-items: center; justify-content: space-between;" slot-scope="{ node, data }"> |
| | | <span>{{ data.name }}</span> |
| | | <span style="color: #2080f7;" v-if="data.lv === 3"> |
| | | {{ data.area }}ã¡ |
| | | </span> |
| | | </span> |
| | | </el-tree> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="m_title">ç§èµä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <el-form-item label="æ¼ééé¢(å
)" prop="zlDeposit"> |
| | | <el-input v-model="form.zlDeposit" placeholder="请è¾å
¥" v-trim /> |
| | | <el-input v-model="form.zlDeposit" @input="clearzl" placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æ¹å¼" prop="zlPayType"> |
| | | <el-select v-model="form.zlPayType" placeholder="è¯·éæ©"> |
| | | <el-select v-model="form.zlPayType" @change="clearzl" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | <el-button type="text" size="medium" @click="addZl">å¢å </el-button> |
| | | </div> |
| | | <div class="list"> |
| | | <div v-for="(item, index) in form.zlDetailList" :key="index"> |
| | | <el-form-item label="èµ·å§æ¥æ" prop="time"> |
| | | <el-date-picker type="daterange" v-model="item.time" @change="getDate1($event, index)" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | <div style="width: 100%; display: flex; flex-wrap: wrap;" v-for="(zlDetailList, index) in form.zlDetailList" :key="index"> |
| | | <el-form-item label="èµ·å§æ¥æ" :prop="'zlDetailList.' + index + '.time'" :rules="{ |
| | | required: true, message: 'è¯·éæ©', trigger: 'blur' |
| | | }"> |
| | | <el-date-picker type="daterange" v-model="zlDetailList.time" @change="getDate1($event, index)" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="åååä»·" prop="price"> |
| | | <el-input placeholder="请è¾å
¥" v-model="item.price" class="input-with-select"> |
| | | <el-select v-model="item.circleType" style="width: 150px;" slot="append" placeholder="è¯·éæ©"> |
| | | <el-form-item label="åååä»·" :prop="'zlDetailList.' + index + '.price'" :rules="{ |
| | | required: true, message: '请è¾å
¥', trigger: 'blur' |
| | | }"> |
| | | <el-input placeholder="请è¾å
¥" v-model="zlDetailList.price" @input="clearzl" class="input-with-select"> |
| | | <el-select v-model="zlDetailList.circleType" @change="clearzl" style="width: 150px;" slot="append" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in unitOps" :key="index" :value="item.value" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æå天æ°" prop="advanceDays"> |
| | | <el-form-item label="仿¬¾æå天æ°" :prop="'zlDetailList.' + index + '.advanceDays'" :rules="{ |
| | | required: true, message: '请è¾å
¥', trigger: 'blur' |
| | | }"> |
| | | <div style="display: flex; align-items: center; justify-content: space-between;"> |
| | | <el-input v-model="item.advanceDays" placeholder="请è¾å
¥" v-trim /> |
| | | <el-input v-model="zlDetailList.advanceDays" @input="clearzl" placeholder="请è¾å
¥" v-trim /> |
| | | <el-link :underline="false" type="danger" @click="deleZl(index)" style="margin-left: 20px; flex-shrink: 0;">å é¤</el-link> |
| | | </div> |
| | | </el-form-item> |
| | |
| | | </el-table-column> |
| | | <el-table-column label="ææ°" align="center" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <el-tag type="success">{{row.sortnum}}</el-tag> |
| | | <el-tag type="success" v-if="row.sortnum > 0">{{row.sortnum}}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="åºé´" align="center" show-overflow-tooltip> |
| | |
| | | <div class="m_title">ç©ä¸ä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <el-form-item label="ç©ä¸æ¼é" prop="wyDeposit"> |
| | | <el-input v-model="form.wyDeposit" placeholder="请è¾å
¥" v-trim /> |
| | | <el-input v-model="form.wyDeposit" @input="clearwy" placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æ¹å¼" prop="wyPayType"> |
| | | <el-select v-model="form.wyPayType" placeholder="è¯·éæ©"> |
| | | <el-select v-model="form.wyPayType" @change="clearwy" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | <el-button type="text" size="medium" @click="addWy">å¢å </el-button> |
| | | </div> |
| | | <div class="list"> |
| | | <div v-for="(item, index) in form.wyDetailList" :key="index"> |
| | | <el-form-item label="èµ·å§æ¥æ" prop="time"> |
| | | <el-date-picker type="daterange" v-model="item.time" @change="getDate2($event, index)" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | <div style="width: 100%; display: flex; flex-wrap: wrap;" v-for="(wyDetailList, index) in form.wyDetailList" :key="index"> |
| | | <el-form-item label="èµ·å§æ¥æ" :prop="'wyDetailList.' + index + '.time'" :rules="{ |
| | | required: true, message: '请è¾å
¥', trigger: 'blur' |
| | | }"> |
| | | <el-date-picker type="daterange" v-model="wyDetailList.time" @change="getDate2($event, index)" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="åååä»·" prop="price"> |
| | | <el-input placeholder="请è¾å
¥" v-model="item.price"> |
| | | <el-select v-model="item.circleType" style="width: 150px;" slot="append" placeholder="è¯·éæ©"> |
| | | <el-form-item label="åååä»·" :prop="'wyDetailList.' + index + '.price'" :rules="{ |
| | | required: true, message: '请è¾å
¥', trigger: 'blur' |
| | | }"> |
| | | <el-input placeholder="请è¾å
¥" @input="clearwy" v-model="wyDetailList.price"> |
| | | <el-select v-model="wyDetailList.circleType" @change="clearwy" style="width: 150px;" slot="append" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in unitOps" :key="index" :value="item.value" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æå天æ°" prop="advanceDays"> |
| | | <el-form-item label="仿¬¾æå天æ°" :prop="'wyDetailList.' + index + '.advanceDays'" :rules="{ |
| | | required: true, message: '请è¾å
¥', trigger: 'blur' |
| | | }"> |
| | | <div style="display: flex; align-items: center; justify-content: space-between;"> |
| | | <el-input v-model="item.advanceDays" placeholder="请è¾å
¥" v-trim /> |
| | | <el-input v-model="wyDetailList.advanceDays" @input="clearwy" placeholder="请è¾å
¥" v-trim /> |
| | | <el-link :underline="false" type="danger" @click="deleWy(index)" style="margin-left: 20px; flex-shrink: 0;">å é¤</el-link> |
| | | </div> |
| | | </el-form-item> |
| | |
| | | </el-table-column> |
| | | <el-table-column label="ææ°" align="center" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <el-tag type="success">{{row.sortnum}}</el-tag> |
| | | <el-tag type="success" v-if="row.sortnum > 0">{{row.sortnum}}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="åºé´" align="center" show-overflow-tooltip> |
| | |
| | | import MemberSearch from '@/components/common/MemberSearch' |
| | | import { rules } from './config' |
| | | import { create, getBillList } from '@/api/contract' |
| | | import { ywList } from '@/api/customer' |
| | | import { getUserList } from '@/api/system/user' |
| | | import { getProjectList, tree } from '@/api/project/ywProject' |
| | | import { companyList } from '@/api/company' |
| | |
| | | zlDate: [], |
| | | zlDetailList: [ |
| | | { |
| | | circleType: 0, |
| | | startDate: '', |
| | | endDate: '', |
| | | time: [], |
| | |
| | | wyDate: [], |
| | | wyDetailList: [ |
| | | { |
| | | circleType: 0, |
| | | startDate: '', |
| | | endDate: '', |
| | | time: [], |
| | |
| | | wyList: [], |
| | | |
| | | rules, |
| | | |
| | | contactsList: [], |
| | | |
| | | loadingInstance: null, |
| | | uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch', |
| | |
| | | { name: '䏿¬¡æ§ä»æ¬¾', value: 0 }, |
| | | { name: '3个æä¸ä»', value: 1 }, |
| | | { name: '6个æä¸ä»', value: 2 }, |
| | | { name: '1å¹´ä¸ä»', value: 2 }, |
| | | { name: '1å¹´ä¸ä»', value: 3 }, |
| | | ], |
| | | unitOps: [ |
| | | { name: 'å
/m²·天', value: 0 }, |
| | |
| | | open (title, target) { |
| | | this.title = title |
| | | this.ids = [] |
| | | this.houseList = [] |
| | | this.zlPrice = '' |
| | | this.wyPrice = '' |
| | | this.getUser() |
| | | this.getProject() |
| | | this.getCompany() |
| | |
| | | this.form[key] = '' |
| | | } |
| | | } |
| | | this.form.zlDetailList = [ |
| | | { |
| | | startDate: '', |
| | | endDate: '', |
| | | time: [], |
| | | price: '', |
| | | advanceDays: '' |
| | | } |
| | | ] |
| | | this.form.wyDetailList = [ |
| | | { |
| | | startDate: '', |
| | | endDate: '', |
| | | time: [], |
| | | price: '', |
| | | advanceDays: '' |
| | | } |
| | | ] |
| | | this.wyList = [] |
| | | this.zlList = [] |
| | | this.form.userId = this.userInfo.id |
| | | this.form.signDate = this.getDayTime() |
| | | this.form.startDate = this.getDayTime() |
| | | this.form.endDate = this.getDayTime(1) |
| | | this.getHouseTree() |
| | | this.form.zlDetailList = [ |
| | | { |
| | | circleType: 0, |
| | | startDate: this.form.startDate, |
| | | endDate: this.form.endDate, |
| | | time: [this.form.startDate, this.form.endDate], |
| | | price: '', |
| | | advanceDays: '' |
| | | } |
| | | ] |
| | | this.form.wyDetailList = [ |
| | | { |
| | | circleType: 0, |
| | | startDate: this.form.startDate, |
| | | endDate: this.form.endDate, |
| | | time: [this.form.startDate, this.form.endDate], |
| | | price: '', |
| | | advanceDays: '' |
| | | } |
| | | ] |
| | | // this.getHouseTree() |
| | | }) |
| | | }, |
| | | // è·åè系人 |
| | | getYwList () { |
| | | ywList({ |
| | | customerId: this.form.renterId |
| | | }).then(res => { |
| | | this.contactsList = res |
| | | }) |
| | | }, |
| | | getHouseData () { |
| | |
| | | if (!num) { |
| | | return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`; |
| | | } else { |
| | | return `${year + 1}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`; |
| | | return `${year + 1}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day - 1 : day - 1}`; |
| | | } |
| | | }, |
| | | clearData () { |
| | | this.form.zlDetailList = [ |
| | | { |
| | | circleType: 0, |
| | | startDate: this.form.startDate, |
| | | endDate: this.form.endDate, |
| | | time: [this.form.startDate, this.form.endDate], |
| | | price: '', |
| | | advanceDays: '' |
| | | } |
| | | ] |
| | | this.form.wyDetailList = [ |
| | | { |
| | | circleType: 0, |
| | | startDate: this.form.startDate, |
| | | endDate: this.form.endDate, |
| | | time: [this.form.startDate, this.form.endDate], |
| | | price: '', |
| | | advanceDays: '' |
| | | } |
| | | ] |
| | | }, |
| | | clearzl () { |
| | | this.zlList = [] |
| | | this.zlPrice = '' |
| | | }, |
| | | clearwy () { |
| | | this.wyList = [] |
| | | this.wyPrice = '' |
| | | }, |
| | | confirm () { |
| | | var that = this |
| | | if (this.activeTabs === 0) { |
| | | this.$refs.form.validate((valid) => { |
| | | if (!valid) return |
| | | if (this.form.roomIds.length === 0) return this.$message.warning('è¯·éæ©æ¿æºï¼') |
| | | this.activeTabs = 1 |
| | | }) |
| | | } else if (this.activeTabs === 1) { |
| | |
| | | if (!valid2) { |
| | | return |
| | | } |
| | | if (that.zlList.length === 0) return that.$message.warning('请å
çæç§èµè´¦åï¼') |
| | | if (that.wyList.length === 0) return that.$message.warning('请å
çæç©ä¸è´¦åï¼') |
| | | this.submit() |
| | | }) |
| | | }) |
| | |
| | | if (!valid1) { |
| | | return |
| | | } |
| | | if (that.zlList.length === 0) return that.$message.warning('请å
çæç§èµè´¦åï¼') |
| | | this.submit() |
| | | }) |
| | | } else if (this.form.type === 1) { |
| | |
| | | if (!valid2) { |
| | | return |
| | | } |
| | | if (that.wyList.length === 0) return that.$message.warning('请å
çæç©ä¸è´¦åï¼') |
| | | this.submit() |
| | | }) |
| | | } |
| | |
| | | getDate1 (e, index) { |
| | | this.form.zlDetailList[index].startDate = e[0] |
| | | this.form.zlDetailList[index].endDate = e[1] |
| | | this.clearzl() |
| | | }, |
| | | getDate2 (e, index) { |
| | | this.form.wyDetailList[index].startDate = e[0] |
| | | this.form.wyDetailList[index].endDate = e[1] |
| | | this.clearwy() |
| | | }, |
| | | checkHouseRoom (a, b) { |
| | | this.ids = b.checkedKeys |
| | |
| | | getHouseTree () { |
| | | tree({ |
| | | startDate: this.form.startDate, |
| | | endDate: this.form.endDate |
| | | endDate: this.form.endDate, |
| | | projectId: this.form.projectId |
| | | }) |
| | | .then(res => { |
| | | res.forEach(item => { |
| | |
| | | generateWY () { |
| | | getBillList({ ...this.form, billType: 1 }) |
| | | .then(res => { |
| | | this.wy = true |
| | | let zlPrice = 0 |
| | | let arr = [] |
| | | res.forEach(item => { |
| | |
| | | }, |
| | | addZl () { |
| | | this.form.zlDetailList.push({ |
| | | startDate: '', |
| | | endDate: '', |
| | | time: [], |
| | | circleType: 0, |
| | | startDate: this.form.startDate, |
| | | endDate: this.form.endDate, |
| | | time: [this.form.startDate, this.form.endDate], |
| | | price: '', |
| | | advanceDays: '' |
| | | }) |
| | | }, |
| | | addWy () { |
| | | this.form.wyDetailList.push({ |
| | | startDate: '', |
| | | endDate: '', |
| | | time: [], |
| | | circleType: 0, |
| | | startDate: this.form.startDate, |
| | | endDate: this.form.endDate, |
| | | time: [this.form.startDate, this.form.endDate], |
| | | price: '', |
| | | advanceDays: '' |
| | | }) |
| | |
| | | deleZl(index) { |
| | | if (this.form.zlDetailList.length === 1) return Message.warning('è³å°ä¿ç䏿¡ï¼') |
| | | this.form.zlDetailList.splice(index, 1) |
| | | this.clearzl() |
| | | }, |
| | | deleWy(index) { |
| | | if (this.form.wyDetailList.length === 1) return Message.warning('è³å°ä¿ç䏿¡ï¼') |
| | | this.form.wyDetailList.splice(index, 1) |
| | | this.clearwy() |
| | | }, |
| | | getZLDate (e) { |
| | | this.form.zlFreeStartDate = e[0] |
| | | this.form.zlFreeEndDate = e[1] |
| | | this.clearzl() |
| | | }, |
| | | getWYDate (e) { |
| | | this.form.wyFreeStartDate = e[0] |
| | | this.form.wyFreeEndDate = e[1] |
| | | this.clearwy() |
| | | }, |
| | | getTenant (row) { |
| | | this.form.renterId = row.id |
| | | this.form.renterName = row.name |
| | | this.form.memberId = row.memberId |
| | | this.form.memberName = row.memberName |
| | | this.form.memberId = '' |
| | | this.form.memberName = '' |
| | | this.getYwList() |
| | | }, |
| | | dele (imgaddr) { |
| | | this.form.fileList.forEach((item, index) => { |
| | |
| | | position: sticky; |
| | | top: 0; |
| | | left: 0; |
| | | z-index: 999; |
| | | } |
| | | .tabs { |
| | | border-bottom: 1px solid #DFE2E8; |
| | |
| | | label="è´¦åç¼å·"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | width="100" |
| | | label="è´¹ç¨ç±»å"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.costType === 0">ç§èµè´¹</span> |
| | |
| | | label="åºæ¶ä»éé¢/åå§åºæ¶ä»"> |
| | | <template v-slot="{row}"> |
| | | <div style="display: flex; align-items: center;"> |
| | | <el-input v-model="row.receivableFee" @input="changeReceivableFee($event, row)" placeholder="请è¾å
¥å
容" style="width: 90px;"></el-input> |
| | | <el-input v-model="row.receivableFee" @input="changeReceivableFee($event, row)" placeholder="请è¾å
¥å
容" style="flex: 1;"></el-input> |
| | | <span style="margin: 0 10px;">/</span> |
| | | {{row.receivableFeeCopy}} |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | width="120" |
| | | prop="actReceivableFee" |
| | | label="宿¶/ä»éé¢"> |
| | | </el-table-column> |
| | |
| | | loading: false |
| | | } |
| | | }, |
| | | watch: { |
| | | // info: { |
| | | // deep: true, |
| | | // immediate: true, |
| | | // handler(news, olds) { |
| | | // const arr = [...this.info.terminateList, ...this.info.depositList] |
| | | // let total1 = 0 |
| | | // let total2 = 0 |
| | | // arr.forEach(item => { |
| | | // if (item.billType === 0) { |
| | | // total1 += Number(item.price) |
| | | // } else if (item.billType === 1) { |
| | | // total2 += Number(item.price) |
| | | // } |
| | | // }) |
| | | // this.receivable = total1 |
| | | // this.meet = total2 |
| | | // } |
| | | // } |
| | | }, |
| | | methods: { |
| | | open (title, info) { |
| | | this.title = title |
| | |
| | | this.$refs.form.resetFields() |
| | | }) |
| | | this.info.canBackRentBills.forEach(item => { |
| | | this.$set(item, 'receivableFeeCopy', item.receivableFee) |
| | | this.$set(item, 'receivableFee', item.needReceivableFee) |
| | | if ([2,3,7].includes(item.costType)) { |
| | | this.$set(item, 'billType', 1) |
| | | this.$set(item, 'price', item.actReceivableFee) |
| | | } else { |
| | | this.$set(item, 'receivableFeeCopy', item.receivableFee) |
| | | this.$set(item, 'receivableFee', item.needReceivableFee) |
| | | this.$set(item, 'price', item.needReceivableFee) |
| | | } |
| | | }) |
| | |
| | | total2 += Number(item.price) |
| | | } |
| | | }) |
| | | this.receivable = total1 |
| | | this.meet = total2 |
| | | this.receivable = total1.toFixed(2) |
| | | this.meet = total2.toFixed(2) |
| | | }, |
| | | getDay () { |
| | | const today = new Date(); |
| | |
| | | <el-table-column prop="zlFirstPrice" label="ç§èµåä»·" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <div style="display: flex; align-items: center;"> |
| | | <span>{{row.zlFirstPrice}}</span> |
| | | <span v-if="row.zlFirstCircle === 0">å
/m²·天</span> |
| | | <span v-if="row.zlFirstCircle === 1">å
/m²·æ</span> |
| | | <span v-if="row.zlFirstCircle === 2">å
/天</span> |
| | | <span v-if="row.zlFirstCircle === 3">å
/æ</span> |
| | | <span v-if="row.zlFirstCircle === 4">å
/å¹´</span> |
| | | <span v-if="row.zlFirstCircle === 5">å
/m²·年</span> |
| | | <span v-if="row.zlFirstCircle === 6">å
/åº</span> |
| | | <span>{{row.zlFirstPrice || row.wyFirstPrice}}</span> |
| | | <span>{{row.zlFirstCircleStr || row.wyFirstCircleStr}}</span> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="totleFee" label="è´¦åéé¢" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="receivableFee" label="åºæ¶éé¢" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="actReceivableFee" label="宿¶éé¢" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="needReceivableFee" label="éæ¶éé¢" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="receivableFee" :label="`åº${billType === 0 ? 'æ¶' : 'ä»'}éé¢`" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="actReceivableFee" :label="`å®${billType === 0 ? 'æ¶' : 'ä»'}éé¢`" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column :label="`éæ¶/ä»éé¢`" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | {{Math.abs(row.needReceivableFee)}} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="è´¹ç¨ç±»å" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.costType === 0">ç§èµè´¹</span> |
| | |
| | | {{ row.startDate }} ~ {{ row.endDate }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="planPayDate" label="åºæ¶æ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="planPayDate" :label="`åº${billType === 0 ? 'æ¶' : 'ä»'}æ¥æ`" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column label="è´¦åæ¥æº" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.type === 0">ååè´¦å</span> |
| | |
| | | { value: 0, label: 'å¾
æ¶æ¬¾' }, |
| | | { value: 1, label: 'å·²ç»ç®' }, |
| | | { value: 2, label: 'é¨åç»æ¸
' }, |
| | | { value: 3, label: 'å¾
鿬¾' }, |
| | | { value: 4, label: 'å¾
仿¬¾' } |
| | | { value: 3, label: 'å¾
仿¬¾' }, |
| | | { value: 4, label: 'å¾
鿬¾' } |
| | | ] |
| | | }, |
| | | { |
| | |
| | | <template> |
| | | <GlobalWindow :title="'è´¦å详æ
'" :visible.sync="visible" :confirm-working="isWorking" @close="close" |
| | | @confirm="confirm"> |
| | | <div class="home_title"> |
| | | <div class="left"> |
| | | <span class="mr10">仿¬¾æ¹ï¼{{info.customerName}}</span> |
| | | <el-tag type="success" v-if="info.status === 0">å¼å¯</el-tag> |
| | | <el-tag type="info" v-if="info.status === 1">å
³é</el-tag> |
| | | <div style="width: 100%; position: sticky; top: 0; left: 0; z-index: 999; background: #ffffff;"> |
| | | <div class="home_title"> |
| | | <div class="left"> |
| | | <span class="mr10">仿¬¾æ¹ï¼{{info.customerName}}</span> |
| | | <el-tag type="success" v-if="info.status === 0">å¼å¯</el-tag> |
| | | <el-tag type="info" v-if="info.status === 1">å
³é</el-tag> |
| | | </div> |
| | | <el-button plain type="primary" v-if="![1].includes(info.payStatus)" @click="$refs.flowingWater.open('åå»ºæ¶æ¯æµæ°´', { |
| | | billType: returnBillType(), |
| | | billId: info.id, |
| | | costType: info.costType, |
| | | receivableFee: Math.abs(info.needReceivableFee), |
| | | costTypeName: returnText(info.costType), |
| | | contractCode: info.contractCode, |
| | | contractId: info.contractId, |
| | | startDate: info.startDate, |
| | | endDate: info.endDate, |
| | | multifileList: [], |
| | | date: `${info.startDate} ~ ${info.endDate}`, |
| | | companyId: info.companyId, |
| | | companyName: info.companyName, |
| | | actReceivableFee: Math.abs(info.needReceivableFee), |
| | | needReceivableFeeCopy: info.needReceivableFee |
| | | })">æ°å»ºæ¶æ¯æµæ°´</el-button> |
| | | </div> |
| | | <el-button plain type="primary" @click="$refs.flowingWater.open('åå»ºæ¶æ¯æµæ°´', { |
| | | billType: info.billType, |
| | | billId: info.id, |
| | | costType: info.costType, |
| | | receivableFee: info.needReceivableFee, |
| | | costTypeName: returnText(info.costType), |
| | | contractCode: info.contractCode, |
| | | contractId: info.contractId, |
| | | startDate: info.startDate, |
| | | endDate: info.endDate, |
| | | multifileList: [], |
| | | date: `${info.startDate} ~ ${info.endDate}`, |
| | | companyId: info.companyId, |
| | | companyName: info.companyName, |
| | | actReceivableFee: info.actReceivableFee |
| | | })">æ°å»ºæ¶æ¯æµæ°´</el-button> |
| | | </div> |
| | | <div class="line"></div> |
| | | <div class="main"> |
| | | <div class="list" style="background: rgba(0,0,0,0); padding: 0; margin-bottom: 0;"> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">ç»æ¸
ç¶æ</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 0">å¾
æ¶æ¬¾</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 1">å·²ç»æ¸
</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 2">é¨åç»æ¸
</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 3">å¾
仿¬¾</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 4">å¾
鿬¾</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 5">å·²å
³é</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">åº{{info.billType === 0 ? 'æ¶' : 'ä»'}}éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.receivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">å®{{info.billType === 0 ? 'æ¶' : 'ä»'}}éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.actReceivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">é{{info.billType === 0 ? 'æ¶' : 'ä»'}}éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.needReceivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">åº{{info.billType === 0 ? 'æ¶' : 'ä»'}}æ¥æ</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.planPayDate}}</div> |
| | | <div class="line"></div> |
| | | <div class="main"> |
| | | <div class="list" style="background: rgba(0,0,0,0); padding: 0; margin-bottom: 0;"> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">ç»æ¸
ç¶æ</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 0">å¾
æ¶æ¬¾</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 1">å·²ç»æ¸
</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 2">é¨åç»æ¸
</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 3">å¾
仿¬¾</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 4">å¾
鿬¾</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 5">å·²å
³é</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">åº{{info.billType === 0 ? 'æ¶' : 'ä»'}}éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.receivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">å®{{info.billType === 0 ? 'æ¶' : 'ä»'}}éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.actReceivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <template v-if="info.billType === 1"> |
| | | <div class="la">éä»éé¢ï¼å
ï¼</div> |
| | | </template> |
| | | <div class="la" v-else>é{{info.needReceivableFee > 0 ? 'æ¶' : 'ä»'}}éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">{{Math.abs(info.needReceivableFee)}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">åº{{info.billType === 0 ? 'æ¶' : 'ä»'}}æ¥æ</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.planPayDate}}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="tabs"> |
| | | <div class="tab" :class="{ active: activeTabs == 0 }" @click="tabsClick(0)">åºç¡ä¿¡æ¯</div> |
| | | <!-- <div class="tab" :class="{ active: activeTabs == 1 }" @click="tabsClick(1)">è´¦åæç»</div>--> |
| | | <div class="tab" :class="{ active: activeTabs == 2 }" @click="tabsClick(2)">æ¶æ¯æµæ°´</div> |
| | | <div class="tabs"> |
| | | <div class="tab" :class="{ active: activeTabs == 0 }" @click="tabsClick(0)">åºç¡ä¿¡æ¯</div> |
| | | <div class="tab" :class="{ active: activeTabs == 2 }" @click="tabsClick(2)">æ¶æ¯æµæ°´</div> |
| | | </div> |
| | | </div> |
| | | <div class="main"> |
| | | <div class="title">åºç¡ä¿¡æ¯</div> |
| | |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">ååç¼å·</div> |
| | | <div class="val">{{info.contractCode}}</div> |
| | | <div class="val" style="color: #2080f7; cursor: pointer;" @click="handleDetail(info.contractId)">{{info.contractCode}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">å建æ¶é´</div> |
| | |
| | | </div> |
| | | <!-- åå»ºæµæ°´ --> |
| | | <FlowingWater ref="flowingWater" @success="getDetails" @refresh="Refresh" /> |
| | | <!-- åå详æ
--> |
| | | <ContractDetail ref="ContractDetailRef" /> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import FlowingWater from './flowingWater' |
| | | import ContractDetail from '../../contract/components/contractDetail' |
| | | import { getYwContractBillById } from '@/api/contract' |
| | | export default { |
| | | components: { |
| | | GlobalWindow, |
| | | FlowingWater |
| | | FlowingWater, |
| | | ContractDetail |
| | | }, |
| | | extends: BaseOpera, |
| | | data() { |
| | |
| | | this.id = id |
| | | this.getDetails() |
| | | }, |
| | | handleDetail (id) { |
| | | this.$refs.ContractDetailRef.open('åå详æ
', id) |
| | | }, |
| | | getDetails () { |
| | | getYwContractBillById(this.id) |
| | | .then(res => { |
| | |
| | | this.visible = true |
| | | }) |
| | | }, |
| | | returnBillType () { |
| | | if (this.info.payStatus === 0) { |
| | | return 0 |
| | | } else if (this.info.payStatus === 2) { |
| | | return this.info.billType |
| | | } else if ([3,4].includes(this.info.payStatus)) { |
| | | return 1 |
| | | } |
| | | }, |
| | | Refresh () { |
| | | this.$emit('success') |
| | | }, |
| | |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æ¹" prop="renterName"> |
| | | <el-input v-model="form.renterName" disabled placeholder="请è¾å
¥åºæ¶éé¢" v-trim /> |
| | | <el-input v-model="form.renterName" disabled placeholder="仿¬¾æ¹" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="æ¿æº" prop="ywContractRoomList"> |
| | | <el-select v-model="form.ywContractRoomList" @click="clickHouse" multiple placeholder="è¯·éæ©"> |
| | |
| | | <template> |
| | | <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @close="close" |
| | | <GlobalWindow :title="title" :withFooter="false" :visible.sync="visible" :confirm-working="isWorking" @close="close" |
| | | @confirm="confirm"> |
| | | <div class="home_title"> |
| | | <div class="left"> |
| | |
| | | <el-form-item label="è®¡è´¹å¨æ" required> |
| | | <el-input v-model="form.date" disabled placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="åºæ¶éé¢" required> |
| | | <el-form-item :label="`åº${form.needReceivableFeeCopy > 0 ? 'æ¶' : 'ä»'}éé¢`" required> |
| | | <el-input v-model="form.receivableFee" disabled placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="宿¶éé¢" prop="actReceivableFee"> |
| | | <el-form-item :label="`å®${form.needReceivableFeeCopy > 0 ? 'æ¶' : 'ä»'}éé¢`" prop="actReceivableFee"> |
| | | <el-input v-model="form.actReceivableFee" placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="å
¥è´¦æ¥æ" prop="actPayDate"> |
| | |
| | | remark: '', |
| | | accountId: '', |
| | | multifileList: [], |
| | | costTypeName: '' |
| | | costTypeName: '', |
| | | needReceivableFeeCopy: '' |
| | | }, |
| | | rules: { |
| | | receivableFee: [ |
| | |
| | | } |
| | | Cookies.set('dm_user_token', res) |
| | | window.location.href = process.env.VUE_APP_CONTEXT_PATH |
| | | // this.$router.push('') |
| | | }) |
| | | .catch(e => { |
| | | this.refreshCaptcha() |
| | |
| | | <template> |
| | | <GlobalWindow width="720px" title="å·¥å详æ
" :visible.sync="visible" :confirm-working="isWorking" @close="close" |
| | | <GlobalWindow width="720px" title="设å¤è¯¦æ
" :visible.sync="visible" :confirm-working="isWorking" @close="close" |
| | | @confirm="confirm"> |
| | | <div class="main"> |
| | | <div class="title"> |
| | |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">设å¤ç®¡çå</div> |
| | | <div class="val">{{ info.realName }}</div> |
| | | <div class="val">{{ info.realName || info.realname }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">æå¨ä½ç½®</div> |
| | |
| | | |
| | | .item { |
| | | width: 33.3%; |
| | | margin-bottom: 12px; |
| | | margin-bottom: 14px; |
| | | |
| | | .photo { |
| | | width: 92px; |
| | |
| | | |
| | | .la { |
| | | color: #7f7f7f; |
| | | margin-top: 2px; |
| | | margin-bottom: 6px; |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | .item { |
| | | width: 33.33%; |
| | | margin-bottom: 8px; |
| | | margin-bottom: 14px; |
| | | |
| | | .la { |
| | | color: #7f7f7f |
| | | color: #7f7f7f; |
| | | margin-bottom: 6px; |
| | | } |
| | | } |
| | | .max{ |
| | |
| | | <el-table-column prop="projectName" label="æå±é¡¹ç®" min-width="100px"></el-table-column> |
| | | <el-table-column prop="code" label="楼å®ç¼ç " min-width="80px"></el-table-column> |
| | | <el-table-column prop="area" label="建çé¢ç§¯(m²)" min-width="80px"></el-table-column> |
| | | <el-table-column prop="cqArea" label="管çé¢ç§¯(m²)" min-width="80px"></el-table-column> |
| | | <el-table-column prop="manageArea" label="管çé¢ç§¯(m²)" min-width="80px"></el-table-column> |
| | | <el-table-column prop="roomNum" label="æ¿é´æ»æ°(é´)" min-width="80px"></el-table-column> |
| | | <el-table-column prop="roomRentNum" label="å¯æåæ¿æºæ°é(é´)" min-width="100px"></el-table-column> |
| | | <el-table-column v-if="containPermissions(['business:ywbuilding:update', 'business:ywbuilding:delete'])" |
| | |
| | | <el-input type="textarea" :rows="4" v-model="form.remark" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | <el-form-item label="建çé¢ç§¯(m²)" prop="area"> |
| | | <el-input v-model="form.area" placeholder="请è¾å
¥ç®ç´é¢ç§¯(m²)" v-trim /> |
| | | <el-input v-model="form.area" placeholder="请è¾å
¥å»ºçé¢ç§¯(m²)" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="产æé¢ç§¯(m²)" prop="cqArea"> |
| | | <el-input v-model="form.cqArea" placeholder="请è¾å
¥äº§æé¢ç§¯(m²)" v-trim /> |
| | |
| | | <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column prop="name" label="项ç®åç§°" min-width="100px"></el-table-column> |
| | | <el-table-column prop="area" label="管çé¢ç§¯(m)" min-width="100px"></el-table-column> |
| | | <el-table-column prop="area" label="管çé¢ç§¯(m²)" min-width="100px"></el-table-column> |
| | | <el-table-column prop="roomNum" label="æ»æ¿æºæ°é(é´)" min-width="100px"></el-table-column> |
| | | <el-table-column prop="roomRentNum" label="å¯æåæ¿æºæ°é(é´)" min-width="100px"></el-table-column> |
| | | <el-table-column v-if="containPermissions(['business:ywproject:update', 'business:ywproject:delete'])" |
| | |
| | | <!-- è¡¨æ ¼åå页 --> |
| | | <template v-slot:table-wrap> |
| | | <ul class="toolbar" v-permissions="['system:user:create', 'system:user:delete']"> |
| | | <li v-permissions="['system:user:create']"><el-button icon="el-icon-plus" type="primary" @click="$refs.operaUserWindow.open('æ°å»ºç¨æ·')">æ°å»º</el-button></li> |
| | | <!-- <li v-permissions="['system:user:create']"><el-button icon="el-icon-plus" type="primary" @click="$refs.operaUserWindow.open('æ°å»ºç¨æ·')">æ°å»º</el-button></li> --> |
| | | <li v-permissions="['system:user:delete']"><el-button icon="el-icon-delete" @click="deleteByIdInBatch">å é¤</el-button></li> |
| | | </ul> |
| | | <el-table |
| | |
| | | <div class="name">{{ item.title }}</div> |
| | | <div class="time">æä½æ¶é´ï¼{{ item.createDate }}</div> |
| | | <div class="creator">æä½äººï¼{{ item.param1 }}</div> |
| | | <div class="creator" v-if="item.param2">ææ´¾ç»ï¼{{ item.param2 }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | .item { |
| | | width: 33.3%; |
| | | margin-bottom: 12px; |
| | | margin-bottom: 14px; |
| | | |
| | | .la { |
| | | color: #7f7f7f; |
| | | margin-top: 2px; |
| | | margin-bottom: 6px; |
| | | } |
| | | } |
| | | |
| | |
| | | // 详ç»é
置请åèhttps://cli.vuejs.org/zh/config/#vue-config-js |
| | | // const outputDir = process.env.VUE_APP_CONTEXT_PATH.substring(1, process.env.VUE_APP_CONTEXT_PATH.length - 1) |
| | | const path = require('path') |
| | | |
| | | function resolve (dir) { |
| | | return path.join(__dirname, dir) |
| | | } |
| | | module.exports = { |
| | | publicPath: process.env.VUE_APP_CONTEXT_PATH, |
| | | outputDir: 'admin', |
| | | publicPath: './', |
| | | outputDir: 'fn_admin', |
| | | assetsDir: 'static', |
| | | lintOnSave: false, |
| | | devServer: { |
| | |
| | | data() { |
| | | return { |
| | | form: { |
| | | phone: '17878787878', |
| | | phone: '18888888888', |
| | | code: '1' |
| | | }, |
| | | downTime: 0 |
| | |
| | | <view class="la">䏿¥äººï¼</view>
|
| | | <view class="val">{{ info.creatorName }}{{info.creatorCompany ? '-' + info.creatorCompany : ''}}</view>
|
| | | </view>
|
| | | <view class="line" v-if="info.creatorPhone">
|
| | | <view class="line" v-if="info.creatorPhone || info.creatorMobile">
|
| | | <view class="la">èç³»çµè¯ï¼</view>
|
| | | <view class="val">{{ info.creatorPhone }}</view>
|
| | | <view class="val">{{ info.creatorMobile || info.creatorPhone }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="la">䏿¥æ¶é´ï¼</view>
|
| | |
| | | */ |
| | | public static DateCompare dayCompare(Date fromDateOrigin,Date toDateOrigin,Date freeStart,Date freeEnd){ |
| | | //å¼å§æ¶é´å¾å延伸ï¼é¤å»æææ¶æ |
| | | Date fromDate = DateUtil.addDaysToDate(fromDateOrigin,getIntersectingDays(fromDateOrigin,DateUtil.addDaysToDate(toDateOrigin,1),freeStart,DateUtil.addDaysToDate(freeEnd,1))); |
| | | Date fromDate = DateUtil.addDaysToDate(fromDateOrigin,getIntersectingDays(fromDateOrigin,DateUtil.addDaysToDate(toDateOrigin,1), |
| | | freeStart, |
| | | Objects.isNull(freeEnd)?null:DateUtil.addDaysToDate(freeEnd,1)) |
| | | ); |
| | | if(toDateOrigin.getTime()< fromDate.getTime()){ |
| | | return DateCompare.builder().day(0).month(0).year(0).yearFloat(new BigDecimal(0)).monthFloat(new BigDecimal(0)).build(); |
| | | } |
| | |
| | | } |
| | | |
| | | public static int getIntersectingDays(Date start1, Date end1, Date start2, Date end2) { |
| | | if(Objects.isNull(start2)||Objects.isNull(end2)){ |
| | | return 0; |
| | | } |
| | | Date earlierStart = DateUtil.daysBetweenDates(start1,start2)>0? start1 : start2; |
| | | Date laterEnd = DateUtil.daysBetweenDates(end2,end1)>0 ? end1 : end2; |
| | | |
| | |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.dao.business.dto.DataDTO; |
| | | import com.doumee.dao.business.model.YwProject; |
| | | import com.doumee.dao.business.model.YwRoom; |
| | | import com.doumee.dao.business.vo.ProjectDataVO; |
| | |
| | | @ApiOperation("é¡¹ç®æ ") |
| | | @PostMapping("/tree") |
| | | @CloudRequiredPermission("business:ywproject:query") |
| | | public ApiResponse<List<ProjectDataVO>> tree (@RequestHeader(Constants.HEADER_USER_TOKEN) String token) { |
| | | return ApiResponse.success(ywProjectService.projectTree()); |
| | | public ApiResponse<List<ProjectDataVO>> tree (@RequestBody DataDTO dataDTO, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) { |
| | | return ApiResponse.success(ywProjectService.projectTree(dataDTO)); |
| | | } |
| | | |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.business.dto; |
| | | |
| | | import com.doumee.core.model.LoginUserInfo; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * Created by IntelliJ IDEA. |
| | | * |
| | | * @Author : Rk |
| | | * @create 2024/5/20 14:54 |
| | | */ |
| | | @Data |
| | | @ApiModel("æ¥ææ¥è¯¢ç±»") |
| | | public class DataDTO { |
| | | |
| | | @ApiModelProperty(value = "项ç®ä¸»é®") |
| | | private Integer projectId; |
| | | |
| | | @ApiModelProperty(value = "å¼å§æ¥æ: yyyy-MM-dd") |
| | | private String startDate; |
| | | |
| | | @ApiModelProperty(value = "ç»ææ¥æ: yyyy-MM-dd") |
| | | private String endDate; |
| | | |
| | | } |
| | |
| | | @ExcelColumn(name="æå±é¡¹ç®ç¼ç ï¼å
³èyw_project)") |
| | | private Integer projectId; |
| | | |
| | | @ApiModelProperty(value = "管çé¢ç§¯") |
| | | @TableField(exist = false) |
| | | private BigDecimal manageArea; |
| | | |
| | | @ApiModelProperty(value = "å¯æåæ¿æºæ°") |
| | | @TableField(exist = false) |
| | | private Integer roomRentNum; |
| | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | @ApiModelProperty(value = "ä¸å¡åç§°") |
| | | private String name; |
| | | |
| | | @ApiModelProperty(value = "é¢ç§¯") |
| | | private BigDecimal area; |
| | | |
| | | @ApiModelProperty(value = "ç¶çº§ä¸»é®") |
| | | private Integer pId; |
| | | |
| | |
| | | import com.doumee.core.model.LoginUserInfo; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.dao.business.dto.DataDTO; |
| | | import com.doumee.dao.business.model.YwProject; |
| | | import com.doumee.dao.business.vo.ProjectDataVO; |
| | | |
| | |
| | | long count(YwProject ywProject); |
| | | |
| | | |
| | | List<ProjectDataVO> projectTree(); |
| | | List<ProjectDataVO> projectTree(DataDTO dataDTO); |
| | | } |
| | |
| | | Utils.MP.blankToNull(pageWrap.getModel()); |
| | | queryWrapper.lambda().eq(Category::getIsdeleted,Constants.ZERO) |
| | | .eq(Objects.nonNull(pageWrap.getModel().getType()),Category::getType,pageWrap.getModel().getType()) |
| | | .isNull(Category::getParentId); |
| | | .isNull(Category::getParentId) |
| | | .orderByAsc(Category::getSortnum) |
| | | ; |
| | | PageData<Category> categoryPageData = PageData.from(categoryMapper.selectPage(page, queryWrapper)); |
| | | //æ¥è¯¢ææäºçº§æ°æ® |
| | | List<Category> categoryList = categoryMapper.selectList( |
| | |
| | | private void checkUnique(Category category){ |
| | | QueryWrapper<Category> wrapper = new QueryWrapper<>(); |
| | | wrapper.lambda() |
| | | .eq(Objects.nonNull(category.getId()),Category::getId,category.getId()) |
| | | .ne(Objects.nonNull(category.getId()),Category::getId,category.getId()) |
| | | .eq(Category::getIsdeleted,Constants.ZERO) |
| | | .eq(Category::getType,category.getType()) |
| | | .eq(Category::getName,category.getName()); |
| | |
| | | ){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | if(StringUtils.isNotBlank(member.getEmail())&&!Constants.validEmail(member.getEmail())){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"è¯·å¡«åæ£ç¡®çemail"); |
| | | } |
| | | LoginUserInfo loginUserInfo = member.getLoginUserInfo(); |
| | | member.setCreator(loginUserInfo.getId()); |
| | | member.setCreateDate(new Date()); |
| | |
| | | @Override |
| | | public List<Member> ywList(Member member) { |
| | | List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>() |
| | | .lambda().eq(Member::getIsdeleted,Constants.ZERO) |
| | | .lambda() |
| | | .eq(Member::getIsdeleted,Constants.ZERO) |
| | | .eq(Member::getStatus,Constants.ZERO) |
| | | .eq(Objects.nonNull(member.getCustomerId()),Member::getCustomerId,member.getCustomerId()) |
| | | .eq(Member::getType,Constants.memberType.customer) |
| | | ); |
| | | return memberList; |
| | |
| | | .and(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getName()),i->i.like(Member::getName,model.getName()).or().like( |
| | | Member::getPhone,model.getName() |
| | | )) |
| | | .orderByDesc(Member::getCreateDate) |
| | | ); |
| | | return PageData.from(iPage); |
| | | } |
| | |
| | | Utils.MP.blankToNull(pageWrap.getModel()); |
| | | pageWrap.getModel().setIsdeleted(Constants.ZERO); |
| | | queryWrapper.select(" (select count(1) from yw_room a where a.isdeleted=0 and a.BUILDING_ID=t.id) as roomNum "+ |
| | | ",(select count(1) from yw_room a where a.isdeleted=0 and a.BUILDING_ID=t.id and a.IS_INVESTMENT=1) as roomRentNum"); |
| | | ",(select count(1) from yw_room a where a.isdeleted=0 and a.BUILDING_ID=t.id and a.IS_INVESTMENT=1) as roomRentNum " + |
| | | ", ( select ifnull(sum(a.RENT_AREA),0) from yw_room a where a.isdeleted=0 and a.BUILDING_ID=t.id ) as manageArea"); |
| | | if (pageWrap.getModel().getId() != null) { |
| | | queryWrapper.eq(YwBuilding::getId, pageWrap.getModel().getId()); |
| | | } |
| | |
| | | ywContractBill.setEndDate(ywContractBill.getPlanPayDate()); |
| | | } |
| | | //æ¥è¯¢ååä¸çæå¤§çåºå· |
| | | List<YwContractBill> ywContractBillList = ywContractBillMapper.selectList(new QueryWrapper<YwContractBill>().lambda().eq(YwContractBill::getContractId,ywContract.getId()).orderByDesc(YwContractBill::getId)); |
| | | List<YwContractBill> ywContractBillList = ywContractBillMapper.selectList(new QueryWrapper<YwContractBill>() |
| | | .lambda().eq(YwContractBill::getContractId,ywContract.getId()) |
| | | .in(YwContractBill::getCostType,Constants.ZERO,Constants.SIX,Constants.FOUR,Constants.FIVE,7) |
| | | .orderByDesc(YwContractBill::getId)); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBillList)){ |
| | | ywContractBill.setSortnum(ywContractBillList.size() + 1 ); |
| | | }else{ |
| | | ywContractBill.setSortnum(Constants.ZERO); |
| | | ywContractBill.setSortnum(0); |
| | | } |
| | | ywContractBillMapper.insert(ywContractBill); |
| | | |
| | |
| | | public YwContractBill getDetail(Integer id) { |
| | | YwContractBill ywContractBill = ywContractBillMapper.selectJoinOne(YwContractBill.class, |
| | | new MPJLambdaWrapper<YwContractBill>().selectAll(YwContractBill.class) |
| | | .select(" ( select ifnull(sum(case when yw.REVENUE_TYPE = 0 then yw.ACT_RECEIVABLE_FEE else -yw.ACT_RECEIVABLE_FEE end),0) from yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as actReceivableFee ") |
| | | //.select(" ( select ifnull(sum(case when yw.REVENUE_TYPE = 0 then yw.ACT_RECEIVABLE_FEE else -yw.ACT_RECEIVABLE_FEE end),0) from yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as actReceivableFee ") |
| | | .select(" ( select ifnull( sum( CASE WHEN t.bill_type = 0 and yw.REVENUE_TYPE = 0 THEN yw.ACT_RECEIVABLE_FEE when t.bill_type = 0 and yw.REVENUE_TYPE = 1 then -yw.ACT_RECEIVABLE_FEE when t.bill_type = 1 and yw.REVENUE_TYPE = 0 then -yw.ACT_RECEIVABLE_FEE else yw.ACT_RECEIVABLE_FEE END),0) from yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as actReceivableFee ") |
| | | .selectAs(YwContract::getCode,YwContractBill::getContractCode) |
| | | .selectAs(YwCustomer::getName,YwContractBill::getCustomerName) |
| | | .selectAs(Company::getName,YwContractBill::getCompanyName) |
| | |
| | | YwContractBill model = pageWrap.getModel(); |
| | | IPage<YwContractBill> iPage = ywContractBillMapper.selectJoinPage(page,YwContractBill.class, |
| | | queryWrapper.selectAll(YwContractBill.class) |
| | | .select(" ( select ifnull(sum(case when yw.REVENUE_TYPE = 0 then yw.ACT_RECEIVABLE_FEE else -yw.ACT_RECEIVABLE_FEE end),0) from yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as actReceivableFee ") |
| | | // .select(" ( select ifnull(sum(case when yw.REVENUE_TYPE = 0 then yw.ACT_RECEIVABLE_FEE else -yw.ACT_RECEIVABLE_FEE end),0) from yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as actReceivableFee ") |
| | | .select(" ( select ifnull( sum( CASE WHEN t.bill_type = 0 and yw.REVENUE_TYPE = 0 THEN yw.ACT_RECEIVABLE_FEE when t.bill_type = 0 and yw.REVENUE_TYPE = 1 then -yw.ACT_RECEIVABLE_FEE when t.bill_type = 1 and yw.REVENUE_TYPE = 0 then -yw.ACT_RECEIVABLE_FEE else yw.ACT_RECEIVABLE_FEE END),0) from yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as actReceivableFee ") |
| | | .selectAs(YwContract::getCode,YwContractBill::getContractCode) |
| | | .selectAs(YwCustomer::getName,YwContractBill::getCustomerName) |
| | | .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId) |
| | |
| | | .like(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getContractCode()), |
| | | YwContract::getCode,model.getContractCode()) |
| | | .ge(Objects.nonNull(model)&&Objects.nonNull(model.getPlanPayDateStart()),YwContractBill::getPlanPayDate, Utils.Date.getStart(model.getPlanPayDateStart())) |
| | | .le(Objects.nonNull(model)&&Objects.nonNull(model.getPlanPayDateEnd()),YwContractBill::getPlanPayDate, Utils.Date.getEnd(model.getPlanPayDateEnd())) ) |
| | | ; |
| | | .le(Objects.nonNull(model)&&Objects.nonNull(model.getPlanPayDateEnd()),YwContractBill::getPlanPayDate, Utils.Date.getEnd(model.getPlanPayDateEnd())) |
| | | .orderByDesc(YwContractBill::getId)); |
| | | |
| | | this.dealRoomDetail(iPage.getRecords()); |
| | | for (YwContractBill ywContractBill:iPage.getRecords()) { |
| | | //éæ¶éé¢ |
| | |
| | | public List<YwContractBill> getCanBackBill(YwContractBill model) { |
| | | List<YwContractBill> list = ywContractBillMapper.selectJoinList(YwContractBill.class, |
| | | new MPJLambdaWrapper<YwContractBill>().selectAll(YwContractBill.class) |
| | | .select(" ( select ifnull(sum(case when yw.REVENUE_TYPE = 0 then yw.ACT_RECEIVABLE_FEE else -yw.ACT_RECEIVABLE_FEE end),0) from yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as actReceivableFee ") |
| | | // .select(" ( select ifnull(sum(case when yw.REVENUE_TYPE = 0 then yw.ACT_RECEIVABLE_FEE else -yw.ACT_RECEIVABLE_FEE end),0) from yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as actReceivableFee ") |
| | | .select(" ( select ifnull( sum( CASE WHEN t.bill_type = 0 and yw.REVENUE_TYPE = 0 THEN yw.ACT_RECEIVABLE_FEE when t.bill_type = 0 and yw.REVENUE_TYPE = 1 then -yw.ACT_RECEIVABLE_FEE when t.bill_type = 1 and yw.REVENUE_TYPE = 0 then -yw.ACT_RECEIVABLE_FEE else yw.ACT_RECEIVABLE_FEE END),0) from yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as actReceivableFee ") |
| | | .selectAs(YwContract::getCode,YwContractBill::getContractCode) |
| | | .selectAs(YwCustomer::getName,YwContractBill::getCustomerName) |
| | | .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId) |
| | |
| | | .in(YwContractBill::getCostType,Constants.ZERO,Constants.ONE,Constants.FOUR,Constants.FIVE,7) |
| | | .eq(Objects.nonNull(model)&&Objects.nonNull(model.getContractId()), |
| | | YwContractBill::getContractId,model.getContractId()) |
| | | .le(Objects.nonNull(model)&&Objects.nonNull(model.getPlanPayDateEnd()),YwContractBill::getStartDate, Utils.Date.getEnd(model.getPlanPayDateEnd())) ) |
| | | .and(Objects.nonNull(model)&&Objects.nonNull(model.getPlanPayDateEnd()), |
| | | i->i.le(YwContractBill::getStartDate, Utils.Date.getEnd(model.getPlanPayDateEnd())).or() |
| | | .in(YwContractBill::getPayStatus,Constants.ONE,Constants.TWO) )) |
| | | ; |
| | | |
| | | for (YwContractBill ywContractBill:list) { |
| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.checkerframework.checker.units.qual.C; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | BigDecimal waitPayTotal = BigDecimal.ZERO; |
| | | //æ 仿¬¾è®°å½ åä¸ºåæ¬¡æ¯ä» æ ¹æ®è´¦åç±»å å¤ææ¯æ¯åº / æ¶å
¥ |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(ywContractRevenueList)){ |
| | | ywContractRevenue.setRevenueType(ywContractBill.getType()); |
| | | ywContractRevenue.setRevenueType(ywContractBill.getBillType()); |
| | | if(ywContractRevenue.getActReceivableFee().compareTo(ywContractBill.getReceivableFee())>Constants.ZERO){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"请è¾å
¥æ£ç¡®çéé¢ï¼"); |
| | | }else if(ywContractRevenue.getActReceivableFee().compareTo(ywContractBill.getReceivableFee())==Constants.ZERO){ |
| | |
| | | } |
| | | }else{ |
| | | //è·åå·²æ¯ä»çæ»éé¢ ï¼å¯è½ææ¶å
¥ ææ¯åºï¼ |
| | | payTotal = ywContractRevenueList.stream().map(i->i.getActReceivableFee().multiply( |
| | | BigDecimal.valueOf(Constants.equalsInteger(ywContractRevenue.getRevenueType(),Constants.ZERO)?Constants.ONE:-Constants.ONE)) |
| | | ).reduce(BigDecimal.ZERO,BigDecimal::add); |
| | | //è·åå¾
æ¯ä»æ¬¾éé¢ å¦æè´¦åç±»å为æ¯åº æ ï¼è´¦åç±»å为æ¶å
¥ ä¸ å¾
æ¯ä»éé¢ å°äº 0ï¼ å为æ¯ä» |
| | | waitPayTotal = ywContractBill.getReceivableFee().subtract(payTotal); |
| | | //妿å¾
æ¯ä»éé¢ å¤§äº 0 忝 æ¶å
¥ å¦åæ¯æ¯åº å
¶ä»ç¶æ 为å¼å¸¸ï¼ |
| | | if(waitPayTotal.compareTo(BigDecimal.ZERO)>Constants.ZERO){ |
| | | ywContractRevenue.setRevenueType(Constants.ZERO); |
| | | }else if(waitPayTotal.compareTo(BigDecimal.ZERO)<Constants.ZERO){ |
| | | ywContractRevenue.setRevenueType(Constants.ONE); |
| | | if(Constants.equalsInteger(ywContractBill.getBillType(),Constants.ZERO)){ |
| | | payTotal = ywContractRevenueList.stream().map(i-> |
| | | i.getActReceivableFee().multiply( |
| | | BigDecimal.valueOf(Constants.equalsInteger(i.getRevenueType(),Constants.ZERO)?Constants.ONE:-Constants.ONE)) |
| | | ).reduce(BigDecimal.ZERO,BigDecimal::add); |
| | | //è·åå¾
æ¯ä»æ¬¾éé¢ å¦æè´¦åç±»å为æ¯åº æ ï¼è´¦åç±»å为æ¶å
¥ ä¸ å¾
æ¯ä»éé¢ å°äº 0ï¼ å为æ¯ä» |
| | | waitPayTotal = ywContractBill.getReceivableFee().subtract(payTotal); |
| | | //妿å¾
æ¯ä»éé¢ å¤§äº 0 忝 æ¶å
¥ å¦åæ¯æ¯åº å
¶ä»ç¶æ 为å¼å¸¸ï¼ |
| | | if(waitPayTotal.compareTo(BigDecimal.ZERO)>Constants.ZERO){ |
| | | ywContractRevenue.setRevenueType(Constants.ZERO); |
| | | }else if(waitPayTotal.compareTo(BigDecimal.ZERO)<Constants.ZERO){ |
| | | ywContractRevenue.setRevenueType(Constants.ONE); |
| | | }else{ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"æ¶æ¯éé¢å¼å¸¸!请è系管çå"); |
| | | } |
| | | }else{ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"æ¶æ¯éé¢å¼å¸¸!请è系管çå"); |
| | | payTotal = ywContractRevenueList.stream().map(i-> |
| | | i.getActReceivableFee().multiply( |
| | | BigDecimal.valueOf(Constants.equalsInteger(i.getRevenueType(),Constants.ZERO)?-Constants.ONE:Constants.ONE)) |
| | | ).reduce(BigDecimal.ZERO,BigDecimal::add); |
| | | //è·åå¾
æ¯ä»æ¬¾éé¢ å¦æè´¦åç±»å为æ¯åº æ ï¼è´¦åç±»å为æ¶å
¥ ä¸ å¾
æ¯ä»éé¢ å°äº 0ï¼ å为æ¯ä» |
| | | waitPayTotal = ywContractBill.getReceivableFee().subtract(payTotal); |
| | | //妿å¾
æ¯ä»éé¢ å¤§äº 0 忝 æ¶å
¥ å¦åæ¯æ¯åº å
¶ä»ç¶æ 为å¼å¸¸ï¼ |
| | | if(waitPayTotal.compareTo(BigDecimal.ZERO)>Constants.ZERO){ |
| | | ywContractRevenue.setRevenueType(Constants.ONE); |
| | | }else if(waitPayTotal.compareTo(BigDecimal.ZERO)<Constants.ZERO){ |
| | | ywContractRevenue.setRevenueType(Constants.ZERO); |
| | | }else{ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"æ¶æ¯éé¢å¼å¸¸!请è系管çå"); |
| | | } |
| | | } |
| | | |
| | | |
| | | //å¾
æ¯ä»çæµæ°´ å¦æä¸ºæ¶å
¥ 忝坹 éé¢å¼ å¦ææ¯æ¯åº åè·åç»å¯¹å¼ è¿è¡å¯¹æ¯ |
| | | if(Constants.equalsInteger(ywContractRevenue.getRevenueType(),Constants.ZERO)){ |
| | | //妿æ¯ä»éé¢ å¤§äº å¾
æ¯ä»éé¢ åæç¤ºå¼å¸¸ 妿æ¯ä»éé¢å°äº å¾
æ¯ä»éé¢ åç¶æä¸åå å
¶ä»ç¶æ å¼å¸¸ |
| | |
| | | } |
| | | ywContractRevenueMapper.insert(ywContractRevenue); |
| | | ywContractBillMapper.updateById(ywContractBill); |
| | | //å¦æè´¦åå®ç»ï¼åæ¥è¯¢ååä¸å¼å¯ä¸çè´¦åæ¯å¦åå¨éæ¬¾ä¸ å¦æä¸åå¨åæ è®°åå已鿬¾ |
| | | if(Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.ONE)){ |
| | | if( ywContractBillMapper |
| | | .selectCount(new QueryWrapper<YwContractBill>().lambda().eq(YwContractBill::getContractId,ywContractBill.getContractId()) |
| | | .ne(YwContractBill::getId,ywContractBill.getId()) |
| | | .eq(YwContractBill::getStatus,Constants.ZERO) |
| | | .in(YwContractBill::getPayStatus,Constants.ZERO,Constants.FOUR, Constants.TWO,Constants.THREE) |
| | | ) == Constants.ZERO){ |
| | | ywContractMapper.update(new UpdateWrapper<YwContract>().lambda() |
| | | .set(YwContract::getStatus,Constants.FOUR) |
| | | .set(YwContract::getEditDate,DateUtil.getCurrDateTime()) |
| | | .eq(YwContract::getId,ywContractBill.getContractId()) |
| | | ); |
| | | } |
| | | } |
| | | //åå¨éä»¶ä¿¡æ¯ |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractRevenue.getMultifileList())){ |
| | | for (Multifile multifile:ywContractRevenue.getMultifileList()) { |
| | |
| | | } |
| | | |
| | | private void dealRoomsForContract(YwContract model) { |
| | | this.dealRoomsValid(model); |
| | | List<YwContractRoom> list = new ArrayList<>(); |
| | | for(YwRoom room :model.getRoomList()){ |
| | | YwContractRoom t = new YwContractRoom(); |
| | |
| | | } |
| | | ywContractRoomMapper.insert(list); |
| | | } |
| | | |
| | | private void dealRoomsValid(YwContract model){ |
| | | List<Integer> roomIds = model.getRoomList().stream().map(i->i.getId()).collect(Collectors.toList()); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(roomIds)){ |
| | | if(ywContractMapper.selectJoinCount(new MPJLambdaWrapper<YwContract>() |
| | | .leftJoin(YwContractRoom.class,YwContractRoom::getContractId,YwContract::getId) |
| | | .eq(YwContractRoom::getType,Constants.ZERO) |
| | | .in(YwContractRoom::getRoomId,roomIds) |
| | | .in(YwContract::getStatus,Constants.ZERO,Constants.ONE,Constants.TWO) |
| | | .apply(" (" + |
| | | " ( t.START_DATE < '"+DateUtil.getFomartDate(model.getEndDate(),"yyyy-MM-dd HH:mm:ss")+"' and t.END_DATE > '"+DateUtil.getFomartDate(model.getStartDate(),"yyyy-MM-dd HH:mm:ss")+"' ) " + |
| | | "or " + |
| | | " ( t.START_DATE < '"+DateUtil.getFomartDate(model.getEndDate(),"yyyy-MM-dd HH:mm:ss")+"' and t.END_DATE > '"+DateUtil.getFomartDate(model.getStartDate(),"yyyy-MM-dd HH:mm:ss")+"' ) " + |
| | | " ) ") |
| | | |
| | | )>Constants.ZERO){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"æ¿æºå·²è¢«å ç¨è¯·å·æ°éè¯"); |
| | | }; |
| | | |
| | | if(ywContractMapper.selectJoinCount(new MPJLambdaWrapper<YwContract>() |
| | | .leftJoin(YwContractRoom.class,YwContractRoom::getContractId,YwContract::getId) |
| | | .eq(YwContractRoom::getType,Constants.ZERO) |
| | | .in(YwContractRoom::getRoomId,roomIds) |
| | | .in(YwContract::getStatus,Constants.THREE) |
| | | .apply(" ( t.START_DATE < '"+DateUtil.getFomartDate(model.getEndDate(),"yyyy-MM-dd HH:mm:ss")+"' " + |
| | | " and t.BT_DATE > '"+DateUtil.getFomartDate(model.getStartDate(),"yyyy-MM-dd HH:mm:ss")+"' ) " ) |
| | | )>Constants.ZERO){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"æ¿æºå·²è¢«å ç¨è¯·å·æ°éè¯"); |
| | | }; |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<YwContractBill> getBillList(YwContract model){ |
| | |
| | | ,Constants.YwLogType.CONTRACT_UPDATE.getKey()) |
| | | .orderByAsc(YwWorkorderLog::getCreateDate))); |
| | | |
| | | //æ¥è¯¢è´¦åéå |
| | | |
| | | queryBillListByModel(model,new Date()); |
| | | } |
| | | return model; |
| | |
| | | //æ¥è¯¢è´¦åéå |
| | | model.setBillList(ywContractBillMapper.selectJoinList(YwContractBill.class,new MPJLambdaWrapper<YwContractBill>() |
| | | .selectAll(YwContractBill.class ) |
| | | .select(" ( select ifnull(sum(case when yw.REVENUE_TYPE = 0 then yw.ACT_RECEIVABLE_FEE else -yw.ACT_RECEIVABLE_FEE end),0) from yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as actReceivableFee ") |
| | | //.select(" ( select ifnull(sum(case when yw.REVENUE_TYPE = 0 then yw.ACT_RECEIVABLE_FEE else -yw.ACT_RECEIVABLE_FEE end),0) from yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as actReceivableFee ") |
| | | .select(" ( select ifnull( sum( CASE WHEN t.bill_type = 0 and yw.REVENUE_TYPE = 0 THEN yw.ACT_RECEIVABLE_FEE when t.bill_type = 0 and yw.REVENUE_TYPE = 1 then -yw.ACT_RECEIVABLE_FEE when t.bill_type = 1 and yw.REVENUE_TYPE = 0 then -yw.ACT_RECEIVABLE_FEE else yw.ACT_RECEIVABLE_FEE END),0) from yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as actReceivableFee ") |
| | | .eq( YwContractBill::getContractId,model.getId()) |
| | | .eq(YwContractBill::getIsdeleted,Constants.ZERO) |
| | | .orderByAsc(YwContractBill::getSortnum,YwContractBill::getCreateDate))); |
| | |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | LoginUserInfo loginUserInfo = ywCustomer.getLoginUserInfo(); |
| | | if(StringUtils.isNotBlank(ywCustomer.getEmail())&&!Constants.validEmail(ywCustomer.getEmail())){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"è¯·å¡«åæ£ç¡®çemail"); |
| | | } |
| | | ywCustomer.setStatus(Constants.ZERO); |
| | | ywCustomer.setIsdeleted(Constants.ZERO); |
| | | ywCustomer.setCreator(loginUserInfo.getId()); |
| | |
| | | .ge(Objects.nonNull(model.getStartDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getStartDate())) |
| | | .le(Objects.nonNull(model.getEndDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getEndDate())) |
| | | .eq(YwDeviceRecord::getIsdeleted,Constants.ZERO) |
| | | .orderByDesc(YwDeviceRecord::getCreateDate) |
| | | ); |
| | | return PageData.from(iPage); |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class,BusinessException.class}) |
| | | public void updateById(YwPatrolLine ywPatrolLine) { |
| | | if(Objects.isNull(ywPatrolLine) |
| | | || StringUtils.isBlank(ywPatrolLine.getName()) |
| | |
| | | //循ç¯å¤ç åéæ°æ® |
| | | List<YwLinePoint> ywLinePointList = ywPatrolLine.getLinePointList(); |
| | | //æ¯å¦åå¨ç¸åæ°æ® |
| | | Set<Integer> setIds = new HashSet<Integer>(ywLinePointList.stream().map(i->i.getLineId()).collect(Collectors.toList())); |
| | | Set<Integer> setIds = new HashSet<Integer>(ywLinePointList.stream().map(i->i.getPointId()).collect(Collectors.toList())); |
| | | if(setIds.size()!=ywLinePointList.size()){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"åå¨ç¸åå·¡æ£ç¹!"); |
| | | } |
| | |
| | | .leftJoin(YwPatrolScheme.class,YwPatrolScheme::getId,YwPatrolTask::getSchemeId) |
| | | .eq(YwPatrolTask::getIsdeleted, Constants.ZERO) |
| | | .eq(Objects.nonNull(model.getStatus()) && !Constants.equalsInteger(model.getStatus(),Constants.TWO),YwPatrolTask::getStatus, model.getStatus()) |
| | | .eq(Objects.nonNull(model.getDealUserId()),YwPatrolTask::getDealUserId, model.getDealUserId()) |
| | | .apply(Objects.nonNull(model.getStatus()) && Constants.equalsInteger(model.getStatus(),Constants.TWO)," t.status = 1 and t.END_DATE > now() ") |
| | | .apply(StringUtils.isNotBlank(model.getQueryStatus())," find_in_set(t.status ,'"+model.getQueryStatus()+"') ") |
| | | .like(StringUtils.isNotBlank(model.getPlanTitle()),YwPatrolScheme::getTitle,model.getPlanTitle()) |
| | |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.YwBuildingMapper; |
| | | import com.doumee.dao.business.YwFloorMapper; |
| | | import com.doumee.dao.business.YwProjectMapper; |
| | | import com.doumee.dao.business.YwRoomMapper; |
| | | import com.doumee.dao.business.dto.DataDTO; |
| | | import com.doumee.dao.business.model.*; |
| | | import com.doumee.dao.business.vo.CompanyTree; |
| | | import com.doumee.dao.business.vo.ProjectDataVO; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | |
| | | |
| | | |
| | | @Override |
| | | public List<ProjectDataVO> projectTree(){ |
| | | public List<ProjectDataVO> projectTree(DataDTO dataDTO){ |
| | | List<ProjectDataVO> projectDataVOList = new ArrayList<>(); |
| | | List<YwProject> ywProjectList = ywProjectMapper.selectList(new QueryWrapper<YwProject>().lambda() |
| | | .eq(YwProject::getIsdeleted,Constants.ZERO) |
| | | .eq(YwProject::getStatus,Constants.ZERO) |
| | | .eq(Objects.nonNull(dataDTO.getProjectId()),YwProject::getId,dataDTO.getProjectId()) |
| | | .orderByAsc(YwProject::getSortnum) |
| | | ); |
| | | for (YwProject ywProject:ywProjectList) { |
| | |
| | | List<YwBuilding> ywBuildingList = ywBuildingMapper.selectList(new QueryWrapper<YwBuilding>().lambda() |
| | | .eq(YwBuilding::getIsdeleted,Constants.ZERO) |
| | | .eq(YwBuilding::getStatus,Constants.ZERO) |
| | | .eq(Objects.nonNull(dataDTO.getProjectId()),YwBuilding::getProjectId,dataDTO.getProjectId()) |
| | | .orderByAsc(YwBuilding::getSortnum) |
| | | ); |
| | | |
| | |
| | | List<YwFloor> ywFloorList = ywFloorMapper.selectList(new QueryWrapper<YwFloor>().lambda() |
| | | .eq(YwFloor::getIsdeleted,Constants.ZERO) |
| | | .eq(YwFloor::getStatus,Constants.ZERO) |
| | | .eq(Objects.nonNull(dataDTO.getProjectId()),YwFloor::getProjectId,dataDTO.getProjectId()) |
| | | .orderByAsc(YwFloor::getSortnum) |
| | | ); |
| | | |
| | |
| | | projectDataVOList.add(projectDataVO); |
| | | } |
| | | |
| | | |
| | | |
| | | List<YwRoom> ywRoomList = ywRoomMapper.selectList(new QueryWrapper<YwRoom>().lambda() |
| | | .eq(YwRoom::getIsdeleted,Constants.ZERO) |
| | | .eq(YwRoom::getStatus,Constants.ZERO) |
| | | .eq(Objects.nonNull(dataDTO.getProjectId()),YwRoom::getProjectId,dataDTO.getProjectId()) |
| | | .apply(Objects.nonNull(dataDTO)&&Objects.nonNull(dataDTO.getStartDate())&&Objects.nonNull(dataDTO.getEndDate())," id not in (" + |
| | | " SELECT y2.room_id FROM yw_contract y1 left join yw_contract_room y2 on y1.id = y2.contract_id where 1 = 1 and y1.`STATUS` in( 0,1,2) " + |
| | | " and y1.START_DATE < '"+dataDTO.getEndDate()+" 00:00:00' and y1.END_DATE > '"+ dataDTO.getStartDate() +" 00:00:00' " + |
| | | " ) ") |
| | | .apply(Objects.nonNull(dataDTO)&&Objects.nonNull(dataDTO.getStartDate())&&Objects.nonNull(dataDTO.getEndDate())," id not in (" + |
| | | " SELECT y2.room_id FROM yw_contract y1 left join yw_contract_room y2 on y1.id = y2.contract_id where 1 = 1 and y1.`STATUS` = 3 " + |
| | | " and y1.START_DATE < '"+dataDTO.getEndDate()+" 00:00:00' and y1.BT_DATE > '"+ dataDTO.getStartDate() +" 00:00:00' " + |
| | | " ) ") |
| | | .orderByAsc(YwRoom::getSortnum) |
| | | ); |
| | | |
| | | |
| | | for (YwRoom data:ywRoomList) { |
| | | ProjectDataVO projectDataVO = new ProjectDataVO(); |
| | | BeanUtils.copyProperties(data,projectDataVO); |
| | | projectDataVO.setName(data.getCode()); |
| | | projectDataVO.setName(data.getRoomNum()); |
| | | projectDataVO.setArea(data.getRentArea().setScale(2, BigDecimal.ROUND_HALF_UP)); |
| | | projectDataVO.setPId(data.getFloor()); |
| | | projectDataVO.setLv(Constants.THREE); |
| | | projectDataVOList.add(projectDataVO); |
| | |
| | | .selectAs(YwProject::getName,YwRoom::getProjectName) |
| | | .selectAs(YwFloor::getName,YwRoom::getFloorName) |
| | | .selectAs(YwBuilding::getName,YwRoom::getBuildingName) |
| | | .select(" select case when y1.status = 3 then now() BETWEEN y1.START_DATE and y1.BT_DATE else now() BETWEEN y1.START_DATE and y1.END_DATE END " + |
| | | .select(" ifnull( ( select case when y1.status = 3 then now() BETWEEN y1.START_DATE and y1.BT_DATE else now() BETWEEN y1.START_DATE and y1.END_DATE END " + |
| | | "from yw_contract y1 left join yw_contract_room y2 on y1.id = y2.CONTRACT_ID and y2.TYPE = 0 " + |
| | | "where y1.`STATUS` <> 4 and y2.room_id = t.id order by y1.create_date desc limit 1 ",YwRoom::getLeaseStatus) |
| | | "where y1.`STATUS` <> 4 and y2.room_id = t.id order by y1.create_date desc limit 1 ) ,0) ",YwRoom::getLeaseStatus) |
| | | .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId) |
| | | .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId) |
| | | .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor); |