Commit ccf4127b authored by caixingbing's avatar caixingbing
parents 1a878879 1d9143a3
package com.dsk.web.controller.customer;
import com.dsk.common.annotation.RepeatSubmit;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.utils.PageUtils;
import com.dsk.system.domain.customer.Customer;
import com.dsk.system.domain.customer.dto.CustomerSearchDto;
import com.dsk.system.service.ICustomerService;
import com.dsk.system.service.impl.CustomerServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -14,10 +22,40 @@ import org.springframework.web.bind.annotation.RestController;
* @create 2023/5/16
*/
@RestController
@RequestMapping("/system/config")
@RequestMapping("/customer")
public class CustomerController extends BaseController {
@Autowired
private ICustomerService baseService;
/**
* 查询客户列表
*/
@PreAuthorize("@ss.hasPermi('customer:list')")
@GetMapping("/list")
public TableDataInfo selectPageList(CustomerSearchDto dto){
startPage();
return getDataTable(baseService.selectList(dto));
}
/**
* 添加客户
*/
@PreAuthorize("@ss.hasPermi('customer:add')")
@PostMapping()
@RepeatSubmit
public AjaxResult add(Customer customer){
return AjaxResult.success(baseService.add(customer));
}
/**
* 编辑客户
*/
@PreAuthorize("@ss.hasPermi('customer:edit')")
@PostMapping()
@RepeatSubmit
public AjaxResult edit(Customer customer){
return AjaxResult.success(baseService.edit(customer));
}
}
package com.dsk.web.controller.customer;
import com.dsk.common.annotation.RepeatSubmit;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.system.domain.customer.CustomerDecisionChain;
import com.dsk.system.domain.customer.dto.CustomerDecisionChainSearchDto;
import com.dsk.system.service.ICustomerDecisionChainService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
/**
* 客户决策链条
* @author lcl
* @create 2023/5/16
*/
@RestController
@RequestMapping("/customer/decision/chain")
public class CustomerDecisionChainController extends BaseController {
@Autowired
private ICustomerDecisionChainService baseService;
/**
* 获取客户决策链条列表
*/
@PreAuthorize("@ss.hasPermi('customer:decision:chain:list')")
@GetMapping("/list")
public TableDataInfo selectPageList(CustomerDecisionChainSearchDto dto){
startPage();
return getDataTable(baseService.selectList(dto));
}
/**
* 添加客户决策链条
*/
@PreAuthorize("@ss.hasPermi('customer:decision:chain:add')")
@PostMapping()
@RepeatSubmit()
public AjaxResult add(@RequestBody CustomerDecisionChain customerDecisionChain){
return AjaxResult.success(baseService.insert(customerDecisionChain));
}
/**
* 编辑客户决策链条
*/
@PreAuthorize("@ss.hasPermi('customer:decision:chain:edit')")
@PutMapping()
@RepeatSubmit()
public AjaxResult edit(@RequestBody CustomerDecisionChain customerDecisionChain){
return AjaxResult.success(baseService.update(customerDecisionChain));
}
/**
* 删除客户决策链条
*/
@PreAuthorize("@ss.hasPermi('customer:decision:chain:del')")
@DeleteMapping("/{id}")
@RepeatSubmit()
public AjaxResult del(@PathVariable("id") Long id){
return AjaxResult.success(baseService.deleteById(id));
}
}
package com.dsk.web.controller.dsk;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.domain.model.EnterpriseBody;
import com.dsk.common.core.domain.model.*;
import com.dsk.system.dskService.EnterpriseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -25,9 +26,83 @@ public class EnterpriseController {
@Autowired
private EnterpriseService enterpriseService;
@ApiOperation(value = "企业详情头部信息(建设库)")
@PostMapping("/infoHeader")
public R infoHeader(@RequestBody @Valid EnterpriseBody body) throws Exception
public R infoHeader(@RequestBody @Valid EnterpriseInfoHeaderBody body) throws Exception
{
return enterpriseService.infoHeader(body);
}
@ApiOperation(value = "企业统计信息")
@PostMapping(value = "statistic(建设库)")
public R statistic(@RequestBody @Valid EnterpriseStatisticBody vo) throws Exception {
return enterpriseService.statistic(vo);
}
@ApiOperation(value = "招标偏好信息(openApi)")
@PostMapping(value = "bidDataGroup")
public R bidDataGroup(@RequestBody @Valid EnterpriseBidDataGroupBody vo) throws Exception {
return enterpriseService.bidDataGroup(vo);
}
@ApiOperation(value = "供应商列表(建设库)")
@PostMapping(value = "supplierPage")
public R supplierPage(@RequestBody @Valid EnterpriseSupplierPageBody vo) throws Exception {
return enterpriseService.supplierPage(vo);
}
@ApiOperation(value = "甲方业绩数据(openApi)")
@PostMapping(value = "projectTenderDataGroup")
public R projectTenderDataGroup(@RequestBody @Valid EnterpriseProjectTenderDataGroupBody vo) throws Exception {
return enterpriseService.projectTenderDataGroup(vo);
}
@ApiOperation(value = "股东列表(openApi)")
@PostMapping(value = "partners")
public R partners(@RequestBody @Valid EnterprisePartnersBody vo) throws Exception {
return enterpriseService.partners(vo);
}
@ApiOperation(value = "对外投资列表(openApi)")
@PostMapping(value = "investment")
public R investment(@RequestBody @Valid EnterpriseInvestmentBody vo) throws Exception {
return enterpriseService.investment(vo);
}
@ApiOperation(value = "分支机构列表(openApi)")
@PostMapping(value = "affiliates")
public R affiliates(@RequestBody @Valid EnterpriseAffiliatesBody vo) throws Exception {
return enterpriseService.affiliates(vo);
}
@ApiOperation(value = "招标公告列表(建设库)")
@PostMapping(value = "bidNoticePage")
public R bidNoticePage(@RequestBody @Valid EnterpriseBidNoticePageBody vo) throws Exception {
return enterpriseService.bidNoticePage(vo);
}
@ApiOperation(value = "企业动态列表(建设库)")
@PostMapping(value = "dynamicPage")
public R dynamicPage(@RequestBody @Valid EnterpriseDynamicPageBody vo) throws Exception {
return enterpriseService.dynamicPage(vo);
}
@ApiOperation(value = "工商基本信息(openApi)")
@PostMapping(value = "icInfo")
public R icInfo(@RequestBody @Valid EnterpriseIcInfoBody vo) throws Exception {
return enterpriseService.icInfo(vo);
}
@ApiOperation(value = "工商变更信息列表(openApi)")
@PostMapping(value = "changeInfo")
public R changeInfo(@RequestBody @Valid EnterpriseChangeInfoBody vo) throws Exception {
return enterpriseService.changeInfo(vo);
}
@ApiOperation(value = "高管信息列表(openApi)")
@PostMapping(value = "keymembers")
public R keymembers(@RequestBody @Valid EnterpriseKeymembersBody vo) throws Exception {
return enterpriseService.keymembers(vo);
}
}
package com.dsk.web.controller.search;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.ComposeQueryDto;
import com.dsk.web.controller.search.service.MarketAnalysisService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -31,31 +33,37 @@ public class MarketAnalysisController {
}
/*
* 资质等级按照大类、等级类型分组
* 资质等级按照行业、等级类型分组
*/
@RequestMapping("/certGroupByCategoryAndLevel")
public AjaxResult certGroupByCategoryAndLevel() {
@RequestMapping("/certGroupByMajorAndLevel")
public AjaxResult certGroupByMajorAndLevel() {
return marketAnalysisService.certGroupByCategoryAndLevel();
return marketAnalysisService.certGroupByMajorAndLevel();
}
/*
* 资质等级按照小类、等级类型分组
* 资质等级按照大类、省份、等级类型分组
*/
@RequestMapping("/certGroupByTypeAndLevel")
public AjaxResult certGroupByTypeAndLevel() {
@RequestMapping("/certGroupByCategoryProvinceLevel")
public AjaxResult certGroupByCategoryProvinceLevel() {
return marketAnalysisService.certGroupByTypeAndLevel();
return marketAnalysisService.certGroupByMajorProvinceLevel();
}
/*
* 资质等级按照大类、省份、等级类型分组
* 中标数量按省份分组
*/
@RequestMapping("/certGroupByCategoryProvinceLevel")
public AjaxResult certGroupByCategoryProvinceLevel() {
@RequestMapping("/countGroupByProvince")
public AjaxResult countGroupByProvince(@RequestBody ComposeQueryDto compose) {
return marketAnalysisService.countGroupByProvince(compose);
}
return marketAnalysisService.certGroupByCategoryProvinceLevel();
/*
* 中标数量按月份分组
*/
@RequestMapping("/countGroupByMonth")
public AjaxResult countGroupByMonth(@RequestBody ComposeQueryDto compose) {
return marketAnalysisService.countGroupByMonth(compose);
}
}
package com.dsk.web.controller.search.macroMarket;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.system.service.EconomicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName EconomicController
* @Description 经济大全
* @Author Dgm
* @Date 2023/5/18 10:09
* @Version 1.0.0
*/
@RestController
@RequestMapping(value ="/economic")
public class EconomicController {
@Autowired
private EconomicService economicService;
/***
*@Description: 全国经济大全分页列表
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@GetMapping("/nationalPage")
public AjaxResult areaGroupByProvince() {
return economicService.nationalPage();
}
}
package com.dsk.web.controller.search.service;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.ComposeQueryDto;
/**
* @Author liujie
......@@ -11,9 +12,11 @@ public interface MarketAnalysisService {
AjaxResult areaGroupByProvince();
AjaxResult certGroupByTypeAndLevel();
AjaxResult certGroupByMajorAndLevel();
AjaxResult certGroupByCategoryAndLevel();
AjaxResult certGroupByMajorProvinceLevel();
AjaxResult certGroupByCategoryProvinceLevel();
AjaxResult countGroupByProvince(ComposeQueryDto compose);
AjaxResult countGroupByMonth(ComposeQueryDto compose);
}
......@@ -3,6 +3,7 @@ package com.dsk.web.controller.search.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.R;
import com.dsk.common.dtos.ComposeQueryDto;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.common.utils.http.HttpUtils;
import com.dsk.web.controller.search.service.MarketAnalysisService;
......@@ -29,18 +30,27 @@ public class MarketAnalysisServiceImpl implements MarketAnalysisService {
}
@Override
public AjaxResult certGroupByTypeAndLevel() {
return null;
public AjaxResult certGroupByMajorAndLevel() {
Map<String, Object> map = dskOpenApiUtil.requestBody("/marketAnalysis/certGroupByMajorAndLevel", null);
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult certGroupByCategoryAndLevel() {
return null;
public AjaxResult certGroupByMajorProvinceLevel() {
Map<String, Object> map = dskOpenApiUtil.requestBody("/marketAnalysis/certGroupByMajorProvinceLevel", null);
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult certGroupByCategoryProvinceLevel() {
public AjaxResult countGroupByProvince(ComposeQueryDto compose) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/marketAnalysis/countGroupByProvince", BeanUtil.beanToMap(compose, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
return null;
@Override
public AjaxResult countGroupByMonth(ComposeQueryDto compose) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/marketAnalysis/countGroupByDate", BeanUtil.beanToMap(compose, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
}
......@@ -158,14 +158,16 @@ token:
# 令牌有效期(默认30分钟)
expireTime: 30
# MyBatis配置
mybatis:
# 搜索指定包别名
typeAliasesPackage: com.dsk.**.domain
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 加载全局的配置文件
configLocation: classpath:mybatis/mybatis-config.xml
#mybatis:
# # 搜索指定包别名
# typeAliasesPackage: com.dsk.**.domain
# # 配置mapper的扫描,找到所有的mapper.xml映射文件
# mapperLocations: classpath*:mapper/**/*Mapper.xml
# # 加载全局的配置文件
# configLocation: classpath:mybatis/mybatis-config.xml
# PageHelper分页插件
pagehelper:
......
spring:
profiles:
active: dev
# MyBatisPlus配置
# https://baomidou.com/config/
mybatis-plus:
# 不支持多包, 如有需要可在注解配置 或 提升扫包等级
# 例如 com.**.**.mapper
mapperPackage: com.dsk.**.mapper
# 对应的 XML 文件位置
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.dsk.**.domain
# 针对 typeAliasesPackage,如果配置了该属性,则仅仅会扫描路径下以该类作为父类的域对象
#typeAliasesSuperType: Class<?>
# 如果配置了该属性,SqlSessionFactoryBean 会把该包下面的类注册为对应的 TypeHandler
#typeHandlersPackage: null
# 如果配置了该属性,会将路径下的枚举类进行注入,让实体类字段能够简单快捷的使用枚举属性
#typeEnumsPackage: null
# 启动时是否检查 MyBatis XML 文件的存在,默认不检查
checkConfigLocation: false
# 通过该属性可指定 MyBatis 的执行器,MyBatis 的执行器总共有三种:
# SIMPLE:该执行器类型不做特殊的事情,为每个语句的执行创建一个新的预处理语句(PreparedStatement)
# REUSE:该执行器类型会复用预处理语句(PreparedStatement)
# BATCH:该执行器类型会批量执行所有的更新语句
executorType: SIMPLE
configuration:
# 自动驼峰命名规则(camel case)映射
# 如果您的数据库命名符合规则无需使用 @TableField 注解指定数据库字段名
mapUnderscoreToCamelCase: true
# 默认枚举处理类,如果配置了该属性,枚举将统一使用指定处理器进行处理
# org.apache.ibatis.type.EnumTypeHandler : 存储枚举的名称
# org.apache.ibatis.type.EnumOrdinalTypeHandler : 存储枚举的索引
# com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler : 枚举类需要实现IEnum接口或字段标记@EnumValue注解.
defaultEnumTypeHandler: org.apache.ibatis.type.EnumTypeHandler
# 当设置为 true 的时候,懒加载的对象可能被任何懒属性全部加载,否则,每个属性都按需加载。需要和 lazyLoadingEnabled 一起使用。
aggressiveLazyLoading: true
# MyBatis 自动映射策略
# NONE:不启用自动映射
# PARTIAL:只对非嵌套的 resultMap 进行自动映射
# FULL:对所有的 resultMap 都进行自动映射
autoMappingBehavior: PARTIAL
# MyBatis 自动映射时未知列或未知属性处理策
# NONE:不做任何处理 (默认值)
# WARNING:以日志的形式打印相关警告信息
# FAILING:当作映射失败处理,并抛出异常和详细信息
autoMappingUnknownColumnBehavior: NONE
# Mybatis一级缓存,默认为 SESSION
# SESSION session级别缓存,同一个session相同查询语句不会再次查询数据库
# STATEMENT 关闭一级缓存
localCacheScope: SESSION
# 开启Mybatis二级缓存,默认为 true
cacheEnabled: false
# 更详细的日志输出 会有性能损耗 org.apache.ibatis.logging.stdout.StdOutImpl
# 关闭日志记录 (可单纯使用 p6spy 分析) org.apache.ibatis.logging.nologging.NoLoggingImpl
# 默认日志输出 org.apache.ibatis.logging.slf4j.Slf4jImpl
logImpl: org.apache.ibatis.logging.slf4j.Slf4jImpl
global-config:
# 是否打印 Logo banner
banner: true
# 是否初始化 SqlRunner
enableSqlRunner: false
dbConfig:
# 主键类型
# AUTO 数据库ID自增
# NONE 空
# INPUT 用户输入ID
# ASSIGN_ID 全局唯一ID
# ASSIGN_UUID 全局唯一ID UUID
idType: AUTO
# 表名前缀
tablePrefix: null
# 字段 format,例: %s,(对主键无效)
columnFormat: null
# 表名是否使用驼峰转下划线命名,只对表名生效
tableUnderline: true
# 大写命名,对表名和字段名均生效
capitalMode: false
# 全局的entity的逻辑删除字段属性名
logicDeleteField: null
# 逻辑已删除值
logicDeleteValue: 2
# 逻辑未删除值
logicNotDeleteValue: 0
# 字段验证策略之 insert,在 insert 的时候的字段验证策略
# IGNORED 忽略判断
# NOT_NULL 非NULL判断
# NOT_EMPTY 非空判断(只对字符串类型字段,其他类型字段依然为非NULL判断)
# DEFAULT 默认的,一般只用于注解里
# NEVER 不加入 SQL
insertStrategy: NOT_NULL
# 字段验证策略之 update,在 update 的时候的字段验证策略
updateStrategy: NOT_NULL
# 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
where-strategy: NOT_NULL
package com.dsk.common.core.domain.model;
/**
* 基础分页类
* @author hypnos
* @Description
* @Date Created in 2022-10-27 07:08:54
* @Modified By hypnos
*/
public class BasePage {
/**
* 当前页码
*/
private Integer pageIndex = 1;
/**
* 每页数量
*/
private Integer pageSize = 10;
/**
* 最大页码
*/
private Integer pageMaxIndex;
/**
* 最大条数
*/
private Integer pageMaxSize;
public Integer getPageIndex() {
return pageMaxIndex != null && pageIndex > pageMaxIndex? pageMaxIndex : pageIndex;
}
public void setPageIndex(Integer pageIndex) {
this.pageIndex = pageIndex;
}
public Integer getPageSize() {
return pageMaxSize != null && pageSize > pageMaxSize? pageMaxSize : pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getPageMaxIndex() {
return pageMaxIndex;
}
public void setPageMaxIndex(Integer pageMaxIndex) {
this.pageMaxIndex = pageMaxIndex;
}
public Integer getPageMaxSize() {
return pageMaxSize;
}
public void setPageMaxSize(Integer pageMaxSize) {
this.pageMaxSize = pageMaxSize;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("BasePageVo [pageIndex=");
builder.append(pageIndex);
builder.append(", pageSize=");
builder.append(pageSize);
builder.append("]");
return builder.toString();
}
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
/**
* 分支结构列表
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseAffiliatesBody extends BasePage {
//企业Id
@NotNull(message = "企业id不能为空")
private Integer cid;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseBidDataGroupBody
{
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer cid;
/**
* 时间跨度id 1:年,2:月,3:周
*/
@NotNull(message = "spanId不能为空")
private Integer spanId;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
public class EnterpriseBody
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseBidNoticePageBody extends BasePage
{
/**
* 企业id
......@@ -10,19 +19,4 @@ public class EnterpriseBody
@NotNull(message = "企业id不能为空")
private Integer companyId;
public Integer getCompanyId() {
return companyId;
}
public void setCompanyId(Integer companyId) {
this.companyId = companyId;
}
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("com.dsk.common.core.domain.model.EnterpriseBody{");
sb.append("companyId='").append(companyId).append('\'');
sb.append('}');
return sb.toString();
}
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseChangeInfoBody extends BasePage
{
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer cid;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseDynamicPageBody extends BasePage
{
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer companyId;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseIcInfoBody extends BasePage
{
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer cid;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseInfoHeaderBody
{
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer companyId;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
/**
* 对外投资列表
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseInvestmentBody extends BasePage {
//企业Id
@NotNull(message = "企业id不能为空")
private Integer cid;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseKeymembersBody extends BasePage
{
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer cid;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
/**
* 股东列表
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterprisePartnersBody extends BasePage {
//企业Id
@NotNull(message = "企业id不能为空")
private Integer cid;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
/**
* 甲方业绩数据
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseProjectTenderDataGroupBody {
//企业Id
@NotNull(message = "企业id不能为空")
private Integer cid;
//group类型 0:金额,1:项目类型
private Integer type;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseStatisticBody
{
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer companyId;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
/**
* 企业详情供应商信息列表
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseSupplierPageBody extends BasePage {
//企业Id
@NotNull(message = "企业id不能为空")
private Integer companyId;
//是否企业首页用,首页用到缓存
private Boolean isIndex = true;
//查询关键词(供应商名)
private String key;
//排序字段
private String orderColumn;
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("com.dsk.common.core.domain.model.EnterpriseSupplierPageBody{");
sb.append("companyId=").append(companyId);
sb.append(", isIndex=").append(isIndex);
sb.append(", key='").append(key).append('\'');
sb.append(", orderColumn='").append(orderColumn).append('\'');
sb.append(", pageIndex=").append(getPageIndex());
sb.append(", pageSize=").append(getPageSize());
sb.append('}');
return sb.toString();
}
}
package com.dsk.common.core.mybatisplus.methods;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.dsk.common.utils.StringUtils;
import org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator;
import org.apache.ibatis.executor.keygen.KeyGenerator;
import org.apache.ibatis.executor.keygen.NoKeyGenerator;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;
import java.util.List;
/**
* 单sql批量插入( 全量填充 )
*
* @author Lion Li
*/
public class InsertAll extends AbstractMethod {
private final static String[] FILL_PROPERTY = {"createTime", "createBy", "updateTime", "updateBy"};
@Override
public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
final String sql = "<script>insert into %s %s values %s</script>";
final String fieldSql = prepareFieldSql(tableInfo);
final String valueSql = prepareValuesSqlForMysqlBatch(tableInfo);
KeyGenerator keyGenerator = new NoKeyGenerator();
String sqlMethod = "insertAll";
String keyProperty = null;
String keyColumn = null;
// 表包含主键处理逻辑,如果不包含主键当普通字段处理
if (StringUtils.isNotBlank(tableInfo.getKeyProperty())) {
if (tableInfo.getIdType() == IdType.AUTO) {
/** 自增主键 */
keyGenerator = new Jdbc3KeyGenerator();
keyProperty = tableInfo.getKeyProperty();
keyColumn = tableInfo.getKeyColumn();
} else {
if (null != tableInfo.getKeySequence()) {
keyGenerator = TableInfoHelper.genKeyGenerator(sqlMethod, tableInfo, builderAssistant);
keyProperty = tableInfo.getKeyProperty();
keyColumn = tableInfo.getKeyColumn();
}
}
}
final String sqlResult = String.format(sql, tableInfo.getTableName(), fieldSql, valueSql);
SqlSource sqlSource = languageDriver.createSqlSource(configuration, sqlResult, modelClass);
return this.addInsertMappedStatement(mapperClass, modelClass, sqlMethod, sqlSource, keyGenerator, keyProperty, keyColumn);
}
private String prepareFieldSql(TableInfo tableInfo) {
StringBuilder fieldSql = new StringBuilder();
if (StringUtils.isNotBlank(tableInfo.getKeyColumn())) {
fieldSql.append(tableInfo.getKeyColumn()).append(",");
}
tableInfo.getFieldList().forEach(x -> fieldSql.append(x.getColumn()).append(","));
fieldSql.delete(fieldSql.length() - 1, fieldSql.length());
fieldSql.insert(0, "(");
fieldSql.append(")");
return fieldSql.toString();
}
private String prepareValuesSqlForMysqlBatch(TableInfo tableInfo) {
final StringBuilder valueSql = new StringBuilder();
valueSql.append("<foreach collection=\"list\" item=\"item\" index=\"index\" open=\"(\" separator=\"),(\" close=\")\">");
if (StringUtils.isNotBlank(tableInfo.getKeyColumn())) {
valueSql.append("\n#{item.").append(tableInfo.getKeyProperty()).append("},\n");
}
List<TableFieldInfo> fieldList = tableInfo.getFieldList();
int last = fieldList.size() - 1;
for (int i = 0; i < fieldList.size(); i++) {
String property = fieldList.get(i).getProperty();
if (!StringUtils.equalsAny(property, FILL_PROPERTY)) {
valueSql.append("<if test=\"item.").append(property).append(" != null\">");
valueSql.append("#{item.").append(property).append("}");
if (i != last) {
valueSql.append(",");
}
valueSql.append("</if>");
valueSql.append("<if test=\"item.").append(property).append(" == null\">");
valueSql.append("DEFAULT");
if (i != last) {
valueSql.append(",");
}
valueSql.append("</if>");
} else {
valueSql.append("#{item.").append(property).append("}");
if (i != last) {
valueSql.append(",");
}
}
}
valueSql.append("</foreach>");
return valueSql.toString();
}
}
package com.dsk.common.dtos;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Getter;
import lombok.Setter;
......
package com.dsk.common.dtos;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.util.Date;
......
package com.dsk.common.dtos;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Getter;
import lombok.Setter;
......
package com.dsk.common.dtos;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.util.Date;
......
package com.dsk.common.dtos;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.util.Date;
......
package com.dsk.common.dtos;
import com.md.common.entity.Page;
import lombok.Data;
/**
......
package com.dsk.common.dtos;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.util.Date;
......
package com.dsk.common.dtos;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.util.Date;
......
package com.dsk.common.dtos;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.util.Date;
......
package com.dsk.common.dtos;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.md.common.entity.Page;
import lombok.Data;
@Data
......
package com.dsk.common.dtos;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.util.Date;
......
......@@ -24,6 +24,10 @@ public class DskOpenApiUtil {
return request(path, bodyMap, "json");
}
public Map<String,Object> requestBodyWithHeader(String path, Map<String, Object> bodyMap, Map<String, String> headerMap){
return requestWithHeader(path, bodyMap, "json", headerMap);
}
/**
* <b>application/x-www-form-urlencoded请求</b>
* @param path 请求路径
......@@ -59,4 +63,29 @@ public class DskOpenApiUtil {
}
}
/**
* <b>开放平台统一请求</b>
* @param path 请求路径
* @param bodyMap 参数体
* @param reqBodyType 请求格式
* @return
*/
public Map<String,Object> requestWithHeader(String path, Map<String, Object> bodyMap, String reqBodyType, Map<String, String> headerMap){
try {
AccClient.init(new Config(dskOpenApiConfig.accessKeyId, dskOpenApiConfig.accessKeySecret)
.setEndpoint(dskOpenApiConfig.endPoint));
Map<String, ?> res = AccClient.request(reqBodyType, path, bodyMap, headerMap);
if(!res.containsKey("headers") || !res.containsKey("body")) {
throw new RuntimeException(String.format("请求无返回:path=%s",path));
}
Object resBody = res.get("body");
if(resBody == null) {
return null;
}
return CommonUtils.assertAsMap(resBody);
} catch (Exception e) {
throw new RuntimeException(String.format("请求异常:path=%s,err=%s",path,e.getMessage()));
}
}
}
\ No newline at end of file
package com.dsk.framework.config;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import javax.sql.DataSource;
import org.apache.ibatis.io.VFS;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.util.ClassUtils;
import com.dsk.common.utils.StringUtils;
/**
* Mybatis支持*匹配扫描包
*
* @author dsk
*/
@Configuration
public class MyBatisConfig
{
@Autowired
private Environment env;
static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";
public static String setTypeAliasesPackage(String typeAliasesPackage)
{
ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver();
MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
List<String> allResult = new ArrayList<String>();
try
{
for (String aliasesPackage : typeAliasesPackage.split(","))
{
List<String> result = new ArrayList<String>();
aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
+ ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN;
Resource[] resources = resolver.getResources(aliasesPackage);
if (resources != null && resources.length > 0)
{
MetadataReader metadataReader = null;
for (Resource resource : resources)
{
if (resource.isReadable())
{
metadataReader = metadataReaderFactory.getMetadataReader(resource);
try
{
result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
}
}
if (result.size() > 0)
{
HashSet<String> hashResult = new HashSet<String>(result);
allResult.addAll(hashResult);
}
}
if (allResult.size() > 0)
{
typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0]));
}
else
{
throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包");
}
}
catch (IOException e)
{
e.printStackTrace();
}
return typeAliasesPackage;
}
public Resource[] resolveMapperLocations(String[] mapperLocations)
{
ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
List<Resource> resources = new ArrayList<Resource>();
if (mapperLocations != null)
{
for (String mapperLocation : mapperLocations)
{
try
{
Resource[] mappers = resourceResolver.getResources(mapperLocation);
resources.addAll(Arrays.asList(mappers));
}
catch (IOException e)
{
// ignore
}
}
}
return resources.toArray(new Resource[resources.size()]);
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
{
String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
String mapperLocations = env.getProperty("mybatis.mapperLocations");
String configLocation = env.getProperty("mybatis.configLocation");
typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
VFS.addImplClass(SpringBootVFS.class);
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
return sessionFactory.getObject();
}
}
//package com.dsk.framework.config;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.HashSet;
//import java.util.List;
//import javax.sql.DataSource;
//import org.apache.ibatis.io.VFS;
//import org.apache.ibatis.session.SqlSessionFactory;
//import org.mybatis.spring.SqlSessionFactoryBean;
//import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.core.env.Environment;
//import org.springframework.core.io.DefaultResourceLoader;
//import org.springframework.core.io.Resource;
//import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
//import org.springframework.core.io.support.ResourcePatternResolver;
//import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
//import org.springframework.core.type.classreading.MetadataReader;
//import org.springframework.core.type.classreading.MetadataReaderFactory;
//import org.springframework.util.ClassUtils;
//import com.dsk.common.utils.StringUtils;
//
///**
// * Mybatis支持*匹配扫描包
// *
// * @author dsk
// */
//@Configuration
//public class MyBatisConfig
//{
// @Autowired
// private Environment env;
//
// static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";
//
// public static String setTypeAliasesPackage(String typeAliasesPackage)
// {
// ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver();
// MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
// List<String> allResult = new ArrayList<String>();
// try
// {
// for (String aliasesPackage : typeAliasesPackage.split(","))
// {
// List<String> result = new ArrayList<String>();
// aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
// + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN;
// Resource[] resources = resolver.getResources(aliasesPackage);
// if (resources != null && resources.length > 0)
// {
// MetadataReader metadataReader = null;
// for (Resource resource : resources)
// {
// if (resource.isReadable())
// {
// metadataReader = metadataReaderFactory.getMetadataReader(resource);
// try
// {
// result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());
// }
// catch (ClassNotFoundException e)
// {
// e.printStackTrace();
// }
// }
// }
// }
// if (result.size() > 0)
// {
// HashSet<String> hashResult = new HashSet<String>(result);
// allResult.addAll(hashResult);
// }
// }
// if (allResult.size() > 0)
// {
// typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0]));
// }
// else
// {
// throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包");
// }
// }
// catch (IOException e)
// {
// e.printStackTrace();
// }
// return typeAliasesPackage;
// }
//
// public Resource[] resolveMapperLocations(String[] mapperLocations)
// {
// ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
// List<Resource> resources = new ArrayList<Resource>();
// if (mapperLocations != null)
// {
// for (String mapperLocation : mapperLocations)
// {
// try
// {
// Resource[] mappers = resourceResolver.getResources(mapperLocation);
// resources.addAll(Arrays.asList(mappers));
// }
// catch (IOException e)
// {
// // ignore
// }
// }
// }
// return resources.toArray(new Resource[resources.size()]);
// }
//
// @Bean
// public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
// {
// String typeAliasesPackage = env.getProperty("mybatis-plus.typeAliasesPackage");
// String mapperLocations = env.getProperty("mybatis-plus.mapperLocations");
//// String configLocation = env.getProperty("mybatis-plus.configLocation");
// typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
// VFS.addImplClass(SpringBootVFS.class);
//
// final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
// sessionFactory.setDataSource(dataSource);
// sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
// sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
//// sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
// return sessionFactory.getObject();
// }
//}
package com.dsk.framework.config;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.dsk.common.core.mybatisplus.methods.InsertAll;
import com.dsk.framework.mybatisplus.CreateAndUpdateMetaObjectHandler;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import java.util.List;
/**
* mybatis-plus配置类
*
* @author Lion Li
*/
@EnableTransactionManagement(proxyTargetClass = true)
@Configuration
// 指定要扫描的Mapper类的包的路径
@MapperScan("${mybatis-plus.mapperPackage}")
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
interceptor.addInnerInterceptor(paginationInnerInterceptor());
// 乐观锁插件
interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());
// 阻断插件
// interceptor.addInnerInterceptor(blockAttackInnerInterceptor());
return interceptor;
}
/**
* 分页插件,自动识别数据库类型
* https://baomidou.com/guide/interceptor-pagination.html
*/
public PaginationInnerInterceptor paginationInnerInterceptor() {
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
// 设置最大单页限制数量,默认 500 条,-1 不受限制
paginationInnerInterceptor.setMaxLimit(500L);
// 分页合理化
paginationInnerInterceptor.setOverflow(true);
// paginationInnerInterceptor.setOptimizeJoin(new JsqlParserCountOptimize(true));
return paginationInnerInterceptor;
}
/**
* 乐观锁插件
* https://baomidou.com/guide/interceptor-optimistic-locker.html
*/
public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() {
return new OptimisticLockerInnerInterceptor();
}
/**
* 如果是对全表的删除或更新操作,就会终止该操作
* https://baomidou.com/guide/interceptor-block-attack.html
*/
// public BlockAttackInnerInterceptor blockAttackInnerInterceptor() {
// return new BlockAttackInnerInterceptor();
// }
/**
* sql性能规范插件(垃圾SQL拦截)
* 如有需要可以启用
*/
// public IllegalSQLInnerInterceptor illegalSQLInnerInterceptor() {
// return new IllegalSQLInnerInterceptor();
// }
/**
* 自定义主键策略
* https://baomidou.com/guide/id-generator.html
*/
// @Bean
// public IdentifierGenerator idGenerator() {
// return new CustomIdGenerator();
// }
/**
* 元对象字段填充控制器
* https://baomidou.com/guide/auto-fill-metainfo.html
*/
@Bean
public MetaObjectHandler metaObjectHandler() {
return new CreateAndUpdateMetaObjectHandler();
}
/**
* TenantLineInnerInterceptor 多租户插件
* https://baomidou.com/guide/interceptor-tenant-line.html
* DynamicTableNameInnerInterceptor 动态表名插件
* https://baomidou.com/guide/interceptor-dynamic-table-name.html
*/
@Bean
ConfigurationCustomizer mybatisConfigurationCustomizer() {
return new ConfigurationCustomizer() {
@Override
public void customize(MybatisConfiguration configuration) {
configuration.addInterceptor(new com.github.pagehelper.PageInterceptor());
}
};
}
}
package com.dsk.framework.mybatisplus;
import cn.hutool.http.HttpStatus;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.dsk.common.core.domain.model.LoginUser;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import java.util.Date;
/**
* MP注入处理器
*
* @author Lion Li
* @date 2021/4/25
*/
@Slf4j
public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
try {
//根据属性名字设置要填充的值
if (metaObject.hasGetter("createTime")) {
this.setFieldValByName("createTime", new Date(), metaObject);
}
if (metaObject.hasGetter("createBy")) {
this.setFieldValByName("createBy", getLoginNickname(), metaObject);
}
} catch (Exception e) {
throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED);
}
updateFill(metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
try {
if (metaObject.hasGetter("updateBy")) {
this.setFieldValByName("updateBy", getLoginNickname(), metaObject);
}
if (metaObject.hasGetter("updateTime")) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
} catch (Exception e) {
throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED);
}
}
/**
* 获取登录用户名
*/
private String getLoginUsername() {
LoginUser loginUser;
try {
loginUser = SecurityUtils.getLoginUser();
} catch (Exception e) {
log.warn("自动注入警告 => 用户未登录");
return null;
}
return loginUser.getUsername();
}
/**
* 获取登录用户名
*/
private String getLoginNickname() {
LoginUser loginUser;
try {
loginUser = SecurityUtils.getLoginUser();
} catch (Exception e) {
log.warn("自动注入警告 => 用户未登录");
return null;
}
return loginUser.getUser().getNickName();
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -121,7 +121,7 @@ aside {
//main-container全局样式
.app-container {
padding: 20px;
padding: 16px;
}
.components-container {
......@@ -208,9 +208,12 @@ ul, li {
margin: 0;
}
.app-main{
background-color: #f5f5f5;
}
.app-container {
margin: 12px 24px;
background: #FFFFFF;
background-color: #f5f5f5;
.el-input__inner{
border-color: #D9D9D9;
color: #232323;
......@@ -425,3 +428,131 @@ ul, li {
}
}
}
//组件公用样式
//
// 无边框、阴影card
.el-card.noborder{
border-color: #f5f5f5;
box-shadow: none;
margin-bottom: 12px;
.el-card__body{
padding: 0;
}
}
//el-tabs
.tabpane{
&.w100{
.el-tabs__nav-scroll{
padding-left: 16px;
}
.el-tabs__content{
padding: 16px;
}
}
.el-tabs__header{
margin: 0;
}
.el-tabs__nav-wrap::after{
background-color: #EFEFEF;
height: 1px;
}
.el-tabs__item{
font-size: 16px;
color: #232323;
line-height: 50px;
height: 50px;
}
.is-active{
color: #0081FF;
font-weight: bold;
}
}
//按钮
.btn{
margin-left: 8px;
border-radius: 4px;
display: inline-block;
font-size: 14px;
cursor: pointer;
text-align: center;
&.h28 {
height: 28px;
padding: 0 10px;
}
&.h32 {
height: 32px;
padding: 0 16px;
}
&.h34{
width: 80px;
height: 34px;
}
.img{
height: 100%;
float: left;
width: 16px;
}
}
.btn_default{
border: 1px solid #0081FF;
color: #0081FF;
&.h28{
line-height: 26px;
}
&.h32 {
line-height: 30px;
}
&.h34{
line-height: 32px;
}
&:hover{
color: #006AD1;
border-color: #006AD1;
}
}
.btn_primary{
background-color: #0081FF;
color: #fff;
&.h28{
line-height: 28px;
}
&.h32{
line-height: 32px;
}
&.h34{
line-height: 34px;
}
&:hover{
background-color: #006AD1;
}
}
//搜索框
.searchInput{
width: 590px;
height: 34px;
border-radius: 2px 0px 0px 2px;
opacity: 1;
border: 1px solid #EFEFEF;
position: relative;
overflow: hidden;
.el-input{
margin: -2px -1px;
}
.btn{
background: #F5F5F5;
color: #0081FF;
cursor: pointer;
width: 60px;
line-height: 32px;
height: 32px;
text-align: center;
position: absolute;
right: 0;
top: 0;
border-radius: 0;
&:hover{
color: #006AD1;
}
}
}
......@@ -42,8 +42,10 @@
.el-scrollbar {
height: 100%;
}
&.has-logo {
.el-scrollbar {
height: calc(100% - 50px);
......@@ -61,55 +63,82 @@
}
.svg-icon {
margin-right: 16px;
margin-right: 6px;
}
.el-submenu__icon-arrow{
top: 54%;
right: 5px;
color: #d8d8d8;
}
.el-menu {
border: none;
height: 100%;
width: 100% !important;
width: calc(100% - 16px) !important;
margin: 0 8px;
}
.el-menu--inline{
margin: 0;
width: 100%!important;
}
.el-menu--inline .nest-menu .el-menu-item{
width: 100%!important;
min-width: 128px;
color: #fff!important;
}
.el-menu-item, .el-submenu__title {
height: 40px;
line-height: 40px;
border: 1px solid #141b2f;
color: #fff;
margin-bottom: 6px;
padding: 0 6px!important;
overflow: hidden !important;
text-overflow: ellipsis !important;
white-space: nowrap !important;
}
// menu hover
.submenu-title-noDropdown,
.el-submenu__title {
.el-menu-item.is-active {
// 点击菜单的颜色
background-color: #1e2c4c!important;
color: #fff!important;
border-radius: 10px;
border: 1px solid #2b3f69;
&:hover {
background-color: rgba(0, 0, 0, 0.06) !important;
background-color: #1e2c4c!important;
border-radius: 10px;
color: #fff!important;
border: 1px solid #2b3f69;
}
}
& .theme-dark .is-active > .el-submenu__title {
color: $base-menu-color-active !important;
}
& .nest-menu .el-submenu>.el-submenu__title,
& .el-submenu .el-menu-item {
min-width: $base-sidebar-width !important;
// menu hover
.submenu-title-noDropdown, .el-submenu__title {
color: #fff!important;
&:hover {
background-color: rgba(0, 0, 0, 0.06) !important;
background-color: #1e2c4c!important;
color: #fff!important;
border-radius: 10px;
border: 1px solid #2b3f69;
}
}
& .theme-dark .nest-menu .el-submenu>.el-submenu__title,
& .theme-dark .el-submenu .el-menu-item {
background-color: $base-sub-menu-background !important;
&:hover {
background-color: $base-sub-menu-hover !important;
}
}
.sidebar-container .el-submenu .el-menu-item:hover,.sidebar-container .nest-menu .el-submenu>.el-submenu__title:hover {
background-color: #1e2c4c!important;
color: #fff!important;
border-radius: 10px;
border: 1px solid #2b3f69;
}
.hideSidebar {
.sidebar-container {
width: 54px !important;
width: 48px !important;
}
.main-container {
......@@ -117,14 +146,25 @@
}
.submenu-title-noDropdown {
padding: 0 !important;
margin-bottom: 6px;
padding: 0 6px!important;
text-align: center;
cursor: pointer;
position: relative;
.el-tooltip {
padding: 0 !important;
.svg-icon {
margin-left: 20px;
margin: 0px!important;
width: 1em;
height: 1em;
font-size: 16px;
margin-bottom: -2px;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
}
}
......@@ -133,10 +173,21 @@
overflow: hidden;
&>.el-submenu__title {
padding: 0 !important;
margin-bottom: 6px;
padding: 0 6px!important;
text-align: center;
cursor: pointer;
.svg-icon {
margin-left: 20px;
margin: 0px!important;
width: 1em;
height: 1em;
font-size: 16px;
margin-bottom: -2px;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
margin-left: 0px;
}
}
......
......@@ -36,7 +36,13 @@ $base-sub-menu-background:#000c17;
$base-sub-menu-hover:#001528;
*/
$base-sidebar-width: 200px;
// 央企颜色设置自定义
$base-menu-background:#141b2f;
$base-menu-light-background: #fff; // 选中菜单的字体颜色
$base-logo-light-title-color: #fff; // 对应base-logo-title-color
$base-sidebar-width: 144px;
//系统默认颜色
$systemColor:#0081FF;
......
......@@ -43,6 +43,7 @@ export default {
.app-main {
/* 84 = navbar + tags-view = 50 + 34 */
min-height: calc(100vh - 84px);
background: #F5F5F5;
}
.fixed-header + .app-main {
......
......@@ -55,9 +55,10 @@ export default {
.sidebar-logo-container {
position: relative;
width: 100%;
height: 50px;
line-height: 50px;
background: #2b2f3a;
height: 55px;
line-height: 55px;
background: #141b2f;
border-bottom: 1px solid #1a2743;
text-align: center;
overflow: hidden;
......@@ -66,8 +67,8 @@ export default {
width: 100%;
& .sidebar-logo {
width: 32px;
height: 32px;
width: 16px;
height: 23px;
vertical-align: middle;
margin-right: 12px;
}
......
<template>
<div class="app-container">
区域融资
<div>
专项债项目
</div>
<div>
项目明细
</div>
</div>
</template>
......
<template>
<div class="app-container container-box">
<div class="app-container container-box nationalEconomies">
<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="请选择年度" @change="querySubmit">
<el-select v-model="queryParams.year" filterable multiple collapse-tags class="form-content-width" placeholder="请选择年度" @change="querySubmit">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item prop="area">
<el-select v-model="queryParams.area" filterable class="form-content-width" placeholder="请选择地区" @change="querySubmit">
<el-option v-for="(item, index) in areaOptions" :key="index" :label="item.name" :value="item.value" />
</el-select>
<el-cascader
ref="address"
:options="addressList"
:props="props"
v-model="queryParams.address"
@change="querySubmit"
placeholder="地区选择"
collapse-tags
clearable></el-cascader>
</el-form-item>
</el-form>
</div>
......@@ -30,35 +36,63 @@
fit
highlight-current-row
>
<el-table-column label="序号" width="60" align="left">
<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="地区" min-width="70" align="left">
<el-table-column label="地区" min-width="60" align="left" fixed>
<template slot-scope="scope">
<router-link to="" tag="a" class="a-link">{{ scope.row.address || '广东省' }}</router-link>
</template>
</el-table-column>
<el-table-column label="年度明细" prop="dataId" width="100" align="left">
<el-table-column label="年度明细" prop="dataId" width="90" align="left" fixed>
<template slot-scope="scope">
<img src="@/assets/images/icon_detailed.png" class="icon-detailed" @click="handleDetail(scope.row)">
</template>
</el-table-column>
<el-table-column label="GDP(元)" prop="dataId" sortable min-width="120" align="right" />
<el-table-column label="GDP增速" prop="cgrdm" min-width="90" align="right" />
<el-table-column label="人均GDP(元)" prop="cgrssqy" min-width="130" align="right" />
<el-table-column label="固定资产投资(亿元)" prop="cgrzyhy" min-width="130" align="right" />
<el-table-column label="金融机构存款余额-本外币(亿元)" prop="cgzzxs" min-width="160" align="right" />
<el-table-column label="一般公共预算收入 (亿元)" prop="cgfs" width="130" align="left" />
<el-table-column label="一般公共预算收入增速" width="140" align="left">
<el-table-column label="GDP(元)" prop="dataId" sortable min-width="115" align="right" />
<el-table-column label="GDP增速" prop="cgrdm" sortable min-width="100" align="right" />
<el-table-column label="人均GDP(元)" prop="cgrssqy" sortable width="125" align="right" />
<el-table-column label="人口(万人)" prop="cgrssqy" sortable width="120" align="right" />
<el-table-column label="一般公共预算收入 (亿元)" prop="cgrzyhy" sortable width="170" align="right" />
<el-table-column label="一般公共预算收入增速(%)" prop="cgzzxs" sortable min-width="140" align="right" />
<el-table-column label="一般公共预算支出(亿元)" prop="cgfs" sortable width="140" align="left" />
<el-table-column label="政府性基金收入(亿元)" width="140" sortable align="left">
<template slot-scope="scope">
<router-link to="/purchaserDetail" target="_blank" tag="a" class="a-link">{{ scope.row.zbwj }}</router-link>
</template>
</el-table-column>
<el-table-column label="一般公共预算收入:税收收入" prop="cgfs" width="150" align="left" />
<el-table-column label="一般公共预算收入:税收收入" prop="cgfs" width="150" align="left" />
<el-table-column label="一般公共预算收入:税收收入" prop="cgfs" width="150" align="left" />
<el-table-column label="一般公共预算收入:税收收入" prop="cgfs" width="150" align="left" />
<el-table-column label="一般公共预算收入:税收收入" prop="cgfs" width="150" align="left" />
<el-table-column label="政府性基金收入:土地出让收入(亿元)" prop="cgfs" sortable width="150" align="left" />
<el-table-column label="政府性基金支出(亿元)" prop="cgfs" width="170" sortable 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" />
<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">-->
<!--<el-input-->
<!--v-model="search"-->
<!--size="mini"-->
<!--placeholder="输入关键字搜索"/>-->
<!--</template>-->
</el-table-column>
<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" />
<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" />
<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>
</div>
<div class="pagination-box">
......@@ -70,8 +104,9 @@
<script>
import { browsedIndexPage } from '@/api/nationalEconomies'
import dataRegion from '@/assets/json/dataRegion'
import economiesDetail from './component/economies-detail'
import axios from 'axios'
export default {
name: 'NationalEconomies',
components: {
......@@ -81,16 +116,18 @@ export default {
return {
queryParams: {
year: '',
area: ''
address: ''
},
yearOptions: [
{ name: '2022年', value: '0' },
{ name: '2023年', value: '1' }
],
areaOptions: [
{ name: '重庆', value: '0' },
{ name: '四川', value: '1' }
{ name: '2023年', value: '2023' },
{ name: '2022年', value: '2022' },
{ name: '2021年', value: '2021' },
],
props: {
value: 'id',
multiple: true,
},
addressList: [],
tableData: [],
tableLoading: false,
pageIndex: 1,
......@@ -100,20 +137,100 @@ export default {
},
created() {
this.querySubmit()
this.dataRegion()
},
methods: {
//地区
async dataRegion() {
// await axios.post("https://files.jiansheku.com/file/json/common/dataRegion.json", {}, {
// headers: {
// 'Content-Type': 'application/json'
// }
// }).then(res => {
// if (res.data.code == 200) {
// console.log(res.data.data)
// }
// })
var str = [];
for (let x = 0; x < 3; x++) {
for (let i = 0; i < dataRegion.length; i++) {
if (dataRegion[i].regionLevel == x + 1 && x + 1 == 1) {
str.push({
'id': dataRegion[i].id,
"label": dataRegion[i].regionName,
"short": dataRegion[i].short,
"value": dataRegion[i].parentId,
"children": []
});
} else if (dataRegion[i].regionLevel == x + 1 && x + 1 == 2) {
for (let j = 0; j < str.length; j++) {
if (str[j].id == dataRegion[i].parentId) {
str[j].children.push({
'id': dataRegion[i].id,
"label": dataRegion[i].regionName,
"short": dataRegion[i].short,
"value": dataRegion[i].parentId,
"children": []
});
}
}
} else if (dataRegion[i].regionLevel == x + 1 && x + 1 == 3) {
for (let j = 0; j < str.length; j++) {
for (let k = 0; k < str[j].children.length; k++) {
if (str[j].children[k].id == dataRegion[i].parentId) {
str[j].children[k].children.push({
'id': dataRegion[i].id,
"label": dataRegion[i].regionName,
"short": dataRegion[i].short,
"value": dataRegion[i].parentId
// "children":[]
});
}
}
}
}
}
}
this.addressList = str;
},
// 查询提交
async querySubmit() {
this.tableLoading = true
// this.tableLoading = true
const params = { pageIndex: this.pageIndex, pageSize: this.pageSize, browsedType: 1 }
browsedIndexPage(params).then(res => {
this.tableData = res.data.list
this.tableDataTotal = res.data.totalCount
})
// 延迟关闭加载效果
setTimeout(() => {
this.tableLoading = false
}, 200)
if(this.queryParams.address){
let arr = this.$refs.address.getCheckedNodes();
let provinceCode = [],cityCode = [],countyCode = [];
for (var i in arr) {
if (arr[i].parent) {
if (!arr[i].parent.checked) {
arr[i].hasChildren && cityCode.push(arr[i].value);
!arr[i].hasChildren && countyCode.push(arr[i].value);
}
} else {
provinceCode.push(arr[i].value)
}
}
if(provinceCode.length > 0){
params.procinceId=provinceCode.join(',')
}
if(cityCode.length > 0){
params.cityId=cityCode.join(',')
}
if(countyCode.length > 0){
params.districtId=countyCode.join(',')
}
}
console.log(params)
// browsedIndexPage(params).then(res => {
// this.tableData = res.data.list
// this.tableDataTotal = res.data.totalCount
// })
// // 延迟关闭加载效果
// setTimeout(() => {
// this.tableLoading = false
// }, 200)
},
// 明细
handleDetail(row) {
......@@ -148,4 +265,33 @@ export default {
height: 16px;
cursor: pointer;
}
.nationalEconomies{
.table-item{
::v-deep .el-table{
th{
font-size: 12px !important;
font-weight: 400 !important;
}
.el-table__fixed-header-wrapper th{
background: #F0F3FA;
}
.cell{
position: relative;
}
.caret-wrapper{
width: 10px;
/*<!--position: absolute;-->*/
/*<!--right: 12px;-->*/
/*<!--top: -3px;-->*/
}
/*.sort-caret{*/
/*position: initial;*/
/*}*/
/*.ascending{*/
/*margin-bottom: 3px;*/
/*}*/
}
}
}
</style>
<template>
<div class="app-container">
商机列表
<el-card class="box-card noborder nopad">
<div class="btns">
<div class="btn btn_default h28"><div class="img img1"></div>新建项目商机</div>
<div class="btn btn_primary h28"><div class="img img2"></div>批量导出</div>
</div>
<el-tabs v-model="activeName" @tab-click="handleClick" class="tabpane w100">
<el-tab-pane label="我参与的项目" name="first">
<div class="searchInput">
<el-input type="text" placeholder="请输入项目或业主单位名称关键词进行搜索"></el-input>
<div class="btn">搜索</div>
</div>
<div class="sellist">
<div class="selli">
<span>
地区团队
</span>aaa
</div>
<div class="selli">
<span>
项目信息
</span>aaa
</div>
</div>
<div class="scbtns">
<div class="btn btn_primary h34">查询</div>
<div class="btn btn_default h34">重置</div>
</div>
</el-tab-pane>
<el-tab-pane label="公司全部项目" name="second">配置管理</el-tab-pane>
</el-tabs>
</el-card>
<el-card class="box-card noborder">
</el-card>
</div>
</template>
<script>
// import "@/assets/styles/index.scss"
export default {
name: 'ProjectList',
data() {
return {
activeName:'first',
}
},
created() {
......@@ -19,5 +55,49 @@ export default {
</script>
<style lang="scss" scoped>
.app-container{
padding: 0;
}
.noborder{
position: relative;
}
.btns{
position: absolute;
top: 11px;
right: 12px;
z-index: 2;
.img.img1{
background: url('../../../../src/assets/images/add.png')no-repeat center center;
}
.btn_default:hover{
.img1{
background: url('../../../../src/assets/images/add_1.png')no-repeat center center;
}
}
.img.img2{
background: url('../../../../src/assets/images/import.png')no-repeat center center;
}
}
.scbtns{
border-top: 1px solid #EFEFEF;
padding: 24px 0 8px;
.btn{
margin: 0 16px 0 0;
}
}
.sellist{
width: 100%;
padding: 10px 0;
.selli{
width: 100%;
height: 34px;
line-height: 34px;
font-size: 14px;
color: #232323;
>span{
float: left;
margin-right: 28px;
}
}
}
</style>
package com.dsk.system.domain;
package com.dsk.system.domain.customer;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
......@@ -13,10 +15,13 @@ import java.util.Date;
* @since 2023-05-16 09:27:55
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@TableName("customer")
public class Customer implements Serializable {
private static final long serialVersionUID = 824383302173350532L;
@TableId(value = "customer_id",type = IdType.ASSIGN_UUID)
private String customerId;
/**
* jsk企业id
......@@ -75,16 +80,34 @@ public class Customer implements Serializable {
*/
private String businessScope;
/**
* 最后跟进时间
* 商务条件特点
*/
private Date lastFollowTime;
private String businessCharacteristic;
/**
* 决策链条
*/
private String decisionChain;
/**
* 招投标流程特点
*/
private String bidCharacteristic;
/**
* 履约阶段特点
*/
private String performanceCharacteristic;
/**
* 其它管理体系特点
*/
private String otherMsCharacteistic;
private Long createId;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
private Long updateId;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
......
package com.dsk.system.domain.customer;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* 客户决策链条(CustomerDecisionChain)实体类
*
* @author makejava
* @since 2023-05-16 15:33:45
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@TableName("customer_decision_chain")
public class CustomerDecisionChain implements Serializable {
private static final long serialVersionUID = 990085082282249053L;
@TableId(value = "id",type = IdType.AUTO)
private Long id;
/**
* 客户id
*/
private String customerId;
/**
* 姓名
*/
private String name;
/**
* 角色
*/
private String role;
/**
* 公司/机关(工作单位)
*/
private String workUnit;
/**
* 职位
*/
private String position;
/**
* 联系方式
*/
private String contactInformation;
/**
* 备注
*/
private String remark;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 更新人
*/
private String updateBy;
private Long updateId;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
package com.dsk.system.domain.customer;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* 客户负责人表
*
* @author lcl
* @create 2023/5/17
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@TableName("customer_user")
public class CustomerUser implements Serializable {
@TableId(value = "id",type = IdType.AUTO)
private Long id;
/**
* 客户id
*/
private String customerId;
/**
* 负责人id
*/
private Long userId;
/**
* 状态
*/
private Integer status;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date careteTime;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
public CustomerUser(String customerId, Long userId) {
this.customerId = customerId;
this.userId = userId;
}
}
package com.dsk.system.domain.customer.dto;
import lombok.Data;
/**
* @author lcl
* @create 2023/5/16
*/
@Data
public class CustomerDecisionChainSearchDto {
/**
* 客户id
*/
private String customerId;
}
package com.dsk.system.domain.customer.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @author lcl
* @create 2023/5/16
*/
@Data
public class CustomerSearchDto implements Serializable {
/**
* 企业名称
*/
private String companyName;
/**
* 用户id
*/
private Long userId;
}
package com.dsk.system.domain.customer.vo;
import lombok.Data;
/**
* @author lcl
* @create 2023/5/17
*/
@Data
public class CustomerListVo {
private String customerId;
/**
* jsk企业id
*/
private Integer companyId;
/**
* 客户名称(企业名称)
*/
private String companyName;
/**
* 合作项目
*/
private Integer cooperationProject;
/**
* 跟进项目
*/
private Integer followProject;
/**
* 储备项目
*/
private Integer reserveProject;
/**
* 法定代表人
*/
private String legalPerson;
/**
* 注册资本(字符串)
*/
private String registerCapitalStr;
/**
* 企业性质
*/
private String companyNature;
/**
* 企业级别
*/
private String companyLevel;
/**
* 信用等级
*/
private String creditLevel;
/**
* 上级公司
*/
private String superCompany;
/**
* 是否上市 0:否 1:是
*/
private Integer isOn;
/**
* 是否主要客户 0:否 1:是
*/
private Integer isMajor;
/**
* 发包属性
*/
private String companyAttribute;
/**
* 主要业务
*/
private String mainBusiness;
/**
* 经营范围
*/
private String businessScope;
/**
* 商务条件特点
*/
private String businessCharacteristic;
/**
* 决策链条
*/
private String decisionChain;
/**
* 招投标流程特点
*/
private String bidCharacteristic;
/**
* 履约阶段特点
*/
private String performanceCharacteristic;
/**
* 其它管理体系特点
*/
private String otherMsCharacteistic;
/**
* 跟进人
*/
private String followUser;
}
......@@ -2,13 +2,14 @@ package com.dsk.system.dskService;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.domain.model.EnterpriseBody;
import com.dsk.common.core.domain.model.*;
import com.dsk.common.utils.DskOpenApiUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
......@@ -26,8 +27,73 @@ public class EnterpriseService {
@Autowired
private DskOpenApiUtil dskOpenApiUtil;
public R infoHeader(EnterpriseBody body) throws Exception {
public R infoHeader(EnterpriseInfoHeaderBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/api/jsk/enterprise/infoHeader", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class);
}
public R statistic(EnterpriseStatisticBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/api/jsk/enterprise/statistic", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class);
}
public R bidDataGroup(EnterpriseBidDataGroupBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterprise/bidDataGroup", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class);
}
public R supplierPage(EnterpriseSupplierPageBody body) throws Exception {
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Api-Version", "1.0");
Map<String, Object> map = dskOpenApiUtil.requestBodyWithHeader("/api/jsk/enterpriseBusiness/selectPageSupplierInfo", BeanUtil.beanToMap(body, false, false), headerMap);
return BeanUtil.toBean(map, R.class);
}
public R projectTenderDataGroup(EnterpriseProjectTenderDataGroupBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterprise/projectTenderDataGroup", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class);
}
//todo 新数据,待入库
public R partners(EnterprisePartnersBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterprise/partners", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class);
}
public R investment(EnterpriseInvestmentBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterprise/investment", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class);
}
public R affiliates(EnterpriseAffiliatesBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterprise/affiliates", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class);
}
public R bidNoticePage(EnterpriseBidNoticePageBody body) throws Exception {
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Api-Version", "1.0");
Map<String, Object> map = dskOpenApiUtil.requestBodyWithHeader("/api/jsk/enterpriseBusiness/selectPageBidNoticeInfo", BeanUtil.beanToMap(body, false, false), headerMap);
return BeanUtil.toBean(map, R.class);
}
public R dynamicPage(EnterpriseDynamicPageBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/api/jsk/enterprise/dynamic", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class);
}
public R icInfo(EnterpriseIcInfoBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterprise/icInfo", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class);
}
public R changeInfo(EnterpriseChangeInfoBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterprise/changeInfo", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class);
}
public R keymembers(EnterpriseKeymembersBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterprise/keymembers", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class);
}
}
package com.dsk.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.system.domain.customer.CustomerDecisionChain;
import org.apache.ibatis.annotations.Mapper;
/**
* 客户决策链条(CustomerDecisionChain)表数据库访问层
*
* @author makejava
* @since 2023-05-16 15:33:46
*/
@Mapper
public interface CustomerDecisionChainMapper extends BaseMapper<CustomerDecisionChain> {
}
package com.dsk.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.system.domain.Customer;
import com.dsk.system.domain.customer.Customer;
import com.dsk.system.domain.customer.dto.CustomerSearchDto;
import com.dsk.system.domain.customer.vo.CustomerListVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
......@@ -14,5 +19,7 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CustomerMapper extends BaseMapper<Customer> {
List<CustomerListVo> selectList(@Param("dto") CustomerSearchDto dto);
}
package com.dsk.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.system.domain.customer.CustomerUser;
import org.apache.ibatis.annotations.Mapper;
/**
* 客户负责人表(Customer)表数据库访问层
*
* @author makejava
* @since 2023-05-16 09:28:00
*/
@Mapper
public interface CustomerUserMapper extends BaseMapper<CustomerUser> {
}
package com.dsk.system.service;
import com.dsk.common.core.domain.AjaxResult;
/**
* @ClassName EconomicService
* @Description 经济大全业务层
* @Author Dgm
* @Date 2023/5/18 10:17
* @Version 1.00
*/
public interface EconomicService {
/***
*@Description: 全国经济大全分页列表
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult nationalPage();
}
package com.dsk.system.service;
import com.dsk.system.domain.customer.CustomerDecisionChain;
import com.dsk.system.domain.customer.dto.CustomerDecisionChainSearchDto;
import java.util.List;
/**
* 客户决策链条(CustomerDecisionChain)表服务接口
*
* @author makejava
* @since 2023-05-16 15:33:45
*/
public interface ICustomerDecisionChainService {
/**
* 查询数据列表
*/
List<CustomerDecisionChain> selectList(CustomerDecisionChainSearchDto dto);
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
CustomerDecisionChain selectById(Long id);
/**
* 新增数据
*
* @param customerDecisionChain 实例对象
* @return 实例对象
*/
boolean insert(CustomerDecisionChain customerDecisionChain);
/**
* 修改数据
*
* @param customerDecisionChain 实例对象
* @return 实例对象
*/
boolean update(CustomerDecisionChain customerDecisionChain);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
boolean deleteById(Long id);
}
package com.dsk.system.service;
import com.dsk.system.domain.Customer;
import com.dsk.system.domain.customer.Customer;
import com.dsk.system.domain.customer.dto.CustomerSearchDto;
import com.dsk.system.domain.customer.vo.CustomerListVo;
import java.util.List;
......@@ -13,4 +14,10 @@ import java.util.List;
*/
public interface ICustomerService {
List<CustomerListVo> selectList(CustomerSearchDto dto);
boolean add(Customer customer);
boolean edit(Customer customer);
}
package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanException;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsk.common.utils.SecurityUtils;
import com.dsk.system.domain.customer.CustomerDecisionChain;
import com.dsk.system.domain.customer.dto.CustomerDecisionChainSearchDto;
import com.dsk.system.mapper.CustomerDecisionChainMapper;
import com.dsk.system.service.ICustomerDecisionChainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.List;
/**
* 客户决策链条(CustomerDecisionChain)表服务实现类
*
* @author makejava
* @since 2023-05-16 15:33:45
*/
@Slf4j
@Service
public class CustomerDecisionChainServiceImpl implements ICustomerDecisionChainService {
@Resource
private CustomerDecisionChainMapper baseMapper;
@Override
public List<CustomerDecisionChain> selectList(CustomerDecisionChainSearchDto dto) {
return baseMapper.selectList(Wrappers.<CustomerDecisionChain>lambdaQuery()
.eq(CustomerDecisionChain::getCustomerId,dto.getCustomerId()));
}
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
@Override
public CustomerDecisionChain selectById(Long id) {
return baseMapper.selectById(id);
}
/**
* 新增数据
*
* @param customerDecisionChain 实例对象
* @return 实例对象
*/
@Override
public boolean insert(CustomerDecisionChain customerDecisionChain) {
verifyParameter(customerDecisionChain);
return baseMapper.insert(customerDecisionChain) > 0;
}
/**
* 修改数据
*
* @param customerDecisionChain 实例对象
* @return 实例对象
*/
@Override
public boolean update(CustomerDecisionChain customerDecisionChain) {
if(ObjectUtils.isEmpty(customerDecisionChain.getId())) throw new BeanException("id不能为空!");
verifyParameter(customerDecisionChain);
return baseMapper.updateById(customerDecisionChain) > 0;
}
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
@Override
public boolean deleteById(Long id) {
return baseMapper.deleteById(id) > 0;
}
/**
* 参数验证
* @param customerDecisionChain
*/
private void verifyParameter(CustomerDecisionChain customerDecisionChain){
if(ObjectUtils.isEmpty(customerDecisionChain.getCustomerId())) throw new BeanException("客户id不能为空!");
customerDecisionChain.setUpdateId(SecurityUtils.getUserId());
customerDecisionChain.setUpdateBy(SecurityUtils.getLoginUser().getUser().getNickName());
}
}
package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanException;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.SecurityUtils;
import com.dsk.system.domain.customer.Customer;
import com.dsk.system.domain.customer.CustomerUser;
import com.dsk.system.domain.customer.dto.CustomerSearchDto;
import com.dsk.system.domain.customer.vo.CustomerListVo;
import com.dsk.system.mapper.CustomerMapper;
import com.dsk.system.mapper.CustomerUserMapper;
import com.dsk.system.service.ICustomerService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.List;
/**
* 客户信息表(Customer)表服务实现类
......@@ -16,6 +27,51 @@ import javax.annotation.Resource;
public class CustomerServiceImpl implements ICustomerService {
@Resource
private CustomerMapper customerMapper;
private CustomerMapper baseMapper;
@Resource
private CustomerUserMapper customerUserMapper;
@Override
public List<CustomerListVo> selectList(CustomerSearchDto dto) {
dto.setUserId(SecurityUtils.getUserId());
List<CustomerListVo> vos = baseMapper.selectList(dto);
for (CustomerListVo vo : vos) {
//TODO 客户项目相关统计
//合作项目
vo.setCooperationProject(1);
//跟进项目
vo.setFollowProject(1);
//储备项目
vo.setReserveProject(1);
}
return vos;
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean add(Customer customer) {
if (ObjectUtils.isEmpty(customer.getCompanyName())) throw new BeanException("企业名称不能为空");
final Long userId = SecurityUtils.getUserId();
customer.setCreateId(userId);
customer.setUpdateId(userId);
//TODO 查询企业id
customer.setCompanyId(0);
int i = baseMapper.insert(customer);
if (i == 0) throw new ServiceException("客户信息添加错误!");
int ui = customerUserMapper.insert(new CustomerUser(customer.getCustomerId(), userId));
if (ui == 0) throw new ServiceException("客户跟进人信息添加错误!");
return true;
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean edit(Customer customer) {
if (ObjectUtils.isEmpty(customer.getCompanyId())) throw new BeanException("客户id不能为空");
customer.setUpdateId(SecurityUtils.getUserId());
int u = baseMapper.updateById(customer);
return u != 0;
}
}
package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.system.service.EconomicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @ClassName EconomicServiceImpl
* @Description 经济大全实现
* @Author Dgm
* @Date 2023/5/18 10:23
* @Version
*/
@Service
public class EconomicServiceImpl implements EconomicService {
@Autowired
private DskOpenApiUtil dskOpenApiUtil;
@Override
public AjaxResult nationalPage() {
Map<String, Object> map = dskOpenApiUtil.requestBody("/xx", null);
return BeanUtil.toBean(map, AjaxResult.class);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.system.mapper.CustomerDecisionChainMapper">
<resultMap type="com.dsk.system.domain.customer.CustomerDecisionChain" id="CustomerDecisionChainMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="customerId" column="customer_id" jdbcType="VARCHAR"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="role" column="role" jdbcType="VARCHAR"/>
<result property="workUnit" column="work_unit" jdbcType="VARCHAR"/>
<result property="position" column="position" jdbcType="VARCHAR"/>
<result property="contactInformation" column="contact_information" jdbcType="VARCHAR"/>
<result property="remark" column="remark" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateId" column="update_id" jdbcType="INTEGER"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
</mapper>
......@@ -2,29 +2,19 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.system.mapper.CustomerMapper">
<resultMap type="com.dsk.system.domain.Customer" id="CustomerMap">
<result property="customerId" column="customer_id" jdbcType="VARCHAR"/>
<result property="companyId" column="company_id" jdbcType="INTEGER"/>
<result property="companyName" column="company_name" jdbcType="VARCHAR"/>
<result property="legalPerson" column="legal_person" jdbcType="VARCHAR"/>
<result property="registerCapitalStr" column="register_capital_str" jdbcType="VARCHAR"/>
<result property="registerCapital" column="register_capital" jdbcType="NUMERIC"/>
<result property="companyNature" column="company_nature" jdbcType="VARCHAR"/>
<result property="companyLevel" column="company_level" jdbcType="VARCHAR"/>
<result property="creditLevel" column="credit_level" jdbcType="VARCHAR"/>
<result property="superCompany" column="super_company" jdbcType="VARCHAR"/>
<result property="isOn" column="is_on" jdbcType="INTEGER"/>
<result property="isMajor" column="is_major" jdbcType="INTEGER"/>
<result property="companyAttribute" column="company_attribute" jdbcType="VARCHAR"/>
<result property="mainBusiness" column="main_business" jdbcType="VARCHAR"/>
<result property="businessScope" column="business_scope" jdbcType="VARCHAR"/>
<result property="lastFollowTime" column="last_follow_time" jdbcType="TIMESTAMP"/>
<result property="createId" column="create_id" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateId" column="update_id" jdbcType="INTEGER"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
<select id="selectList" resultType="com.dsk.system.domain.customer.vo.CustomerListVo">
select
ct.customer_id, ct.company_id, ct.company_name, ct.legal_person, ct.register_capital_str,
ct.register_capital, ct.company_nature, ct.company_level, ct.credit_level, ct.super_company,
ct.is_on, ct.is_major, ct.company_attribute, ct.main_business, ct.business_scope,
ct.business_characteristic, ct.decision_chain, ct.bid_characteristic, ct.performance_characteristic,
ct.other_ms_characteistic, u.nick_name followUser
from customer ct
join customer_user ctu on ct.customer_id = ctu.customer_id
join sys_user u on ctu.user_id = u.user_id
where ctu.user_id = #{dto.userId}
<if test="dto.companyName != null and dto.companyName != '' "> and ct.company_name like concat('%',#{dto.companyName},'%')</if>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.system.mapper.CustomerUserMapper">
</mapper>
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