Commit 3c3ed822 authored by yht15023815643's avatar yht15023815643

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys...

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys into V20231129-中建一局二公司
parents 3d8e7977 5db9ab86
......@@ -142,6 +142,7 @@ security:
# actuator 监控配置
- /api/**
- /actuator/**
- /monitor/push/insert/**
# 多租户配置
......@@ -162,6 +163,11 @@ tenant:
- sys_user_file_record
- sys_oss_config
- sys_region
- d_customer
- d_project
- d_subcontract
- dim_area
- biz_dict_data
# MyBatisPlus配置
......
......@@ -178,4 +178,17 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
int year = localDate.getYear();
return year;
}
/***
*@Description: 获取当前 小时
*@Param:
*@return: int
*@Author: Dgm
*@date: 2023/11/29 16:05
*/
public static int getHour() {
LocalTime localDate = LocalTime.now();
int year = localDate.getHour();
return year;
}
}
......@@ -6,10 +6,7 @@ import lombok.NoArgsConstructor;
import org.redisson.api.*;
import java.time.Duration;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
......@@ -486,4 +483,17 @@ public class RedisUtils {
RKeys rKeys = CLIENT.getKeys();
return rKeys.countExists(key) > 0;
}
/***
*@Description: 锁-释放
*@Param:
*@return: boolean
*@Author: Dgm
*@date: 2022/6/15 9:41
*/
public static void hasValueDelete (String lockKey, String value) {
if (value.contentEquals(Objects.requireNonNull(CLIENT.getBucket(lockKey).get()+""))) {
CLIENT.getBucket(lockKey).delete();
}
}
}
package com.dsk.cscec.controller;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.R;
import com.dsk.cscec.domain.TreeSelect;
import com.dsk.cscec.domain.bo.BizDictDataBo;
import com.dsk.cscec.service.IBizDictDataService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 字典相关
*
* @author
* @since 2023-12-10
*/
@RequiredArgsConstructor
@RestController
@RequestMapping("/bizDictData")
public class BizDictDataController extends BaseController {
/**
* 服务对象
*/
private final IBizDictDataService iBizDictDataService;
/**
* 查询业务数据字典树形列表
*
* @return
*/
@GetMapping("/tree")
public R<List<TreeSelect>> tree(@Validated BizDictDataBo bo) {
return R.ok(iBizDictDataService.buildDeptTreeSelect(bo));
}
}
package com.dsk.cscec.controller;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.bo.CustomerInfoBo;
import com.dsk.cscec.domain.vo.CustomerInfoVo;
import com.dsk.cscec.service.ICustomerInfoService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 供应商相关
*
* @author
* @since 2023-12-10
*/
@RequiredArgsConstructor
@RestController
@RequestMapping("/customerInfo")
public class CustomerInfoController extends BaseController {
/**
* 服务对象
*/
private final ICustomerInfoService iCustomerInfoService;
/**
* 供应商分类列表
*/
@PostMapping("/list")
public TableDataInfo<CustomerInfoVo> list(@Validated @RequestBody CustomerInfoBo bo,@RequestBody PageQuery query) {
return iCustomerInfoService.queryPageList(bo, query);
}
}
package com.dsk.cscec.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R;
......@@ -10,16 +8,8 @@ import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.DCustomer;
import com.dsk.cscec.domain.bo.DCustomerSearchBo;
import com.dsk.cscec.service.IDCustomerService;
import com.dsk.system.domain.SysDept;
import com.dsk.system.domain.vo.SysDeptVo;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import org.springframework.web.bind.annotation.*;
/**
* 组织维表(DCustomer)表控制层
......@@ -39,8 +29,8 @@ public class DCustomerController extends BaseController {
/**
* 供应商总台账筛选
*/
@GetMapping("/all/searchList")
public TableDataInfo<DCustomer> allSearchList(DCustomerSearchBo bo, PageQuery query) {
@PostMapping("/all/searchList")
public TableDataInfo<DCustomer> allSearchList(@RequestBody DCustomerSearchBo bo, PageQuery query) {
return baseService.allSearchList(bo,query);
}
......@@ -49,7 +39,7 @@ public class DCustomerController extends BaseController {
*/
@GetMapping("/info/{customerKey}")
public R<DCustomer> info(@PathVariable String customerKey) {
return R.ok(baseService.info(customerKey));
return R.ok(baseService.getById(customerKey));
}
......
package com.dsk.cscec.controller;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.R;
import com.dsk.cscec.domain.vo.RegionVo;
import com.dsk.cscec.service.IDimAreaService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* (DimArea)表控制层
*
* @author lcl
* @since 2023-12-13 13:45:22
*/
@RestController
@RequestMapping("/area")
public class DimAreaController extends BaseController {
/**
* 服务对象
*/
@Resource
private IDimAreaService baseService;
/**
* 获取地区树
*/
@GetMapping("/all")
public R<List<RegionVo>> allArea(){
return R.ok(baseService.allArea());
}
}
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 业务数据字典对象 biz_dict_data
*
* @author ruoyi
* @date 2021-11-08
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@TableName("biz_dict_data")
public class BizDictData implements Serializable {
private static final long serialVersionUID=1L;
/**
* 编码
*/
@TableId(value = "id")
private String id;
private String ancestors;
/**
* 字典编码
*/
private String code;
/**
* 字典名称
*/
private String name;
/**
* 系统字典表 biz_dict_data_type
*/
private String type;
/**
* 字典父级id
*/
private String parentId;
@TableField(exist = false)
private String parentName;
/**
* 备注
*/
private String remark;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
@TableField(exist = false)
private List<BizDictData> children = new ArrayList<BizDictData>();
}
......@@ -541,5 +541,10 @@ public class DCustomer implements Serializable {
*/
@TableField(exist = false)
private Integer projectCooperationCount;
/**
* jsk企业id
*/
@TableField(exist = false)
private Integer companyId;
}
package com.dsk.cscec.domain;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
/**
* 分包分供合同(DSubcontract)表实体类
*
* @author lcl
* @since 2023-12-11 15:31:44
*/
@Data
public class DSubcontract implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 分包合同主键
*/
private Long subcontractKey;
/**
* 分包合同ID
*/
private String subcontractId;
/**
* 分包合同编码
*/
private String subcontractCode;
/**
* 分包合同名称
*/
private String subcontractName;
/**
* 财务一体化分包合同编码
*/
private String fipSubcontractCode;
/**
* 财务一体化分包合同名称
*/
private String fipSubcontractName;
/**
* 业务类型
*/
private String contractScope;
/**
* 合同类型
*/
private String contractType;
/**
* 项目ID
*/
private String projectId;
/**
* 项目编码
*/
private String projectCode;
/**
* 项目名称
*/
private String projectName;
/**
* 分包合同金额
*/
private Double subcontractValue;
/**
* 分包合同不含税金额
*/
private Double subcontractValueExcl;
/**
* 分包合同税额
*/
private Double subcontractTaxValue;
/**
* 签订单位ID
*/
private String signOrgId;
/**
* 签订单位名称
*/
private String signOrgName;
/**
* 合同签订日期
*/
private String signDate;
/**
* 合同盖章日期
*/
private String stampDate;
/**
* 合同返回日期
*/
private String returnDate;
/**
* 交底日期
*/
private String noticeDate;
/**
* 实际完成时间
*/
private String completeDate;
/**
* 合同开始日期
*/
private String subcontractStartDate;
/**
* 合同结束日期
*/
private String subcontractEndDate;
/**
* 是否甲指
*/
private String isownerappoint;
/**
* 施工专业ID
*/
private String specialtyId;
/**
* 施工专业
*/
private String specialtyType;
/**
* 履约状态
*/
private String contractState;
/**
* 供应商ID
*/
private String customerId;
/**
* 供应商名称
*/
private String customerName;
/**
* 客商类型
*/
private String customerType;
/**
* 分包范围
*/
private String jobScope;
/**
* 付款方式
*/
private String payType;
/**
* 付款比例是否固定
*/
private Double isfixedpayratio;
/**
* 过程中付款比例
*/
private Double processPayRatio;
/**
* 完工后付款比例
*/
private Double completePayRatio;
/**
* 结算后付款比例
*/
private Double settlePayRatio;
/**
* 保修金比例
*/
private Double warrantyGoldRatio;
/**
* 分包合同应付金额
*/
private Double subcontractPayableValue;
/**
* 分包合同已付金额
*/
private Double subcontractPaidValue;
/**
* 预付款
*/
private Double prepayValue;
/**
* 已付款
*/
private Double paidValue;
/**
* 垫付款
*/
private Double advanceValue;
/**
* 结算方式
*/
private String settleType;
/**
* 结算价
*/
private Double settleValue;
/**
* 人工费
*/
private Double laborFee;
/**
* 备注
*/
private String remark;
/**
* 合同分类
*/
private String contractClass;
/**
* 成本科目ID
*/
private String costSubjectId;
/**
* 成本科目名称
*/
private String costSubjectName;
/**
* 成本科目全路径名称
*/
private String costSubjectFullname;
/**
* 执行备案
*/
private String contractTextType;
/**
* 税率
*/
private Double taxRate;
/**
* 盖章份数
*/
private Double noOfStamp;
/**
* 盖章明晰
*/
private String signRemark;
/**
* 返回明晰
*/
private String issign;
/**
* 承包类型
*/
private String contractForm;
/**
* 是否为一局内部公司
*/
private String iscscec1bcompany;
/**
* 是否主体结构分包合同
*/
private String isfirststruct;
/**
* 建筑面积
*/
private Double areaSum;
/**
* 锁定金额
*/
private Double lockValue;
/**
* 战采资源级别
*/
private String gpResLevel;
/**
* 战采资源类别
*/
private String gpResScope;
/**
* 战采资源品类
*/
private String gpResCategory;
/**
* 战略采购供应商年度
*/
private Double gpSupplierYear;
/**
* 是否集中采购(是/否)
*/
private String isGp;
/**
* 战采管理要求
*/
private String gpApplication;
/**
* 合同是否执行战采价格
*/
private String isUseGpprice;
/**
* 战采供应商ID
*/
private String fgpcustomerid;
/**
* 分包合同版本
*/
private Double subcontractVersion;
/**
* 流程状态
*/
private String fbizstatename;
/**
* 流程状态
*/
private String fbizstate;
/**
* 材料类型
*/
private String materialType;
/**
* 数据加载时间
*/
private String loadTime;
}
package com.dsk.cscec.domain;
import java.io.Serializable;
import lombok.Data;
/**
* (DimArea)表实体类
*
* @author lcl
* @since 2023-12-13 13:45:22
*/
@Data
public class DimArea implements Serializable {
private static final long serialVersionUID = 1L;
private Integer areaKey;
private String areaCode;
private String areaName;
/**
* 地区
*/
private String areaName1;
/**
* 省
*/
private String areaName2;
/**
* 省简写
*/
private String areaAbbrName2;
private String areaName3;
private Integer levelNo;
private String isleaf;
private String isvalid;
private String remark;
private String areaId;
private String parentId;
private String loadTime;
}
package com.dsk.cscec.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
import java.util.stream.Collectors;
/**
* Treeselect树结构实体类
*
* @author ruoyi
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class TreeSelect implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 节点ID
*/
private String id;
/**
* 节点名称
*/
private String label;
/**
* 子节点
*/
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List<TreeSelect> children;
public TreeSelect(BizDictData dept) {
this.id = dept.getId();
this.label = dept.getName();
this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
}
}
package com.dsk.cscec.domain.bo;
import com.dsk.common.core.domain.BaseEntity;
import com.dsk.common.core.validate.AddGroup;
import com.dsk.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 业务数据字典业务对象 biz_dict_data
*
* @author ruoyi
* @date 2021-11-08
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class BizDictDataBo extends BaseEntity {
/**
* 编码
*/
@NotNull(message = "编码不能为空", groups = { EditGroup.class })
private String id;
/**
* 字典编码
*/
private String code;
/**
* 字典名称
*/
@NotBlank(message = "字典名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 系统字典表 biz_dict_data_type
*/
@NotBlank(message = "系统字典表 biz_dict_data_type不能为空", groups = { AddGroup.class, EditGroup.class })
private String type;
/**
* 字典父级id
*/
@NotNull(message = "字典父级id不能为空", groups = { AddGroup.class, EditGroup.class })
private String parentId;
/**
* 分页大小
*/
private Integer pageSize;
/**
* 当前页数
*/
private Integer pageNum;
/**
* 排序列
*/
private String orderByColumn;
/**
* 排序的方向desc或者asc
*/
private String isAsc;
/**
* 祖级列表
*/
private String ancestors;
}
package com.dsk.cscec.domain.bo;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotEmpty;
import java.util.Date;
import java.util.List;
/**
* 供应商分类查询
*
* @author
* @since 2023-12-10
*/
@Data
public class CustomerInfoBo extends BaseEntity {
/**
* 供应商类别(分供,劳务分包,专业分包,租赁,劳务分包队伍)
*/
@NotEmpty(message = "供应商类别不能为空")
private String customerClass;
/**
* 劳务队伍标志(Y N)
*/
private String serviceTeamLogo;
/**
* 供应商名称
*/
private String customerName;
/**
* 注册地区域(东北地区,华东地区,华中地区,华北地区,华南地区,西北地区,西南地区)
*/
private List<String> registerRegion;
/**
* 省份
*/
private List<String> registerProvince;
/**
* 城市
*/
private List<String> registerCity;
/**
* 供应商状态(不合格,优质,合格,移出,预警)
*/
private List<String> customerState;
/**
* 资质等级(一级,二级,三级,不分等级,特级)
*/
private List<String> credential;
/**
* 专业类别id
*/
private List<String> groupSpecialtyId;
/**
* 集团专业类别
*/
private String groupSpecialty;
/**
* 考评等级(A,B,C,Z)
*/
private List<String> creditLevel;
/**
* 纳税人身份(一般纳税人,小规模纳税人)
*/
private List<String> paytaxType;
/**
* 纳税人税率(免税,3%,6%,11%,17%)
*/
private List<String> taxRate;
/**
* 准入时间开始
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date approveDate2Start;
/**
* 准入时间结束
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date approveDate2End;
/**
* 队长名称
*/
private String leaderName;
}
package com.dsk.cscec.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import lombok.Data;
import java.util.Date;
/**
* 供应商分类查询
*
* @author
* @since 2023-12-10
*/
@Data
@ExcelIgnoreUnannotated
public class CustomerInfoVo {
private static final long serialVersionUID = 1L;
/**
* 客商主键
*/
private Long customerKey;
/**
* ipm供应商id
*/
private String customerId;
/**
* 供应商编号
*/
private String customerCode;
/**
* 供应商名称
*/
private String customerName;
/**
* 供应商状态
*/
private String customerState;
/**
* 推荐公司ID
*/
private String recommendOrgId;
/**
* 推荐公司
*/
private String recommendOrg;
/**
* 注册地区域
*/
private String registerRegion;
/**
* 省份
*/
private String registerProvince;
/**
* 城市
*/
private String registerCity;
/**
* 集团专业类别
*/
private String groupSpecialty;
/**
* 法人代表
*/
private String representative;
/**
* 纳税人身份
*/
private String paytaxType;
/**
* 纳税人税率
*/
private String taxRate;
/**
* 施工承包范围
*/
private String constructJobScope;
/**
* 资质等级
*/
private String credential;
/**
* 注册资金
*/
private Double registerCapital;
/**
* 联系人
*/
private String contactPerson;
/**
* 联系人电话
*/
private String contactPhone;
/**
* 准入时间
*/
private Date approveDate2;
/**
* 供应商类别
*/
private String customerClass;
/**
* 考评等级
*/
private String creditLevel;
/**
* 二级市场企业编码
*/
private String secondaryCode;
/**
* 统一社会信用代码/营业执照号码
*/
private String unifySocialCode;
/**
* 队长名称
*/
private String leaderName;
/**
* 劳务队长身份证号
*/
private String laborCaptainIdcard;
/**
* 劳务队长联系电话
*/
private String laborCaptainPhone;
/**
* 队伍规模人数
*/
private Double serviceTeamPersonnum;
/**
* 专业特长
*/
private String serviceTeamSpeciality;
/**
* 公司合作数量
*/
private Integer enterpriseCooperationCount;
/**
* 合作项目数量
*/
private Integer projectCooperationCount;
/**
* 资源平台分类
*/
}
package com.dsk.cscec.domain.vo;
import lombok.Data;
import java.util.List;
/**
* @Author lcl
* @Data 2023/12/13 14:14
*/
@Data
public class RegionVo {
String value;
List<RegionVo> children;
}
package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.BizDictData;
import com.dsk.cscec.domain.bo.BizDictDataBo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 业务数据字典Mapper接口
*
* @author ruoyi
* @date 2021-11-08
*/
public interface BizDictDataMapper extends BaseMapper<BizDictData> {
public List<Long> findIdByName(String name);
BizDictData findByNameAndType(@Param("name") String name, @Param("type") String type);
int countByName(@Param("name") String name, @Param("type") String type);
List<BizDictData> exportListVo(@Param("bo") BizDictDataBo bo);
/**
* 根据ID查询相关数据
*
* @param id
* @return 查询到的数据
*/
BizDictData queryByID(Long id);
}
......@@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsk.cscec.domain.DCustomer;
import com.dsk.cscec.domain.bo.CustomerInfoBo;
import com.dsk.cscec.domain.bo.DCustomerSearchBo;
import com.dsk.cscec.domain.vo.CustomerInfoVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -20,5 +22,13 @@ public interface DCustomerMapper extends BaseMapper<DCustomer> {
Page<DCustomer> allSearchList(IPage<DCustomerSearchBo> build, @Param("bo") DCustomerSearchBo bo);
/**
* 分类查询供应商列表
* @param build
* @param bo
* @return
*/
Page<CustomerInfoVo> queryListByType(IPage<CustomerInfoBo> build, @Param("bo") CustomerInfoBo bo);
}
package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.DSubcontract;
/**
* 分包分供合同(DSubcontract)表数据库访问层
*
* @author lcl
* @since 2023-12-11 15:31:44
*/
public interface DSubcontractMapper extends BaseMapper<DSubcontract> {
Integer selectEnterpriseCountByCustomerId(String customerId);
Integer selectProjectCountByCustomerId(String customerId);
}
package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.DimArea;
/**
* (DimArea)表数据库访问层
*
* @author lcl
* @since 2023-12-13 13:45:22
*/
public interface DimAreaMapper extends BaseMapper<DimArea> {
}
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.BizDictData;
import com.dsk.cscec.domain.TreeSelect;
import com.dsk.cscec.domain.bo.BizDictDataBo;
import java.util.List;
/**
* 业务数据字典Service接口
*
* @author ruoyi
* @date 2021-11-08
*/
public interface IBizDictDataService extends IService<BizDictData> {
/**
* 查询单个
*
* @return
*/
BizDictData queryById(Long id);
/**
* 查询列表
*/
TableDataInfo<BizDictData> queryPageList(BizDictDataBo bo, PageQuery query);
/**
* 查询列表
*/
List<BizDictData> queryList(BizDictDataBo bo);
String importDict(List<BizDictData> dictList, String type, String operName);
List<TreeSelect> buildDeptTreeSelect(BizDictDataBo bo);
}
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.DCustomer;
import com.dsk.cscec.domain.bo.CustomerInfoBo;
import com.dsk.cscec.domain.vo.CustomerInfoVo;
/**
* 组织维表(DCustomer)表服务接口
*
* @author
* @since 2023-12-10
*/
public interface ICustomerInfoService extends IService<DCustomer> {
TableDataInfo<CustomerInfoVo> queryPageList(CustomerInfoBo bo, PageQuery query);
}
......@@ -16,7 +16,5 @@ public interface IDCustomerService extends IService<DCustomer> {
TableDataInfo<DCustomer> allSearchList(DCustomerSearchBo bo, PageQuery query);
DCustomer info(String customerKey);
}
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.DimArea;
import com.dsk.cscec.domain.vo.RegionVo;
import java.util.List;
/**
* (DimArea)表服务接口
*
* @author lcl
* @since 2023-12-13 13:45:22
*/
public interface IDimAreaService extends IService<DimArea> {
List<RegionVo> allArea();
}
package com.dsk.cscec.service.impl;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.StringUtils;
import com.dsk.cscec.domain.BizDictData;
import com.dsk.cscec.domain.TreeSelect;
import com.dsk.cscec.domain.bo.BizDictDataBo;
import com.dsk.cscec.mapper.BizDictDataMapper;
import com.dsk.cscec.service.IBizDictDataService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 业务数据字典Service业务层处理
*
* @author ruoyi
* @date 2021-11-08
*/
@Slf4j
@Service
public class BizDictDataServiceImpl extends ServiceImpl<BizDictDataMapper, BizDictData> implements IBizDictDataService {
@Override
public BizDictData queryById(Long id) {
return baseMapper.queryByID(id);
}
@Override
public TableDataInfo<BizDictData> queryPageList(BizDictDataBo bo, PageQuery query) {
Page<BizDictData> result = baseMapper.selectPage(query.build(), buildQueryWrapper(bo));
return TableDataInfo.build(result);
}
@Override
public List<BizDictData> queryList(BizDictDataBo bo) {
return baseMapper.selectList(buildQueryWrapper(bo));
}
private LambdaQueryWrapper<BizDictData> buildQueryWrapper(BizDictDataBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<BizDictData> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getCode()), BizDictData::getCode, bo.getCode());
lqw.like(StringUtils.isNotBlank(bo.getName()), BizDictData::getName, bo.getName());
lqw.eq(StringUtils.isNotBlank(bo.getType()), BizDictData::getType, bo.getType());
lqw.eq(bo.getParentId() != null, BizDictData::getParentId, bo.getParentId());
return lqw;
}
/**
* 保存前的数据校验
*
* @param entity 实体类数据
*/
private void validEntityBeforeSave(BizDictData entity) {
//TODO 做一些数据校验,如唯一约束
//code唯一校验
if (StringUtils.isNotBlank(entity.getCode())) {
LambdaQueryWrapper<BizDictData> lqw = Wrappers.lambdaQuery();
lqw.eq(BizDictData::getType, entity.getType());
lqw.eq(BizDictData::getCode, entity.getCode());
lqw.ne(ObjectUtil.isNotNull(entity.getId()), BizDictData::getId, entity.getId());
List<BizDictData> dictDataList = baseMapper.selectList(lqw);
if (CollectionUtils.isNotEmpty(dictDataList)) {
Assert.isTrue(false, "编码 " + entity.getCode() + " 已存在");
}
}
}
public List<BizDictData> buildDeptTree(List<BizDictData> depts) {
List<BizDictData> returnList = new ArrayList<BizDictData>();
List<String> tempList = new ArrayList<String>();
for (BizDictData dept : depts) {
tempList.add(dept.getId());
}
for (BizDictData dept : depts) {
// 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(dept.getParentId())) {
recursionFn(depts, dept);
returnList.add(dept);
}
}
if (returnList.isEmpty()) {
returnList = depts;
}
return returnList;
}
/**
* 递归列表
*/
private void recursionFn(List<BizDictData> list, BizDictData t) {
// 得到子节点列表
List<BizDictData> childList = getChildList(list, t);
t.setChildren(childList);
for (BizDictData tChild : childList) {
if (hasChild(list, tChild)) {
recursionFn(list, tChild);
}
}
}
/**
* 得到子节点列表
*/
private List<BizDictData> getChildList(List<BizDictData> list, BizDictData t) {
List<BizDictData> tlist = new ArrayList<BizDictData>();
for (BizDictData n : list) {
if (ObjectUtil.isNotNull(n.getParentId()) && n.getParentId().equals(t.getId())) {
tlist.add(n);
}
}
return tlist;
}
/**
* 判断是否有子节点
*/
private boolean hasChild(List<BizDictData> list, BizDictData t) {
return getChildList(list, t).size() > 0;
}
@Override
public String importDict(List<BizDictData> dictList, String type, String operName) {
int successNum = 0;
int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
for (BizDictData dictData : dictList) {
try {
Assert.notNull(dictData.getName(), "字典名称不能为空");
dictData.setType(type);
//查询编码是否重复
validEntityBeforeSave(dictData);
//查询名称是否重复
Assert.isFalse(baseMapper.countByName(dictData.getName(), type) != 0, "字典名称已存在");
//查询是否有父级
if (StrUtil.isNotBlank(dictData.getParentName())) {
BizDictData bizDictData = baseMapper.findByNameAndType(dictData.getParentName(), type);
if (bizDictData != null) {
dictData.setParentId(bizDictData.getId());
dictData.setAncestors(bizDictData.getAncestors() + "," + bizDictData.getId());
} else {
// bizDictData = new BizDictData();
// bizDictData.setName(dictData.getParentName());
// bizDictData.setType(type);
// this.save(bizDictData);
// dictData.setParentId(bizDictData.getId());
Assert.isTrue(false, "父级 " + dictData.getParentName() + " 不存在");
}
} else {
dictData.setParentId("0");
}
this.save(dictData);
successNum++;
successMsg.append("<br/>" + successNum + "、字典 " + dictData.getName() + " 导入成功");
} catch (Exception e) {
failureNum++;
String msg = "<br/>" + failureNum + "、字典 " + dictData.getName() + " 导入失败:";
failureMsg.append(msg + e.getMessage());
log.error("BizDictDataServiceImpl.importDict() error:" + msg, e);
}
}
if (failureNum > 0) {
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
} else {
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}
@Override
public List<TreeSelect> buildDeptTreeSelect(BizDictDataBo bo) {
List<BizDictData> list = baseMapper.selectList(buildQueryWrapper(bo));
List<BizDictData> deptTrees = buildDeptTree(list);
return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
}
}
package com.dsk.cscec.service.impl;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.DCustomer;
import com.dsk.cscec.domain.bo.CustomerInfoBo;
import com.dsk.cscec.domain.vo.CustomerInfoVo;
import com.dsk.cscec.mapper.DCustomerMapper;
import com.dsk.cscec.mapper.DSubcontractMapper;
import com.dsk.cscec.service.ICustomerInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 组织维表(DCustomer)表服务实现类
*
* @author
* @since 2023-12-10
*/
@Service
public class CustomerInfoServiceImpl extends ServiceImpl<DCustomerMapper, DCustomer> implements ICustomerInfoService {
@Autowired
private DSubcontractMapper subcontractMapper;
@Override
public TableDataInfo<CustomerInfoVo> queryPageList(CustomerInfoBo bo, PageQuery query) {
if("劳务分包".equals(bo.getCustomerClass())){
bo.setServiceTeamLogo("N");
}
if("劳务分包队伍".equals(bo.getCustomerClass())){
bo.setCustomerClass("劳务分包");
bo.setServiceTeamLogo("Y");
}
Page<CustomerInfoVo> page = baseMapper.queryListByType(query.build(), bo);
if (CollectionUtils.isNotEmpty(page.getRecords())) {
for (CustomerInfoVo customerInfoVo : page.getRecords()) {
//公司合作数量
customerInfoVo.setEnterpriseCooperationCount(subcontractMapper.selectEnterpriseCountByCustomerId(customerInfoVo.getCustomerId()));
//项目合作数量
customerInfoVo.setProjectCooperationCount(subcontractMapper.selectProjectCountByCustomerId(customerInfoVo.getCustomerId()));
}
}
return TableDataInfo.build(page);
}
}
package com.dsk.cscec.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.DCustomer;
import com.dsk.cscec.domain.bo.DCustomerSearchBo;
import com.dsk.cscec.mapper.DCustomerMapper;
import com.dsk.cscec.domain.DCustomer;
import com.dsk.cscec.mapper.DSubcontractMapper;
import com.dsk.cscec.service.IDCustomerService;
import com.dsk.search.service.BusinessOpportunityRadarService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 组织维表(DCustomer)表服务实现类
......@@ -21,27 +29,40 @@ import java.util.List;
* @author lcl
* @since 2023-12-08 14:57:26
*/
@Slf4j
@Service
public class DCustomerServiceImpl extends ServiceImpl<DCustomerMapper, DCustomer> implements IDCustomerService {
@Resource
private DSubcontractMapper subcontractMapper;
@Autowired
private BusinessOpportunityRadarService opportunityRadarService;
@Override
public TableDataInfo<DCustomer> allSearchList(DCustomerSearchBo bo, PageQuery query) {
dealWithCustomerClass(bo);
Page<DCustomer> page = baseMapper.allSearchList(query.build(), bo);
if (CollectionUtils.isNotEmpty(page.getRecords())) {
for (DCustomer customer : page.getRecords()) {
//企业合作数量
customer.setEnterpriseCooperationCount(subcontractMapper.selectEnterpriseCountByCustomerId(customer.getCustomerId()));
//项目合作数量
customer.setProjectCooperationCount(subcontractMapper.selectProjectCountByCustomerId(customer.getCustomerId()));
try {
Map<String, Object> map = opportunityRadarService.enterpriseByName(customer.getCustomerName());
if (!ObjectUtils.isEmpty(map.get("data"))) {
Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
Integer companyId = MapUtil.getInt(data, "jskEid");
customer.setCompanyId(companyId);
}
}catch (Exception e){
//
}
}
}
return TableDataInfo.build(page);
}
@Override
public DCustomer info(String customerKey) {
return baseMapper.selectById(customerKey);
}
private void dealWithCustomerClass(DCustomerSearchBo bo) {
if (!ObjectUtils.isEmpty(bo.getCustomerClass())) {
List<String> list = new ArrayList<>();
......@@ -58,11 +79,19 @@ public class DCustomerServiceImpl extends ServiceImpl<DCustomerMapper, DCustomer
list.add("租赁");
break;
case "劳务分包":
if(isTeam == null) isTeam = 0;
if(isTeam == null){
isTeam = 0;
}else if(isTeam == 1) {
isTeam = null;
}
list.add("劳务分包");
break;
case "劳务队伍":
if(isTeam == null) isTeam = 1;
if(isTeam == null) {
isTeam = 1;
}else if(isTeam == 0) {
isTeam = null;
}
list.add("劳务分包");
break;
default:
......
package com.dsk.cscec.service.impl;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.constant.CacheNames;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.domain.entity.SysDictData;
import com.dsk.cscec.domain.vo.RegionVo;
import com.dsk.cscec.mapper.DimAreaMapper;
import com.dsk.cscec.domain.DimArea;
import com.dsk.cscec.service.IDimAreaService;
import com.dsk.system.service.ISysDictDataService;
import com.dsk.system.service.ISysDictTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* (DimArea)表服务实现类
*
* @author lcl
* @since 2023-12-13 13:45:22
*/
@Service
public class DimAreaServiceImpl extends ServiceImpl<DimAreaMapper, DimArea> implements IDimAreaService {
@Autowired
private ISysDictTypeService sysDictTypeService;
private static final String AREA_TYPE = "arealist";
// @Cacheable(cacheNames = "", key = "")
@Override
public List<RegionVo> allArea() {
List<RegionVo> vos = new ArrayList<>();
//区域
List<SysDictData> sysDictData = sysDictTypeService.selectDictDataByType(AREA_TYPE);
if(CollectionUtils.isNotEmpty(sysDictData)){
for (SysDictData data : sysDictData) {
RegionVo regionVo = new RegionVo();
regionVo.setValue(data.getDictValue());
List<RegionVo> provinceVos = new ArrayList<>();
//省
List<Object> provinces = baseMapper.selectObjs(Wrappers.<DimArea>lambdaQuery()
.select(DimArea::getAreaName2)
.eq(DimArea::getAreaName1, data.getDictValue())
.ne(DimArea::getAreaName2, data.getDictValue())
.groupBy(DimArea::getAreaName2));
if(CollectionUtils.isNotEmpty(provinces)){
for (Object province : provinces) {
RegionVo provinceVo = new RegionVo();
provinceVo.setValue(String.valueOf(province));
List<RegionVo> cityVos = new ArrayList<>();
//市
List<Object> citys = baseMapper.selectObjs(Wrappers.<DimArea>lambdaQuery()
.select(DimArea::getAreaName3)
.eq(DimArea::getAreaName2, provinceVo.getValue())
.ne(DimArea::getAreaName3, provinceVo.getValue())
.groupBy(DimArea::getAreaName3));
if(CollectionUtils.isNotEmpty(citys)){
for (Object city : citys) {
RegionVo cityVo = new RegionVo();
cityVo.setValue(String.valueOf(city));
cityVos.add(cityVo);
}
}
provinceVo.setChildren(cityVos);
provinceVos.add(provinceVo);
}
}
regionVo.setChildren(provinceVos);
vos.add(regionVo);
}
}
return vos;
}
}
package com.dsk.jsk.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName PartnershipProjectSource
* @Description
* @Author Dgm
* @Date 2023/12/11 20:35
* @Version
*/
@Slf4j
@RestController
@RequestMapping(value = "/enterpriseCredit")
public class PartnershipProjectSource {
}
package com.dsk.jsk.domain.bo;
import java.util.Date;
/**
* @ClassName PartnershipProjectSource
* @Description
* @Author Dgm
* @Date 2023/12/11 20:37
* @Version
*/
public class JskCompanyRelationTableV1 {
/**
*
*/
private String uuid;
/**
* 项目唯一标识
*/
private String partnerRelationshipUuid;
/**
* 企业Id
*/
private Long companyId;
/**
* 企业名称
*/
private String companyName;
/**
* 企业角色
*/
private String companyRole;
/**
* 乙方企业名称
*/
private String counterpartCompanyName;
/**
* 乙方企业id
*/
private String counterpartCompanyId;
/**
* 乙方企业角色
*/
private String counterpartCompanyRole;
/**
* 工程名称
*/
private String project;
/**
*
*/
private String projectMd5;
/**
* 项目类型
*/
private String buildingProjectType;
/**
* 咨询机构业务类型
*/
private String enquiryAgencyBusinessType;
/**
* 公布日期
*/
private Date contractStartDate;
/**
* 本次合作合同金额(万元)
*/
private String contractAmount;
/**
* 币种
*/
private String currency;
/**
* 省份
*/
private String province;
/**
* 省Id
*/
private String provinceId;
/**
* 市
*/
private String city;
/**
* 市Id
*/
private String cityId;
/**
* 区
*/
private String area;
/**
* 区Id
*/
private String areaId;
/**
* 数据来源id
*/
private String isDeal;
}
package com.dsk.jsk.domain.bo;
/**
* @ClassName PartnershipProjectSource
* @Description
* @Author Dgm
* @Date 2023/12/11 20:37
* @Version
*/
public class JskPartnershipProjectSourceV1 {
/**
*
*/
private String uuid;
/**
* 项目唯一标识
*/
private String partnerRelationshipUuid;
/**
* 工程名称
*/
private String projectName;
/**
* 处理后项目名称
*/
private String dealProjectName;
/**
* 数据来源
*/
private String dataSource;
/**
* 数据来源id
*/
private String dataSourceId;
/**
*
*/
private String isDeal;
}
package com.dsk.monitor.controlelr;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.monitor.domain.vo.*;
import com.dsk.monitor.service.MonitorService;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
/**
* @ClassName MonitorController
* @Description 监控企业相关
* @Author Dgm
* @Date 2023/12/8 10:19
* @Version 1.0.0
*/
@RestController
@RequestMapping("/monitor")
public class MonitorController {
@Resource
private MonitorService monitorService;
/***
*@Description: 同步推送数据入库
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/12/9 9:29
*/
@PostMapping(value = "push/insert")
public R insert(@RequestBody PushMonitorInfoVo pushMonitorInfoVo) {
return monitorService.insert(pushMonitorInfoVo);
}
/***
*@Description: 监控维度下拉选择
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/12/9 9:29
*/
@GetMapping(value = "push/rulesSelect")
public R rulesSelect(PushMonitorCompanyAddVo addVo) {
return monitorService.rulesSelect(addVo);
}
/***
*@Description: 新增修改我的规则
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/12/9 9:29
*/
@PostMapping(value = "push/rules/insertOrUpdate")
public R insertRules(@RequestBody PushMonitorRulesVo rulesVo) {
return monitorService.insertRules(rulesVo);
}
/***
*@Description: 我的推送规则
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/12/9 9:29
*/
@PostMapping(value = "push/rulesDetail")
public R rulesDetail(@RequestBody PushMonitorRulesDetailVo detailVo) {
return monitorService.rulesDetail(detailVo);
}
/***
*@Description: 监控动态/监控报告详情 分页
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/12/9 9:29
*/
@PostMapping(value = "company/dynamicPage")
public TableDataInfo companyDynamicPage(@RequestBody PushMonitorDynamicPageVo pageVo) throws Exception{
return monitorService.companyDynamicPage(pageVo);
}
/***
*@Description: 监控动态详情
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/12/9 9:29
*/
@PostMapping(value = "company/dynamicDetail")
public R companyDynamicDetail(@RequestBody PushMonitorDynamicDetailVo detailVo) {
return monitorService.companyDynamicDetail(detailVo);
}
/***
*@Description: 监控报告 分页
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/12/9 9:29
*/
@PostMapping(value = "reportPage")
public TableDataInfo reportPage(@RequestBody PushMonitorReportPageVo pageVo) throws Exception{
return monitorService.reportPage(pageVo);
}
/***
*@Description: 企业监控列表 分页
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/12/9 9:29
*/
@PostMapping(value = "system/companyPage")
public TableDataInfo companyPage(@RequestBody PushMonitorCompanyPageVo pageVo) throws Exception{
return monitorService.companyPage(pageVo);
}
/***
*@Description: 添加监控
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/12/9 9:29
*/
@PostMapping(value = "system/add")
public R systemAdd(@RequestBody PushMonitorCompanyAddVo addVo) {
return monitorService.systemAdd(addVo);
}
/***
*@Description: 取消监控
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/12/9 9:29
*/
@PostMapping(value = "system/cancel")
public R systemCancel(@RequestBody PushMonitorCompanyCancelVo cancelVo) throws Exception{
return monitorService.systemCancel(cancelVo);
}
/***
*@Description: 批量导入
*@Param:
*@return: java.lang.String
*@Author: Dgm
*@date: 2022/6/14 10:45
*/
@RequestMapping("/system/import")
public R systemImport(@RequestParam MultipartFile file, PushMonitorCompanyImportAddVo importAddVo) throws Exception{
return monitorService.systemImport(file, importAddVo);
}
}
package com.dsk.monitor.domain.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @ClassName PushMonitorInfoDto
* @Description 推送监控信息
* @Author Dgm
* @Date 2023/12/9 9:43
* @Version
*/
@Data
public class PushMonitorInfo implements Serializable {
private static final long serialVersionUID = 6732846953537725830L;
/**
* 对外开放的id
*/
private String id;
/**
* 源表id
*/
private String sourceId;
/**
* 源表名
*/
private String sourceTable;
/**
* 公司Id
*/
private Integer companyId;
/**
* 企业名称
*/
private String companyName;
/**
* 风险等级:正向,负向,中立,警示
*/
private String riskLevel;
/**
* 监控维度父级
*/
private String parentDimension;
/**
* 监控维度
*/
private String dimension;
/**
* 动态内容
*/
private String details;
/**
* 发布时间
*/
private Date publishTime;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 变更时间-暂时用于法人变更
*/
private Date changeDate;
/**
* 更新次数
*/
private Integer versionNum;
/**
* 是否发送 0否 1是
*/
private Integer isSend;
/**
* 数据来源(jsk,fy)
*/
private String source;
/**
* 系统类型 JSK/BRIS
*/
private String sysType;
}
package com.dsk.monitor.domain.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @ClassName PushMonitorRulesDto
* @Description 推送监控规则信息
* @Author Dgm
* @Date 2023/12/9 9:43
* @Version
*/
@Data
public class PushMonitorRules implements Serializable {
private static final long serialVersionUID = -2226356282137776096L;
/**
* id
*/
private Integer id;
/**
* 创建人Id
*/
private Long userId = 98L;
/**
* 风险类型,多个逗号隔开
*/
private String riskType;
/**
* 监控维度,多个逗号隔开
*/
private String dimension;
/**
* 推送频率 每小时:0 每天:1 工作日:2
*/
private Integer pushFrequency;
/**
* 推送时段-起
*/
private Integer timePeriodStart;
/**
* 推送时段-止
*/
private Integer timePeriodEnd;
/**
* 接收方式 手机:0 PC:1
*/
private String receiveMode;
/**
* 手机号码,多个逗号隔开
*/
private String phones;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 更新次数
*/
private Integer versionNum;
}
package com.dsk.monitor.domain.vo;
import lombok.Data;
/**
* @ClassName ConditionVo
* @Description 共用条件
* @Author Dgm
* @Date 2023/12/9 15:36
* @Version
*/
@Data
public class ConditionVo {
/**
* 用户id
*/
private Long userId = 98L;
/**
* 条件查询企业id
*/
private Integer companyOrstaffId;
/**
* 条件查询企业名称(模糊查询)
*/
private String companyName;
/**
* 条件查询风险等级:正向,负向,中立,警示
*/
private String riskLevel;
/**
* 条件查询监控维度子级名称
*/
private String dimensionId;
/**
* 条件查询监控维度父级名称
*/
private String parentId;
/**
* 条件查询开始时间
*/
private String beginTime;
/**
* 条件查询结束时间
*/
private String endTime;
/**
* 报告类型(1.日报,2.周报,3.月报)
*/
private Integer reportType;
}
package com.dsk.monitor.domain.vo;
import com.dsk.jsk.domain.BasePage;
import lombok.Data;
import java.util.List;
/**
* @ClassName PushMonitorRulesVo
* @Description 监控报告 分页
* @Author Dgm
* @Date 2023/12/9 11:05
* @Version
*/
@Data
public class PushMonitorCompanyAddVo {
/**
* 用户id
*/
private Long userId = 98L;
/**
* 多个企业id数组
*/
private List<Integer> cid;
}
package com.dsk.monitor.domain.vo;
import lombok.Data;
import java.util.List;
/**
* @ClassName PushMonitorRulesVo
* @Description 监控报告 分页
* @Author Dgm
* @Date 2023/12/9 11:05
* @Version
*/
@Data
public class PushMonitorCompanyCancelVo {
/**
* 用户id
*/
private Long userId = 98L;
/**
* 多个企业id数组
*/
private List<Integer> cid;
}
package com.dsk.monitor.domain.vo;
import lombok.Data;
import java.util.List;
/**
* @ClassName PushMonitorRulesVo
* @Description 监控报告 分页
* @Author Dgm
* @Date 2023/12/9 11:05
* @Version
*/
@Data
public class PushMonitorCompanyImportAddVo {
/**
* 用户id
*/
private Long userId = 98L;
/**
* 多个企业id数组
*/
private List<String> names;
}
package com.dsk.monitor.domain.vo;
import com.dsk.jsk.domain.BasePage;
import lombok.Data;
/**
* @ClassName PushMonitorRulesVo
* @Description 监控报告 分页
* @Author Dgm
* @Date 2023/12/9 11:05
* @Version
*/
@Data
public class PushMonitorCompanyPageVo extends BasePage {
/**
* 查询条件
*/
private ConditionVo condition;
/**
* 用户id
*/
private Long userId = 98L;
}
package com.dsk.monitor.domain.vo;
import lombok.Data;
/**
* @ClassName PushMonitorRulesVo
* @Description 监控动态详情
* @Author Dgm
* @Date 2023/12/9 11:05
* @Version
*/
@Data
public class PushMonitorDynamicDetailVo {
private String sourceId;
}
package com.dsk.monitor.domain.vo;
import com.dsk.jsk.domain.BasePage;
import lombok.Data;
/**
* @ClassName PushMonitorRulesVo
* @Description 监控动态/监控报告详情 分页
* @Author Dgm
* @Date 2023/12/9 11:05
* @Version
*/
@Data
public class PushMonitorDynamicPageVo extends BasePage {
/**
* 用户id
*/
private Long userId = 98L;
private ConditionVo condition;
}
package com.dsk.monitor.domain.vo;
import lombok.Data;
import java.util.List;
/**
* @ClassName PushMonitorImportCompanyVo
* @Description
* @Author Dgm
* @Date 2023/12/9 11:05
* @Version
*/
@Data
public class PushMonitorImportCompanyVo {
/**
* 条件查询企业名称
*/
private String companyName;
}
package com.dsk.monitor.domain.vo;
import com.dsk.monitor.domain.dto.PushMonitorInfo;
import lombok.Data;
/**
* @ClassName PushMonitorInfoDto
* @Description 推送监控信息
* @Author Dgm
* @Date 2023/12/9 9:43
* @Version
*/
@Data
public class PushMonitorInfoVo extends PushMonitorInfo {
}
package com.dsk.monitor.domain.vo;
import com.dsk.jsk.domain.BasePage;
import lombok.Data;
/**
* @ClassName PushMonitorRulesVo
* @Description 企业监控列表 分页
* @Author Dgm
* @Date 2023/12/9 11:05
* @Version
*/
@Data
public class PushMonitorReportPageVo extends BasePage {
/**
* 查询条件
*/
private ConditionVo condition;
/**
* 用户id
*/
private Long userId = 98L;
}
package com.dsk.monitor.domain.vo;
import lombok.Data;
/**
* @ClassName PushMonitorRulesVo
* @Description 我的推送规则
* @Author Dgm
* @Date 2023/12/9 11:05
* @Version
*/
@Data
public class PushMonitorRulesDetailVo {
/**
* 创建人Id
*/
private Long userId = 98L;
}
package com.dsk.monitor.domain.vo;
import com.dsk.monitor.domain.dto.PushMonitorRules;
/**
* @ClassName PushMonitorRulesVo
* @Description
* @Author Dgm
* @Date 2023/12/9 11:05
* @Version
*/
public class PushMonitorRulesVo extends PushMonitorRules {
}
package com.dsk.monitor.job;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsk.common.utils.DateUtils;
import com.dsk.monitor.domain.dto.PushMonitorRules;
import com.dsk.monitor.mapper.PushMonitorInfoMapper;
import com.dsk.monitor.mapper.PushMonitorRulesMapper;
import com.dsk.monitor.util.SendMessageUtil;
import org.springframework.scheduling.annotation.Scheduled;
import javax.annotation.Resource;
/**
* @ClassName PushScheduling
* @Description 发送短信
* @Author Dgm
* @Date 2023/12/9 13:51
* @Version
*/
public class PushScheduling {
@Resource
private PushMonitorInfoMapper monitorInfoMapper;
@Resource
private PushMonitorRulesMapper rulesMapper;
@Scheduled(cron = "0 0 5 * * * ?")
public void receiveModePhone() {
// 获取当前整点时间
Integer concurrentHour = DateUtils.getHour();
QueryWrapper queryWrapper = new QueryWrapper();
PushMonitorRules detail = rulesMapper.selectOne(queryWrapper);
// 推送时段-起
Integer timePeriodStart = detail.getTimePeriodStart();
// 推送时段-止
Integer timePeriodEnd = detail.getTimePeriodEnd();
if (concurrentHour > timePeriodStart && concurrentHour < timePeriodEnd) {
QueryWrapper monitorInfoWrapper = new QueryWrapper();
// 风险类型
monitorInfoWrapper.in("risk_type", detail.getRiskType());
// 监控维度
monitorInfoWrapper.in("dimension", detail.getDimension());
Long count = monitorInfoMapper.selectCount(monitorInfoWrapper);
if (count >0 ) {
SendMessageUtil.sendMessage(detail.getPhones(), count.toString());
}
}
}
}
package com.dsk.monitor.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.monitor.domain.dto.PushMonitorInfo;
/**
* @ClassName PushMonitorInfoMapper
* @Description 推送监控内容
* @Author Dgm
* @Date 2023/12/9 9:38
* @Version 1.0.0
*/
public interface PushMonitorInfoMapper extends BaseMapper<PushMonitorInfo> {
}
package com.dsk.monitor.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.monitor.domain.dto.PushMonitorRules;
/**
* @ClassName PushMonitorInfoMapper
* @Description 推送监控规则信息
* @Author Dgm
* @Date 2023/12/9 9:38
* @Version 1.0.0
*/
public interface PushMonitorRulesMapper extends BaseMapper<PushMonitorRules> {
}
package com.dsk.monitor.service;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.monitor.domain.vo.*;
import org.springframework.web.multipart.MultipartFile;
/**
* @ClassName MonitorService
* @Description 监控service
* @Author Dgm
* @Date 2023/12/9 10:01
* @Version
*/
public interface MonitorService {
/***
*@Description: 保存监控信息
*@Param: pushMonitorInfoDto 信息
*@return: R
*@Author: Dgm
*@date: 2023/12/9 10:03
*/
R insert(PushMonitorInfoVo pushMonitorInfoDto);
/***
*@Description: 监控维度下拉选择
*@Param:
*@return: R
*@Author: Dgm
*@date: 2023/12/9 10:03
*/
R rulesSelect(PushMonitorCompanyAddVo addVo);
/***
*@Description: 保存监控规则信息
*@Param: monitorRulesDto 信息
*@return: R
*@Author: Dgm
*@date: 2023/12/9 10:03
*/
R insertRules(PushMonitorRulesVo monitorRulesDto);
/***
*@Description: 我的推送规则
*@Param: detailVo 信息
*@return: R
*@Author: Dgm
*@date: 2023/12/9 10:03
*/
R rulesDetail(PushMonitorRulesDetailVo detailVo);
/***
*@Description: 监控动态/监控报告 分页
*@Param: pageVo 信息
*@return: R
*@Author: Dgm
*@date: 2023/12/9 10:03
*/
TableDataInfo companyDynamicPage(PushMonitorDynamicPageVo pageVo) throws Exception;
/***
*@Description: 监控动态详情
*@Param: detailVo 信息
*@return: R
*@Author: Dgm
*@date: 2023/12/9 10:03
*/
R companyDynamicDetail(PushMonitorDynamicDetailVo detailVo);
/***
*@Description: 监控报告
*@Param: pageVo 信息
*@return: R
*@Author: Dgm
*@date: 2023/12/9 10:03
*/
TableDataInfo reportPage(PushMonitorReportPageVo pageVo) throws Exception;
/***
*@Description: 企业监控列表 分页
*@Param: pageVo 信息
*@return: R
*@Author: Dgm
*@date: 2023/12/9 10:03
*/
TableDataInfo companyPage(PushMonitorCompanyPageVo pageVo) throws Exception;
/***
*@Description: 添加监控
*@Param: addVo 信息
*@return: R
*@Author: Dgm
*@date: 2023/12/9 10:03
*/
R systemAdd(PushMonitorCompanyAddVo addVo);
/***
*@Description: 取消监控
*@Param: cancelVo 信息
*@return: R
*@Author: Dgm
*@date: 2023/12/9 10:03
*/
R systemCancel(PushMonitorCompanyCancelVo cancelVo);
/***
*@Description: 批量导入
*@Param: cancelVo 信息
*@return: R
*@Author: Dgm
*@date: 2023/12/9 10:03
*/
R systemImport(MultipartFile file, PushMonitorCompanyImportAddVo importAddVo) throws Exception;
}
package com.dsk.monitor.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.redis.RedisUtils;
import com.dsk.monitor.domain.dto.PushMonitorInfo;
import com.dsk.monitor.domain.dto.PushMonitorRules;
import com.dsk.monitor.domain.vo.*;
import com.dsk.monitor.mapper.PushMonitorInfoMapper;
import com.dsk.monitor.mapper.PushMonitorRulesMapper;
import com.dsk.monitor.service.MonitorService;
import com.dsk.system.utils.DskOpenApiUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.time.Duration;
import java.util.*;
/**
* @ClassName MonitorServiceImpl
* @Description
* @Author Dgm
* @Date 2023/12/9 10:04
* @Version
*/
@Slf4j
@Service
public class MonitorServiceImpl implements MonitorService {
@Resource
private PushMonitorInfoMapper monitorInfoMapper;
@Resource
private PushMonitorRulesMapper rulesMapper;
@Resource
private DskOpenApiUtil dskOpenApiUtil;
@Override
public R insert(PushMonitorInfoVo pushMonitorInfoDto) {
monitorInfoMapper.insert(pushMonitorInfoDto);
return R.ok();
}
@Override
public R rulesSelect(PushMonitorCompanyAddVo addVo) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/monitor/company/supplier/system/queryDimensionEnum", BeanUtil.beanToMap(addVo, false, false));
return BeanUtil.toBean(map, R.class);
}
@Override
public R insertRules(PushMonitorRulesVo monitorRulesDto) {
// todo 20231211 规则是否与使用登录人强关联
Long userId = LoginHelper.getUserId();
if (ObjectUtil.isNotEmpty(userId)) {
monitorRulesDto.setUserId(userId);
}
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("user_id", monitorRulesDto.getUserId());
PushMonitorRules detail = rulesMapper.selectOne(queryWrapper);
if (ObjectUtil.isEmpty(detail)) {
rulesMapper.insert(monitorRulesDto);
} else {
monitorRulesDto.setId(detail.getId());
rulesMapper.updateById(monitorRulesDto);
}
return R.ok();
}
@Override
public R rulesDetail(PushMonitorRulesDetailVo detailVo) {
Long userId = LoginHelper.getUserId();
if (ObjectUtil.isNotEmpty(userId)) {
detailVo.setUserId(userId);
}
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("user_id", detailVo.getUserId());
PushMonitorRules detail = rulesMapper.selectOne(queryWrapper);
return R.ok(detail);
}
@Override
public TableDataInfo companyDynamicPage(PushMonitorDynamicPageVo pageVo) throws Exception {
Long userId = LoginHelper.getUserId();
if (ObjectUtil.isNotEmpty(userId)) {
pageVo.setUserId(userId);
pageVo.getCondition().setUserId(userId);
}
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/monitor/company/info/companyDynamicList", BeanUtil.beanToMap(pageVo, false, false));
return dskOpenApiUtil.responsePage(map);
}
@Override
public R companyDynamicDetail(PushMonitorDynamicDetailVo detailVo) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("source_id", detailVo.getSourceId());
PushMonitorInfo detail = monitorInfoMapper.selectOne(queryWrapper);
return R.ok(detail);
}
@Override
public TableDataInfo reportPage(PushMonitorReportPageVo pageVo) throws Exception {
Long userId = LoginHelper.getUserId();
if (ObjectUtil.isNotEmpty(userId)) {
pageVo.setUserId(userId);
pageVo.getCondition().setUserId(userId);
}
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/monitor/company/info/monitor/report", BeanUtil.beanToMap(pageVo, false, false));
return dskOpenApiUtil.responsePage(map);
}
@Override
public TableDataInfo companyPage(PushMonitorCompanyPageVo pageVo) throws Exception {
Long userId = LoginHelper.getUserId();
if (ObjectUtil.isNotEmpty(userId)) {
pageVo.setUserId(userId);
pageVo.getCondition().setUserId(userId);
}
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/monitor/company/supplier/system/paging", BeanUtil.beanToMap(pageVo, false, false));
return dskOpenApiUtil.responsePage(map);
}
@Override
public R systemAdd(PushMonitorCompanyAddVo addVo) {
Long userId = LoginHelper.getUserId();
if (ObjectUtil.isNotEmpty(userId)) {
addVo.setUserId(userId);
}
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/monitor/company/supplier/system/add", BeanUtil.beanToMap(addVo, false, false));
return BeanUtil.toBean(map, R.class);
}
@Override
public R systemCancel(PushMonitorCompanyCancelVo cancelVo) {
Long userId = LoginHelper.getUserId();
if (ObjectUtil.isNotEmpty(userId)) {
cancelVo.setUserId(userId);
}
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/monitor/company/supplier/system/cancel", BeanUtil.beanToMap(cancelVo, false, false));
return BeanUtil.toBean(map, R.class);
}
@Override
public R systemImport(MultipartFile file, PushMonitorCompanyImportAddVo importAddVo) {
Long userId = LoginHelper.getUserId();
if (ObjectUtil.isNotEmpty(userId)) {
importAddVo.setUserId(userId);
}
//存放保单信息
List<String> companyList = new ArrayList<String>();
// 设置redisKey
String lockKey = "stockKey" + userId;
// 设置redisValue
String value = UUID.randomUUID().toString();
try {
// 这里默认设置超时时间为30秒
boolean hasKey = RedisUtils.setObjectIfAbsent(lockKey, value, Duration.ofMillis(1000 * 30));
if (!hasKey) {
return R.fail("数据正在上传请等待");
}
//如果文件不存在 则文件上传失败
if (file == null){
return R.fail("操作失敗,数据异常,請使用正确的模板");
}
if (file.isEmpty()){
return R.fail("操作失敗,数据异常,請使用正确的模板");
}
//得到整个excel
XSSFWorkbook wook = new XSSFWorkbook((file.getInputStream()));
//得到第一个表单sheet
Sheet sheet = wook.getSheetAt(0);
//得到最后一行的行号
int lastRowNum = sheet.getLastRowNum();
//如果总行数小于等于2 (没有数据)提示数据异常
if ((lastRowNum) < 1){
return R.fail("未提供有效数据,请确认!");
}
//进行excel格式判定
String name = sheet.getRow(0).getCell(0) + "";
//只要其中一个不满足则格式有误
if (!"企业名称".equals(name)){
return R.fail("操作失败,数据异常,请使用正确的模板");
}
//行列皆从0开始
for (int i = 1; i <= lastRowNum; i++) {
String companyNameStr = "";
// 统一社会信用代码
Cell companyName = sheet.getRow(i).getCell(0);
if (ObjectUtil.isNotEmpty(companyName)) {
String cn = companyName.toString();
companyNameStr = cn.trim();
}
companyList.add(companyNameStr);
}
} catch (Exception e) {
log.error("",e.getMessage());
} finally {
RedisUtils.hasValueDelete(lockKey, value);
}
if (ObjectUtil.isEmpty(companyList)) {
return R.fail("操作失败");
}
importAddVo.setNames(companyList);
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/monitor/company/supplier/system/addPatch", BeanUtil.beanToMap(importAddVo, false, false));
log.info("systemImport==================================>" + map);
return BeanUtil.toBean(map, R.class);
}
}
package com.dsk.monitor.util;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sms4j.api.SmsBlend;
import org.dromara.sms4j.api.entity.SmsResponse;
import org.dromara.sms4j.core.factory.SmsFactory;
import org.dromara.sms4j.provider.enumerate.SupplierType;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
/**
* @ClassName SendMessageUtil
* @Description 发送短息
* @Author Dgm
* @Date 2023/12/9 14:14
* @Version
*/
@Slf4j
public class SendMessageUtil {
public static void sendMessage(String phones, String message) {
String[] array = phones.split(",");
List<String> stringList = Arrays.asList(array);
for (String phone : stringList) {
LinkedHashMap<String, String> map = new LinkedHashMap<>(1);
map.put("code", message);
SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.ALIBABA);
SmsResponse smsResponse = smsBlend.sendMessage(phone, "SMS_181860796", map);
if (!"OK".equals(smsResponse.getCode())) {
log.error("验证码短信发送异常 => {}", smsResponse);
}
}
}
}
......@@ -82,5 +82,23 @@ public class CompanySearchController {
return opportunityRadarService.zjyjAptitudeContrary(object);
}
/*
* 资质标准
*/
@RequestMapping("/zjyj/cert/standard")
public AjaxResult zjyjCertStandard(@RequestBody JSONObject object) {
return opportunityRadarService.zjyjCertStandard(object);
}
/*
* 咨询机构
*/
@PostMapping("/consult/page")
public AjaxResult consultPage(@RequestBody JSONObject object) {
ComposeQueryDto compose = JSONObject.parseObject(object.toJSONString(), ComposeQueryDto.class);
if (PageQueryLimit.pageLimit(compose.getPage())){
return AjaxResult.error("翻页已达到上限");
}
return opportunityRadarService.consultPage(object);
}
}
......@@ -227,4 +227,14 @@ public class BusinessOpportunityRadarService {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/zjyj/aptitude/contrary", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult zjyjCertStandard(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/zjyj/cert/standard", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult consultPage(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/zjyj/consult/enterprise", object);
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.cscec.mapper.BizDictDataMapper">
<resultMap type="com.dsk.cscec.domain.BizDictData" id="BizDictDataResult">
<result property="id" column="id"/>
<result property="code" column="code"/>
<result property="name" column="name"/>
<result property="type" column="type"/>
<result property="parentId" column="parent_id"/>
<result property="remark" column="remark"/>
</resultMap>
<sql id="Base_Column_List">
id,code,name,type,parent_id,remark
</sql>
<select id="findIdByName" resultType="java.lang.Long">
select id from biz_dict_data where `name` like concat('%',#{name},'%')
</select>
<select id="findByNameAndType" resultType="com.dsk.cscec.domain.BizDictData">
select id,name,code,ancestors from biz_dict_data
where `name` = #{name}
and type = #{type}
and del_flag = 0
</select>
<select id="countByName" resultType="java.lang.Integer">
SELECT
count( id )
FROM
biz_dict_data
WHERE
del_flag = 0
<if test="type != null and type != ''">
AND `type` = #{type}
</if>
AND `name` = #{name}
</select>
<select id="exportListVo" resultType="com.dsk.cscec.domain.BizDictData">
select t.id,t.name,t.parent_id,t1.name parentName, t.unit,t.remark,t.code,t.feature from biz_dict_data t
left join biz_dict_data t1 on t.parent_id=t1.id
where
t.del_flag=0
and t.`type`=#{bo.type}
<if test="bo.name != null and bo.name != ''">
and (t.name like concat('%',#{bo.name},'%') or t1.name like concat('%',#{bo.name},'%'))
</if>
</select>
<select id="queryByID" resultType="com.dsk.cscec.domain.BizDictData">
select <include refid="Base_Column_List"/>
from biz_dict_data where del_flag = 0
and id = #{id}
</select>
</mapper>
......@@ -12,24 +12,37 @@
from d_customer
where recommend_org_id = 'F17305B4EA4444CBAB12892C7B99E475'
<if test="bo.customerName != null and bo.customerName != '' "> and customer_name like concat('%',#{bo.customerName},'%')</if>
<if test="bo.region != null and bo.region != '' ">
and register_region in
<foreach collection="region" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="bo.province != null and bo.province != '' ">
and register_province in
<foreach collection="province" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="bo.city != null and bo.city != '' ">
and register_city in
<foreach collection="city" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<!-- <if test="bo.region != null and bo.region != '' ">-->
<!-- and register_region in-->
<!-- <foreach collection="region" item="item" open="(" separator="," close=")">-->
<!-- #{item}-->
<!-- </foreach>-->
<!-- </if>-->
<choose>
<when test="bo.province != null and bo.province.size > 0 and (bo.city == null or bo.city.size == 0) ">
and register_province in
<foreach collection="province" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</when>
<when test="bo.city != null and bo.city.size > 0 ">
and register_city in
<foreach collection="city" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</when>
<otherwise>
and ( register_province in
<foreach collection="province" item="item" open="(" separator="," close=")">
#{item}
</foreach>
or register_city in
<foreach collection="city" item="item" open="(" separator="," close=")">
#{item}
</foreach>
)
</otherwise>
</choose>
<if test="bo.customerClass != null and bo.customerClass != '' ">
and customer_class in
<foreach collection="customerClass" item="item" open="(" separator="," close=")">
......@@ -60,4 +73,119 @@
order by approve_date2 desc
</select>
<sql id="allColumn">
customer_key, customer_id, cusomer_name, fin_customer_code, fin_customer_name, tax_number, isvalid, customer_code,
customer_name, customer_state, recommend_org_id, recommend_org, approve_date2, version, supplier_id, customer_category_code,
representative, register_no, unify_social_code, business_license, orgnization_code, register_capital, primary_business,
credential, brand, address, register_city_id, register_region, register_province, register_city, open_bank, bank_account,
contact_person, contact_phone, mobile, zipcode, email, website, remark, area_code, currency, orgnization_id, customer_type,
credit_situation, employee_id, establish_date, phone_code, customer_property, sector_position, scope, fax, customer_class,
id_card, sub_company, allied_company, turn_over, main_customer, main_resource, main_region, raw_material, productline,
customer_category_type, customer_firm, customertype_id, customer_category_type_id, register_address, warehouse_address,
teamwork_product, isfactoryorfranchise, expire_date1, expire_date2, expire_date3, expire_date4, expire_date5, leader_name,
group_specialty_id, group_specialty, manage_ability, product_quality_ability, construct_job_scope, responsible_person,
approve_date1, isagree, business_manager, project_manager, purchase_principal, upper_company_code, service_team_logo,
labor_captain_idcard, labor_captain_phone, service_team_personnum, service_team_speciality, secondary_code, approve_date3,
approve_date4, flow_state, isenterbjlaborcomany, expire_date6, expire_date7, credit_level, base_logo, recommend_project,
recommend_project_id, recommend_date, aptitude_card, work_safety_license, master_id, paytax_type, tax_rate, card_type,
customer_score, customer_name2, customer_name3, customer_name4, country, fin_customer_type, company_code, owner_kind,
customer_kind, data_source, isowner, iscustomer, abbr_name1, abbr_name2, tax_type, isfreeze, update_date, load_time
</sql>
<sql id="columnByType">
customer_key, customer_id, customer_code, customer_name, customer_state, recommend_org_id, recommend_org,
register_region,register_province,register_city,group_specialty,representative,paytax_type,tax_rate,
construct_job_scope,credential,register_capital,contact_person,contact_phone,approve_date2,credit_level,
secondary_code,unify_social_code,primary_business,leader_name,labor_captain_phone,labor_captain_idcard,
service_team_personnum,service_team_speciality
</sql>
<select id="queryListByType" resultType="com.dsk.cscec.domain.vo.CustomerInfoVo">
select
<include refid="columnByType"></include>
from d_customer
where
recommend_org_id = 'F17305B4EA4444CBAB12892C7B99E475'
<if test="bo.customerClass != null and bo.customerClass != ''">
and customer_class = #{bo.customerClass}
</if>
<if test="bo.serviceTeamLogo != null and bo.serviceTeamLogo == 'Y'.toString()">
and leader_name is not null
</if>
<if test="bo.serviceTeamLogo != null and bo.serviceTeamLogo == 'N'.toString()">
and leader_name is null
</if>
<if test="bo.leaderName != null and bo.leaderName != ''">
and leader_name like concat('%',#{bo.leaderName},'%')
</if>
<if test="bo.customerName != null and bo.customerName != '' ">
and customer_name like concat('%',#{bo.customerName},'%')
</if>
<if test="bo.registerProvince != null and bo.registerCity == null">
and register_province in
<foreach collection="bo.registerProvince" item="registerProvince" separator="," open="(" close=")">
#{registerProvince}
</foreach>
</if>
<if test="bo.registerProvince == null and bo.registerCity != null ">
and register_city in
<foreach collection="bo.registerCity" item="registerCity" separator="," open="(" close=")">
#{registerCity}
</foreach>
</if>
<if test="bo.registerProvince != null and bo.registerCity != null ">
and (
register_province in
<foreach collection="bo.registerProvince" item="registerProvince" separator="," open="(" close=")">
#{registerProvince}
</foreach>
or register_city in
<foreach collection="bo.registerCity" item="registerCity" separator="," open="(" close=")">
#{registerCity}
</foreach>
)
</if>
<if test="bo.groupSpecialtyId != null ">
<foreach collection="bo.groupSpecialtyId" item="groupSpecialtyId">
and find_in_set(#{groupSpecialtyId},group_specialty_id) > 0
</foreach>
</if>
<if test="bo.customerState != null ">
and customer_state in
<foreach collection="bo.customerState" item="customerState" separator="," open="(" close=")">
#{customerState}
</foreach>
</if>
<if test="bo.credential != null ">
and credential in
<foreach collection="bo.credential" item="credential" separator="," open="(" close=")">
#{credential}
</foreach>
</if>
<if test="bo.creditLevel != null ">
and credit_level in
<foreach collection="bo.creditLevel" item="creditLevel" separator="," open="(" close=")">
#{creditLevel}
</foreach>
</if>
<if test="bo.paytaxType != null">
and paytax_type in
<foreach collection="bo.paytaxType" item="paytaxType" separator="," open="(" close=")">
#{paytaxType}
</foreach>
</if>
<if test="bo.taxRate != null">
and tax_rate in
<foreach collection="bo.taxRate" item="taxRate" separator="," open="(" close=")">
#{taxRate}
</foreach>
</if>
<if test="bo.approveDate2Start != null">
and approve_date2 &gt;= #{bo.approveDate2Start}
</if>
<if test="bo.approveDate2End != null">
and date(approve_date2) &lt;= #{bo.approveDate2End}
</if>
order by approve_date2 desc
</select>
</mapper>
\ No newline at end of file
<?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.cscec.mapper.DSubcontractMapper">
<select id="selectEnterpriseCountByCustomerId" resultType="java.lang.Integer">
select count(num) from (
select count(sign_org_id) num from d_subcontract where customer_id = #{customerId} group by sign_org_id
) a
</select>
<select id="selectProjectCountByCustomerId" resultType="java.lang.Integer">
select count(num) from (
select count(project_id) num from d_subcontract where customer_id = #{customerId} group by project_id
) a
</select>
</mapper>
\ No newline at end of file
......@@ -9,19 +9,7 @@
"build:prod": "vue-cli-service build",
"build:test": "vue-cli-service build --mode test",
"build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview",
"lint": "eslint --ext .js,.vue src"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"src/**/*.{js,vue}": [
"eslint --fix",
"git add"
]
"preview": "node build/index.js --preview"
},
"keywords": [
"vue",
......@@ -75,15 +63,11 @@
"@vue/babel-helper-vue-jsx-merge-props": "^1.4.0",
"@vue/babel-preset-jsx": "^1.4.0",
"@vue/cli-plugin-babel": "4.4.6",
"@vue/cli-plugin-eslint": "4.4.6",
"@vue/cli-service": "4.4.6",
"babel-eslint": "10.1.0",
"babel-plugin-dynamic-import-node": "2.3.3",
"chalk": "4.1.0",
"compression-webpack-plugin": "5.0.2",
"connect": "3.6.6",
"eslint": "7.15.0",
"eslint-plugin-vue": "7.2.0",
"js-base64": "^3.7.5",
"lint-staged": "10.5.3",
"runjs": "4.4.2",
......
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="16" height="16" viewBox="0 0 16 16"><defs><clipPath id="master_svg0_14_81552"><rect x="0" y="0" width="16" height="16" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_14_81552)"><g><rect x="0" y="0" width="16" height="16" rx="0" fill-opacity="0.009999999776482582"/></g><g><path d="M4.2354478125,13.9198078125Q4.2685578125,13.9761078125,4.3150178125,14.0220078125Q4.3614778125,14.0679078125,4.4181678125,14.1004078125Q4.4748578125,14.1328078125,4.537977812499999,14.1496078125Q4.6010978125,14.1663078125,4.6664078125,14.1663078125L11.3331078125,14.1663078125Q11.3984078125,14.1663078125,11.4615078125,14.1496078125Q11.5246078125,14.1328078125,11.5813078125,14.1004078125Q11.6380078125,14.0679078125,11.6845078125,14.0220078125Q11.7310078125,13.9761078125,11.7641078125,13.9198078125L15.0973078125,8.253177812499999Q15.1312078125,8.1955478125,15.1488078125,8.1310378125Q15.1663078125,8.0665378125,15.1663078125,7.9996778125Q15.1663078125,7.9328178125,15.1488078125,7.8683078125Q15.1312078125,7.8037978125,15.0973078125,7.7461678125L11.7641078125,2.0795038125Q11.7310078125,2.0232098125,11.6845078125,1.9773098125Q11.6380078125,1.9314098125,11.5813078125,1.8989848125Q11.5246078125,1.8665588125,11.4615078125,1.8497838125000001Q11.3984078125,1.8330078125,11.3331078125,1.8330078125L4.6664078125,1.8330078125Q4.6010978125,1.8330078125,4.537977812499999,1.8497828125Q4.4748578125,1.8665578125,4.4181678125,1.8989818125Q4.3614778125,1.9314058125,4.3150178125,1.9773038125Q4.2685578125,2.0232018125,4.2354478125,2.0794938125L0.9020428125,7.7461578125Q0.8681428125,7.8037878125,0.8505748125,7.8682978125Q0.8330078125,7.9328178125,0.8330078125,7.9996778125Q0.8330078125,8.0665378125,0.8505748125,8.1310478125Q0.8681428125,8.195557812499999,0.9020428125,8.2531878125L4.2354478125,13.9198078125ZM4.9523778125,13.1663078125L1.9131018124999999,7.9996778125L4.9523778125,2.8330078125L11.0471278125,2.8330078125L14.0862078125,7.9996778125L11.0471278125,13.1663078125L4.9523778125,13.1663078125Z" fill-rule="evenodd" fill-opacity="0.800000011920929"/></g><g><path d="M6.4676128125,6.4676128125Q5.8330078125,7.1022178125,5.8330078125,7.9996778125Q5.8330078125,8.897127812499999,6.4676128125,9.5317378125Q7.1022178125,10.1663378125,7.9996778125,10.1663378125Q8.897127812499999,10.1663378125,9.5317378125,9.5317378125Q10.1663378125,8.897127812499999,10.1663378125,7.9996778125Q10.1663378125,7.1022178125,9.5317378125,6.4676128125Q8.897127812499999,5.8330078125,7.9996778125,5.8330078125Q7.1022178125,5.8330078125,6.4676128125,6.4676128125ZM7.1747198125,8.824627812500001Q6.8330078125,8.4829178125,6.8330078125,7.9996778125Q6.8330078125,7.5164278125,7.1747198125,7.1747198125Q7.5164278125,6.8330078125,7.9996778125,6.8330078125Q8.4829178125,6.8330078125,8.824627812500001,7.1747198125Q9.1663378125,7.5164278125,9.1663378125,7.9996778125Q9.1663378125,8.4829178125,8.824627812500001,8.824627812500001Q8.4829178125,9.1663378125,7.9996778125,9.1663378125Q7.5164278125,9.1663378125,7.1747198125,8.824627812500001Z" fill-rule="evenodd" fill-opacity="0.800000011920929"/></g></g></svg>
\ No newline at end of file
......@@ -39,3 +39,19 @@
.el-message {
z-index: 3000 !important;
}
/* 规范容器样式 */
.default-layout-container {
width: 100%;
height: 100%;
box-sizing: border-box;
overflow: auto;
}
.default-layout-container-inner {
width: 100%;
height: 100%;
padding: 16px 24px;
box-sizing: border-box;
}
::v-deep .el-search-form-public {
.each-line {
white-space: nowrap;
}
// 重置element 表单样式
.el-form-item {
display: inline-flex;
align-items: center;
margin-bottom: 16px;
margin-right: 24px;
.el-form-item__label {
font-weight: 400;
color: rgba(35, 35, 35, 0.8);
text-align: left;
font-size: 14px;
line-height: 32px;
padding-right: 0px;
margin-right: 12px;
}
.el-form-item__content {
margin-left: 0px !important;
line-height: 32px;
}
.el-input__inner {
height: 32px;
line-height: 32px;
width: 268px;
border-radius: 2px;
border: 1px solid #dcdfe6;
padding: 0px 12px;
padding-right: 30px;
box-sizing: border-box;
&:focus {
border-color: #0081ff;
}
&::placeholder {
color: #c0c4cc !important;
}
}
.el-date-editor {
width: 268px;
height: 32px;
line-height: 32px;
border-radius: 2px;
border: 1px solid #dcdfe6;
padding: 3px 0px;
box-sizing: border-box;
&.is-active {
border-color: #0081ff;
}
.el-input__icon.el-range__icon.el-icon-date {
display: none;
}
.el-range__close-icon {
line-height: 32px;
}
.el-range-separator {
padding: 0px;
line-height: 24px;
color: rgba(35, 35, 35, 0.8);
}
.el-range-input {
padding: 0px 12px;
box-sizing: border-box;
text-align: left;
}
}
}
}
......@@ -11,7 +11,7 @@ body {
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB,
Microsoft YaHei, Arial, sans-serif;
Microsoft YaHei, Arial, sans-serif;
}
label {
......@@ -106,7 +106,7 @@ aside {
line-height: 32px;
font-size: 16px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen,
Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
color: #2c3e50;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
......@@ -143,11 +143,11 @@ aside {
padding-right: 20px;
transition: 600ms ease position;
background: linear-gradient(
90deg,
rgba(32, 182, 249, 1) 0%,
rgba(32, 182, 249, 1) 0%,
rgba(33, 120, 241, 1) 100%,
rgba(33, 120, 241, 1) 100%
90deg,
rgba(32, 182, 249, 1) 0%,
rgba(32, 182, 249, 1) 0%,
rgba(33, 120, 241, 1) 100%,
rgba(33, 120, 241, 1) 100%
);
.subtitle {
......@@ -311,7 +311,10 @@ li {
.table-item {
width: 100%;
height: 100%;
.el-table {
width: 100%;
height: 100%;
font-size: 14px;
color: #232323;
th {
......@@ -322,8 +325,8 @@ li {
font-size: 14px;
}
.cell {
padding-right: 12px !important;
padding-left: 12px !important;
padding-right: 12px;
padding-left: 12px;
line-height: 18px;
}
thead {
......@@ -344,7 +347,6 @@ li {
.el-table__header-wrapper {
th {
background: #f0f3fa;
// text-align: left;
}
}
.el-table__fixed-header-wrapper {
......@@ -448,6 +450,156 @@ li {
}
}
}
// 封装组件样式
.table-list-com-ins {
.table-item {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
.el-table {
width: 100%;
height: 100%;
font-size: 14px;
color: #232323;
th {
height: 40px;
font-size: 12px !important;
font-weight: 400 !important;
color: rgba(35, 35, 35, 0.8);
padding: 9px 0px;
}
td {
font-size: 14px;
}
.cell {
padding-right: 12px;
padding-left: 12px;
line-height: 21px;
}
.sort-caret.ascending {
border-bottom-color: rgba(0, 129, 255, 0.5);
}
.ascending .sort-caret.ascending {
border-bottom-color: #0081ff;
}
.sort-caret.descending {
border-top-color: rgba(0, 129, 255, 0.5);
}
.descending .sort-caret.descending {
border-top-color: #0081ff;
}
.el-table__header-wrapper {
box-sizing: border-box;
th {
background: #f0f3fa;
}
}
.el-table__fixed-header-wrapper {
th {
background: #f0f3fa;
}
}
.is-scrolling-left + .el-table__fixed,
.is-scrolling-middle + .el-table__fixed,
.is-scrolling-right + .el-table__fixed {
//box-shadow:none;
//-webkit-box-shadow: 2px 0px 1px -2px #C3CBD5;
box-shadow: 2px 0 8px -7px #202020;
//border-right: 1px solid #C3CBD5;
height: auto !important;
bottom: 16px !important;
}
.el-table__body tr.current-row > td.el-table__cell {
background: none;
}
.caret-wrapper {
width: 10px;
}
.el-table__body-wrapper {
&::-webkit-scrollbar {
width: 16px; //竖轴宽度
height: 16px; //横轴宽度
}
&::-webkit-scrollbar-track {
background-color: #f3f4f5;
border-radius: 0;
}
&::-webkit-scrollbar-thumb {
background-color: rgba(98, 110, 126, 0.2);
border: 4px solid #f3f4f5;
border-radius: 10px;
}
&::-webkit-scrollbar-corner {
background: #f3f4f5;
/*border-left: 1px solid #E0EAF2;*/
}
tr {
&.current-row > td {
background-color: initial;
}
&:nth-child(2n) {
background: #f8fbff;
}
}
tr:hover > td.el-table__cell {
background: #dcebff;
}
}
.el-table__body tr.hover-row > td.el-table__cell {
background: #dcebff;
}
.el-table__fixed {
//bottom:0 !important;
.el-table__body {
padding-bottom: 16px;
}
tr:nth-child(2n) {
background-color: #f8fbff;
}
}
::-webkit-scrollbar-track-piece {
//滚动条凹槽的颜色,还可以设置边框属性
background-color: #f3f4f5;
height: 16px;
padding: 0 4px;
}
//滚动条的宽度
::-webkit-scrollbar {
width: 8px;
height: 16px;
background-color: #f3f4f5;
border-radius: 6px;
}
//滚动条的滑块
::-webkit-scrollbar-thumb {
border-radius: 8px;
height: 8px;
margin: 0 4px;
background: rgba(98, 110, 126, 0.2);
border: 4px solid #f3f4f5;
&:hover {
background: #566380;
}
}
.el-scrollbar {
height: 16px;
.el-scrollbar__bar.is-horizontal {
height: 8px;
}
.el-scrollbar__thumb {
background: rgba(98, 110, 126, 0.4);
&:hover {
background: #566380;
}
}
}
}
}
}
.el-table__body tr.hover-row > td.el-table__cell {
background-color: #dcebff;
}
......
.search-result-head-container {
display: flex;
align-items: center;
justify-content: space-between;
line-height: 24px;
height: 24px;
.result-head-left {
.result-list-total {
font-size: 12px;
color: rgba(35, 35, 35, 0.8);
padding-left: 6px;
box-sizing: border-box;
position: relative;
&::before {
content: "";
position: absolute;
width: 2px;
height: 2px;
background: rgba(35, 35, 35, 0.4);
left: 0px;
top: 50%;
transform: translateY(-50%);
}
}
}
.result-head-right {
}
}
......@@ -6,6 +6,7 @@
width: 100%;
height: 100%;
overflow: auto;
box-sizing: border-box;
}
.search-supplier {
-webkit-box-sizing: border-box;
......
<template>
<div class="dsk-amount-range" :class="{'dsk-amount-range-active' : iptActive}">
<div class="dsk-amount-inner">
<el-input v-model="amountArray[0]" :placeholder="startPlaceholder" class="dsk-range-start dsk-amount-ipt" @focus="iptActive = true" @blur="iptActive = false"></el-input>
<div class="dsk-range-text">{{rangeText}}</div>
<el-input v-model="amountArray[1]" :placeholder="endPlaceholder" class="dsk-range-end dsk-amount-ipt" @focus="iptActive = true" @blur="iptActive = false"></el-input>
</div>
</div>
</template>
<script>
export default {
name: "dskAmountRange",
props: {
amountArray: {
required: true,
type: Array,
default: () => []
},
// 区间文字
rangeText: {
type: String,
default: "至"
},
// 开始区间输入框提示语
startPlaceholder: {
type: String,
default: ""
},
// 结束区间输入框提示语
endPlaceholder: {
type: String,
default: ""
},
},
model: {
prop: "amountArray",
event: "amountRangeChange"
},
data() {
return {
iptActive: false
};
},
//可访问data属性
created() {
},
//计算集
computed: {
},
//方法集
methods: {
},
}
</script>
<style lang="scss" scoped>
.dsk-amount-range {
width: 268px;
height: 32px;
padding: 5px 0px;
border-radius: 2px;
border: 1px solid #dcdfe6;
box-sizing: border-box;
&.dsk-amount-range-active {
border-color: #0081ff;
}
::v-deep .dsk-amount-inner {
display: flex;
height: 100%;
align-items: center;
.dsk-range-start,
.dsk-range-end {
&.dsk-amount-ipt.el-input {
line-height: 20px;
height: 100%;
.el-input__inner {
line-height: 1;
height: 100%;
width: 100%;
padding: 0px 12px;
border: none;
}
}
}
.dsk-range-text {
color: rgba(35, 35, 35, 0.8);
}
}
}
</style>
<template>
<div class="dsk-tab-toggle">
<!-- tab列表 -->
<div class="dsk-tab-items-container">
<div class="dsk-tab-items-container-inner">
<div class="dsk-tab-item" v-for="item of tabs" :key="item.id" :class="{'tab-current' : item.value == currentValue}" @click="tabChoose(item)">
<div class="dsk-tab-item-name">{{item.name}}</div>
</div>
<!-- 下滑条 -->
<div class="dsk-tab-sliding-bar" v-if="tabs.length" :style="{width : `${silidingBarWidth}px`,transform : `translateX(${silidingBarLeft}px)`}">
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "dskTabToggle",
props: {
currentValue: {
required: true,
type: [String, Number]
},
tabs: {
required: true,
type: Array,
default: () => []
}
},
model: {
prop: "currentValue",
event: "currentTabChange"
},
data() {
return {
silidingBarLeft: 0,
silidingBarWidth: 0
};
},
//可访问data属性
created() {
this.initSlidingBar();
},
//计算集
computed: {
},
//方法集
methods: {
async initSlidingBar() {
try {
await this.$nextTick();
const current = document.querySelector(".tab-current");
if (current) {
const text = current.querySelector(".dsk-tab-item-name");
const width = text.offsetWidth;
const boxOffsetLeft = current.offsetLeft;
const textOffsetLeft = text.offsetLeft;
this.silidingBarWidth = width;
this.silidingBarLeft = boxOffsetLeft + textOffsetLeft;
}
} catch (error) {
}
},
tabChoose(item) {
this.$emit("currentTabChange", item.value);
this.$emit("tabToggle", item.value);
this.initSlidingBar();
}
},
}
</script>
<style lang="scss" scoped>
.dsk-tab-toggle {
width: 100%;
height: 48px;
border-bottom: 1px solid #eeeeee;
background: #fff;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
box-sizing: border-box;
.dsk-tab-items-container {
width: 100%;
height: 100%;
display: flex;
align-items: center;
.dsk-tab-items-container-inner {
width: 100%;
height: 100%;
display: flex;
align-items: center;
white-space: nowrap;
overflow: auto;
box-sizing: border-box;
position: relative;
.dsk-tab-item {
height: 100%;
display: flex;
align-items: center;
padding: 0px 16px;
box-sizing: border-box;
position: relative;
.dsk-tab-item-name {
cursor: pointer;
color: #232323;
font-size: 16px;
}
&.tab-current {
.dsk-tab-item-name {
color: #0081ff;
font-weight: bold;
}
}
}
.dsk-tab-sliding-bar {
position: absolute;
left: 0px;
bottom: 0px;
height: 2px;
background: #0081ff;
transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
}
}
}
}
</style>
<template>
<transition>
<div class="dsk-table-header-setting-bar">
<div class="dsk-table-header-setting-bar-inner">
</div>
</div>
</transition>
</template>
<script>
import vuedraggable from "vuedraggable";
export default {
name: "dskTableHeaderSettingBar",
components: {
vuedraggable
},
props: {
settingList: {
type: Array,
default: () => []
}
},
data() {
return {
lockColumn: [],
useColumn: [],
notUseColumn: []
};
},
//可访问data属性
created() {
this.settingHeaderClassify();
},
//计算集
computed: {
},
//方法集
methods: {
// 表头当前状态分类
settingHeaderClassify() {
if (this.settingList?.length) {
const temp = JSON.parse(JSON.stringify(this.settingList));
const len = temp.length;
for (let index = 0; index < len; index++) {
if (temp[index].lock) {
this.lockColumn.push({
...temp[index],
use: true
});
continue;
}
// 设置了false值
if (temp[index].hasOwnProperty("use") && temp[index].use === false) {
this.notUseColumn.push(temp[index]);
continue;
}
// 默认为true 展示
this.useColumn.push({
...temp[index],
use: true
});
}
console.log(this.useColumn);
}
}
},
}
</script>
<style lang="scss" scoped>
.dsk-table-header-setting-bar {
position: absolute;
top: 24px;
left: 0px;
width: 236px;
height: 456px;
background: #fff;
border: 1px solid #eeeeee;
box-sizing: border-box;
z-index: 3000;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
.dsk-table-header-setting-bar-inner {
width: 100%;
height: 100%;
}
}
</style>
<template>
<div class="dsk-table-header-setting" @click="showHeaderSetting">
<svg-icons :icon-class="'table-header-setting-icon'" :class-name="'table-header-setting-icon'"></svg-icons>
<div class="table-header-setting-text">表头设置</div>
<setting-bar v-if="showHeaderSettingStatus" :settingList="settingList"></setting-bar>
</div>
</template>
<script>
import svgIcons from "@/components/SvgIcon";
import SettingBar from "./components/SettingBar";
export default {
components: {
svgIcons,
SettingBar
},
name: "dskTableHeaderSetting",
props: {
settingList: {
type: Array,
default: () => []
}
},
data() {
return {
showHeaderSettingStatus: false
};
},
//可访问data属性
created() {
},
//计算集
computed: {
},
//方法集
methods: {
showHeaderSetting() {
this.showHeaderSettingStatus = true;
}
},
}
</script>
<style lang="scss" scoped>
.dsk-table-header-setting {
display: flex;
align-items: center;
position: relative;
&:hover {
.table-header-setting-text {
color: #0081ff;
}
.table-header-setting-icon {
fill: #0081ff;
}
}
.table-header-setting-icon {
cursor: pointer;
}
.table-header-setting-text {
color: rgba(35, 35, 35, 0.8);
font-size: 14px;
margin-left: 6px;
cursor: pointer;
}
}
</style>
<template>
<el-skeleton animated class="skeleton-container">
<template slot="template">
<el-skeleton-item variant="text" style="width: 60%;"/>
<el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 60%;" />
<el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 100%;" />
</template>
</el-skeleton>
</template>
<script>
export default {
name: 'skeleton'
}
</script>
<style lang="scss" scoped>
.el-skeleton__item{
height: 20px;
border-radius: 0;
margin: 9px 0;
background: #f0f0f0;
}
</style>
......@@ -3,17 +3,28 @@
<div class="table-item">
<el-table v-if="tableDataTotal>0" class="fixed-table" :class="headerFixed ? 'headerFixed':''" v-loading="tableLoading" :data="tableData"
element-loading-text="Loading" ref="tableRef" border fit highlight-current-row v-sticky-header.always="stickyHeader"
:default-sort="defaultSort?defaultSort:{}" @sort-change="sortChange" @selection-change="selectionChange" :cell-class-name="cellClassName" :cell-style="cellStyle">
:default-sort="defaultSort?defaultSort:{}" @sort-change="sortChange" @selection-change="selectionChange" :cell-class-name="cellClassName"
:cell-style="cellStyle">
<el-table-column type="selection" :width="needSelection.width ? needSelection.width : '38px'" v-if="needSelection.flag"
:fixed="needSelection.fixed" :align="needSelection.align" :show-overflow-tooltip="needSelection.showOverflowTooltip">
</el-table-column>
<el-table-column v-if="isIndex" label="序号" :width="flexWidth(tableData)" align="left" :fixed="indexFixed" :resizable="false">
<el-table-column type="index" v-if="isIndex" label="序号" :width="flexWidth(tableData)" align="left" :fixed="indexFixed" :resizable="false">
<template slot-scope="scope">{{ queryParams.pageNum * queryParams.pageSize - queryParams.pageSize + scope.$index + 1 }}</template>
</el-table-column>
<template>
<el-table-column v-for="(item,index) in formColum" :key="index" :label="item.label" :prop="item.prop" :width="item.width"
:min-width="item.minWidth" :align="item.align?item.align:'left'" :fixed="item.fixed"
:sortable="item.sortable ?item.sortable=='custom'? 'custom':true : false" :resizable="false">
<template v-for="(item,index) in formColum">
<!-- 复选框列 -->
<el-table-column v-if="item.type == 'selection'" type="selection" :key="index" :width="item.width ? item.width : '38px'" :fixed="item.fixed"
:align="item.align?item.align:'left'" :show-overflow-tooltip="item.showOverflowTooltip">
</el-table-column>
<!-- 序号列 -->
<el-table-column v-else-if="item.type == 'index'" type="index" :key="index" :label="item.label ? item.label : '序号'"
:width="flexWidth(tableData)" :align="item.align?item.align:'left'" :fixed="item.fixed" :resizable="false">
<template slot-scope="scope">{{ queryParams.pageNum * queryParams.pageSize - queryParams.pageSize + scope.$index + 1 }}</template>
</el-table-column>
<!-- 普通列 -->
<el-table-column v-else :key="index" :label="item.label" :prop="item.prop" :width="item.width" :min-width="item.minWidth"
:align="item.align?item.align:'left'" :fixed="item.fixed" :sortable="item.sortable ?item.sortable=='custom'? 'custom':true : false"
:resizable="false">
<template v-if="item.children&&item.children.length">
<el-table-column v-for="(cld, i) in item.children" :key="i" :prop="cld.prop" :label="cld.label" :width="cld.width" :resizable="false">
<template slot-scope="cldscope">
......@@ -21,7 +32,7 @@
<slot :name="cld.prop" :row="cldscope.row" :data="cld"></slot>
</template>
<template v-else>
<span>{{cldscope.row[cld.prop] || '--'}}</span>
<span>{{cldscope.row[cld.prop] || '-'}}</span>
</template>
</template>
</el-table-column>
......@@ -34,7 +45,7 @@
<!-- 操作栏 -->
<slot v-else-if="item.prop == 'action-field-bar'" name="action-field-bar" :row="scope.row" :index="scope.$index" :data="item"></slot>
<span v-else>
{{ scope.row[item.prop] || '--' }}
{{ scope.row[item.prop] || '-' }}
</span>
</template>
</el-table-column>
......@@ -43,7 +54,7 @@
</template>
</el-table>
<div style="padding: 30px 0" v-else>
<div style="padding: 30px 0;box-sizing:border-box;" v-else>
<no-data />
</div>
</div>
......@@ -61,7 +72,7 @@ export default {
props: {
isIndex: {
type: Boolean,
default: true
default: false
},
needSelection: {
type: Object,
......@@ -170,7 +181,7 @@ export default {
this.$emit("selectionChange", selectionArray);
},
flexWidth(tableData) {
let currentMax = this.queryParams.pageNum * this.queryParams.pageSize - this.queryParams.pageSize + tableData.length, wdth = 59;
let currentMax = this.queryParams.pageNum * this.queryParams.pageSize - this.queryParams.pageSize + tableData.length, wdth = 50;
if (currentMax.toString().length > 3) {
wdth = wdth + (currentMax.toString().length - 3) * 10;
}
......@@ -185,9 +196,6 @@ export default {
::v-deep .el-table__body tr.current-row > td.el-table__cell {
background-color: #ffffff;
}
/*::v-deep .el-table__fixed{
height: calc(100% - 16px) !important;
}*/
::v-deep .el-table__row {
&:nth-child(even) {
......@@ -215,9 +223,11 @@ export default {
::v-deep .el-table th.el-table__cell.is-leaf,
::v-deep .el-table td.el-table__cell {
border-bottom: 1px solid #e6eaf1;
box-sizing: border-box;
}
::v-deep .el-table--border .el-table__cell {
border-right: 1px solid #e6eaf1;
box-sizing: border-box;
}
::v-deep .el-table__body tr.hover-row.current-row > td,
::v-deep .el-table__body tr.hover-row.el-table__row--striped.current-row > td,
......@@ -232,22 +242,5 @@ export default {
::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td {
background-color: #dcebff;
}
::v-deep .el-table__header-wrapper {
position: sticky;
top: 0;
z-index: 99;
}
::v-deep .el-table__fixed {
overflow-x: clip;
overflow-y: clip;
}
}
.table-list-com-ins {
::v-deep .el-table {
.el-table__fixed-header-wrapper {
top: 0px;
}
}
}
</style>
......@@ -13,7 +13,7 @@
<template slot="title">
<item v-if="item.meta" :icon="sideIcon(item)" :title="item.meta.title" />
</template>
<sidebar-item v-for="child in item.children" :key="child.path" :is-nest="true" :item="child" :base-path="resolvePath(child.path,child.query)"
<sidebar-item v-for="child in item.children" :key="child.path" :is-nest="true" :item="child" :base-path="resolvePath(child.path)"
:active-menu="activeMenu" class="nest-menu secondary-menu-item-sub" />
</el-submenu>
</template>
......
<template>
<div class="cooperation-desk-account-enterprise">
</div>
</template>
<script>
export default {
name : "cooperationDeskAccountEnterprise",
data() {
return {
}
},
//可访问data属性
created(){
},
//计算集
computed:{
},
//方法集
methods:{
},
}
</script>
<style lang="scss" scoped>
</style>
<template>
<div class="cooperation-desk-account default-layout-container">
<div class="default-layout-container-inner">
<!-- 顶部tab切换栏 -->
<dsk-tab-toggle v-model="currentList" :tabs="toggleTabs"></dsk-tab-toggle>
<!-- 项目列表 -->
<project-list v-if="currentList == 'project'"></project-list>
<!-- 企业列表 -->
<enterprise-list v-if="currentList == 'enterprise'"></enterprise-list>
</div>
</div>
</template>
<script>
import DskTabToggle from "@/components/DskTabToggle";
import ProjectList from "@/views/consultingOrgManagement/components/ProjectList";
import EnterpriseList from "@/views/consultingOrgManagement/components/EnterpriseList";
import { v4 } from 'uuid';
export default {
name: "cooperationDeskAccount",
components: {
DskTabToggle,
ProjectList,
EnterpriseList
},
data() {
return {
currentList: "project",
toggleTabs: [
{
value: "project",
name: "项目列表",
id: v4()
},
{
value: "enterprise",
name: "企业列表",
id: v4()
}
]
};
},
//可访问data属性
created() {
},
//计算集
computed: {
},
//方法集
methods: {
},
}
</script>
<style lang="scss" scoped>
.cooperation-desk-account {
.default-layout-container-inner {
.cooperation-desk-account-project,
.cooperation-desk-account-enterprise {
height: calc(100% - 48px);
}
}
}
</style>
......@@ -170,7 +170,7 @@
</template>
</el-table-column>
<el-table-column label="历史发包数量" min-width="107" :resizable="false" :sortable="'custom'" prop="inviteTenderCount">
<el-table-column label="历史发包数量" min-width="120" :resizable="false" :sortable="'custom'" prop="inviteTenderCount">
<template slot-scope="scope">
<router-link v-if="scope.row.inviteTenderCount"
:to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=hiscontract` : `/enterprise/${encodeStr(scope.row.id)}?path=hiscontract`"
......@@ -179,7 +179,7 @@
</template>
</el-table-column>
<el-table-column label="历史发包总金额" min-width="120" :resizable="false" :sortable="'custom'" prop="inviteTenderSumAmount">
<el-table-column label="历史发包总金额" min-width="130" :resizable="false" :sortable="'custom'" prop="inviteTenderSumAmount">
<template slot-scope="scope">
<div style="text-align:right;white-space: nowrap;">
{{parseFloat(scope.row.inviteTenderSumAmount) ? `${scope.row.inviteTenderSumAmount}万元`:"--"}}
......@@ -187,7 +187,7 @@
</template>
</el-table-column>
<el-table-column label="最近一次招标" min-width="107" :resizable="false" :sortable="'custom'" prop="inviteTenderLastTime">
<el-table-column label="最近一次招标" min-width="120" :resizable="false" :sortable="'custom'" prop="inviteTenderLastTime">
<template slot-scope="scope">
<router-link v-if="scope.row.inviteTenderLastTime"
:to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=announcement` : `/enterprise/${encodeStr(scope.row.id)}?path=announcement`"
......@@ -196,7 +196,7 @@
</template>
</el-table-column>
<el-table-column label="重点项目" min-width="107" :resizable="false" :sortable="'custom'" prop="importantProjectCount">
<el-table-column label="重点项目" min-width="120" :resizable="false" :sortable="'custom'" prop="importantProjectCount">
<template slot-scope="scope">
<router-link v-if="scope.row.importantProjectCount"
:to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=majorProject` : `/enterprise/${encodeStr(scope.row.id)}?path=majorProject`"
......@@ -214,7 +214,7 @@
</template>
</el-table-column> -->
<el-table-column label="拟建项目" min-width="107" :resizable="false" :sortable="'custom'" prop="approvalProjectCount">
<el-table-column label="拟建项目" min-width="120" :resizable="false" :sortable="'custom'" prop="approvalProjectCount">
<template slot-scope="scope">
<router-link v-if="scope.row.approvalProjectCount"
:to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=proposed` : `/enterprise/${encodeStr(scope.row.id)}?path=proposed`"
......@@ -223,7 +223,7 @@
</template>
</el-table-column>
<el-table-column label="招标计划" min-width="107" :resizable="false" :sortable="'custom'" prop="bidPlanCount">
<el-table-column label="招标计划" min-width="120" :resizable="false" :sortable="'custom'" prop="bidPlanCount">
<template slot-scope="scope">
<router-link v-if="scope.row.bidPlanCount"
:to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=biddingplan` : `/enterprise/${encodeStr(scope.row.id)}?path=biddingplan`"
......@@ -232,7 +232,7 @@
</template>
</el-table-column>
<el-table-column label="招标公告" min-width="107" :resizable="false" :sortable="'custom'" prop="jskBidCount">
<el-table-column label="招标公告" min-width="120" :resizable="false" :sortable="'custom'" prop="jskBidCount">
<template slot-scope="scope">
<router-link v-if="scope.row.jskBidCount"
:to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=announcement` : `/enterprise/${encodeStr(scope.row.id)}?path=announcement`"
......
......@@ -293,6 +293,11 @@
{{scope.row.legalPerson||"--"}}
</template>
</el-table-column>
<el-table-column label="备注说明" :resizable="false">
<template slot-scope="scope">
{{scope.row.legalPerson||"--"}}
</template>
</el-table-column>
<el-table-column label="考察项目" :resizable="false">
<template slot-scope="scope">
{{scope.row.legalPerson||"--"}}
......
<template>
<!--供应商考评-->
<!--供应商处置-->
<div class="supplier">
<div class="search-supplier">
<div class="title_wrap i">
<div class="enterprise_title">
供应商考评
供应商处置
</div>
</div>
</div>
......
......@@ -13,9 +13,8 @@
<el-input v-model="formdata.user" placeholder="请输入分供方名称"></el-input>
</el-form-item>
<el-form-item label="注册地区">
<el-select v-model="formdata.user" placeholder="请选择">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
<el-select v-model="formdata.user" multiple placeholder="请选择" :collapse-tags="true" clearable>
<el-option v-for="(item,index) in arealist" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
</el-select>
</el-form-item>
<el-form-item label="注册城市">
......@@ -27,15 +26,13 @@
</el-row>
<el-row>
<el-form-item label="供应商状态">
<el-select v-model="formdata.user" placeholder="请选择">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
<el-select v-model="formdata.user" multiple placeholder="请选择" :collapse-tags="true" clearable>
<el-option v-for="(item,index) in customstate" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
</el-select>
</el-form-item>
<el-form-item label="资质等级">
<el-select v-model="formdata.user" placeholder="请选择">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
<el-select v-model="formdata.user" multiple placeholder="请选择" :collapse-tags="true" clearable>
<el-option v-for="(item,index) in credential" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
</el-select>
</el-form-item>
<el-form-item label="专业类别">
......@@ -47,21 +44,18 @@
</el-row>
<el-row>
<el-form-item label="评价等级">
<el-select v-model="formdata.user" placeholder="请选择">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
<el-select v-model="formdata.user" multiple placeholder="请选择" :collapse-tags="true" clearable>
<el-option v-for="(item,index) in creditlevel" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
</el-select>
</el-form-item>
<el-form-item label="纳税人身份">
<el-select v-model="formdata.user" placeholder="请选择">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
<el-select v-model="formdata.user" multiple placeholder="请选择" :collapse-tags="true" clearable>
<el-option v-for="(item,index) in paytaxtype" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
</el-select>
</el-form-item>
<el-form-item label="纳税人税率">
<el-select v-model="formdata.user" placeholder="请选择">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
<el-select v-model="formdata.user" multiple placeholder="请选择" :collapse-tags="true" clearable>
<el-option v-for="(item,index) in taxrate" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
</el-select>
</el-form-item>
</el-row>
......@@ -272,6 +266,7 @@
import skeleton from '@/views/project/projectList/component/skeleton';
import api from '@/api/enterpriseData/enterpriseData.js';
import dataRegion from '@/assets/json/provinceTree'
import { getDicts } from "@/api/system/dict/data";
export default {
name: 'laborSubcontracting',
components:{skeleton},
......@@ -280,6 +275,12 @@
encodeStr,
formdata:{},
addressList:[],
arealist:[],
creditlevel:[],
customstate:[],
credential:[],
paytaxtype:[],
taxrate:[],
provienceprops:{
checkStrictly:true,
multiple:true,
......@@ -496,9 +497,36 @@
}
},
created() {
this.dataRegion()
this.init()
},
methods:{
init(){
//地区
getDicts('arealist').then(res=>{
this.arealist = res.data
})
//评价等级
getDicts('credit_level').then(res=>{
this.creditlevel = res.data
})
//供应商状态
getDicts('custom_state').then(res=>{
this.customstate = res.data
})
//纳税人身份
getDicts('paytaxtype').then(res=>{
this.paytaxtype = res.data
})
//纳税人税率
getDicts('taxrate').then(res=>{
this.taxrate = res.data
})
//资质等级
getDicts('credential').then(res=>{
this.credential = res.data
})
this.dataRegion()
},
handleCurrentChange(){
},
......
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