1.修改日志输出文件大小,改为单个文件最大20M

2.增加同步华信数据功能
3.修复钢料需求计划导入时由于历史数据需求期为空导致的异常
4.临时修改排产逻辑
5.增加登录账号及ip地址输出到日志中进行记录
6.增加生产环境启动时jpa注入参数
master
董哲奇 11 months ago
parent 603ea180df
commit 971e71b59b

@ -81,6 +81,7 @@ public class JapConfig {
jpaProperties.put("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
//字段驼峰转下划线
jpaProperties.put("hibernate.physical_naming_strategy", env.getProperty("hibernate.naming.physical_strategy"));
jpaProperties.put("hibernate.dialect",env.getProperty("hibernate.dialect"));
factory.setJpaProperties(jpaProperties);
return factory;
}

@ -0,0 +1,48 @@
package com.dsic.gj_erp.datasync;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Getter
@Setter
//@Component
//@ConfigurationProperties(prefix = "data-sync",ignoreInvalidFields = true)
public class Config {
private String host;
private String port;
private Map<String,String> uri;
private Integer tokenExpTime=4*60*60;//token超时时长,默认4个小时
//发送请求需要携带head名称
private String tokenName;
private String typeName;
private String authType;
private String channelCodeName;
private String channelCode;
private String _channelCodeName;
private String _channelCode;
private String userCodeName;
private String xAuthTokenName;
//登录账号密码,密码采用md5加密
private String account;
private String pwd;//已加密,aff462d5872e714dadf9f17109527406
public String getRequestUrl(String name){
return host+":"+port+uri.get(name);
}
public Map<String,Object> getLoginFormData(){
return new HashMap<String,Object>(){{
put("usercode",account);
put("passwd",pwd);
}};
}
}

@ -0,0 +1,68 @@
package com.dsic.gj_erp.datasync;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import java.util.Map;
//@Component
@DependsOn("config")
@RequiredArgsConstructor
public class DataHandler {
private final Config config;
private String token;
private DateTime expTime;
private String userCode;
private String xAuthToken;
public JSONObject execute(String methodName, JSONObject param){
if (ObjUtil.isEmpty(expTime)||DateTime.now().after(expTime)){
this.getToken();
}
String result = HttpUtil.createPost(config.getRequestUrl(methodName))
.header(config.getTokenName(), token)
.header(config.getTypeName(), config.getAuthType())
.header(config.getChannelCodeName(), config.getChannelCode())
.header(config.get_channelCodeName(), config.get_channelCode())
.header(config.getXAuthTokenName(), xAuthToken)
.header(config.getUserCodeName(), userCode)
.body(JSONObject.toJSONString(param))
.execute().body();
try {
return JSONObject.parseObject(result);
}catch (Exception e){
e.printStackTrace();
}
return null;
}
public JSONObject getToken(){
Map<String, Object> loginFormData = config.getLoginFormData();
String result = HttpUtil.createPost(config.getRequestUrl(MethodType.login.name()))
.header(config.getTypeName(), config.getAuthType())
.header(config.getChannelCodeName(), config.getChannelCode())
.header(config.get_channelCodeName(), config.get_channelCode())
.form(loginFormData)
.execute().body();
try {
JSONObject loginResult = JSONObject.parseObject(result);
this.token=loginResult.getString(config.getTokenName());
this.expTime =DateTime.now().offset(DateField.SECOND,config.getTokenExpTime()-120);
this.xAuthToken=loginResult.getString(config.getXAuthTokenName());
this.userCode= (String) loginFormData.get("usercode");
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}

@ -0,0 +1,5 @@
package com.dsic.gj_erp.datasync;
public enum MethodType {
login
}

@ -0,0 +1,3 @@
package com.dsic.gj_erp.datasync;
//读取数据用

@ -62,12 +62,12 @@ public class DataFactory {
}else {
latch.countDown();
}
if(atomicBoolean.get()){
String errText = StrUtil.format("船号:{},批量:{},图号:{},需求日期:{},不满足上料需求",
bom.getDcch(), bom.getPl(), bom.getTzbh(), bom.getXzglxq());
(list);
throw new RuntimeException(errText);
}
// if(atomicBoolean.get()){
// String errText = StrUtil.format("船号:{},批量:{},图号:{},需求日期:{},不满足上料需求",
// bom.getDcch(), bom.getPl(), bom.getTzbh(), bom.getXzglxq());
// 清理冗余数据(list);
// throw new RuntimeException(errText);
// }
});
try {
latch.await(10, TimeUnit.SECONDS);// 指定超时时间
@ -75,7 +75,6 @@ public class DataFactory {
throw new RuntimeException(e);
}
});
System.out.println(Manager..size());
(list);
}

@ -41,21 +41,17 @@ public abstract class 套料图工序 implements 套料图工序接口 {
double = 1;
this..forEach(_ -> {
if (!this.(_,)){
if (bom.get().size()==0||bom.get().get(0) != _) {
//可用资源最大前推日期设置为N天,最大前推日期意味从上料开始最小施工周期
//fixme 这里应该安装工序设置,暂时写死一个日期
Optional<> = (_, DateUtil.parse(from, "yyyy/MM/dd"), DateUtil.offsetDay(this._,0), );
if (!=null){
.ifPresent(_ -> {
if (_.(_,this.bom,)){
this.bom.set(_);
this.bom.get().add(0,_);
}
});
//可用资源最大前推日期设置为N天,最大前推日期意味从上料开始最小施工周期
//fixme 这里应该安装工序设置,暂时写死一个日期
Optional<> = (_, DateUtil.parse(from, "yyyy/MM/dd"), DateUtil.offsetDay(this._,0), );
.ifPresent(_ -> {
if (_.(_,this.bom,)){
this.bom.set(_);
this.bom.get().add(0,_);
}
}
});
if (bom.get().size()==0||bom.get().get(0) != Constant..) {
if (bom.get().size()==0) {
Manager..add(this.bom);
atomicBoolean.set(true);
}

@ -11,4 +11,8 @@ public interface 套料图工序接口 extends Runnable {
( _);
default void run(){
}
}

@ -13,6 +13,7 @@ import com.dsic.gj_erp.util.IPUtils;
import com.dsic.gj_erp.util.JwtUtil;
import com.dsic.gj_erp.util.MD5Util;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@ -23,6 +24,7 @@ import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Service
public class ApiService {
@ -55,6 +57,7 @@ public class ApiService {
public Map<String, Object> userLogin(LoginBean loginBean, HttpServletRequest request) throws CustomException {
String pwd="";
String ip= IPUtils.getIpAddr(request);
log.info("账号:{},登录IP:{}",loginBean.getYhdm(),ip);
String macAddress=IPUtils.getMACAddress(ip);
if (!StringUtils.isEmpty(loginBean.getPwd())){
@ -65,6 +68,9 @@ public class ApiService {
if (syuserp == null) {
throw new CustomException(10201, "登陆失败,账号密码错误!");
}
if (syuserp.getIpAddress()==null ) {
throw new CustomException(10201, "登陆失败IP地址未配置");
}
if (!syuserp.getIpAddress().equals(ip) ) {
throw new CustomException(10201, "登陆失败IP地址未授权");
}

@ -59,10 +59,10 @@ public class DmSygdxqServiceImpl extends ServiceImpl<DmSygdxqMapper, DmSygdxq> i
l.setDrr(username);
l.setDrrq(day);
//状态 2拖期 1提前
if (l.getXzglxq().compareTo(sygdxq.getXzglxq())>0){
if (sygdxq.getXzglxq()!=null&&l.getXzglxq().compareTo(sygdxq.getXzglxq())>0){
l.setXqzt("2");
}
if (l.getXzglxq().compareTo(sygdxq.getXzglxq())<0){
if (sygdxq.getXzglxq()!=null&&l.getXzglxq().compareTo(sygdxq.getXzglxq())<0){
l.setXqzt("1");
}
this.update(new UpdateWrapper<DmSygdxq>()

@ -22,8 +22,8 @@ spring.servlet.multipart.enabled = true
server.port=8081
spring.datasource.master.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.sl.url=jdbc:sqlserver://192.127.0.3:1433;DatabaseName=GJ_ERP_Java
spring.datasource.sl.jdbc-url=jdbc:sqlserver://192.127.0.3:1433;DatabaseName=GJ_ERP_Java
spring.datasource.master.url=jdbc:sqlserver://192.127.0.3:1433;DatabaseName=GJ_ERP_Java
spring.datasource.master.jdbc-url=jdbc:sqlserver://192.127.0.3:1433;DatabaseName=GJ_ERP_Java
spring.datasource.master.username=sa
spring.datasource.master.password=gjerp
spring.datasource.master.initialize=true
@ -36,6 +36,8 @@ spring.datasource.jiuzhou.initialize=true
hibernate.naming.physical_strategy=com.dsic.gj_erp.config.MyPhysicalNamingStrategy
hibernate.show_sql=true
hibernate.connection.autocommit=true
'hibernate.dialect=org.hibernate.dialect.SQLServer2008Dialect
mybatis-plus.configuration.batch-size=5000

@ -35,7 +35,7 @@
<!--<totalSizeCap>1GB</totalSizeCap>-->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小默认值是10MB,本篇设置为1KB只是为了演示 -->
<maxFileSize>2MB</maxFileSize>
<maxFileSize>20MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
@ -62,7 +62,7 @@
<maxHistory>90</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小默认值是10MB,本篇设置为1KB只是为了演示 -->
<maxFileSize>2MB</maxFileSize>
<maxFileSize>20MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>

Loading…
Cancel
Save