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.show_sql", env.getProperty("hibernate.show_sql"));
//字段驼峰转下划线 //字段驼峰转下划线
jpaProperties.put("hibernate.physical_naming_strategy", env.getProperty("hibernate.naming.physical_strategy")); jpaProperties.put("hibernate.physical_naming_strategy", env.getProperty("hibernate.naming.physical_strategy"));
jpaProperties.put("hibernate.dialect",env.getProperty("hibernate.dialect"));
factory.setJpaProperties(jpaProperties); factory.setJpaProperties(jpaProperties);
return factory; 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 { }else {
latch.countDown(); latch.countDown();
} }
if(atomicBoolean.get()){ // if(atomicBoolean.get()){
String errText = StrUtil.format("船号:{},批量:{},图号:{},需求日期:{},不满足上料需求", // String errText = StrUtil.format("船号:{},批量:{},图号:{},需求日期:{},不满足上料需求",
bom.getDcch(), bom.getPl(), bom.getTzbh(), bom.getXzglxq()); // bom.getDcch(), bom.getPl(), bom.getTzbh(), bom.getXzglxq());
(list); // 清理冗余数据(list);
throw new RuntimeException(errText); // throw new RuntimeException(errText);
} // }
}); });
try { try {
latch.await(10, TimeUnit.SECONDS);// 指定超时时间 latch.await(10, TimeUnit.SECONDS);// 指定超时时间
@ -75,7 +75,6 @@ public class DataFactory {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
}); });
System.out.println(Manager..size());
(list); (list);
} }

@ -41,21 +41,17 @@ public abstract class 套料图工序 implements 套料图工序接口 {
double = 1; double = 1;
this..forEach(_ -> { this..forEach(_ -> {
if (!this.(_,)){ if (!this.(_,)){
if (bom.get().size()==0||bom.get().get(0) != _) { //可用资源最大前推日期设置为N天,最大前推日期意味从上料开始最小施工周期
//可用资源最大前推日期设置为N天,最大前推日期意味从上料开始最小施工周期 //fixme 这里应该安装工序设置,暂时写死一个日期
//fixme 这里应该安装工序设置,暂时写死一个日期 Optional<> = (_, DateUtil.parse(from, "yyyy/MM/dd"), DateUtil.offsetDay(this._,0), );
Optional<> = (_, DateUtil.parse(from, "yyyy/MM/dd"), DateUtil.offsetDay(this._,0), ); .ifPresent(_ -> {
if (!=null){ if (_.(_,this.bom,)){
.ifPresent(_ -> { this.bom.set(_);
if (_.(_,this.bom,)){ this.bom.get().add(0,_);
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); Manager..add(this.bom);
atomicBoolean.set(true); 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.JwtUtil;
import com.dsic.gj_erp.util.MD5Util; import com.dsic.gj_erp.util.MD5Util;
import com.querydsl.jpa.impl.JPAQueryFactory; import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -23,6 +24,7 @@ import javax.servlet.http.HttpServletRequest;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Slf4j
@Service @Service
public class ApiService { public class ApiService {
@ -55,6 +57,7 @@ public class ApiService {
public Map<String, Object> userLogin(LoginBean loginBean, HttpServletRequest request) throws CustomException { public Map<String, Object> userLogin(LoginBean loginBean, HttpServletRequest request) throws CustomException {
String pwd=""; String pwd="";
String ip= IPUtils.getIpAddr(request); String ip= IPUtils.getIpAddr(request);
log.info("账号:{},登录IP:{}",loginBean.getYhdm(),ip);
String macAddress=IPUtils.getMACAddress(ip); String macAddress=IPUtils.getMACAddress(ip);
if (!StringUtils.isEmpty(loginBean.getPwd())){ if (!StringUtils.isEmpty(loginBean.getPwd())){
@ -65,6 +68,9 @@ public class ApiService {
if (syuserp == null) { if (syuserp == null) {
throw new CustomException(10201, "登陆失败,账号密码错误!"); throw new CustomException(10201, "登陆失败,账号密码错误!");
} }
if (syuserp.getIpAddress()==null ) {
throw new CustomException(10201, "登陆失败IP地址未配置");
}
if (!syuserp.getIpAddress().equals(ip) ) { if (!syuserp.getIpAddress().equals(ip) ) {
throw new CustomException(10201, "登陆失败IP地址未授权"); throw new CustomException(10201, "登陆失败IP地址未授权");
} }

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

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

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

Loading…
Cancel
Save