From 16217be9c85f95cb236e639da6e546bb38cdc53d Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期四, 05 十二月 2024 14:45:07 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- admin/.env | 2 admin/src/views/contract/components/contractEdit.vue | 199 ++++++++++---- admin/src/api/customer.js | 6 admin/vue.config.js | 5 h5/pages/login.vue | 2 admin/src/views/contract/components/contractDetail.vue | 108 +++++-- admin/src/views/project/projectList.vue | 2 admin/src/views/workorder/components/detail.vue | 5 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwBuilding.java | 4 admin/src/views/operation/components/deviceDetail.vue | 8 h5/pages/workOrder/detail.vue | 4 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java | 6 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerServiceImpl.java | 3 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java | 1 admin/src/views/client/components/OperaYwCustomerWindow.vue | 6 admin/src/views/finance/components/details.vue | 2 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProjectService.java | 3 admin/src/views/system/user.vue | 2 server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java | 8 admin/.gitignore | 3 admin/src/views/finance/components/bullEdit.vue | 2 admin/src/views/finance/bull.vue | 16 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java | 4 admin/.env.development | 10 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java | 4 admin/src/views/login.vue | 1 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 8 admin/src/views/contract/components/terminateLease.vue | 32 - admin/src/views/finance/components/flowingWater.vue | 7 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractRevenueServiceImpl.java | 60 +++ admin/src/views/contract/contractList.vue | 10 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java | 46 +++ server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java | 23 + /dev/null | 5 admin/src/components/common/GlobalWindow.vue | 4 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java | 3 admin/src/views/operation/components/maintainDetail.vue | 5 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java | 5 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolLineServiceImpl.java | 3 admin/src/views/project/components/OperaYwBuildingWindow.vue | 2 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java | 25 + admin/src/views/contract/components/config.js | 2 admin/src/views/finance/components/bullDetail.vue | 133 +++++---- admin/src/views/project/buildingList.vue | 2 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceRecordServiceImpl.java | 1 admin/src/router/index.js | 2 admin/src/views/client/components/staffEdit.vue | 6 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/DataDTO.java | 29 ++ 48 files changed, 567 insertions(+), 262 deletions(-) diff --git a/admin/.env b/admin/.env index af248a9..18495ab 100644 --- a/admin/.env +++ b/admin/.env @@ -4,7 +4,7 @@ VUE_APP_ROUTER_MODE = 'hash' # 椤圭洰涓婁笅鏂囪矾寰� -VUE_APP_CONTEXT_PATH = '/' +VUE_APP_CONTEXT_PATH = '/fn_admin/#/' # 鎺ュ彛鍓嶇紑 VUE_APP_API_PREFIX = '/gateway_interface' diff --git a/admin/.env.development b/admin/.env.development new file mode 100644 index 0000000..a124a35 --- /dev/null +++ b/admin/.env.development @@ -0,0 +1,10 @@ +# 寮�鍙戠幆澧冮厤缃� +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' + diff --git a/admin/.gitignore b/admin/.gitignore index 25910be..c2dd892 100644 --- a/admin/.gitignore +++ b/admin/.gitignore @@ -1,7 +1,7 @@ .DS_Store coderd.json node_modules -.env.development +# .env.development /dist @@ -10,6 +10,7 @@ .env.*.local unpackage admin +fn_admin # Log files npm-debug.log* yarn-debug.log* diff --git a/admin/babel.config.js b/admin/babel.config.js deleted file mode 100644 index e955840..0000000 --- a/admin/babel.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - presets: [ - '@vue/cli-plugin-babel/preset' - ] -} diff --git a/admin/src/api/customer.js b/admin/src/api/customer.js index e57764c..48bb68e 100644 --- a/admin/src/api/customer.js +++ b/admin/src/api/customer.js @@ -11,3 +11,9 @@ 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) +} + diff --git a/admin/src/components/common/GlobalWindow.vue b/admin/src/components/common/GlobalWindow.vue index 376a5b7..b734be2 100644 --- a/admin/src/components/common/GlobalWindow.vue +++ b/admin/src/components/common/GlobalWindow.vue @@ -125,11 +125,11 @@ .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; diff --git a/admin/src/router/index.js b/admin/src/router/index.js index f69ea19..6002274 100644 --- a/admin/src/router/index.js +++ b/admin/src/router/index.js @@ -10,7 +10,7 @@ const router = new VueRouter({ // + (process.env.VUE_APP_ROUTER_MODE === 'hash' ? '#' : '') - // base: process.env.VUE_APP_CONTEXT_PATH, + base: '/', mode: 'hash', routes: [ // 鐧诲綍 diff --git a/admin/src/views/client/components/OperaYwCustomerWindow.vue b/admin/src/views/client/components/OperaYwCustomerWindow.vue index d3c0941..c966c3f 100644 --- a/admin/src/views/client/components/OperaYwCustomerWindow.vue +++ b/admin/src/views/client/components/OperaYwCustomerWindow.vue @@ -45,7 +45,9 @@ <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> @@ -264,4 +266,4 @@ } } } -</style> \ No newline at end of file +</style> diff --git a/admin/src/views/client/components/staffEdit.vue b/admin/src/views/client/components/staffEdit.vue index e1ce3d3..ffe8cd5 100644 --- a/admin/src/views/client/components/staffEdit.vue +++ b/admin/src/views/client/components/staffEdit.vue @@ -32,7 +32,9 @@ <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="鎬у埆"> @@ -213,4 +215,4 @@ } } } -</style> \ No newline at end of file +</style> diff --git a/admin/src/views/contract/components/config.js b/admin/src/views/contract/components/config.js index c094419..0611aea 100644 --- a/admin/src/views/contract/components/config.js +++ b/admin/src/views/contract/components/config.js @@ -9,7 +9,7 @@ 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: '璇疯緭鍏�' }], diff --git a/admin/src/views/contract/components/contractDetail.vue b/admin/src/views/contract/components/contractDetail.vue index f13cf9a..730f2c2 100644 --- a/admin/src/views/contract/components/contractDetail.vue +++ b/admin/src/views/contract/components/contractDetail.vue @@ -6,22 +6,25 @@ :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">姝e父鎵ц涓�</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">姝e父鎵ц涓�</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> @@ -40,7 +43,7 @@ </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> @@ -99,7 +102,7 @@ <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> @@ -116,14 +119,22 @@ <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> @@ -140,13 +151,25 @@ <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> @@ -182,18 +205,22 @@ <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> @@ -205,6 +232,7 @@ </template> </el-table-column> <el-table-column + width="200" label="璁¤垂鍛ㄦ湡"> <template slot-scope="{row}"> {{ row.startDate }} ~ {{ row.endDate }} @@ -325,6 +353,27 @@ 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 => { @@ -342,6 +391,7 @@ capacity: this.pageSize, page: this.page, model: { + status: 0, billType: this.type, contractId: this.info.id } diff --git a/admin/src/views/contract/components/contractEdit.vue b/admin/src/views/contract/components/contractEdit.vue index 213d597..3fa3f50 100644 --- a/admin/src/views/contract/components/contractEdit.vue +++ b/admin/src/views/contract/components/contractEdit.vue @@ -1,6 +1,4 @@ <template> -<!-- :text="activeTabs === 0 ? '涓嬩竴姝�' : '鎻愪氦'"--> -<!-- :backText="activeTabs === 0 ? '杩斿洖' : '涓婁竴姝�'"--> <GlobalWindow width="100%" :title="title" @@ -42,7 +40,7 @@ <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> @@ -65,8 +63,11 @@ <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> @@ -81,6 +82,12 @@ :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> @@ -117,10 +124,10 @@ <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> @@ -134,20 +141,26 @@ <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> @@ -172,7 +185,7 @@ </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> @@ -200,10 +213,10 @@ <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> @@ -217,20 +230,26 @@ <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> @@ -255,7 +274,7 @@ </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> @@ -294,6 +313,7 @@ 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' @@ -335,6 +355,7 @@ zlDate: [], zlDetailList: [ { + circleType: 0, startDate: '', endDate: '', time: [], @@ -350,6 +371,7 @@ wyDate: [], wyDetailList: [ { + circleType: 0, startDate: '', endDate: '', time: [], @@ -367,6 +389,8 @@ wyList: [], rules, + + contactsList: [], loadingInstance: null, uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch', @@ -388,7 +412,7 @@ { name: '涓�娆℃�т粯娆�', value: 0 }, { name: '3涓湀涓�浠�', value: 1 }, { name: '6涓湀涓�浠�', value: 2 }, - { name: '1骞翠竴浠�', value: 2 }, + { name: '1骞翠竴浠�', value: 3 }, ], unitOps: [ { name: '鍏�/m虏路澶�', value: 0 }, @@ -407,6 +431,9 @@ open (title, target) { this.title = title this.ids = [] + this.houseList = [] + this.zlPrice = '' + this.wyPrice = '' this.getUser() this.getProject() this.getCompany() @@ -420,31 +447,41 @@ 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 () { @@ -467,13 +504,45 @@ 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) { @@ -486,6 +555,8 @@ if (!valid2) { return } + if (that.zlList.length === 0) return that.$message.warning('璇峰厛鐢熸垚绉熻祦璐﹀崟锛�') + if (that.wyList.length === 0) return that.$message.warning('璇峰厛鐢熸垚鐗╀笟璐﹀崟锛�') this.submit() }) }) @@ -494,6 +565,7 @@ if (!valid1) { return } + if (that.zlList.length === 0) return that.$message.warning('璇峰厛鐢熸垚绉熻祦璐﹀崟锛�') this.submit() }) } else if (this.form.type === 1) { @@ -501,6 +573,7 @@ if (!valid2) { return } + if (that.wyList.length === 0) return that.$message.warning('璇峰厛鐢熸垚鐗╀笟璐﹀崟锛�') this.submit() }) } @@ -522,10 +595,12 @@ 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 @@ -539,7 +614,8 @@ getHouseTree () { tree({ startDate: this.form.startDate, - endDate: this.form.endDate + endDate: this.form.endDate, + projectId: this.form.projectId }) .then(res => { res.forEach(item => { @@ -576,6 +652,7 @@ generateWY () { getBillList({ ...this.form, billType: 1 }) .then(res => { + this.wy = true let zlPrice = 0 let arr = [] res.forEach(item => { @@ -590,18 +667,20 @@ }, 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: '' }) @@ -609,24 +688,29 @@ 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) => { @@ -718,6 +802,7 @@ position: sticky; top: 0; left: 0; + z-index: 999; } .tabs { border-bottom: 1px solid #DFE2E8; diff --git a/admin/src/views/contract/components/terminateLease.vue b/admin/src/views/contract/components/terminateLease.vue index 6bb8929..83108ee 100644 --- a/admin/src/views/contract/components/terminateLease.vue +++ b/admin/src/views/contract/components/terminateLease.vue @@ -84,6 +84,7 @@ label="璐﹀崟缂栧彿"> </el-table-column> <el-table-column + width="100" label="璐圭敤绫诲瀷"> <template slot-scope="{row}"> <span v-if="row.costType === 0">绉熻祦璐�</span> @@ -103,13 +104,14 @@ 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> @@ -247,26 +249,6 @@ 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 @@ -279,12 +261,12 @@ 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) } }) @@ -315,8 +297,8 @@ 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(); diff --git a/admin/src/views/contract/contractList.vue b/admin/src/views/contract/contractList.vue index 13a9176..089e6f5 100644 --- a/admin/src/views/contract/contractList.vue +++ b/admin/src/views/contract/contractList.vue @@ -15,14 +15,8 @@ <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> diff --git a/admin/src/views/finance/bull.vue b/admin/src/views/finance/bull.vue index 4c7923a..e0e4de8 100644 --- a/admin/src/views/finance/bull.vue +++ b/admin/src/views/finance/bull.vue @@ -33,9 +33,13 @@ </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> @@ -59,7 +63,7 @@ {{ 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> @@ -145,8 +149,8 @@ { value: 0, label: '寰呮敹娆�' }, { value: 1, label: '宸茬粨绠�' }, { value: 2, label: '閮ㄥ垎缁撴竻' }, - { value: 3, label: '寰呴��娆�' }, - { value: 4, label: '寰呬粯娆�' } + { value: 3, label: '寰呬粯娆�' }, + { value: 4, label: '寰呴��娆�' } ] }, { diff --git a/admin/src/views/finance/components/bullDetail.vue b/admin/src/views/finance/components/bullDetail.vue index bfea17f..d08fee0 100644 --- a/admin/src/views/finance/components/bullDetail.vue +++ b/admin/src/views/finance/components/bullDetail.vue @@ -1,63 +1,68 @@ <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> @@ -80,7 +85,7 @@ </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> @@ -183,6 +188,8 @@ </div> <!-- 鍒涘缓娴佹按 --> <FlowingWater ref="flowingWater" @success="getDetails" @refresh="Refresh" /> + <!-- 鍚堝悓璇︽儏 --> + <ContractDetail ref="ContractDetailRef" /> </GlobalWindow> </template> @@ -190,11 +197,13 @@ 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() { @@ -212,6 +221,9 @@ this.id = id this.getDetails() }, + handleDetail (id) { + this.$refs.ContractDetailRef.open('鍚堝悓璇︽儏', id) + }, getDetails () { getYwContractBillById(this.id) .then(res => { @@ -219,6 +231,15 @@ 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') }, diff --git a/admin/src/views/finance/components/bullEdit.vue b/admin/src/views/finance/components/bullEdit.vue index 9eaf189..de28758 100644 --- a/admin/src/views/finance/components/bullEdit.vue +++ b/admin/src/views/finance/components/bullEdit.vue @@ -18,7 +18,7 @@ </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="璇烽�夋嫨"> diff --git a/admin/src/views/finance/components/details.vue b/admin/src/views/finance/components/details.vue index 1336c5a..f349cc1 100644 --- a/admin/src/views/finance/components/details.vue +++ b/admin/src/views/finance/components/details.vue @@ -1,5 +1,5 @@ <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"> diff --git a/admin/src/views/finance/components/flowingWater.vue b/admin/src/views/finance/components/flowingWater.vue index d011587..c042606 100644 --- a/admin/src/views/finance/components/flowingWater.vue +++ b/admin/src/views/finance/components/flowingWater.vue @@ -17,10 +17,10 @@ <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"> @@ -110,7 +110,8 @@ remark: '', accountId: '', multifileList: [], - costTypeName: '' + costTypeName: '', + needReceivableFeeCopy: '' }, rules: { receivableFee: [ diff --git a/admin/src/views/login.vue b/admin/src/views/login.vue index a728dbc..c51189a 100644 --- a/admin/src/views/login.vue +++ b/admin/src/views/login.vue @@ -138,6 +138,7 @@ } Cookies.set('dm_user_token', res) window.location.href = process.env.VUE_APP_CONTEXT_PATH + // this.$router.push('') }) .catch(e => { this.refreshCaptcha() diff --git a/admin/src/views/operation/components/deviceDetail.vue b/admin/src/views/operation/components/deviceDetail.vue index 5dad8e6..f3181aa 100644 --- a/admin/src/views/operation/components/deviceDetail.vue +++ b/admin/src/views/operation/components/deviceDetail.vue @@ -1,5 +1,5 @@ <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"> @@ -25,7 +25,7 @@ </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> @@ -138,7 +138,7 @@ .item { width: 33.3%; - margin-bottom: 12px; + margin-bottom: 14px; .photo { width: 92px; @@ -147,7 +147,7 @@ .la { color: #7f7f7f; - margin-top: 2px; + margin-bottom: 6px; } } diff --git a/admin/src/views/operation/components/maintainDetail.vue b/admin/src/views/operation/components/maintainDetail.vue index 0ab9cd3..048a182 100644 --- a/admin/src/views/operation/components/maintainDetail.vue +++ b/admin/src/views/operation/components/maintainDetail.vue @@ -90,10 +90,11 @@ .item { width: 33.33%; - margin-bottom: 8px; + margin-bottom: 14px; .la { - color: #7f7f7f + color: #7f7f7f; + margin-bottom: 6px; } } .max{ diff --git a/admin/src/views/project/buildingList.vue b/admin/src/views/project/buildingList.vue index cb453d9..a94db6f 100644 --- a/admin/src/views/project/buildingList.vue +++ b/admin/src/views/project/buildingList.vue @@ -35,7 +35,7 @@ <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'])" diff --git a/admin/src/views/project/components/OperaYwBuildingWindow.vue b/admin/src/views/project/components/OperaYwBuildingWindow.vue index 3a4c986..83fecbe 100644 --- a/admin/src/views/project/components/OperaYwBuildingWindow.vue +++ b/admin/src/views/project/components/OperaYwBuildingWindow.vue @@ -19,7 +19,7 @@ <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 /> diff --git a/admin/src/views/project/projectList.vue b/admin/src/views/project/projectList.vue index a150378..383fc76 100644 --- a/admin/src/views/project/projectList.vue +++ b/admin/src/views/project/projectList.vue @@ -22,7 +22,7 @@ <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'])" diff --git a/admin/src/views/system/user.vue b/admin/src/views/system/user.vue index 73d74f4..ee79e9f 100644 --- a/admin/src/views/system/user.vue +++ b/admin/src/views/system/user.vue @@ -28,7 +28,7 @@ <!-- 琛ㄦ牸鍜屽垎椤� --> <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 diff --git a/admin/src/views/workorder/components/detail.vue b/admin/src/views/workorder/components/detail.vue index 55f1e8d..d5337ea 100644 --- a/admin/src/views/workorder/components/detail.vue +++ b/admin/src/views/workorder/components/detail.vue @@ -70,6 +70,7 @@ <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> @@ -330,11 +331,11 @@ .item { width: 33.3%; - margin-bottom: 12px; + margin-bottom: 14px; .la { color: #7f7f7f; - margin-top: 2px; + margin-bottom: 6px; } } diff --git a/admin/vue.config.js b/admin/vue.config.js index c429385..9d855e9 100644 --- a/admin/vue.config.js +++ b/admin/vue.config.js @@ -1,13 +1,12 @@ // 璇︾粏閰嶇疆璇峰弬鑰僪ttps://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: { diff --git a/h5/pages/login.vue b/h5/pages/login.vue index 666d529..4c32dbc 100644 --- a/h5/pages/login.vue +++ b/h5/pages/login.vue @@ -33,7 +33,7 @@ data() { return { form: { - phone: '17878787878', + phone: '18888888888', code: '1' }, downTime: 0 diff --git a/h5/pages/workOrder/detail.vue b/h5/pages/workOrder/detail.vue index 6e74b6a..f1726d3 100644 --- a/h5/pages/workOrder/detail.vue +++ b/h5/pages/workOrder/detail.vue @@ -23,9 +23,9 @@ <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> diff --git a/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java b/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java index 630334d..df82f83 100644 --- a/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java +++ b/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java @@ -44,7 +44,10 @@ */ 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(); } @@ -141,6 +144,9 @@ } 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; diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java index 02e8e94..02ec71c 100644 --- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java +++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java @@ -7,6 +7,7 @@ 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; @@ -90,8 +91,8 @@ @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)); } diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/DataDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/DataDTO.java new file mode 100644 index 0000000..82dad9d --- /dev/null +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/DataDTO.java @@ -0,0 +1,29 @@ +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; + +} diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwBuilding.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwBuilding.java index 0da0eea..5fca146 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwBuilding.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwBuilding.java @@ -102,6 +102,10 @@ @ExcelColumn(name="鎵�灞為」鐩紪鐮侊紙鍏宠仈yw_project)") private Integer projectId; + @ApiModelProperty(value = "绠$悊闈㈢Н") + @TableField(exist = false) + private BigDecimal manageArea; + @ApiModelProperty(value = "鍙嫑鍟嗘埧婧愭暟") @TableField(exist = false) private Integer roomRentNum; diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java index f292cb0..ba8b2d3 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.math.BigDecimal; import java.util.List; /** @@ -21,6 +22,9 @@ @ApiModelProperty(value = "涓氬姟鍚嶇О") private String name; + @ApiModelProperty(value = "闈㈢Н") + private BigDecimal area; + @ApiModelProperty(value = "鐖剁骇涓婚敭") private Integer pId; diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProjectService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProjectService.java index d4232c7..7175677 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProjectService.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProjectService.java @@ -3,6 +3,7 @@ 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; @@ -99,5 +100,5 @@ long count(YwProject ywProject); - List<ProjectDataVO> projectTree(); + List<ProjectDataVO> projectTree(DataDTO dataDTO); } diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java index bdbf056..e75dac5 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java @@ -135,7 +135,9 @@ 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( @@ -191,7 +193,7 @@ 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()); diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java index ad6f19c..534d629 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java @@ -2118,9 +2118,6 @@ ){ 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()); @@ -2162,8 +2159,10 @@ @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; @@ -2210,6 +2209,7 @@ .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); } diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java index 612f09e..ac034cb 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java @@ -147,7 +147,8 @@ 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()); } diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java index 03953ce..471d18f 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java @@ -98,11 +98,14 @@ 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); @@ -186,7 +189,8 @@ 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) @@ -276,7 +280,8 @@ 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) @@ -297,8 +302,9 @@ .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()) { //闇�鏀堕噾棰� @@ -457,7 +463,8 @@ 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) @@ -466,7 +473,9 @@ .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) { diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractRevenueServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractRevenueServiceImpl.java index cdfdf12..e2e4461 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractRevenueServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractRevenueServiceImpl.java @@ -24,6 +24,7 @@ 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; @@ -125,7 +126,7 @@ 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){ @@ -135,19 +136,39 @@ } }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)){ //濡傛灉鏀粯閲戦 澶т簬 寰呮敮浠橀噾棰� 鍒欐彁绀哄紓甯� 濡傛灉鏀粯閲戦灏忎簬 寰呮敮浠橀噾棰� 鍒欑姸鎬佷笉鍙樺寲 鍏朵粬鐘舵�� 寮傚父 @@ -167,6 +188,21 @@ } 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()) { diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java index 4683542..f9be5d2 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java @@ -91,6 +91,7 @@ } private void dealRoomsForContract(YwContract model) { + this.dealRoomsValid(model); List<YwContractRoom> list = new ArrayList<>(); for(YwRoom room :model.getRoomList()){ YwContractRoom t = new YwContractRoom(); @@ -106,6 +107,46 @@ } 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){ @@ -1228,6 +1269,8 @@ ,Constants.YwLogType.CONTRACT_UPDATE.getKey()) .orderByAsc(YwWorkorderLog::getCreateDate))); + //鏌ヨ璐﹀崟闆嗗悎 + queryBillListByModel(model,new Date()); } return model; @@ -1242,7 +1285,8 @@ //鏌ヨ璐﹀崟闆嗗悎 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))); diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerServiceImpl.java index 1fc2a89..f36d94a 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerServiceImpl.java @@ -61,9 +61,6 @@ 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()); diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceRecordServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceRecordServiceImpl.java index 7d19c2c..9118073 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceRecordServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceRecordServiceImpl.java @@ -180,6 +180,7 @@ .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); } diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolLineServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolLineServiceImpl.java index 217d7c4..a40d68f 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolLineServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolLineServiceImpl.java @@ -106,6 +106,7 @@ } @Override + @Transactional(rollbackFor = {Exception.class,BusinessException.class}) public void updateById(YwPatrolLine ywPatrolLine) { if(Objects.isNull(ywPatrolLine) || StringUtils.isBlank(ywPatrolLine.getName()) @@ -123,7 +124,7 @@ //寰幆澶勭悊 瀛愰泦鏁版嵁 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(),"瀛樺湪鐩稿悓宸℃鐐�!"); } diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java index 651d6f1..8267901 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java @@ -146,6 +146,7 @@ .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()) diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java index b5dfdb8..2e2061a 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java @@ -6,11 +6,13 @@ 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; @@ -28,6 +30,7 @@ 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; @@ -230,11 +233,12 @@ @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) { @@ -247,6 +251,7 @@ 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) ); @@ -262,6 +267,7 @@ 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) ); @@ -273,19 +279,26 @@ 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); diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java index 8cf6dd7..87d1ec9 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java @@ -150,9 +150,9 @@ .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); -- Gitblit v1.9.3