1.增加日志打印

2.增加事件监听
3.增加阅读计划下发时向九州接口推送数据(实际为insert到九州数据库)
master
董哲奇 1 year ago
parent 8af24b0cc1
commit 88f184a408

@ -14,6 +14,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@ -21,6 +22,7 @@ import javax.annotation.PostConstruct;
import javax.persistence.EntityManager;
import java.util.Properties;
@EnableAsync
@EnableMPP
@SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class,

@ -0,0 +1,66 @@
package com.dsic.gj_erp.bean.jiuzhou;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.dsic.gj_erp.bean.jhgk.DmYdjh;
import lombok.Getter;
import lombok.Setter;
import java.util.Random;
@Getter
@Setter
@TableName("im_slxx")
public class Sljh {
@TableId(type = IdType.AUTO)
private Integer slid;
private String ckh="01";//仓库号(默认01)
private String lsh;//交换码单张板唯一码2200049281年度+流水号
private String ysch;//运输车号
private String czbh;
private String ql;//期量
private String hth;//购单号
private String ghsbm;//供货商--带到出库接口中-用于成本
private String xhth;//合同号
private String wlbm;//物料号-炉批号
private String wph;//物品号
private String wpmc;//物品名称
private String wpgg;//物品名称
private String t;//物品名称
private String b;//物品名称
private String l;//物品名称
private String zt="01";//状态(01正常99作废)
private String sllsh;//上料流水号20230322001
private String zfry;//作废人员
private String zfrq;//作废日期
private String lysl="1";//领用张数默认1张
private String ylzl;//领用重量(KG)
private String kwh;//垛位
private String kwcs;//垛位层数01/02/03等
private String dcCh;//需求船只
private String dcPl;//需求批量
private String dcLx;//流向
private String dcKw;//切割跨位
private String dcPw;//抛丸位置
private String ddlsh;//订单流水号--带到出库接口中-用于成本
private String ddxh;//订单序号--带到出库接口中-用于成本
private String wpzt;//物品状态--新增
private String lrry;//导入人员
private String lrrq;//导入日期
public static Sljh ofWithYdjh(DmYdjh ydjh){
Sljh sljh=new Sljh();
sljh.dcCh=ydjh.getDcCh();
sljh.dcPl=ydjh.getDcPl();
sljh.dcLx=ydjh.getLx();
sljh.dcKw=ydjh.getKw();
sljh.dcPw=ydjh.getPw();
return sljh;
}
}

@ -24,7 +24,9 @@ public class ImCkwpkwp {
private String cfcs1;//层数
private String dcCh;
private String dcPl;
private String dcFd;
private String dcTh;
private String qxkcl;//物品数量
private String wpzt;//ky:可用;dy:代用

@ -72,7 +72,9 @@ public class DmYdjhController {
Map<String, Object> itemMap = BeanUtil.beanToMap(item);
resultMap.add(itemMap);
bcKcxx.forEach(kc->{
if (item.getDcCh().equals(kc.getDcCh())&&item.getDcFd().equals(kc.getDcFd())){
if (item.getDcCh().equals(kc.getDcCh())
&&item.getDcFd().equals(kc.getDcPl())
&&item.getTzbh().equals(kc.getDcTh())){
itemMap.put("kc",kc);
}
});
@ -82,10 +84,7 @@ public class DmYdjhController {
}
});
});
});
return new ResultBean(resultMap);
}

@ -0,0 +1,7 @@
package com.dsic.gj_erp.jiuzhoumapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsic.gj_erp.bean.jiuzhou.Sljh;
public interface SljhMapper extends BaseMapper<Sljh> {
}

