Commit 04fc3eda authored by tianhongyang's avatar tianhongyang

Merge branch 'V20230915' of http://192.168.60.201/root/dsk-operate-sys into V20230915

parents b9024ca7 97c9208c
......@@ -74,11 +74,25 @@ public class EnterpriseProjectController {
return enterpriseProjectService.specialDebtPage(body);
}
/***
*@Description: 招标公告 分页列表
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/10/9 14:41
*/
@PostMapping(value = "/bidNoticePage")
public TableDataInfo bidNoticePage(@RequestBody @Valid EnterpriseProjectBidNoticePageBody body) throws Exception {
return enterpriseProjectService.bidNoticePage(body);
}
/***
*@Description: 招标招采阶段
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/10/9 14:41
*/
@PostMapping(value = "/bidNoticeTenderStage")
public R bidNoticeTenderStage(@RequestBody @Valid EnterpriseProjectBidNoticeTenderStageBody body) throws Exception {
return enterpriseProjectService.bidNoticeTenderStage(body);
......@@ -89,6 +103,19 @@ public class EnterpriseProjectController {
return enterpriseProjectService.bidNoticeArea(body);
}
/***
*@Description: 招标项目类别
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/10/9 14:41
*/
@PostMapping(value = "/bidNoticeProjectCategory")
public R bidNoticeProjectCategory(@RequestBody @Valid EnterpriseProjectBidNoticeTenderStageBody body) throws Exception {
return enterpriseProjectService.bidNoticeProjectCategory(body);
}
@PostMapping(value = "/bidNoticeDetail")
public R bidNoticeDetail(@RequestBody @Valid EnterpriseProjectBidNoticeDetailBody body) throws Exception {
return enterpriseProjectService.bidNoticeDetail(body);
......
......@@ -25,10 +25,15 @@ public class EnterpriseProjectBidNoticePageBody extends BasePage {
private String keys;
/**
* 类型
* 招标阶段
*/
private List<String> tenderStage;
/**
* 项目类型
*/
private List<String> projectCategory;
/*
* 1金额倒序,2金额正序,3时间倒序,4时间正序
*/
......
......@@ -14,7 +14,7 @@ import javax.validation.constraints.NotNull;
@EqualsAndHashCode(callSuper = false)
public class EnterpriseProjectImportantListDto extends BasePage {
private Integer companyId;
private Integer cid;
private String keys;
......
......@@ -4,11 +4,13 @@ import cn.hutool.core.bean.BeanException;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.dsk.acc.openapi.client.util.CommonUtils;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.jsk.domain.*;
import com.dsk.jsk.domain.bo.EnterpriseProjectImportantListDto;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -17,6 +19,7 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
......@@ -90,13 +93,52 @@ public class EnterpriseProjectService {
return dskOpenApiUtil.responsePage(map);
}
/***
*@Description: 招标公告 分页列表
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/10/9 14:41
*/
public TableDataInfo bidNoticePage(EnterpriseProjectBidNoticePageBody body) throws Exception {
if (body.isVaildCid()) return new TableDataInfo(new ArrayList<>(), 0);
if (body.isVaildCid()) {
return new TableDataInfo(new ArrayList<>(), 0);
}
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bidNoticePage", BeanUtil.beanToMap(body, false, false));
Map data = MapUtils.getMap(map, "data", null);
List<Object> list = CommonUtils.assertAsArray(MapUtils.getObject(data, "list", ""));
if (CollectionUtils.isEmpty(list)) {
return new TableDataInfo(list, 0);
}
ArrayList<Long> cIds = new ArrayList<>();
for (Object dataMap : list) {
cIds.add(MapUtils.getLong(CommonUtils.assertAsMap(dataMap), "agencyId"));
}
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("ids", cIds);
Map<String, Object> uipIdMap = dskOpenApiUtil.requestBody("/operate/enterprise/getUipIdByCid", paramMap);
Object uipIdData = uipIdMap.get("data");
List<Map<String, Object>> mapList = new ArrayList<>();
if (ObjectUtil.isNotEmpty(uipIdData)) {
mapList = (List<Map<String, Object>>)uipIdData;
}
for (Object dataMap : list) {
Map<String, Object> companyMap = CommonUtils.assertAsMap(dataMap);
Long agencyId = MapUtils.getLong(companyMap, "agencyId", 0L);
companyMap.put("uipId", null);
for (Map<String, Object> m : mapList) {
String uipId = MapUtils.getString(m, "uipId", null);
Long companyId = MapUtils.getLong(m, "companyId", 0L);
if (agencyId.equals(companyId)) {
companyMap.put("uipId", uipId);
}
}
}
return dskOpenApiUtil.responsePage(map);
}
public R bidNoticeTenderStage(EnterpriseProjectBidNoticeTenderStageBody body) throws Exception {
if (body.isVaildCid()) return R.ok();
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bidNoticeTenderStage", BeanUtil.beanToMap(body, false, false));
......@@ -110,6 +152,20 @@ public class EnterpriseProjectService {
return BeanUtil.toBean(map, R.class);
}
/***
*@Description: 招标项目类别
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/10/9 14:41
*/
public R bidNoticeProjectCategory(EnterpriseProjectBidNoticeTenderStageBody body) throws Exception {
if (body.isVaildCid()) {
return R.ok();
}
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bidNoticeProjectCategory", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class);
}
public R bidNoticeDetail(EnterpriseProjectBidNoticeDetailBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bidNoticeDetail", BeanUtil.beanToMap(body, false, false));
......
......@@ -92,3 +92,52 @@ export function exportBid(data) {
data: data
})
}
// 集团施工项目最新招标
export function recentlyBid(data) {
return request({
url: '/marketAnalysis/combine/recentlyBid',
method: 'post',
data: data
})
}
// 集团施工项目年度招标
export function bidByYear(data) {
return request({
url: '/marketAnalysis/combine/bidByYear',
method: 'post',
data: data
})
}
// 集团施工项目发包金额统计
export function groupByMoney(data) {
return request({
url: '/marketAnalysis/combine/groupByMoney',
method: 'post',
data: data
})
}
// 集团施工项目发包类型统计
export function groupByType(data) {
return request({
url: '/marketAnalysis/combine/groupByType',
method: 'post',
data: data
})
}
// 施工项目下浮率统计
export function groupByLowerRate(data) {
return request({
url: '/marketAnalysis/combine/groupByLowerRate',
method: 'post',
data: data
})
}
// 历史发包项目金额Top10
export function peojectTop(data) {
return request({
url: '/marketAnalysis/combine/peojectTop',
method: 'post',
data: data
})
}
......@@ -9,7 +9,7 @@ export function bidNoticePage(data) {
});
}
// 招标公告招标类别
// 招标公告招标阶段
export function bidNoticeTenderStage(data) {
return request({
url: '/enterpriseProject/bidNoticeTenderStage',
......@@ -17,6 +17,14 @@ export function bidNoticeTenderStage(data) {
data: data
});
}
// 招标公告项目类别
export function bidNoticeProjectCategory(data) {
return request({
url: '/enterpriseProject/bidNoticeProjectCategory',
method: 'post',
data: data
})
}
// 招标公告地区
export function bidNoticeArea(data) {
......
......@@ -348,7 +348,7 @@ ul, li {
//box-shadow:none;
//-webkit-box-shadow: 2px 0px 1px -2px #C3CBD5;
box-shadow: 2px 0 8px -7px #202020;
border-right: 1px solid #C3CBD5;
//border-right: 1px solid #C3CBD5;
height: auto !important;
bottom: 16px !important;
}
......
......@@ -209,7 +209,7 @@ export const constantRoutes = [
children: [
{
path: '/biddetail/:id(\\d+)',
component: () => import('@/views/detail//biddetail/index'),
component: () => import('@/views/detail/biddetail/index'),
name: 'Biddetail',
meta: { title: '中标业绩详情',icon: 'enterprise'}
}
......
......@@ -103,7 +103,7 @@
import { getDictType } from '@/api/main'
export default {
name: 'qualifications',
props: ['customerId','combineName'],
props: ['customerId'],
mixins: [mixin],
components:{CustomTimeSelect,CustomMoneySelect},
data(){
......
......@@ -8,8 +8,8 @@
</el-tabs>
</div>
</div>
<Zbxmfx v-if="activeName === 'first'"></Zbxmfx>
<Zbxmmx v-if="activeName === 'second'"></Zbxmmx>
<Zbxmfx v-if="activeName === 'first'" :customer-id="id"></Zbxmfx>
<Zbxmmx v-if="activeName === 'second'" :customer-id="id"></Zbxmmx>
</div>
</template>
......@@ -18,10 +18,12 @@
import Zbxmmx from './zbxmmx'
export default {
name: 'qualifications',
props: ['customerId'],
components:{Zbxmfx,Zbxmmx},
data(){
return{
activeName: 'first'
activeName: 'first',
id:this.customerId
}
},
created() {
......@@ -37,7 +39,7 @@
<style lang="scss" scoped>
.zhaobiao{
height: 100%;
/*height: 100%;*/
background: #F5F5F5;
.header{
justify-content: space-between;
......
......@@ -279,10 +279,12 @@ export default {
cityIds: [this.companyInfo.cityId],
};
urbanInvestmentPage(data).then(res => {
if (res.data.totalCount < 1) {
let arr = JSON.parse(JSON.stringify(this.$refs.sidebar.sideRoute));
arr[4].children[2].disabled = true;
this.$refs.sidebar.sideRoute = arr;
if(res.code==200){
if(res.data.totalCount<1){
let arr = JSON.parse(JSON.stringify(this.$refs.sidebar.sideRoute))
arr[4].children[2].disabled = true;
this.$refs.sidebar.sideRoute = arr
}
}
});
if (this.companyInfo && this.companyInfo.companyName) {
......
......@@ -19,9 +19,9 @@
</template>
<script>
import mixin from '../mixins/mixin';
import skeleton from '@/views/project/projectList/component/skeleton';
import { bidNoticeArea, bidNoticeTenderStage, bidNoticePage } from '@/api/detail/party-a/opport';
import mixin from '../mixins/mixin'
import skeleton from '@/views/project/projectList/component/skeleton'
import {bidNoticeArea, bidNoticeTenderStage,bidNoticeProjectCategory, bidNoticePage} from '@/api/detail/party-a/opport'
export default {
name: 'Announcement',
props: ['companyId'],
......@@ -43,6 +43,7 @@ export default {
{label: '项目名称', prop: 'projectName', minWidth: '300', slot: true, fixed: true},
{label: '发布日期', prop: 'issueTime', sortable: 'custom', descending: '3', ascending: '4', width: '120'},
{label: '预算金额(万元)', prop: 'projectAmount', sortable: 'custom', descending: '1', ascending: '2', width: '140'},
{label: '项目类型', prop: 'projectCategory', width: '110'},
{label: '项目地区', prop: 'province', width: '120', slot: true},
{label: '招标阶段', prop: 'tenderStage', width: '90'},
{label: '招采单位联系人', prop: 'contact', width: '120'},
......@@ -53,9 +54,10 @@ export default {
{label: '报名截止日期', prop: 'overTime', width: '110'}
],
formData: [
{ type: 7, fieldName: 'province', value: '', props: { multiple: true }, placeholder: '项目地区', options: [], uid: this.getUid() },
{ type: 4, fieldName: 'tenderStage', value: '', placeholder: '项目类型', options: [], uid: this.getUid() },
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入关键词查询', options: [], uid: this.getUid() }
{ type: 7, fieldName: 'province', value: '',props: {multiple: true}, placeholder: '项目地区', options: []},
{ type: 4, fieldName: 'projectCategory', value: '', placeholder: '项目类型', options: []},
{ type: 4, fieldName: 'tenderStage', value: '', placeholder: '招标阶段', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入关键词查询', options: []}
],
//列表
tableLoading: false,
......@@ -70,82 +72,90 @@ export default {
this.handleQuery();
},
methods: {
async handleOption() {
let [area, tender] = await Promise.all([
bidNoticeArea({ cid: this.companyId }),
bidNoticeTenderStage({ cid: this.companyId })
]);
if (area.code == 200) {
async handleOption(){
let [area, tender,project] = await Promise.all([
bidNoticeArea({cid: this.companyId}),
bidNoticeTenderStage({cid: this.companyId}),
bidNoticeProjectCategory({cid: this.companyId}),
])
if(area.code==200){
let region = area.data.map(item => {
let province = { label: item.province + '(' + item.count + ')', value: item.provinceId };
if (item.citys && item.citys.length > 0) {
let city = [], citem = {};
for (let i = 0; i < item.citys.length; i++) {
citem = { label: item.citys[i].city, value: item.citys[i].cityId };
if (item.citys[i].areas && item.citys[i].areas.length > 0) {
let area = [], aitem = {};
for (let j = 0; j < item.citys[i].areas.length; j++) {
aitem = { label: item.citys[i].areas[j].area, value: item.citys[i].areas[j].areaId };
area.push(aitem);
citem.children = area;
let province = {label:item.province+'('+item.count+')',value:item.provinceId}
if(item.citys&&item.citys.length>0){
let city = [], citem = {}
for(let i=0;i<item.citys.length;i++){
citem = {label:item.citys[i].city, value:item.citys[i].cityId}
if(item.citys[i].areas&&item.citys[i].areas.length>0){
let area = [], aitem = {}
for(let j=0;j<item.citys[i].areas.length;j++){
aitem = {label:item.citys[i].areas[j].area, value:item.citys[i].areas[j].areaId}
area.push(aitem)
citem.children = area
}
}
city.push(citem);
city.push(citem)
}
city.length > 0 ? province.children = city : '';
city.length>0 ? province.children = city : ''
}
return province;
});
this.setFormData('province', region);
return province
})
this.setFormData('province', region)
}
if (tender.code == 200) {
if(tender.code==200){
let tenderStage = tender.data.map(item => {
let it = { name: item.tenderStage + '(' + item.count + ')', value: item.tenderStage };
return it;
});
this.setFormData('tenderStage', tenderStage);
let it = {name:item.tenderStage+'('+item.count+')',value:item.tenderStage}
return it
})
this.setFormData('tenderStage', tenderStage)
}
if(project.code==200){
let projectCategory = project.data.map(item => {
let it = {name:item.projectCategory+'('+item.count+')',value:item.projectCategory}
return it
})
this.setFormData('projectCategory', projectCategory)
}
},
async handleQuery(params) {
this.tableLoading = true;
let param = this.getAreaList(params || this.queryParams);
let res = await bidNoticePage(param);
this.tableLoading = false;
if (res.code == 200) {
this.tableLoading = true
let param = this.getAreaList(params || this.queryParams)
let res = await bidNoticePage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows;
this.tableData = res.rows
}
this.tableDataTotal = res.total;
this.tableDataTotal = res.total
},
getAreaList(params) {
if (params.province && params.province.length > 0) {
let arr = this.$refs.headForm.$refs.cascader[0].getCheckedNodes();
let provinceIds = [], cityIds = [], areaIds = [];
getAreaList(params){
if(params.province&&params.province.length>0){
let arr = this.$refs.headForm.$refs.cascader[0].getCheckedNodes()
let provinceIds = [], cityIds = [], areaIds = []
for (var i in arr) {
if (arr[i].parent) {
if (!arr[i].parent.checked) {
if (arr[i].hasChildren || arr[i].level == 2) {
cityIds.push(arr[i].value);
} else {
areaIds.push(arr[i].value);
if(arr[i].hasChildren || arr[i].level==2){
cityIds.push(arr[i].value)
}else{
areaIds.push(arr[i].value)
}
}
} else {
provinceIds.push(arr[i].value);
provinceIds.push(arr[i].value)
}
}
delete params.province;
provinceIds.length > 0 ? params.provinceIds = provinceIds : '';
cityIds.length > 0 ? params.cityIds = cityIds : '';
areaIds.length > 0 ? params.areaIds = areaIds : '';
delete params.province
provinceIds.length>0?params.provinceIds = provinceIds:''
cityIds.length>0?params.cityIds = cityIds:''
areaIds.length>0?params.areaIds = areaIds:''
}
return params;
return params
}
}
}
</script>
<style lang="scss" scoped>
.detail-container {
.detail-container{
background: #ffffff;
border-radius: 4px;
padding: 16px;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment