11 Commits

Author SHA1 Message Date
hardy.liu
8bae1cbd35 销售明细表定时任务 2026-03-06 15:00:08 +08:00
chy
ee7510f41e 修改统一身份认证 2026-03-02 15:15:41 +08:00
chy
44279d9637 修改统一身份认证 2026-03-02 10:34:45 +08:00
860afb9812 Merge pull request '新增字段' (#23) from dpx20260211 into master
Reviewed-on: #23
2026-02-28 08:44:07 +08:00
dongpx
0ef88ce81d 新增字段 2026-02-28 08:24:32 +08:00
1b81782767 Merge pull request '应用查询按字典排序值排序' (#21) from main_hhl0209 into master
Reviewed-on: #21
2026-02-25 14:01:54 +08:00
432feb11d2 Merge pull request 'dpx20260211' (#22) from dpx20260211 into master
Reviewed-on: #22
2026-02-25 14:01:28 +08:00
dongpx
1173de364c 新增字段 2026-02-25 10:06:15 +08:00
dongpx
7fb9543604 新增字段 2026-02-14 00:38:17 +08:00
dongpx
bac75778ad 修改字段长度 2026-02-12 11:45:36 +08:00
dongpx
3dd11b9f37 新增字段 2026-02-12 08:38:19 +08:00
15 changed files with 390 additions and 7 deletions

View File

@@ -7,4 +7,30 @@
表名xxx_demo 表名xxx_demo
字段 类型 长度 字段 类型 长度
xx_aa varchar 20 xx_aa varchar 20
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
日期2026-02-11新增字段
表名yunji_report_field
字段 类型 长度 字段说明
is_dynamic_group varchar 60 是否动态分组 Y|N
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
日期2026-02-12修改字段长度
表名yunji_report_field
字段 类型 长度 字段说明
is_hide_dimension varchar 255
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
日期2026-02-13新增字段
表名yunji_report_field
字段 类型 长度 字段说明
width varchar 60 单元格宽度
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
日期2026-02-24新增字段
表名yunji_report_field
字段 类型 长度 字段说明
search_default_value varchar 150 查询控件默认值
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
日期2026-02-27新增字段
表名yunji_report_field
字段 类型 长度 字段说明
is_hide_search varchar 60 查询控件是否隐藏

View File

@@ -9,23 +9,43 @@ spring:
datasource: datasource:
master: master:
# MYSQL数据库 主库,业务库 # MYSQL数据库 主库,业务库
url: jdbc:mysql://127.0.0.1:3306/gr_report?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 # url: jdbc:mysql://127.0.0.1:3306/gr_report?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
url: jdbc:mysql://192.168.126.128:33306/gr_report?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
username: root username: root
password: root password: root
lideeyunji: # 从库,框架库 lideeyunji: # 从库,框架库
url: jdbc:mysql://127.0.0.1:3306/gr_report?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 # url: jdbc:mysql://127.0.0.1:3306/gr_report?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
url: jdbc:mysql://192.168.126.128:33306/gr_report?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
username: root username: root
password: root password: root
slave: # 日志库单独 slave: # 日志库单独
lazy: true # 开启懒加载,保证启动速度 lazy: true # 开启懒加载,保证启动速度
url: jdbc:mysql://127.0.0.1:3306/gr_report?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 # url: jdbc:mysql://127.0.0.1:3306/gr_report?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
url: jdbc:mysql://192.168.126.128:33306/gr_report?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
username: root username: root
password: root password: root
oracle_gryybi: # 报表平台 oracle
url: jdbc:oracle:thin:@//192.168.1.247:1521/gryy?oracle.jdbc.defaultNChar=true&oracle.jdbc.convertNcharLiterals=true
username: GRYYBI
password: xxb147258367
# driver-class-name: oracle.jdbc.OracleDriver
driver-class-name: oracle.jdbc.driver.OracleDriver
erp_bi_data: # 报表平台 mysql
# url: jdbc:mysql://127.0.0.1:3306/erp_bi_data?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
url: jdbc:mysql://192.168.126.128:33306/erp_bi_data?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
username: root
password: root
# redis:
# host: 127.0.0.1 # 地址
# port: 6379 # 端口
# database: 2 # 数据库索引
# password: lidee@123 # 密码,建议生产环境开启
redis: redis:
host: 127.0.0.1 # 地址 host: 192.168.126.128 # 地址
port: 6379 # 端口 port: 6379 # 端口
database: 2 # 数据库索引 database: 2 # 数据库索引
password: lidee@123 # 密码,建议生产环境开启 password: 123456 # 密码,建议生产环境开启
--- #################### 地代码平台相关配置 #################### --- #################### 地代码平台相关配置 ####################

View File

@@ -3,6 +3,7 @@ spring:
name: lideeyunji-server name: lideeyunji-server
profiles: profiles:
active: local # 读取配置 active: local # 读取配置
#active: prod # 读取配置
main: main:
allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。

View File

@@ -92,5 +92,10 @@
<artifactId>lidee-service-infra-api</artifactId> <artifactId>lidee-service-infra-api</artifactId>
<version>${lidee.version}</version> <version>${lidee.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.oracle.database.nls</groupId>
<artifactId>orai18n</artifactId>
<version>21.1.0.0</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -0,0 +1,37 @@
package com.lideeyunji.core.framework.config.job;
import com.lideeyunji.core.framework.service.IGrBiSaSetdtlService;
import com.lideeyunji.core.framework.service.ILideeYunJiService;
import com.lideeyunji.tool.framework.quartz.core.handler.JobHandler;
import com.lideeyunji.tool.framework.tenant.core.aop.TenantIgnore;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 同步销售明细表
* oracle gryybi GR_BI_SA_SETDTL --> mysql erp_bi_data GR_BI_SA_SETDTL
*/
@Component
@Slf4j
public class SaSetdtlSyncJob implements JobHandler {
@Autowired
private ILideeYunJiService lideeYunJiService;
@Autowired
private IGrBiSaSetdtlService grBiSaSetdtlService;
@Override
@TenantIgnore
public String execute(String param) throws Exception {
log.info("*********** 开始同步销售明细表 ************");
// Integer cou = this.lideeYunJiService.saSetdtlSyncJob();
Integer cou = this.grBiSaSetdtlService.saSetdtlSyncJob();
String resultStr = "*********** 同步销售明细表,共保存了" + cou + "条数据 ************";
log.info(resultStr);
return resultStr;
}
}

View File

@@ -0,0 +1,76 @@
package com.lideeyunji.core.framework.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
@TableName("GR_BI_SA_SETDTL")
@Data
@EqualsAndHashCode
public class GrBiSaSetdtl implements Serializable {
private final static long serialVersionUID = 1L;
@TableId(value = "SASETTLEDTLID", type = IdType.INPUT)
private Integer SASETTLEDTLID;
@TableField(value = "SASETTLEID")
private Integer SASETTLEID;
@TableField(value = "USESTATUS")
private Integer USESTATUS;
@TableField(value = "UPDATE_TIME")
private String UPDATETIME;
@TableField(value = "USEDATE")
private Date USEDATE;
@TableField(value = "USEYEAR")
private Integer USEYEAR;
@TableField(value = "USEMONTH")
private Integer USEMONTH;
@TableField(value = "SALEZONEID")
private Integer SALEZONEID;
@TableField(value = "SALEZONENAME")
private String SALEZONENAME;
@TableField(value = "PROVINCEID")
private Integer PROVINCEID;
@TableField(value = "PROVINCENAME")
private String PROVINCENAME;
@TableField(value = "SALETYPE")
private Integer SALETYPE;
@TableField(value = "SALETYPENAME")
private String SALETYPENAME;
@TableField(value = "CUSTOMID")
private Integer CUSTOMID;
@TableField(value = "CUSTOMNAME")
private String CUSTOMNAME;
@TableField(value = "SALERID")
private Integer SALERID;
@TableField(value = "SALERNAME")
private String SALERNAME;
@TableField(value = "DOSAGEID")
private Integer DOSAGEID;
@TableField(value = "DOSAGENAME")
private String DOSAGENAME;
@TableField(value = "STDGOODSNAME")
private String STDGOODSNAME;
@TableField(value = "GOODSID")
private Integer GOODSID;
@TableField(value = "GOODSNAME")
private String GOODSNAME;
@TableField(value = "GOODSTYPE")
private String GOODSTYPE;
@TableField(value = "GOODSUNIT")
private String GOODSUNIT;
@TableField(value = "SAQTY")
private Integer SAQTY;
@TableField(value = "SAMONEY")
private Integer SAMONEY;
@TableField(value = "SAMONEYTX")
private Integer SAMONEYTX;
@TableField(value = "COST")
private Integer COST;
@TableField(value = "PROFIT")
private Integer PROFIT;
}

View File

@@ -107,5 +107,17 @@ public class ReportFieldEntity extends BaseTenantEntity {
//隐藏列的,表单不显示该字段 //隐藏列的,表单不显示该字段
private String isHideCol; private String isHideCol;
//是否动态分组 Y|N
private String isDynamicGroup;
//单元格宽度
private String width;
//查询控件默认值
private String searchDefaultValue;
//查询控件隐藏
private String isHideSearch;
} }

View File

@@ -0,0 +1,55 @@
package com.lideeyunji.core.framework.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lideeyunji.core.framework.entity.GrBiSaSetdtl;
import org.apache.ibatis.annotations.Param;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Set;
public interface GrBiSaSetdtlMapper extends BaseMapper<GrBiSaSetdtl> {
@DS(value = "#dataSourceType")
default GrBiSaSetdtl getLastUpdated(@Param("dataSourceType") String dataSourceType) {
QueryWrapper<GrBiSaSetdtl> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("UPDATE_TIME");
wrapper.last("limit 1");
return this.selectOne(wrapper);
}
@DS(value = "#dataSourceType")
default List<GrBiSaSetdtl> getByUpdateTime(@Param("dataSourceType") String dataSourceType, String updateTime) {
try {
// 假设 updateTime 格式为 "yyyy-MM-dd HH:mm:ss"
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startTime = sdf.parse(updateTime);
QueryWrapper<GrBiSaSetdtl> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("UPDATE_TIME", startTime);
return this.selectList(queryWrapper);
} catch (Exception e) {
// 处理异常
return Collections.emptyList();
}
}
@DS(value = "#dataSourceType")
default List<GrBiSaSetdtl> queryByIds(@Param("dataSourceType") String dataSourceType, Set<Integer> ids) {
return this.selectBatchIds(ids);
}
@DS(value = "#dataSourceType")
default int save(@Param("dataSourceType") String dataSourceType, GrBiSaSetdtl grBiSaSetdtl) {
return this.insert(grBiSaSetdtl);
}
@DS(value = "#dataSourceType")
default int update(@Param("dataSourceType") String dataSourceType, GrBiSaSetdtl grBiSaSetdtl) {
return this.updateById(grBiSaSetdtl);
}
}

View File

@@ -72,5 +72,17 @@ public class ReportFieldVo extends ReportFieldIdVo {
//隐藏列的,表单不显示该字段 //隐藏列的,表单不显示该字段
private String isHideCol; private String isHideCol;
//是否动态分组 Y|N
private String isDynamicGroup;
//单元格宽度
private String width;
//查询控件默认值
private String searchDefaultValue;
//查询控件隐藏
private String isHideSearch;
} }

View File

@@ -0,0 +1,11 @@
package com.lideeyunji.core.framework.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lideeyunji.core.framework.entity.GrBiSaSetdtl;
public interface IGrBiSaSetdtlService extends IService<GrBiSaSetdtl> {
//同步销售明细表
Integer saSetdtlSyncJob();
}

View File

@@ -0,0 +1,112 @@
package com.lideeyunji.core.framework.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lideeyunji.core.framework.entity.GrBiSaSetdtl;
import com.lideeyunji.core.framework.mapper.GrBiSaSetdtlMapper;
import com.lideeyunji.core.framework.service.IGrBiSaSetdtlService;
import com.lideeyunji.tool.framework.common.constant.lideeYunJiBaseConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j
@Service
public class GrBiSaSetdtlServiceImpl extends ServiceImpl<GrBiSaSetdtlMapper, GrBiSaSetdtl> implements IGrBiSaSetdtlService {
/**
* 同步销售明细表
*
* @return
*/
@Override
public Integer saSetdtlSyncJob() {
//获取本地mysql数据库中表中UPDATE_TIME最新的数据
GrBiSaSetdtl grBiSaSetdtl = this.baseMapper.getLastUpdated(lideeYunJiBaseConstant.DS_ERP_BI_DATA);
//本地不存在空的情况 之前会手动导入的情况
//查询大于本地最大更新时间的oracle里的数据
List<GrBiSaSetdtl> grBiSaSetdtlList = this.baseMapper.getByUpdateTime(lideeYunJiBaseConstant.DS_ORACLE_GRYYBI, grBiSaSetdtl.getUPDATETIME());
if (CollUtil.isEmpty(grBiSaSetdtlList)) {
return 0;
}
//保存数据
return this.saveSyncData(grBiSaSetdtlList);
}
//保存同步数据到本地
@Transactional
public Integer saveSyncData(List<GrBiSaSetdtl> grBiSaSetdtlList) {
//需要新增的数据
List<GrBiSaSetdtl> needSaveList = grBiSaSetdtlList;
List<GrBiSaSetdtl> needUpdateList = null;
//校验哪些数据已经存在需要更新
List<GrBiSaSetdtl> existList = this.baseMapper.queryByIds(lideeYunJiBaseConstant.DS_ERP_BI_DATA, grBiSaSetdtlList.stream().map(GrBiSaSetdtl::getSASETTLEDTLID).collect(Collectors.toSet()));
if (CollUtil.isNotEmpty(existList)) {
Set<Integer> needUpdateIdSet = existList.stream().map(GrBiSaSetdtl::getSASETTLEDTLID).collect(Collectors.toSet());
needSaveList = grBiSaSetdtlList
.stream()
.filter(grBiSaSetdtl -> {
return !needUpdateIdSet.contains(grBiSaSetdtl.getSASETTLEDTLID());
})
.collect(Collectors.toList());
needUpdateList = grBiSaSetdtlList
.stream()
.filter(grBiSaSetdtl -> {
return needUpdateIdSet.contains(grBiSaSetdtl.getSASETTLEDTLID());
})
.collect(Collectors.toList());
}
//将orcale数据集合分割成100条一组、
Integer result = 0;
if (CollUtil.isNotEmpty(needSaveList)) {
result += this.saveBatch(needSaveList);
}
if (CollUtil.isNotEmpty(needUpdateList)) {
result += this.updateBatch(needUpdateList);
}
return result;
}
//批量新增
@Transactional
public Integer saveBatch(List<GrBiSaSetdtl> grBiSaSetdtlList) {
Integer result = 0;
for (GrBiSaSetdtl grBiSaSetdtl : grBiSaSetdtlList) {
int re = this.baseMapper.save(lideeYunJiBaseConstant.DS_ERP_BI_DATA, grBiSaSetdtl);
if (re < 1) {
throw new RuntimeException("批量新增异常");
}
result += re;
}
return result;
}
//批量更新
@Transactional
public Integer updateBatch(List<GrBiSaSetdtl> grBiSaSetdtlList) {
Integer result = 0;
for (GrBiSaSetdtl grBiSaSetdtl : grBiSaSetdtlList) {
int re = this.baseMapper.update(lideeYunJiBaseConstant.DS_ERP_BI_DATA, grBiSaSetdtl);
if (re < 1) {
throw new RuntimeException("批量新增异常");
}
result += re;
}
return result;
}
}

View File

@@ -382,6 +382,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, ReportEntity> i
entity.setIsFixedColumn(vo.getIsFixedColumn()); //2026-02-10 新增 entity.setIsFixedColumn(vo.getIsFixedColumn()); //2026-02-10 新增
entity.setFixedColumnValue(vo.getFixedColumnValue()); //2026-02-10 新增 entity.setFixedColumnValue(vo.getFixedColumnValue()); //2026-02-10 新增
entity.setIsHideCol(vo.getIsHideCol()); //2026.2.10 新增 entity.setIsHideCol(vo.getIsHideCol()); //2026.2.10 新增
entity.setSearchDefaultValue(vo.getSearchDefaultValue());
entity.setIsHideSearch(vo.getIsHideSearch());
entity.setWidth(vo.getWidth());
entity.setIsDynamicGroup(vo.getIsDynamicGroup());
entity.setHasChildren(vo.getHasChildren()); entity.setHasChildren(vo.getHasChildren());
entity.setParentFieldCode(vo.getParentFieldCode()); entity.setParentFieldCode(vo.getParentFieldCode());
entity.setParentFieldName(vo.getParentFieldName()); entity.setParentFieldName(vo.getParentFieldName());

View File

@@ -70,13 +70,14 @@
WHERE WHERE
report.is_deleted = 0 report.is_deleted = 0
AND field.is_deleted = 0 AND field.is_deleted = 0
AND field.query_is_db = 'Y' -- AND field.query_is_db = 'Y'
AND report.id = #{reportId} AND report.id = #{reportId}
ORDER BY ORDER BY
field.sort_num ASC, field.sort_num ASC,
field.id ASC field.id ASC
</select> </select>
<select id="getExcelExportFieldList" resultType="map"> <select id="getExcelExportFieldList" resultType="map">
SELECT SELECT
df.field_code as "field_code", df.field_code as "field_code",

View File

@@ -160,6 +160,15 @@ public class AuthController {
return success(authService.refreshToken(refreshToken)); return success(authService.refreshToken(refreshToken));
} }
@PostMapping("/user-info")
@PermitAll
@Operation(tags = "根据token获取用户信息",summary = "根据token获取用户信息")
@Parameter(name = "refreshToken", description = "根据token获取用户信息", required = true)
@OperateLog(enable = false) // 避免 Post 请求被记录操作日志
public CommonResult<AuthLoginRespVO> getUerInfo(@RequestParam("refreshToken") String refreshToken) {
return success(authService.refreshToken(refreshToken));
}
@GetMapping("/get-permission-info") @GetMapping("/get-permission-info")
@Operation(tags = "授权管理",summary = "获取登录用户的权限信息") @Operation(tags = "授权管理",summary = "获取登录用户的权限信息")
public CommonResult<AuthPermissionInfoRespVO> getPermissionInfo() { public CommonResult<AuthPermissionInfoRespVO> getPermissionInfo() {

View File

@@ -9,6 +9,8 @@ public interface lideeYunJiBaseConstant {
//多数据源 //多数据源
String DS_lideeyunji="lideeyunji";//低代码 String DS_lideeyunji="lideeyunji";//低代码
String DS_MASTER="master";//主服务 String DS_MASTER="master";//主服务
String DS_ORACLE_GRYYBI="oracle_gryybi";//报表平台 oracle
String DS_ERP_BI_DATA="erp_bi_data";//报表平台 mysql
String REQUEST_URL_START="/lideeyunji";//公共请求 String REQUEST_URL_START="/lideeyunji";//公共请求
String BASE_PACKAGES="com.lideeyunji";//公共包名称 String BASE_PACKAGES="com.lideeyunji";//公共包名称