Commit 6651c7bf authored by caixingbing's avatar caixingbing
parents 53571b9e e1d3a6e3
......@@ -104,7 +104,7 @@ public class CustomerController extends BaseController {
//@PreAuthorize("@ss.hasPermi('customer:importData')")
@PostMapping("/importData")
public AjaxResult importData(@RequestPart("file") MultipartFile file) throws Exception {
List<Customer> customerList = new ExcelUtil<>(Customer.class).importExcel(file.getInputStream(), 2);
List<Customer> customerList = new ExcelUtil<>(Customer.class).importExcel(file.getInputStream(), 2);
List<String> resultList = new ArrayList<>();
for (Customer customer : customerList) {
if (ObjectUtils.isEmpty(customer.getCompanyName())) {
......@@ -112,19 +112,19 @@ public class CustomerController extends BaseController {
}
try {
Map<String, Object> map = opportunityRadarService.enterpriseByName(customer.getCompanyName());
if(ObjectUtils.isEmpty(map)){
if (ObjectUtils.isEmpty(map)) {
throw new HttpException("远程调用匹配接口失败!");
}
Map<String, Object> obj = BeanUtil.beanToMap(map.get("data"));
if(!ObjectUtils.isEmpty(obj)){
customer.setCompanyId(MapUtil.getInt(obj,"jskEid"));
customer.setLegalPerson(MapUtil.getStr(obj,"legalPerson"));
customer.setRegisterCapital(MapUtil.getStr(obj,"registeredCapital"));
customer.setProvinceId(MapUtil.getInt(obj,"provinceId"));
customer.setCityId(MapUtil.getInt(obj,"cityId"));
customer.setDistrictId(MapUtil.getInt(obj,"districtId"));
customer.setRegisterAddress(MapUtil.getStr(obj,"domicile"));
customer.setCreditCode(MapUtil.getStr(obj,"creditCode"));
if (!ObjectUtils.isEmpty(obj)) {
customer.setCompanyId(MapUtil.getInt(obj, "jskEid"));
customer.setLegalPerson(MapUtil.getStr(obj, "legalPerson"));
customer.setRegisterCapital(MapUtil.getStr(obj, "registeredCapital"));
customer.setProvinceId(MapUtil.getInt(obj, "provinceId"));
customer.setCityId(MapUtil.getInt(obj, "cityId"));
customer.setDistrictId(MapUtil.getInt(obj, "countyId"));
customer.setRegisterAddress(MapUtil.getStr(obj, "domicile"));
customer.setCreditCode(MapUtil.getStr(obj, "creditCode"));
}
baseService.add(customer);
} catch (Exception e) {
......
......@@ -193,9 +193,11 @@ xss:
dsk:
open:
# endPoint: sandbox.openapi.jiansheku.com
# accessKeyId: aec7b3ff2e8b48e79a7e2c463ce21912
# accessKeySecret: ee8a53c7ea04eb3ac311406c8f56f95b
# protocol: https
endPoint: 120.27.13.145:8865
accessKeyId: aec7b3ff2y2q8x6t49a7e2c463ce21912
accessKeySecret: ee8a53c7ea04eb3ac311406c8f56f95b
# endPoint: sandbox.openapi.jiansheku.com
# accessKeyId: aec7b3ff2e8b48e79a7e2c463ce21912
# accessKeySecret: ee8a53c7ea04eb3ac311406c8f56f95b
protocol: http
......@@ -15,6 +15,7 @@ public class DskOpenApiConfig {
public String accessKeyId;
public String accessKeySecret;
public String endPoint;
public String protocol;
public String getAccessKeyId() {
return accessKeyId;
......@@ -39,4 +40,12 @@ public class DskOpenApiConfig {
public void setEndPoint(String endPoint) {
this.endPoint = endPoint;
}
}
\ No newline at end of file
public String getProtocol() {
return protocol;
}
public void setProtocol(String protocol) {
this.protocol = protocol;
}
}
......@@ -48,7 +48,7 @@ public class DskOpenApiUtil {
public Map<String,Object> requestForm(String path, Map<String, Object> bodyMap){
return request(path, bodyMap, "form");
}
/**
* <b>开放平台统一请求</b>
* @param path 请求路径
......@@ -59,7 +59,7 @@ public class DskOpenApiUtil {
public Map<String,Object> request(String path, Map<String, Object> bodyMap, String reqBodyType){
try {
AccClient.init(new Config(dskOpenApiConfig.accessKeyId, dskOpenApiConfig.accessKeySecret)
.setEndpoint(dskOpenApiConfig.endPoint));
.setEndpoint(dskOpenApiConfig.endPoint).setProtocol(dskOpenApiConfig.protocol));
Map<String, ?> res = AccClient.request(reqBodyType, path, bodyMap);
if(!res.containsKey("headers") || !res.containsKey("body")) {
throw new RuntimeException(String.format("请求无返回:path=%s",path));
......@@ -109,4 +109,4 @@ public class DskOpenApiUtil {
return new TableDataInfo((List<?>) list, count);
}
}
\ No newline at end of file
}
import request from '@/utils/request'
// 导入客户列表
export function importData(param) {
return request({
url: '/customer/importData',
method: 'POST',
data: param
})
}
// 客户列表
export function getCustomerList(param) {
......@@ -16,3 +24,13 @@ export function addCustomer(param) {
data: param
})
}
//查询跟进记录
export function getFollowList(param) {
return request({
url: '/customer/follow/record/list',
method: 'get',
params: param
})
}
This diff is collapsed.
......@@ -658,3 +658,8 @@ ul, li {
.flex{
display: flex;
}
//消息提示框
.el-message{
border-radius: 0;
padding: 10px;
}
......@@ -358,18 +358,36 @@
.popform{
padding-top: 24px;
.row{
padding-bottom: 16px;
.left{
width: 137px;
display: inline-block;
text-align: right;
opacity: 0.8;
i{
color: #FF3C3C;
font-style: initial;
padding-right: 2px;
margin-bottom: 16px;
position: relative;
.resultlist{
position: absolute;
width: 100%;
max-height: 218px;
background: #FFFFFF;
box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1);
overflow: auto;
z-index: 2;
text-indent: 13px;
cursor: pointer;
>div{
font-size: 14px;
color: #333;
height: 32px;
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
&:hover{
background: #F1F6FB;
}
}
}
.el-form-item__label{
font-weight: 400;
opacity: 0.8;
padding: 0;
}
.el-input{
display: inline-block;
width: 240px;
......@@ -398,6 +416,9 @@
color: #232323;
}
}
.el-form-item__error{
padding-top: 2px;
}
}
.popbot{
text-align: right;
......@@ -410,17 +431,11 @@
}
}
.popform.i{
.left{
width: 85px;
}
.el-input{
width: 335px;
}
}
.popform.j{
.left{
width: 130px;
}
.el-input{
width: 364px;
}
......
......@@ -51,7 +51,7 @@
<img src="@/assets/images/economies/icon.png">
<span>重庆市轨道交通3号线二期工程4标段施工总承包</span>
</div>
<div class="popform">
<el-form class="popform" label-width="137px">
<div class="row">
<span class="left">联系人姓名:</span>
<el-input type="text" placeholder="请输入"></el-input>
......@@ -83,7 +83,7 @@
<div class="btn btn_cancel h32" @click="cancel">返回</div>
<div class="btn btn_primary h32">保存</div>
</div>
</div>
</el-form>
</el-dialog>
</div>
......
......@@ -3,6 +3,13 @@
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">主要指标</span>
<el-form ref="queryForm" :model="queryParams" :inline="true" size="small">
<el-form-item prop="year">
<el-select v-model="queryParams.year" filterable class="form-content-width" placeholder="请选择年度">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
</el-form>
</div>
<div class="flex-box query-ability">
<span class="flex-box"><img src="@/assets/images/ability_excel.png">导出EXCEL</span>
......@@ -11,25 +18,27 @@
<div class="content">
<div class="content-left">
<div id="echarts" style="height: 400px"></div>
<p class="tips"> 注:数据均来源于统计公报、统计年鉴,实际披露中由于部分地区最新年度数据不全,导致年份间数据差距较大</p>
</div>
<div class="content-right">
<el-table
v-loading="tableLoading"
:data="tableData"
height="440"
border
highlight-current-row
>
<el-table-column label="序号" width="60" align="left">
<template slot-scope="scope">{{ pageIndex * pageSize - pageSize + scope.$index + 1 }}</template>
</el-table-column>
<el-table-column label="产业类型" prop="type" width="200"></el-table-column>
<el-table-column label="产业类型" prop="type"></el-table-column>
<el-table-column label="2022年">
<el-table-column prop="je" label="金额(亿元)" sortable width="150"> </el-table-column>
<el-table-column prop="zb" label="占比" sortable width="100"> </el-table-column>
<el-table-column prop="je" label="金额(亿元)"> </el-table-column>
<el-table-column prop="zb" label="占比" sortable> </el-table-column>
</el-table-column>
<el-table-column label="2021年">
<el-table-column prop="province" label="金额(亿元)" sortable width="150"> </el-table-column>
<el-table-column prop="province" label="占比" sortable width="100"> </el-table-column>
<el-table-column prop="province" label="金额(亿元)" sortable> </el-table-column>
<el-table-column prop="province" label="占比" sortable > </el-table-column>
</el-table-column>
</el-table>
</div>
......@@ -43,12 +52,36 @@ export default {
name: 'industrialStructure',
data() {
return {
queryParams: {
year: '',
address: ''
},
yearOptions: [
{ name: '2023年', value: '2023' },
{ name: '2022年', value: '2022' },
{ name: '2021年', value: '2021' },
],
tableData:[
{
type:'直接控股',
type:'房建工程',
je:'29,175.61',
zb:'26%'
}
},
{
type:'市政工程',
je:'29,175.61',
zb:'26%'
},
{
type:'公路工程',
je:'29,175.61',
zb:'26%'
},
{
type:'机电工程',
je:'29,175.61',
zb:'26%'
},
],
tableLoading: false,
pageIndex: 1,
......@@ -105,12 +138,16 @@ export default {
return result
},
},
legend: {
data: this.data,
},
series: [
{
type: 'treemap',
top:'0',
left:'0',
right:'0',
bottom:'20',
breadcrumb: {
show: false // 是否显示下面的面包屑导航
},
data: this.data
}
]
......@@ -142,6 +179,13 @@ export default {
display: flex;
justify-content: space-between;
.content-left{
width: 46%;
.tips{
color: rgba(35,35,35,0.4);
font-size: 14px;
}
}
.content-right{
width: 50%;
}
}
......
......@@ -4,15 +4,15 @@
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="地区经济" name="first"></el-tab-pane>
<el-tab-pane label="辖区经济" name="second"></el-tab-pane>
<el-tab-pane label="地区经济对比" name="third"></el-tab-pane>
<el-tab-pane label="产业结构" name="four"></el-tab-pane>
<el-tab-pane label="产业结构" name="third"></el-tab-pane>
<el-tab-pane label="地区经济对比" name="four"></el-tab-pane>
</el-tabs>
<div class="location"><i class="el-icon-location"></i>重庆市</div>
</div>
<RegionalEconomy v-if="activeName === 'first'"></RegionalEconomy>
<LocalEconomy v-if="activeName === 'second'"></LocalEconomy>
<Comparison v-if="activeName === 'third'"></Comparison>
<IndustrialStructure v-if="activeName === 'four'"></IndustrialStructure>
<IndustrialStructure v-if="activeName === 'third'"></IndustrialStructure>
<Comparison v-if="activeName === 'four'"></Comparison>
</div>
</template>
......
<template>
<div class="app-container">
区域企业
<div class="app-container enterprises">
<div class="flex-box eco-header">
<el-tabs v-model="activeName">
<el-tab-pane label="本地企业" name="first"></el-tab-pane>
<el-tab-pane label="异地备案" name="second"></el-tab-pane>
</el-tabs>
<div class="location"><i class="el-icon-location"></i>重庆市</div>
</div>
<div class="content">
<div class="search">
<el-cascader
ref="address"
:options="aptitudeCodeList"
:props="props"
v-model="queryParams.codeStr"
placeholder="资质资格"
collapse-tags
clearable></el-cascader>
<el-input placeholder="输入企业名称关键词" v-model="queryParams.key">
<el-button slot="append">搜索</el-button>
</el-input>
<span class="total">{{tableDataTotal}}</span>
</div>
<div class="table-item">
<el-table
v-loading="tableLoading"
:data="tableData"
element-loading-text="Loading"
border
fit
highlight-current-row
>
<el-table-column label="序号" width="50" align="left" fixed>
<template slot-scope="scope">{{ pageIndex * pageSize - pageSize + scope.$index + 1 }}</template>
</el-table-column>
<el-table-column label="公司名称" align="left" width="300">
<template slot-scope="scope">
<router-link to="" tag="a" class="a-link">{{ scope.row.name}}</router-link>
</template>
</el-table-column>
<el-table-column label="注册地区" prop="address" width="80"/>
<el-table-column label="资质资格" prop="cgfs" sortable width="120" align="right" />
<el-table-column label="专业人员" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="中标业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="最大中标金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="中标总金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="四库业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="公路业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="水利业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="常合作业主" prop="cgfs" width="280" align="right" />
<el-table-column label="客户(个)" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="供应商(个)" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="常合作供应商" prop="cgfs" width="280" align="right" />
</el-table>
</div>
</div>
</div>
</template>
<script>
import aptitudeCode from '@/assets/json/aptitudeCode'
export default {
name: 'Enterprises',
data() {
return {
activeName: 'first',
queryParams:{
key:'',
codeStr:''
},
props: {
value: 'id',
multiple: true,
checkStrictly:true,
label:'name',
children:'list',
expandTrigger:'hover'
},
tableData: [
{
dataId:'1',
cgrssqy:'100',
cgfs:'200',
address:'江北区',
name:'重庆市江北区国有资本投资运营管理集团有限公司'
}
],
tableLoading: false,
pageIndex: 1,
pageSize: 10,
tableDataTotal: 1,
aptitudeCodeList:[]
}
},
created() {
this.aptitudeCode()
},
methods: {
//资质Json
async aptitudeCode() {
// await axios.post("https://files.jiansheku.com/file/json/common/aptitudeCode.json", {}, {
// headers: {
// 'Content-Type': 'application/json'
// }
// }).then(res => {
// if (res.data.code == 200) {
// console.log(res.data.data)
// }
// })
console.log(aptitudeCode)
this.aptitudeCodeList=aptitudeCode
},
}
}
</script>
<style lang="scss" scoped>
.app-container{
padding: 0;
}
.enterprises{
.eco-header{
justify-content: space-between;
height: 48px;
background: #FFFFFF;
border-radius: 4px;
padding:0 16px;
color: #232323;
::v-deep .el-tabs{
height: 48px;
line-height: 48px;
.el-tabs__nav-wrap::after {
position: static !important;
}
.el-tabs__header{
margin: 0;
.el-tabs__item{
padding: 0 16px;
font-size: 16px;
}
.is-active{
font-weight: bold;
}
}
.el-tabs__content{
width: 100%;
}
}
.location{
font-size: 14px;
color: #0081FF;
i{
margin-right: 6px;
font-size: 16px;
}
}
}
.content{
background: #FFFFFF;
border-radius: 4px;
margin-top: 12px;
padding: 16px;
.search{
::v-deep .el-cascader{
width: 130px;
margin-right: 12px;
height: 32px;
.el-input{
width: 100%;
}
}
::v-deep .el-input{
width: 250px;
height: 32px;
.el-input-group__append{
width: 59px;
background: #F5F5F5;
color:#0081FF;
border-left: 0;
}
}
.total{
float: right;
color: #3D3D3D;
font-size: 12px;
line-height: 36px;
}
}
.table-item{
margin-top: 14px;
}
}
}
</style>
......@@ -71,7 +71,7 @@
<el-table-column label="一般债余额(亿元)" prop="cgfs" width="160" align="left" />
<el-table-column label="专项债余额(亿元)" prop="cgfs" width="160" align="left" />
<el-table-column label="地方政府债务限额(亿元)" prop="cgfs" width="160" align="left" />
<el-table-column label="城投平台有息债务??(亿元)" prop="cgfs" width="160" align="left" >
<el-table-column label="城投平台有息债务(亿元)" prop="cgfs" width="160" align="left" >
<template slot="header" slot-scope="scope">
<span>城投平台有息债务(亿元)
<el-tooltip popper-class="tips" effect="light" content="城投平台有息债务是该地区行政区划下所有的城投公司的短期债务与长期债务合计。其中,短期债务=短期借款+一年内到期的非流动负债+应付短期债券,长期债务=长期借款+应付长期债券。" placement="top">
......
......@@ -84,6 +84,19 @@
</div>
</div>
</div>
<div class="tables">
<div class="bottems">
<el-pagination
background
:page-size="pageSize"
:current-page="pageNum"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="1000">
</el-pagination>
</div>
</div>
</div>
</div>
......@@ -100,6 +113,7 @@
<script>
import "@/assets/styles/project.scss"
import {getFollowList} from '@/api/custom/custom'
export default {
props:{
types: { //当前组件展示类型
......@@ -113,14 +127,36 @@
return{
showtype:'',
isEdit:false,
value:''
value:'',
pageNum:1,//页码
pageSize:20,
}
},
created(){
this.showtype = this.types
//客户管理跟进动态
if(this.showtype == 'gjdt'){
this.getGJDTlist()
}
console.log(this.types)
},
methods:{
//跟进动态列表
getGJDTlist(){
let param = {
pageNum:this.pageNum,//页码
pageSize:this.pageSize,
}
getFollowList(param).then(result=>{
})
},
handleCurrentChange(val){
this.pageNum = val
if(this.showtype == 'gjdt'){
this.getGJDTlist()
}
},
getEdit(){
this.isEdit = true;
this.value = ""
......@@ -138,4 +174,8 @@
.delform{
position: fixed; left:50%; top:50%; transform:translate(-50%,-50%)
}
.tables{
margin-top: -26px;
padding-right: 0;
}
</style>
......@@ -79,7 +79,7 @@
<img src="@/assets/images/economies/icon.png">
<span>重庆市轨道交通3号线二期工程4标段施工总承包</span>
</div>
<div class="popform">
<el-form class="popform" label-width="137px">
<div class="row">
<span class="left">联系人姓名:</span>
<el-input type="text" placeholder="请输入"></el-input>
......@@ -111,7 +111,7 @@
<div class="btn btn_cancel h32" @click="cancel">返回</div>
<div class="btn btn_primary h32">保存</div>
</div>
</div>
</el-form>
</el-dialog>
</el-card>
</div>
......
......@@ -104,7 +104,7 @@
<img src="@/assets/images/economies/icon.png">
<span>新建相关企业-{{types==1?"业主单位":""}}{{types==2?"合作伙伴":""}}{{types==3?"竞争对手":""}}</span>
</div>
<div class="popform i">
<el-form class="popform i" label-width="85px">
<div class="row">
<span class="left"><i>*</i>企业名称:</span>
<el-input type="text" placeholder="请输入"></el-input>
......@@ -145,7 +145,7 @@
<div class="btn btn_cancel h32" @click="cancel">返回</div>
<div class="btn btn_primary h32">添加</div>
</div>
</div>
</el-form>
</el-dialog>
</el-card>
</div>
......
......@@ -91,7 +91,7 @@
<img src="@/assets/images/economies/icon.png">
<span>新建商机</span>
</div>
<div class="popform i">
<el-form class="popform i" label-width="85px">
<div class="row">
<span class="left"><i>*</i>项目名称:</span>
<el-input type="text" placeholder="请输入"></el-input>
......@@ -137,7 +137,7 @@
<div class="btn btn_cancel h32" @click="cancel">取消</div>
<div class="btn btn_primary h32">新建商机</div>
</div>
</div>
</el-form>
</el-dialog>
</el-card>
</div>
......
......@@ -2,10 +2,8 @@ package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanException;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.common.utils.SecurityUtils;
import com.dsk.system.domain.customer.Customer;
import com.dsk.system.domain.customer.CustomerUser;
......@@ -19,14 +17,12 @@ import com.dsk.system.mapper.CustomerUserMapper;
import com.dsk.system.service.IBusinessInfoService;
import com.dsk.system.service.ICustomerService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
......
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