@ -4,25 +4,31 @@ package com.dsic.gj_erp.service.jhgk.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsic.gj_erp.bean.jcsj.EmGcrl;
import com.dsic.gj_erp.bean.jcsj.EmSbcnp;
import com.dsic.gj_erp.bean.ResultBean;
import com.dsic.gj_erp.bean.jhgk.DmQfxq;
import com.dsic.gj_erp.bean.jhgk.DmSygdMx;
import com.dsic.gj_erp.bean.jhgk.DmYdjh;
import com.dsic.gj_erp.bean.jiuzhou.Sljh;
import com.dsic.gj_erp.bean.pgd.*;
import com.dsic.gj_erp.mapper.jhgk.DmYdjhMapper;
import com.dsic.gj_erp.service.jcsj.DmBomService;
import com.dsic.gj_erp.service.jcsj.EmGcrlService;
import com.dsic.gj_erp.service.jhgk.DmQfxqService;
import com.dsic.gj_erp.service.jhgk.DmSygdMxService;
import com.dsic.gj_erp.service.jhgk.DmYdjhService;
import com.dsic.gj_erp.service.jiuzhou.SljhService;
import com.dsic.gj_erp.service.pgd.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@ -49,6 +55,8 @@ public class DmYdjhServiceImpl extends ServiceImpl<DmYdjhMapper, DmYdjh> impleme
private PgdPwjhService pwService;
@Autowired
private PgdQgjhService qgService;
@Autowired
private SljhService sljhService;
@Override
public List<DmSygdMx> tjydjh() {
@ -58,7 +66,7 @@ public class DmYdjhServiceImpl extends ServiceImpl<DmYdjhMapper, DmYdjh> impleme
//3.根据前方需求期,重新为三月滚动明细排产(板),排产后的数据添加到月度计划,并且反写数据到三月滚动明细
// List<DmQfxq> qfxqList= qfxqService.list(new QueryWrapper<DmQfxq>().eq("substring(db,0,8) ", DateUtil.format(DateUtil.nextMonth(),"yyyy/MM")));
int i = qfxqService.count(new QueryWrapper<DmQfxq>()
.eq("substring(xzglxq,0,8) ", DateUtil.format(DateUtil.nextMonth(),"yyyy/MM")));
.eq("substring(xzglxq,0,8) ", DateUtil.format(DateUtil.nextMonth(), "yyyy/MM")));
if (i < 1) {
System.out.println("下月的前方需求信息未导入!");
return null;
@ -130,32 +138,37 @@ public class DmYdjhServiceImpl extends ServiceImpl<DmYdjhMapper, DmYdjh> impleme
return map;
}
@Resource
private ApplicationEventPublisher publisher;
//下发 派工单状态改为编制 生成零件信息
@Override
public void xf(List<DmYdjh> ydjhList){
public void xf(List<DmYdjh> ydjhList) {
//修改状态
List<String> idList=ydjhList.stream().map(DmYdjh::getId).collect(Collectors.toList());
if (idList.size()>100){
List<String> idList = ydjhList.stream().map(DmYdjh::getId).collect(Collectors.toList());
if (idList.size() > 100) {
List<String> list = idList.subList(idList.size() / 100 * 100, idList.size());
AtomicInteger index=new AtomicInteger(idList.size()/100+1);
this.update(new UpdateWrapper<DmYdjh>().set("zt","2")
.in( "id",list)
AtomicInteger index = new AtomicInteger(idList.size() / 100 + 1);
this.update(new UpdateWrapper<DmYdjh>().set("zt", "2")
.in("id", list)
);
baseMapper.xfbc(list);
baseMapper.tqlj(list);
do {
int i = index.decrementAndGet();
List<String> list1 = idList.subList((index.get()-1)*100, i*100);
this.update(new UpdateWrapper<DmYdjh>().set("zt","2")
.in( "id",list1)
List<String> list1 = idList.subList((index.get() - 1) * 100, i * 100);
this.update(new UpdateWrapper<DmYdjh>().set("zt", "2")
.in("id", list1)
);
baseMapper.xfbc(list1);
baseMapper.tqlj(list1);
}while (index.get()>1);
}else {
this.update(new UpdateWrapper<DmYdjh>().set("zt","2")
.in( "id",idList)
this.update(new UpdateWrapper<DmYdjh>().set("zt", "2")
.in("id", idList)
);
//修改汇总状态 改为 编制
baseMapper.xfbc(idList);
@ -163,6 +176,7 @@ public class DmYdjhServiceImpl extends ServiceImpl<DmYdjhMapper, DmYdjh> impleme
baseMapper.tqlj(idList);
}
publisher.publishEvent(ydjhList);
}
}

@ -0,0 +1,32 @@
package com.dsic.gj_erp.service.jiuzhou;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsic.gj_erp.bean.jhgk.DmYdjh;
import com.dsic.gj_erp.bean.jiuzhou.Sljh;
import com.dsic.gj_erp.jiuzhoumapper.SljhMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
public class SljhService extends ServiceImpl<SljhMapper, Sljh> {
@Async
@EventListener
public void save(List<DmYdjh> slYdjh){
log.info("开始执行九州接口推送:{}",slYdjh);
List<Sljh> collect = slYdjh.stream().map(Sljh::ofWithYdjh).collect(Collectors.toList());
log.info("生成九州数据完成:{}",collect);
try {
this.saveBatch(collect);
}catch (Exception e){
e.printStackTrace();
}
log.info("推送完成");
}
}

@ -13,7 +13,7 @@ spring.mvc.throw-exception-if-no-handler-found=true
mybatis-plus.type-aliases-package=com.dsic.gj_erp.bean.*
mybatis-plus.mapper-locations = classpath:mappers/*/*.xml
logging.level.com.dsic.gj_erp.mapper=debug
logging.level.com.dsic.gj_erp=debug
spring.servlet.multipart.max-file-size=500MB
spring.servlet.multipart.max-request-size=500MB

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="FILE_ERROR_PATTERN"
value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} %file:%line: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高, 所以我们使用下面的策略,可以避免输出 Error 的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--过滤 Error-->
<level>ERROR</level>
<!--匹配到就禁止-->
<onMatch>DENY</onMatch>
<!--没有匹配到就允许-->
<onMismatch>ACCEPT</onMismatch>
</filter>
<!--日志名称如果没有File 属性那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File> 的日志都是当天的。-->
<!--<File>logs/info.demo-logback.log</File>-->
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>logs/info.%d{yyyy-MM-dd}.part_%i.log</FileNamePattern>
<!--只保留最近90天的日志-->
<maxHistory>90</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小默认值是10MB,本篇设置为1KB只是为了演示 -->
<maxFileSize>2MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
<!--<maxFileSize>1KB</maxFileSize>-->
<!--</triggeringPolicy>-->
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
</appender>
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的ThresholdFilter-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>Error</level>
</filter>
<!--日志名称如果没有File 属性那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File> 的日志都是当天的。-->
<!--<File>logs/error.demo-logback.log</File>-->
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>logs/error.%d{yyyy-MM-dd}.part_%i.log</FileNamePattern>
<!--只保留最近90天的日志-->
<maxHistory>90</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小默认值是10MB,本篇设置为1KB只是为了演示 -->
<maxFileSize>2MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>${FILE_ERROR_PATTERN}</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_INFO"/>
<appender-ref ref="FILE_ERROR"/>
</root>
</configuration>
Loading…
Cancel
Save