Compare commits
13 Commits
dev_js_202
...
21fe5196be
| Author | SHA1 | Date | |
|---|---|---|---|
| 21fe5196be | |||
|
|
fde5cfe3b2 | ||
|
|
70e5ed81f6 | ||
|
|
5b25cb3766 | ||
|
|
66028bf17a | ||
|
|
ebf54b4ecf | ||
|
|
8f22732f04 | ||
|
|
e230587f66 | ||
|
|
3fb081217f | ||
|
|
e882dd280e | ||
| eca53d5424 | |||
| f9d4b08495 | |||
| 32627270d1 |
@@ -30,7 +30,7 @@ spring:
|
|||||||
erp_bi_data: # 报表平台 mysql
|
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://127.0.0.1:3306/erp_bi_data?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
|
||||||
username: root
|
username: root
|
||||||
password: root
|
password: gryy@8888
|
||||||
redis:
|
redis:
|
||||||
host: 127.0.0.1 # 地址
|
host: 127.0.0.1 # 地址
|
||||||
port: 6379 # 端口
|
port: 6379 # 端口
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package com.lideeyunji.core.framework.config.job;
|
||||||
|
|
||||||
|
import com.lideeyunji.core.framework.service.IGrBiSaAggService;
|
||||||
|
import com.lideeyunji.tool.framework.common.constant.lideeYunJiBaseConstant;
|
||||||
|
import com.lideeyunji.tool.framework.quartz.core.handler.JobHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算销售报表
|
||||||
|
* erp_bi_data.GR_BI_PUB_GOODS
|
||||||
|
* erp_bi_data.GR_BI_PUB_SALEZONE
|
||||||
|
* erp_bi_data.GR_BI_PUB_PROVINCE
|
||||||
|
* erp_bi_data.GR_BI_PUB_SALETYPE
|
||||||
|
* erp_bi_data.GR_BI_PUB_DOSAGE
|
||||||
|
* erp_bi_data.GR_BI_PUB_CUSTOM
|
||||||
|
* erp_bi_data.GR_BI_PUB_SALER
|
||||||
|
* --> mysql erp_bi_data.yunji_gr_bi_sa_agg
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component("generateSalesReportJob")
|
||||||
|
public class GenerateSalesReportJob implements JobHandler {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IGrBiSaAggService grBiSaAggService;
|
||||||
|
public String execute(String param) {
|
||||||
|
log.info("*********** 开始生成销售报表 ************");
|
||||||
|
grBiSaAggService.generateSalesReportJob(lideeYunJiBaseConstant.DS_ERP_BI_DATA);
|
||||||
|
log.info("*********** 生成销售报表完成 ************");
|
||||||
|
return "*********** 生成销售报表完成 ************";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,8 +17,6 @@ import org.springframework.stereotype.Component;
|
|||||||
@Component("SaSetdtlSyncJob")
|
@Component("SaSetdtlSyncJob")
|
||||||
public class SaSetdtlSyncJob implements JobHandler {
|
public class SaSetdtlSyncJob implements JobHandler {
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ILideeYunJiService lideeYunJiService;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IGrBiSaSetdtlService grBiSaSetdtlService;
|
private IGrBiSaSetdtlService grBiSaSetdtlService;
|
||||||
|
|||||||
@@ -0,0 +1,136 @@
|
|||||||
|
|
||||||
|
package com.lideeyunji.core.framework.config.job;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import com.lideeyunji.core.framework.service.ILideeYunJiService;
|
||||||
|
import com.lideeyunji.tool.framework.common.util.http.HttpUtils;
|
||||||
|
import com.lideeyunji.tool.framework.quartz.core.handler.JobHandler;
|
||||||
|
import com.lideeyunji.tool.framework.tenant.core.aop.TenantIgnore;
|
||||||
|
import com.lideeyunji.tool.framework.yunji.component.redis.lideeYunjiRedisUtils;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.ehcache.xml.model.CacheTemplate;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.sql.*;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存模块使用记录 能耗模块使用记录
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component("anyToGrBiNh")
|
||||||
|
public class anyToGrBiNh implements JobHandler {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private lideeYunjiRedisUtils redisUtil;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ILideeYunJiService lideeYunJiService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@TenantIgnore
|
||||||
|
public String execute(String param) {
|
||||||
|
log.info("*********** 同步能耗数据 ************");
|
||||||
|
|
||||||
|
getToken();
|
||||||
|
String resultStr = "*********** 同步能耗数据保存成功 ************";
|
||||||
|
log.info(resultStr);
|
||||||
|
return resultStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getToken() {
|
||||||
|
try {
|
||||||
|
String nhtoken = redisUtil.get("nh_token", String.class);
|
||||||
|
|
||||||
|
System.out.println(nhtoken);
|
||||||
|
if(nhtoken==null){
|
||||||
|
|
||||||
|
// 2. POST 表单请求
|
||||||
|
Map<String, String> params = new HashMap<>();
|
||||||
|
params.put("fLoginname", "9287ee99ae49b47dc7ce1746eac04f8b");
|
||||||
|
params.put("fPassword", "d23d0731bcf61d824aa30372da5fae0b");
|
||||||
|
params.put("loginType", "password");
|
||||||
|
params.put("projectType", "4");
|
||||||
|
String postResult = HttpUtils.doPost("http://111.39.171.64:8090/SubstationWEBV2/user/login", params, null);
|
||||||
|
|
||||||
|
JSONObject jsonObject = new JSONObject(postResult);
|
||||||
|
jsonObject= new JSONObject(jsonObject.get("data").toString());
|
||||||
|
redisUtil.set("nh_token",jsonObject.get("token"),(Long)jsonObject.get("tokenExpireTime"));
|
||||||
|
System.out.println(jsonObject.get("token"));
|
||||||
|
getNhsj(jsonObject.get("token").toString());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
nhtoken = redisUtil.get("nh_token").toString();
|
||||||
|
getNhsj(nhtoken);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getNhsj(String token){
|
||||||
|
try {
|
||||||
|
Map<String, String> headers = new HashMap<>();
|
||||||
|
headers.put("Authorization", token);
|
||||||
|
String getResult = HttpUtils.doGet("http://111.39.171.64:8090/SubstationWEBV2/main/Compare/overview?fCoaccountno=1", headers);
|
||||||
|
System.out.println("GET Response:\n" + getResult);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 3. POST JSON 请求
|
||||||
|
// String jsonBody = "{\"name\":\"Alice\",\"age\":25}";
|
||||||
|
// Map<String, String> headers = new HashMap<>();
|
||||||
|
// headers.put("Authorization", "Bearer your_token_here");
|
||||||
|
// String jsonResult = HttpUtils.doPostJson("https://api.example.com/user", jsonBody, headers);
|
||||||
|
// System.out.println("POST JSON Response:\n" + jsonResult);
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void main(String[] args) {
|
||||||
|
getToken();
|
||||||
|
// 2. POST 表单请求
|
||||||
|
// Map<String, String> params = new HashMap<>();
|
||||||
|
// params.put("fLoginname", "2613504b593d16343ccf368879f9519c");
|
||||||
|
// params.put("fPassword", "c7d967eaeaa0963fe33c740b46316590");
|
||||||
|
// params.put("loginType", "password");
|
||||||
|
// params.put("projectType", "4");
|
||||||
|
// String postResult = HttpUtils.doPost("http://111.39.171.64:8090/SubstationWEBV2/user/login", params, null);
|
||||||
|
// System.out.println("POST Form Response:\n" + postResult);
|
||||||
|
// JSONObject jsonObject = new JSONObject(postResult);
|
||||||
|
// jsonObject= new JSONObject(jsonObject.get("data").toString());
|
||||||
|
//System.out.println(jsonObject.get("token"));
|
||||||
|
|
||||||
|
// 1. GET 请求
|
||||||
|
// String getResult = HttpUtils.doGet("https://api.example.com/data", null);
|
||||||
|
// System.out.println("GET Response:\n" + getResult);
|
||||||
|
|
||||||
|
|
||||||
|
// 3. POST JSON 请求
|
||||||
|
// String jsonBody = "{\"name\":\"Alice\",\"age\":25}";
|
||||||
|
// Map<String, String> headers = new HashMap<>();
|
||||||
|
// headers.put("Authorization", "Bearer your_token_here");
|
||||||
|
// String jsonResult = HttpUtils.doPostJson("https://api.example.com/user", jsonBody, headers);
|
||||||
|
// System.out.println("POST JSON Response:\n" + jsonResult);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,142 @@
|
|||||||
|
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("yunji_gr_bi_sa_agg")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode
|
||||||
|
public class GrBiSaAgg implements Serializable {
|
||||||
|
private final static long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@TableId(value = "ID", type = IdType.INPUT)
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
@TableField(value = "USEYEAR")
|
||||||
|
private Integer useYear;
|
||||||
|
|
||||||
|
@TableField(value = "USEMONTH")
|
||||||
|
private Integer useMonth;
|
||||||
|
|
||||||
|
@TableField(value = "ZONEID")
|
||||||
|
private String zoneId;
|
||||||
|
|
||||||
|
@TableField(value = "ZONENAME")
|
||||||
|
private String zoneName;
|
||||||
|
|
||||||
|
@TableField(value = "SALETYPEID")
|
||||||
|
private String saleTypeId;
|
||||||
|
|
||||||
|
@TableField(value = "SALETYPENAME")
|
||||||
|
private String saleTypeName;
|
||||||
|
|
||||||
|
@TableField(value = "CUSTOMID")
|
||||||
|
private String customId;
|
||||||
|
|
||||||
|
@TableField(value = "CUSTOMNAME")
|
||||||
|
private String customName;
|
||||||
|
|
||||||
|
@TableField(value = "DOSAGEID")
|
||||||
|
private String dosageId;
|
||||||
|
|
||||||
|
@TableField(value = "DOSAGENAME")
|
||||||
|
private String dosageName;
|
||||||
|
|
||||||
|
@TableField(value = "GOODSNAME")
|
||||||
|
private String goodsName;
|
||||||
|
|
||||||
|
@TableField(value = "GOODSID")
|
||||||
|
private String goodsId;
|
||||||
|
|
||||||
|
@TableField(value = "PROVINCEID")
|
||||||
|
private String provinceId;
|
||||||
|
|
||||||
|
@TableField(value = "PROVINCENAME")
|
||||||
|
private String provinceName;
|
||||||
|
|
||||||
|
@TableField(value = "SALERID")
|
||||||
|
private String salerId;
|
||||||
|
|
||||||
|
@TableField(value = "SALERNAME")
|
||||||
|
private String salerName;
|
||||||
|
|
||||||
|
@TableField(value = "MONTHSAQTY")
|
||||||
|
private String monthSaqty;
|
||||||
|
|
||||||
|
@TableField(value = "THISSAQTY")
|
||||||
|
private String thisSaqty;
|
||||||
|
|
||||||
|
@TableField(value = "LASTSAQTY")
|
||||||
|
private String lastSaqty;
|
||||||
|
|
||||||
|
@TableField(value = "MONTHSAMONEY")
|
||||||
|
private String monthSaMoney;
|
||||||
|
|
||||||
|
@TableField(value = "THISSAMONEY")
|
||||||
|
private String thisSaMoney;
|
||||||
|
|
||||||
|
@TableField(value = "LASTSAMONEY")
|
||||||
|
private String lastSaMoney;
|
||||||
|
|
||||||
|
@TableField(value = "MONTHPROFIT")
|
||||||
|
private String monthProfit;
|
||||||
|
|
||||||
|
@TableField(value = "THISPROFIT")
|
||||||
|
private String thisProfit;
|
||||||
|
|
||||||
|
@TableField(value = "LASTPROFIT")
|
||||||
|
private String lastProfit;
|
||||||
|
|
||||||
|
@TableField(value = "MONTHCOST")
|
||||||
|
private String monthCost;
|
||||||
|
|
||||||
|
@TableField(value = "THISCOST")
|
||||||
|
private String thisCost;
|
||||||
|
|
||||||
|
@TableField(value = "LASTCOST")
|
||||||
|
private String lastCost;
|
||||||
|
|
||||||
|
@TableField(value = "MONTHPROFITRATE")
|
||||||
|
private String monthProfitRate;
|
||||||
|
|
||||||
|
@TableField(value = "THISPROFITRATE")
|
||||||
|
private String thisProfitRate;
|
||||||
|
|
||||||
|
@TableField(value = "LASTPROFITRATE")
|
||||||
|
private String lastProfitRate;
|
||||||
|
|
||||||
|
@TableField(value = "MONTHSAMONEYSHARE")
|
||||||
|
private String monthSaMoneyShare;
|
||||||
|
|
||||||
|
@TableField(value = "THISSAMONEYSHARE")
|
||||||
|
private String thisSaMoneyShare;
|
||||||
|
|
||||||
|
@TableField(value = "LASTSAMONEYSHARE")
|
||||||
|
private String lastSaMoneyShare;
|
||||||
|
|
||||||
|
@TableField(value = "MONTHPROFITSHARE")
|
||||||
|
private String monthProfitShare;
|
||||||
|
|
||||||
|
@TableField(value = "THISPROFITSHARE")
|
||||||
|
private String thisProfitShare;
|
||||||
|
|
||||||
|
@TableField(value = "LASTPROFITSHARE")
|
||||||
|
private String lastProfitShare;
|
||||||
|
|
||||||
|
@TableField(value = "SAMONEYGROWTH")
|
||||||
|
private String saMoneyGrowth;
|
||||||
|
|
||||||
|
@TableField(value = "PROFITGROWTH")
|
||||||
|
private String profitGrowth;
|
||||||
|
|
||||||
|
@TableField(value = "PROFITCHANGE")
|
||||||
|
private String profitChange;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package com.lideeyunji.core.framework.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.lideeyunji.core.framework.entity.GrBiSaAgg;
|
||||||
|
import com.lideeyunji.tool.framework.common.constant.lideeYunJiBaseConstant;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
@DS(lideeYunJiBaseConstant.DS_ERP_BI_DATA)
|
||||||
|
public interface GrBiSaAggMapper extends BaseMapper<GrBiSaAgg> {
|
||||||
|
|
||||||
|
|
||||||
|
List<GrBiSaAgg> generateSalesReport(@Param("pastYearMonth") Integer pastYearMonth,
|
||||||
|
@Param("currentYearMonth") Integer currentYearMonth);
|
||||||
|
|
||||||
|
int deleteSalesReport(@Param("pastYearMonth") Integer pastYearMonth,
|
||||||
|
@Param("currentYearMonth") Integer currentYearMonth);
|
||||||
|
|
||||||
|
void updateThisData();
|
||||||
|
|
||||||
|
void updateLastData();
|
||||||
|
|
||||||
|
void updateComplexCalculate1();
|
||||||
|
void updateComplexCalculate2();
|
||||||
|
void updateComplexCalculate3();
|
||||||
|
void updateComplexCalculate4();
|
||||||
|
void updateComplexCalculate5();
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.lideeyunji.core.framework.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.lideeyunji.core.framework.entity.GrBiSaAgg;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
public interface IGrBiSaAggService extends IService<GrBiSaAgg> {
|
||||||
|
|
||||||
|
//同步销售明细表
|
||||||
|
void generateSalesReportJob(@Param("dataSourceType") String dataSourceType);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
package com.lideeyunji.core.framework.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.lideeyunji.core.framework.entity.GrBiSaAgg;
|
||||||
|
import com.lideeyunji.core.framework.mapper.GrBiSaAggMapper;
|
||||||
|
import com.lideeyunji.core.framework.service.IGrBiSaAggService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class GrBiSaAggServiceImpl extends ServiceImpl<GrBiSaAggMapper, GrBiSaAgg> implements IGrBiSaAggService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算销售报表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
@DS(value = "#dataSourceType")
|
||||||
|
public void generateSalesReportJob(@Param("dataSourceType") String dataSourceType) {
|
||||||
|
//获取本地mysql数据库中表中UPDATE_TIME最新的数据
|
||||||
|
LambdaQueryWrapper<GrBiSaAgg> queryWrapper = new LambdaQueryWrapper<GrBiSaAgg>().orderByDesc(GrBiSaAgg::getUseYear, GrBiSaAgg::getUseMonth).last("LIMIT 1");
|
||||||
|
GrBiSaAgg grBiSaAgg = this.baseMapper.selectOne(queryWrapper);
|
||||||
|
int lastUserYear = 2022;
|
||||||
|
int lastUserMonth = 1;
|
||||||
|
if(grBiSaAgg != null){
|
||||||
|
lastUserYear = grBiSaAgg.getUseYear();
|
||||||
|
lastUserMonth = grBiSaAgg.getUseMonth();
|
||||||
|
}
|
||||||
|
// 获取当前时间的年和月
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
int currentYear = now.getYear();
|
||||||
|
int currentMonth = now.getMonthValue();
|
||||||
|
|
||||||
|
// 获取三个月前的时间和年月
|
||||||
|
LocalDateTime threeMonthsAgo = now.minusMonths(3);
|
||||||
|
int pastYear = threeMonthsAgo.getYear();
|
||||||
|
int pastMonth = threeMonthsAgo.getMonthValue();
|
||||||
|
|
||||||
|
log.info("最后更新的年月:{}年{}月", lastUserYear, lastUserMonth);
|
||||||
|
log.info("当前:{}年{}月", currentYear, currentMonth);
|
||||||
|
log.info("三个月前:{}年{}月", pastYear, pastMonth);
|
||||||
|
if (lastUserYear < pastYear || (lastUserYear == pastYear && lastUserMonth < pastMonth)) {
|
||||||
|
pastYear = lastUserYear;
|
||||||
|
pastMonth = lastUserMonth;
|
||||||
|
|
||||||
|
}
|
||||||
|
log.info("开始时间:{}年{}月, 结束时间:{}年{}月", pastYear, pastMonth, currentYear, currentMonth);
|
||||||
|
// 获取三个月前的数据
|
||||||
|
List<GrBiSaAgg> grBiSaSetdtlList = this.baseMapper.generateSalesReport(pastYear * 100 + pastMonth, currentYear * 100 + currentMonth);
|
||||||
|
if (CollUtil.isEmpty(grBiSaSetdtlList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//保存数据
|
||||||
|
removeAndSaveBatch(pastYear, pastMonth, currentYear, currentMonth, grBiSaSetdtlList);
|
||||||
|
this.baseMapper.updateThisData();
|
||||||
|
this.baseMapper.updateLastData();
|
||||||
|
this.baseMapper.updateComplexCalculate1();
|
||||||
|
this.baseMapper.updateComplexCalculate2();
|
||||||
|
this.baseMapper.updateComplexCalculate3();
|
||||||
|
this.baseMapper.updateComplexCalculate4();
|
||||||
|
this.baseMapper.updateComplexCalculate5();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//批量新增
|
||||||
|
|
||||||
|
public void removeAndSaveBatch(Integer pastYear, Integer pastMonth, Integer currentYear, Integer currentMonth, List<GrBiSaAgg> grBiSaSetdtlList) {
|
||||||
|
|
||||||
|
int reNum = this.baseMapper.deleteSalesReport(pastYear * 100 + pastMonth, currentYear * 100 + currentMonth);
|
||||||
|
log.info("删除数量:{}", reNum);
|
||||||
|
int result = 0;
|
||||||
|
for (GrBiSaAgg grBiSaSetdtl : grBiSaSetdtlList) {
|
||||||
|
int re = this.baseMapper.insert(grBiSaSetdtl);
|
||||||
|
if (re < 1) {
|
||||||
|
throw new RuntimeException("批量新增异常");
|
||||||
|
}
|
||||||
|
result += re;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -278,6 +278,9 @@ public class Func extends FuncBase {
|
|||||||
return fieldValObj;
|
return fieldValObj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* http post请求
|
||||||
|
* */
|
||||||
public static String sendPost(String url, Object body) throws Exception {
|
public static String sendPost(String url, Object body) throws Exception {
|
||||||
String accept = HttpRequest.post(url)
|
String accept = HttpRequest.post(url)
|
||||||
.body(Func.json2Str(body))
|
.body(Func.json2Str(body))
|
||||||
|
|||||||
@@ -0,0 +1,254 @@
|
|||||||
|
<?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.lideeyunji.core.framework.mapper.GrBiSaAggMapper">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<select id="generateSalesReport" resultType="com.lideeyunji.core.framework.entity.GrBiSaAgg">
|
||||||
|
select a.USEYEAR,
|
||||||
|
a.USEMONTH,
|
||||||
|
goods.goodsid as GOODSID,
|
||||||
|
goods.GOODSNAME,
|
||||||
|
sales.SALEZONEID as ZONEID,
|
||||||
|
sales.SALEZONENAME as ZONENAME,
|
||||||
|
province.PROVINCEID,
|
||||||
|
province.PROVINCENAME,
|
||||||
|
salestype.SALETYPEID,
|
||||||
|
salestype.SALETYPENAME,
|
||||||
|
dosage.DOSAGEID,
|
||||||
|
dosage.DOSAGENAME,
|
||||||
|
custom.CUSTOMID,
|
||||||
|
custom.CUSTOMNAME,
|
||||||
|
saler.SALERID,
|
||||||
|
saler.SALERNAME,
|
||||||
|
a.`本月销量` as MONTHSAQTY,
|
||||||
|
a.`含税销售额` as MONTHSAMONEY,
|
||||||
|
a.`销售成本` as MONTHCOST,
|
||||||
|
a.`毛利额` as MONTHPROFIT
|
||||||
|
from erp_bi_data.GR_BI_PUB_GOODS as goods
|
||||||
|
inner join erp_bi_data.GR_BI_PUB_SALEZONE as sales
|
||||||
|
inner join erp_bi_data.GR_BI_PUB_PROVINCE as province
|
||||||
|
inner join erp_bi_data.GR_BI_PUB_SALETYPE as salestype
|
||||||
|
inner join erp_bi_data.GR_BI_PUB_DOSAGE as dosage
|
||||||
|
inner join erp_bi_data.GR_BI_PUB_CUSTOM as custom
|
||||||
|
INNER join erp_bi_data.GR_BI_PUB_SALER as saler
|
||||||
|
left join
|
||||||
|
(SELECT USEYEAR,
|
||||||
|
USEMONTH,
|
||||||
|
SALEZONEID,
|
||||||
|
SALEZONENAME,
|
||||||
|
PROVINCEID,
|
||||||
|
PROVINCENAME,
|
||||||
|
SALETYPE,
|
||||||
|
SALETYPENAME,
|
||||||
|
CUSTOMNAME,
|
||||||
|
SALERNAME,
|
||||||
|
DOSAGENAME,
|
||||||
|
goodsid,
|
||||||
|
GOODSNAME,
|
||||||
|
GOODSTYPE,
|
||||||
|
sum(SAQTY) as 本月销量,
|
||||||
|
DOSAGEID,
|
||||||
|
CUSTOMID,
|
||||||
|
SALERID,
|
||||||
|
round(SUM(SAMONEY), 2) 除税销售额,
|
||||||
|
round(sum(SAMONEYTX), 2) 含税销售额,
|
||||||
|
round(sum(COST), 2) 销售成本,
|
||||||
|
round(sum(PROFIT), 2) 毛利额
|
||||||
|
FROM GR_BI_SA_SETDTL
|
||||||
|
where USESTATUS = 2
|
||||||
|
GROUP BY SALETYPE, SALEZONEID, SALEZONENAME, PROVINCEID, PROVINCENAME, SALETYPE, SALETYPENAME, CUSTOMID,
|
||||||
|
CUSTOMNAME, SALERID, SALERNAME, DOSAGEID, DOSAGENAME, GOODSID, GOODSNAME, GOODSTYPE, USEYEAR,
|
||||||
|
USEMONTH) a
|
||||||
|
on a.goodsid = goods.goodsid and a.SALEZONEID = sales.SALEZONEID and a.PROVINCEID = province.PROVINCEID
|
||||||
|
and salestype.SALETYPEID = a.SALETYPE and dosage.DOSAGEID = a.DOSAGEID and
|
||||||
|
custom.CUSTOMID = a.CUSTOMID and saler.SALERID = a.SALERID
|
||||||
|
<where>
|
||||||
|
a.USEYEAR is not NULL
|
||||||
|
and (a.USEYEAR * 100 + a.USEMONTH) BETWEEN #{pastYearMonth} AND #{currentYearMonth}
|
||||||
|
</where>
|
||||||
|
order by a.USEYEAR, a.USEMONTH
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<delete id="deleteSalesReport">
|
||||||
|
delete from yunji_gr_bi_sa_agg
|
||||||
|
where (USEYEAR * 100 + USEMONTH) BETWEEN #{pastYearMonth} AND #{currentYearMonth}
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<update id="updateThisData">
|
||||||
|
UPDATE yunji_gr_bi_sa_agg a
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
USEYEAR,
|
||||||
|
GOODSID,
|
||||||
|
ZONEID,
|
||||||
|
PROVINCEID,
|
||||||
|
SALETYPEID,
|
||||||
|
DOSAGEID,
|
||||||
|
CUSTOMID,
|
||||||
|
SALERID,
|
||||||
|
SUM( MONTHSAQTY ) AS THISSAQTY, -- 本年销量
|
||||||
|
SUM( MONTHSAMONEY ) AS THISSAMONEY, -- 本年销售金额
|
||||||
|
SUM( MONTHCOST) as THISCOST, -- 本年毛利额
|
||||||
|
SUM( MONTHPROFIT ) AS THISPROFIT -- 本年毛利额
|
||||||
|
FROM
|
||||||
|
yunji_gr_bi_sa_agg
|
||||||
|
GROUP BY
|
||||||
|
USEYEAR,
|
||||||
|
GOODSID,
|
||||||
|
ZONEID,
|
||||||
|
PROVINCEID,
|
||||||
|
SALETYPEID,
|
||||||
|
DOSAGEID,
|
||||||
|
CUSTOMID,
|
||||||
|
SALERID
|
||||||
|
) b ON b.USEYEAR = a.USEYEAR
|
||||||
|
AND b.GOODSID = a.GOODSID
|
||||||
|
AND b.ZONEID = a.ZONEID
|
||||||
|
AND b.PROVINCEID = a.PROVINCEID
|
||||||
|
AND b.SALETYPEID = a.SALETYPEID
|
||||||
|
AND b.DOSAGEID = a.DOSAGEID
|
||||||
|
AND b.CUSTOMID = a.CUSTOMID
|
||||||
|
AND b.SALERID = a.SALERID
|
||||||
|
SET a.THISSAQTY = COALESCE ( b.THISSAQTY, 0 ),
|
||||||
|
a.THISSAMONEY = COALESCE ( b.THISSAMONEY, 0 ),
|
||||||
|
a.THISCOST = COALESCE ( b.THISCOST, 0 ),
|
||||||
|
a.THISPROFIT = COALESCE ( b.THISPROFIT, 0 );
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<update id="updateLastData">
|
||||||
|
UPDATE yunji_gr_bi_sa_agg a
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
USEYEAR,
|
||||||
|
GOODSID,
|
||||||
|
ZONEID,
|
||||||
|
PROVINCEID,
|
||||||
|
SALETYPEID,
|
||||||
|
DOSAGEID,
|
||||||
|
CUSTOMID,
|
||||||
|
SALERID,
|
||||||
|
SUM( MONTHSAQTY ) AS LASTSAQTY,
|
||||||
|
SUM( MONTHSAMONEY ) AS LASTSAMONEY,
|
||||||
|
SUM( MONTHCOST) as LASTCOST,
|
||||||
|
SUM( MONTHPROFIT ) AS LASTPROFIT
|
||||||
|
FROM
|
||||||
|
yunji_gr_bi_sa_agg
|
||||||
|
GROUP BY
|
||||||
|
USEYEAR,
|
||||||
|
GOODSID,
|
||||||
|
ZONEID,
|
||||||
|
PROVINCEID,
|
||||||
|
SALETYPEID,
|
||||||
|
DOSAGEID,
|
||||||
|
CUSTOMID,
|
||||||
|
SALERID
|
||||||
|
) b ON b.USEYEAR = a.USEYEAR-1
|
||||||
|
AND b.GOODSID = a.GOODSID
|
||||||
|
AND b.ZONEID = a.ZONEID
|
||||||
|
AND b.PROVINCEID = a.PROVINCEID
|
||||||
|
AND b.SALETYPEID = a.SALETYPEID
|
||||||
|
AND b.DOSAGEID = a.DOSAGEID
|
||||||
|
AND b.CUSTOMID = a.CUSTOMID
|
||||||
|
AND b.SALERID = a.SALERID
|
||||||
|
SET a.LASTSAQTY = COALESCE ( b.LASTSAQTY, 0 ),
|
||||||
|
a.LASTSAMONEY = COALESCE ( b.LASTSAMONEY, 0 ),
|
||||||
|
a.LASTCOST = COALESCE ( b.LASTCOST, 0 ),
|
||||||
|
a.LASTPROFIT = COALESCE ( b.LASTPROFIT, 0 );
|
||||||
|
</update>
|
||||||
|
|
||||||
|
|
||||||
|
<update id="updateComplexCalculate1">
|
||||||
|
-- 本月毛利率 MONTHPROFITRATE 本月销售毛利/本月销售收入×100%
|
||||||
|
-- 本年毛利率 THISPROFITRATE 本年销售毛利/本年销售收入×100%
|
||||||
|
-- 上年毛利率 LASTPROFITRATE 上年销售毛利/上年销售收入×100%
|
||||||
|
UPDATE yunji_gr_bi_sa_agg
|
||||||
|
SET
|
||||||
|
MONTHPROFITRATE = CASE WHEN MONTHSAMONEY = 0 or MONTHSAMONEY is null THEN
|
||||||
|
IF(MONTHPROFIT > 0, 100, 0) ELSE MONTHPROFIT/ MONTHSAMONEY * 100 END,
|
||||||
|
THISPROFITRATE = CASE WHEN THISSAMONEY = 0 or THISSAMONEY is null THEN
|
||||||
|
IF(THISPROFIT > 0, 100, 0) ELSE THISPROFIT/ THISSAMONEY * 100 END,
|
||||||
|
LASTPROFITRATE =CASE WHEN LASTSAMONEY = 0 or LASTSAMONEY is null THEN
|
||||||
|
IF(LASTPROFIT > 0, 100, 0) ELSE LASTPROFIT/ LASTSAMONEY * 100 END;
|
||||||
|
|
||||||
|
|
||||||
|
</update>
|
||||||
|
<update id="updateComplexCalculate2">
|
||||||
|
-- 本月销售金额占比 MONTHSAMONEYSHARE 当前行本月销售额/本月销售额总和*100%
|
||||||
|
-- 本月毛利额占比 MONTHPROFITSHARE 当前行本月毛利额/本月毛利额总和*100%
|
||||||
|
UPDATE yunji_gr_bi_sa_agg a
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
USEYEAR,
|
||||||
|
USEMONTH,
|
||||||
|
SUM( MONTHSAMONEY ) AS MONTHSAMONEY_SUM,
|
||||||
|
SUM(MONTHPROFIT) AS MONTHPROFIT_SUM
|
||||||
|
FROM
|
||||||
|
yunji_gr_bi_sa_agg
|
||||||
|
GROUP BY
|
||||||
|
USEYEAR,
|
||||||
|
USEMONTH
|
||||||
|
) b ON b.USEYEAR = a.USEYEAR
|
||||||
|
AND b.USEMONTH = a.USEMONTH
|
||||||
|
SET a.MONTHSAMONEYSHARE = COALESCE (ROUND( a.MONTHSAMONEY/b.MONTHSAMONEY_SUM * 100, 2), 0 ),
|
||||||
|
a.MONTHPROFITSHARE = COALESCE (ROUND( a.MONTHPROFIT/b.MONTHPROFIT_SUM * 100, 2), 0 );
|
||||||
|
</update>
|
||||||
|
<update id="updateComplexCalculate3">
|
||||||
|
|
||||||
|
-- 本年销售金额占比 THISSAMONEYSHARE当前行本年销售额/本年销售额总和*100%
|
||||||
|
-- 本年毛利额占比 THISPROFITSHARE 当前行本年毛利额/本年毛利额总和*100%
|
||||||
|
UPDATE yunji_gr_bi_sa_agg a
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
USEYEAR,
|
||||||
|
SUM( THISSAMONEY ) AS THISSAMONEY_SUM,
|
||||||
|
SUM( THISPROFIT ) AS THISPROFIT_SUM
|
||||||
|
FROM
|
||||||
|
yunji_gr_bi_sa_agg
|
||||||
|
GROUP BY
|
||||||
|
USEYEAR
|
||||||
|
) b ON b.USEYEAR = a.USEYEAR
|
||||||
|
SET a.THISSAMONEYSHARE = COALESCE (ROUND( a.THISSAMONEY/b.THISSAMONEY_SUM * 100, 2), 0 ),
|
||||||
|
a.THISPROFITSHARE = COALESCE (ROUND( a.THISPROFIT/b.THISPROFIT_SUM * 100, 2), 0 );
|
||||||
|
|
||||||
|
</update>
|
||||||
|
<update id="updateComplexCalculate4">
|
||||||
|
|
||||||
|
-- 上年销售金额占比 LASTSAMONEYSHARE 当前行上年销售额/上年销售额总和*100%
|
||||||
|
-- 上年毛利额占比 LASTPROFITSHARE 当前行上年毛利额/上年毛利额总和*100%
|
||||||
|
UPDATE yunji_gr_bi_sa_agg a
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
USEYEAR,
|
||||||
|
SUM(LASTSAMONEY) AS LASTSAMONEY_SUM,
|
||||||
|
SUM(LASTPROFIT) AS LASTPROFIT_SUM
|
||||||
|
|
||||||
|
FROM
|
||||||
|
yunji_gr_bi_sa_agg
|
||||||
|
GROUP BY
|
||||||
|
USEYEAR,
|
||||||
|
USEMONTH
|
||||||
|
) b ON b.USEYEAR = a.USEYEAR
|
||||||
|
SET a.LASTSAMONEYSHARE = COALESCE (ROUND( CASE WHEN LASTSAMONEY_SUM = 0 or LASTSAMONEY_SUM is null THEN IF(a.LASTSAMONEY > 0, 100, 0) ELSE a.LASTSAMONEY/b.LASTSAMONEY_SUM * 100 END, 2), 0 ),
|
||||||
|
a.LASTPROFITSHARE = COALESCE (ROUND( CASE WHEN LASTPROFIT_SUM = 0 or LASTPROFIT_SUM is null THEN IF(a.LASTPROFIT > 0, 100, 0) ELSE a.LASTPROFIT/b.LASTPROFIT_SUM * 100 END, 2), 0 );
|
||||||
|
|
||||||
|
</update>
|
||||||
|
<update id="updateComplexCalculate5">
|
||||||
|
-- 销售金额增长率 SAMONEYGROWTH (本年销售额-上年销售额)÷上年销售额×100%
|
||||||
|
-- 毛利额增长率 PROFITGROWTH (本年毛利额 - 上年毛利额) / 上年毛利额 × 100%
|
||||||
|
-- 毛利变动 PROFITCHANGE 本年毛利额 - 上年毛利额
|
||||||
|
UPDATE yunji_gr_bi_sa_agg
|
||||||
|
SET
|
||||||
|
SAMONEYGROWTH = CASE
|
||||||
|
WHEN ( LASTSAMONEY = 0 OR LASTSAMONEY IS NULL ) AND THISSAMONEY IS NOT NULL
|
||||||
|
THEN IF((THISSAMONEY - LASTSAMONEY) > 0, 100, 0)
|
||||||
|
ELSE ( THISSAMONEY - LASTSAMONEY )/ LASTSAMONEY * 100
|
||||||
|
END,
|
||||||
|
PROFITGROWTH = CASE
|
||||||
|
WHEN ( LASTPROFIT = 0 OR LASTPROFIT IS NULL ) AND THISPROFIT IS NOT NULL
|
||||||
|
THEN IF((THISSAMONEY - LASTSAMONEY) > 0, 100, 0)
|
||||||
|
ELSE ( THISPROFIT - LASTPROFIT )/ LASTPROFIT * 100
|
||||||
|
END,
|
||||||
|
PROFITCHANGE = ( THISPROFIT - LASTPROFIT);
|
||||||
|
</update>
|
||||||
|
</mapper>
|
||||||
@@ -85,6 +85,15 @@ public class AuthController {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/logout-client")
|
||||||
|
@PermitAll
|
||||||
|
@Operation(tags = "授权管理",summary = "登出系统")
|
||||||
|
@OperateLog(enable = false) // 避免 Post 请求被记录操作日志
|
||||||
|
public CommonResult<Boolean> logoutClient(@RequestParam("refreshToken") String refreshToken) {
|
||||||
|
logoutService(refreshToken);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/switch-login")
|
@PostMapping("/switch-login")
|
||||||
@Operation(tags = "授权管理",summary = "切换部门登录")
|
@Operation(tags = "授权管理",summary = "切换部门登录")
|
||||||
@OperateLog(enable = false) // 避免 Post 请求被记录操作日志
|
@OperateLog(enable = false) // 避免 Post 请求被记录操作日志
|
||||||
@@ -164,7 +173,9 @@ public class AuthController {
|
|||||||
@Parameter(name = "refreshToken", description = "根据token获取用户信息", required = true)
|
@Parameter(name = "refreshToken", description = "根据token获取用户信息", required = true)
|
||||||
@OperateLog(enable = false) // 避免 Post 请求被记录操作日志
|
@OperateLog(enable = false) // 避免 Post 请求被记录操作日志
|
||||||
public CommonResult<AdminUserDO> getUerInfo(@RequestParam("refreshToken") String refreshToken) {
|
public CommonResult<AdminUserDO> getUerInfo(@RequestParam("refreshToken") String refreshToken) {
|
||||||
return success(authService.getTokenTouserInfo(refreshToken));
|
|
||||||
|
CommonResult<AdminUserDO> result = CommonResult.success(authService.getTokenTouserInfo(refreshToken));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/get-permission-info")
|
@GetMapping("/get-permission-info")
|
||||||
@@ -291,7 +302,23 @@ public class AuthController {
|
|||||||
authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType());
|
authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType());
|
||||||
}
|
}
|
||||||
//清空个人信息
|
//清空个人信息
|
||||||
String userRedisKey="JEE_LOW_CODE:USER:"+loginUserId+":*";
|
String userRedisKey="LIDEE_LOW_CODE:USER:"+loginUserId+":*";
|
||||||
|
Set<String> keys = stringRedisTemplate.keys(userRedisKey);
|
||||||
|
if(keys!=null && keys.size()>0){
|
||||||
|
keys.forEach(key->{
|
||||||
|
stringRedisTemplate.delete(key);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void logoutService(String token){
|
||||||
|
AdminUserDO user = authService.getTokenTouserInfo(token);
|
||||||
|
Long loginUserId = user.getId();
|
||||||
|
|
||||||
|
if (StrUtil.isNotBlank(token)) {
|
||||||
|
authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType());
|
||||||
|
}
|
||||||
|
//清空个人信息
|
||||||
|
String userRedisKey="LIDEE_LOW_CODE:USER:"+loginUserId+":*";
|
||||||
Set<String> keys = stringRedisTemplate.keys(userRedisKey);
|
Set<String> keys = stringRedisTemplate.keys(userRedisKey);
|
||||||
if(keys!=null && keys.size()>0){
|
if(keys!=null && keys.size()>0){
|
||||||
keys.forEach(key->{
|
keys.forEach(key->{
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ public class LideeYunJiPermissionServiceImpl implements ILideeYunJiPermissionSer
|
|||||||
}
|
}
|
||||||
//根据角色id来判断我是否是开发者,如果有开发者,则说明直接可以访问
|
//根据角色id来判断我是否是开发者,如果有开发者,则说明直接可以访问
|
||||||
boolean devUserFlag=false;
|
boolean devUserFlag=false;
|
||||||
String isDevUserRedisKey="JEE_LOW_CODE:USER:"+userId+":DEVUSER";
|
String isDevUserRedisKey="LIDEE_LOW_CODE:USER:"+userId+":DEVUSER";
|
||||||
if(!stringRedisTemplate.hasKey(isDevUserRedisKey)){//没有数据,则查询获取 TODO 优化
|
if(!stringRedisTemplate.hasKey(isDevUserRedisKey)){//没有数据,则查询获取 TODO 优化
|
||||||
//所有菜单列表
|
//所有菜单列表
|
||||||
Set<Long> menuIdList = permissionService.getRoleMenuListByRoleId(roleIds);
|
Set<Long> menuIdList = permissionService.getRoleMenuListByRoleId(roleIds);
|
||||||
|
|||||||
@@ -85,6 +85,8 @@ public class OAuth2TokenServiceImpl implements IOAuth2TokenService {
|
|||||||
// 获得用户基本信息
|
// 获得用户基本信息
|
||||||
OAuth2AccessTokenDO accessTokenDO= oauth2AccessTokenMapper.selectByAccessToken(refreshToken);
|
OAuth2AccessTokenDO accessTokenDO= oauth2AccessTokenMapper.selectByAccessToken(refreshToken);
|
||||||
AdminUserDO user = adminUserService.getUser(accessTokenDO.getUserId());
|
AdminUserDO user = adminUserService.getUser(accessTokenDO.getUserId());
|
||||||
|
user.setPassword("");
|
||||||
|
user.setEmail("");
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,18 @@
|
|||||||
<artifactId>lidee-tool</artifactId>
|
<artifactId>lidee-tool</artifactId>
|
||||||
<version>${lidee.version}</version>
|
<version>${lidee.version}</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>10</source>
|
||||||
|
<target>10</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>tool-common</artifactId>
|
<artifactId>tool-common</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|||||||
@@ -10,8 +10,12 @@ import org.springframework.web.util.UriComponents;
|
|||||||
import org.springframework.web.util.UriComponentsBuilder;
|
import org.springframework.web.util.UriComponentsBuilder;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
import java.net.URL;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -21,6 +25,9 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
public class HttpUtils {
|
public class HttpUtils {
|
||||||
|
|
||||||
|
private static final int CONNECT_TIMEOUT = 5000; // 连接超时(毫秒)
|
||||||
|
private static final int READ_TIMEOUT = 10000; // 读取超时(毫秒)
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static String replaceUrlQuery(String url, String key, String value) {
|
public static String replaceUrlQuery(String url, String key, String value) {
|
||||||
UrlBuilder builder = UrlBuilder.of(url, Charset.defaultCharset());
|
UrlBuilder builder = UrlBuilder.of(url, Charset.defaultCharset());
|
||||||
@@ -122,5 +129,203 @@ public class HttpUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送 HTTP GET 请求
|
||||||
|
*
|
||||||
|
* @param urlStr 请求地址
|
||||||
|
* @param headers 请求头(可为 null)
|
||||||
|
* @return 响应字符串
|
||||||
|
*/
|
||||||
|
public static String doGet(String urlStr, Map<String, String> headers) throws IOException {
|
||||||
|
HttpURLConnection conn = null;
|
||||||
|
BufferedReader reader = null;
|
||||||
|
try {
|
||||||
|
URL url = new URL(urlStr);
|
||||||
|
conn = (HttpURLConnection) url.openConnection();
|
||||||
|
conn.setRequestMethod("GET");
|
||||||
|
conn.setConnectTimeout(CONNECT_TIMEOUT);
|
||||||
|
conn.setReadTimeout(READ_TIMEOUT);
|
||||||
|
conn.setDoInput(true);
|
||||||
|
|
||||||
|
// 设置请求头
|
||||||
|
if (headers != null && !headers.isEmpty()) {
|
||||||
|
for (Map.Entry<String, String> entry : headers.entrySet()) {
|
||||||
|
conn.setRequestProperty(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int responseCode = conn.getResponseCode();
|
||||||
|
if (responseCode == HttpURLConnection.HTTP_OK) {
|
||||||
|
reader = new BufferedReader(
|
||||||
|
new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
|
||||||
|
StringBuilder result = new StringBuilder();
|
||||||
|
String line;
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
result.append(line);
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
} else {
|
||||||
|
throw new IOException("GET request failed, response code: " + responseCode);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (reader != null) {
|
||||||
|
try {
|
||||||
|
reader.close();
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (conn != null) {
|
||||||
|
conn.disconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送 HTTP POST 请求(application/x-www-form-urlencoded)
|
||||||
|
*
|
||||||
|
* @param urlStr 请求地址
|
||||||
|
* @param params 表单参数(可为 null)
|
||||||
|
* @param headers 请求头(可为 null)
|
||||||
|
* @return 响应字符串
|
||||||
|
*/
|
||||||
|
public static String doPost(String urlStr, Map<String, String> params, Map<String, String> headers)
|
||||||
|
throws IOException {
|
||||||
|
HttpURLConnection conn = null;
|
||||||
|
BufferedWriter writer = null;
|
||||||
|
BufferedReader reader = null;
|
||||||
|
try {
|
||||||
|
URL url = new URL(urlStr);
|
||||||
|
conn = (HttpURLConnection) url.openConnection();
|
||||||
|
conn.setRequestMethod("POST");
|
||||||
|
conn.setConnectTimeout(CONNECT_TIMEOUT);
|
||||||
|
conn.setReadTimeout(READ_TIMEOUT);
|
||||||
|
conn.setDoOutput(true);
|
||||||
|
conn.setDoInput(true);
|
||||||
|
|
||||||
|
// 设置请求头
|
||||||
|
if (headers != null && !headers.isEmpty()) {
|
||||||
|
for (Map.Entry<String, String> entry : headers.entrySet()) {
|
||||||
|
conn.setRequestProperty(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入表单参数
|
||||||
|
if (params != null && !params.isEmpty()) {
|
||||||
|
StringBuilder paramStr = new StringBuilder();
|
||||||
|
for (Map.Entry<String, String> entry : params.entrySet()) {
|
||||||
|
if (paramStr.length() > 0) {
|
||||||
|
paramStr.append("&");
|
||||||
|
}
|
||||||
|
paramStr.append(entry.getKey())
|
||||||
|
.append("=")
|
||||||
|
.append(java.net.URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8));
|
||||||
|
}
|
||||||
|
writer = new BufferedWriter(
|
||||||
|
new OutputStreamWriter(conn.getOutputStream(), StandardCharsets.UTF_8));
|
||||||
|
writer.write(paramStr.toString());
|
||||||
|
writer.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
int responseCode = conn.getResponseCode();
|
||||||
|
if (responseCode == HttpURLConnection.HTTP_OK) {
|
||||||
|
reader = new BufferedReader(
|
||||||
|
new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
|
||||||
|
StringBuilder result = new StringBuilder();
|
||||||
|
String line;
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
result.append(line);
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
} else {
|
||||||
|
throw new IOException("POST request failed, response code: " + responseCode);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (writer != null) {
|
||||||
|
try {
|
||||||
|
writer.close();
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (reader != null) {
|
||||||
|
try {
|
||||||
|
reader.close();
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (conn != null) {
|
||||||
|
conn.disconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送 JSON 格式的 POST 请求
|
||||||
|
*
|
||||||
|
* @param urlStr 请求地址
|
||||||
|
* @param json 请求体 JSON 字符串
|
||||||
|
* @param headers 请求头(可为 null)
|
||||||
|
* @return 响应字符串
|
||||||
|
*/
|
||||||
|
public static String doPostJson(String urlStr, String json, Map<String, String> headers)
|
||||||
|
throws IOException {
|
||||||
|
HttpURLConnection conn = null;
|
||||||
|
BufferedWriter writer = null;
|
||||||
|
BufferedReader reader = null;
|
||||||
|
try {
|
||||||
|
URL url = new URL(urlStr);
|
||||||
|
conn = (HttpURLConnection) url.openConnection();
|
||||||
|
conn.setRequestMethod("POST");
|
||||||
|
conn.setConnectTimeout(CONNECT_TIMEOUT);
|
||||||
|
conn.setReadTimeout(READ_TIMEOUT);
|
||||||
|
conn.setDoOutput(true);
|
||||||
|
conn.setDoInput(true);
|
||||||
|
|
||||||
|
// 设置默认 Content-Type
|
||||||
|
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
|
||||||
|
|
||||||
|
// 设置自定义请求头
|
||||||
|
if (headers != null && !headers.isEmpty()) {
|
||||||
|
for (Map.Entry<String, String> entry : headers.entrySet()) {
|
||||||
|
conn.setRequestProperty(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入 JSON 请求体
|
||||||
|
writer = new BufferedWriter(
|
||||||
|
new OutputStreamWriter(conn.getOutputStream(), StandardCharsets.UTF_8));
|
||||||
|
writer.write(json);
|
||||||
|
writer.flush();
|
||||||
|
|
||||||
|
int responseCode = conn.getResponseCode();
|
||||||
|
if (responseCode == HttpURLConnection.HTTP_OK) {
|
||||||
|
reader = new BufferedReader(
|
||||||
|
new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
|
||||||
|
StringBuilder result = new StringBuilder();
|
||||||
|
String line;
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
result.append(line);
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
} else {
|
||||||
|
throw new IOException("POST JSON request failed, response code: " + responseCode);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (writer != null) {
|
||||||
|
try {
|
||||||
|
writer.close();
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (reader != null) {
|
||||||
|
try {
|
||||||
|
reader.close();
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (conn != null) {
|
||||||
|
conn.disconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ package com.lideeyunji.tool.framework.yunji.constant;
|
|||||||
public interface lideeRedisConstants {
|
public interface lideeRedisConstants {
|
||||||
|
|
||||||
//低代码
|
//低代码
|
||||||
String lideeyunji_PREFIX = "JEE_LOW_CODE:";
|
String lideeyunji_PREFIX = "LIDEE_LOW_CODE:";
|
||||||
|
|
||||||
//js增强加锁
|
//js增强加锁
|
||||||
String ENHANCE_JS_LOCK = "LOCK_JS:%s";
|
String ENHANCE_JS_LOCK = "LOCK_JS:%s";
|
||||||
|
|||||||
Reference in New Issue
Block a user