diff --git a/lidee-admin/src/main/resources/application-local.yaml b/lidee-admin/src/main/resources/application-local.yaml
index 3da250c..22ded7a 100644
--- a/lidee-admin/src/main/resources/application-local.yaml
+++ b/lidee-admin/src/main/resources/application-local.yaml
@@ -9,23 +9,43 @@ spring:
datasource:
master:
# 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
password: root
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
password: root
slave: # 日志库单独
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
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:
- host: 127.0.0.1 # 地址
+ host: 192.168.126.128 # 地址
port: 6379 # 端口
database: 2 # 数据库索引
- password: lidee@123 # 密码,建议生产环境开启
+ password: 123456 # 密码,建议生产环境开启
--- #################### 地代码平台相关配置 ####################
diff --git a/lidee-core/pom.xml b/lidee-core/pom.xml
index f04558d..4719287 100644
--- a/lidee-core/pom.xml
+++ b/lidee-core/pom.xml
@@ -92,5 +92,10 @@
lidee-service-infra-api
${lidee.version}
+
+ com.oracle.database.nls
+ orai18n
+ 21.1.0.0
+
diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/config/job/SaSetdtlSyncJob.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/config/job/SaSetdtlSyncJob.java
new file mode 100644
index 0000000..2c55526
--- /dev/null
+++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/config/job/SaSetdtlSyncJob.java
@@ -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;
+ }
+}
diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/GrBiSaSetdtl.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/GrBiSaSetdtl.java
new file mode 100644
index 0000000..8f9fc01
--- /dev/null
+++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/GrBiSaSetdtl.java
@@ -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;
+}
diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/GrBiSaSetdtlMapper.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/GrBiSaSetdtlMapper.java
new file mode 100644
index 0000000..fd5bcd8
--- /dev/null
+++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/GrBiSaSetdtlMapper.java
@@ -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 {
+
+ @DS(value = "#dataSourceType")
+ default GrBiSaSetdtl getLastUpdated(@Param("dataSourceType") String dataSourceType) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.orderByDesc("UPDATE_TIME");
+ wrapper.last("limit 1");
+ return this.selectOne(wrapper);
+ }
+
+ @DS(value = "#dataSourceType")
+ default List 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 queryWrapper = new QueryWrapper<>();
+ queryWrapper.gt("UPDATE_TIME", startTime);
+ return this.selectList(queryWrapper);
+ } catch (Exception e) {
+ // 处理异常
+ return Collections.emptyList();
+ }
+ }
+
+ @DS(value = "#dataSourceType")
+ default List queryByIds(@Param("dataSourceType") String dataSourceType, Set 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);
+ }
+
+}
diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IGrBiSaSetdtlService.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IGrBiSaSetdtlService.java
new file mode 100644
index 0000000..55106b0
--- /dev/null
+++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IGrBiSaSetdtlService.java
@@ -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 {
+
+ //同步销售明细表
+ Integer saSetdtlSyncJob();
+
+}
diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/GrBiSaSetdtlServiceImpl.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/GrBiSaSetdtlServiceImpl.java
new file mode 100644
index 0000000..ea380de
--- /dev/null
+++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/GrBiSaSetdtlServiceImpl.java
@@ -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 implements IGrBiSaSetdtlService {
+
+ /**
+ * 同步销售明细表
+ *
+ * @return
+ */
+ @Override
+ public Integer saSetdtlSyncJob() {
+ //获取本地mysql数据库中表中UPDATE_TIME最新的数据
+ GrBiSaSetdtl grBiSaSetdtl = this.baseMapper.getLastUpdated(lideeYunJiBaseConstant.DS_ERP_BI_DATA);
+
+ //本地不存在空的情况 之前会手动导入的情况
+ //查询大于本地最大更新时间的oracle里的数据
+ List 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 grBiSaSetdtlList) {
+
+ //需要新增的数据
+ List needSaveList = grBiSaSetdtlList;
+ List needUpdateList = null;
+ //校验哪些数据已经存在需要更新
+ List existList = this.baseMapper.queryByIds(lideeYunJiBaseConstant.DS_ERP_BI_DATA, grBiSaSetdtlList.stream().map(GrBiSaSetdtl::getSASETTLEDTLID).collect(Collectors.toSet()));
+ if (CollUtil.isNotEmpty(existList)) {
+ Set 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 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 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;
+ }
+
+
+}
diff --git a/lidee-tool/tool-common/src/main/java/com/lideeyunji/tool/framework/common/constant/lideeYunJiBaseConstant.java b/lidee-tool/tool-common/src/main/java/com/lideeyunji/tool/framework/common/constant/lideeYunJiBaseConstant.java
index e287e20..b8ee9fd 100644
--- a/lidee-tool/tool-common/src/main/java/com/lideeyunji/tool/framework/common/constant/lideeYunJiBaseConstant.java
+++ b/lidee-tool/tool-common/src/main/java/com/lideeyunji/tool/framework/common/constant/lideeYunJiBaseConstant.java
@@ -9,6 +9,8 @@ public interface lideeYunJiBaseConstant {
//多数据源
String DS_lideeyunji="lideeyunji";//低代码
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 BASE_PACKAGES="com.lideeyunji";//公共包名称