1.增加倒剁保存功能

2.完善上料多端同步
master
董哲奇 10 months ago
parent 3198082ec9
commit fa179b10a2

@ -243,4 +243,6 @@ public class DmYdjh implements Serializable {
@TableField(exist = false)
private String color;
private String sljhrq;
}

@ -1,6 +1,8 @@
package com.dsic.gj_erp.bean.zyjh;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Getter;
import lombok.Setter;
@ -13,10 +15,17 @@ import java.util.List;
@Setter
public class Ycldw {
@TableId(type = IdType.AUTO)
private Integer id;
private String name;
@TableField(exist = false)
private List<YcldwInfo> list;
private enum DwTypeEnum{
YCL,//预处理垛位
LLJ,//理料间垛位
YPP,//预配盘垛位
}
}

@ -1,5 +1,10 @@
package com.dsic.gj_erp.bean.zyjh;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.dsic.gj_erp.controller.zyjh.dto.ShangLiao;
import lombok.Getter;
import lombok.Setter;
@ -10,7 +15,9 @@ import lombok.Setter;
@Setter
public class YcldwInfo {
private String id;
@TableId(type = IdType.AUTO)
private Integer id;
private Integer dwId;
private Integer ceng;
private String czbh;
@ -28,6 +35,18 @@ public class YcldwInfo {
private String bfrq;//摆放日期
private ZtEnum zt;
public static YcldwInfo of(ShangLiao sl){
YcldwInfo info=new YcldwInfo();
BeanUtil.copyProperties(sl,info);
info.sl();
return info;
}
private void sl(){
this.bfrq= DateUtil.date().toString("yyyy/MM/dd");
this.baifang();
}
private void baifang(){
this.zt=ZtEnum.BF;
}

@ -1,16 +1,22 @@
package com.dsic.gj_erp.controller.zyjh;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsic.gj_erp.bean.ResultBean;
import com.dsic.gj_erp.bean.jhgk.DmYdjh;
import com.dsic.gj_erp.bean.pgd.PgdSljh;
import com.dsic.gj_erp.bean.zyjh.YcldwInfo;
import com.dsic.gj_erp.controller.zyjh.dto.DaoDuo;
import com.dsic.gj_erp.controller.zyjh.dto.ShangLiao;
import com.dsic.gj_erp.mapper.zyjh.YcldwMapper;
import com.dsic.gj_erp.service.jhgk.DmYdjhService;
import com.dsic.gj_erp.service.pgd.PgdSljhService;
import com.dsic.gj_erp.controller.zyjh.dto.SljhSearch;
import com.dsic.gj_erp.exception.CustomException;
import com.dsic.gj_erp.service.zyjh.YcldwInfoService;
import com.dsic.gj_erp.service.zyjh.YcldwService;
import com.dsic.gj_erp.service.zyjh.ZyjhService;
import com.dsic.gj_erp.ws.WsHandler;
import lombok.AllArgsConstructor;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -20,21 +26,30 @@ import java.util.List;
@AllArgsConstructor
public class ZyjhController {
private final DmYdjhService ydjhService;
private final ZyjhService zyjhService;
private final PgdSljhService pgdSljhService;
private final YcldwService ycldwService;
private final YcldwMapper ycldwMapper;
private final YcldwInfoService ycldwInfoService;
private final WsHandler wsHandler;
/**
*
* ,,
* ,
*/
@PostMapping("sljh")
public ResultBean<?> sljh(){
public ResultBean<?> sljh(@RequestBody SljhSearch search){
String date = DateUtil.date().toString("yyyy/MM/dd");
List<DmYdjh> list = ydjhService.list(Wrappers.<DmYdjh>lambdaQuery()
.le(DmYdjh::getSlrq, date)
if (StrUtil.isAllNotEmpty(search.getSljhrq())){
date=search.getSljhrq();
}
List<DmYdjh> list = zyjhService.list(Wrappers.<DmYdjh>lambdaQuery()
.le(DmYdjh::getSljhrq, date)
.eq(DmYdjh::getZt, "2")
.eq(StrUtil.isNotEmpty(search.getDcch()),DmYdjh::getDcCh, search.getDcch())
.eq(StrUtil.isNotEmpty(search.getPl()),DmYdjh::getDcPl, search.getPl())
.eq(StrUtil.isNotEmpty(search.getKw()),DmYdjh::getKw, search.getKw())
);
return new ResultBean<>(list);
}
@ -44,12 +59,42 @@ public class ZyjhController {
*/
@PostMapping("ycldw")
public ResultBean<?> ycldw(){
return new ResultBean<>(ycldwMapper.ycldwList());
return new ResultBean<>(ycldwService.ycldwList());
}
@PostMapping("sl")
public ResultBean<?> sl(@RequestBody ShangLiao sl){
@Transactional(rollbackFor = Exception.class)
public ResultBean<?> sl(@RequestBody ShangLiao sl) throws CustomException {
if (!sl.checkCkwp()){
//throw new CustomException(10009,"物品库存不存在,或库存信息错误");
}
//更新预处理垛位信息
YcldwInfo info=ycldwInfoService.updateForSl(sl);
//更新月度计划上料相关字段
zyjhService.updateForSl(sl);
//todo 更新库存信息
wsHandler.sendSlComplete((JSONObject)JSONObject.toJSON(info));
return new ResultBean<>();
}
/**
*
*/
@PostMapping("daoduo")
@Transactional(rollbackFor = Exception.class)
public ResultBean<?> daoduo(@RequestBody DaoDuo dd){
if (dd.getLastCeng()!=dd.getCeng()||dd.getLastDuo()!=dd.getDuo()){
int moveY=dd.getLastCeng()-dd.getCeng();
int y=moveY>0?1:-1;
for (YcldwInfo info:dd.getMovedList()){
ycldwInfoService.daoduo(info.getId(),y);
}
ycldwInfoService.daoduo(dd.getId(),dd.getCeng());
}
return new ResultBean<>();
}

@ -0,0 +1,19 @@
package com.dsic.gj_erp.controller.zyjh.dto;
import com.dsic.gj_erp.bean.zyjh.YcldwInfo;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class DaoDuo {
private int id;
private int lastCeng;
private int lastDuo;
private int ceng;
private int duo;
private List<YcldwInfo> movedList;
}

@ -1,5 +1,8 @@
package com.dsic.gj_erp.controller.zyjh.dto;
import cn.hutool.core.util.ObjUtil;
import com.dsic.gj_erp.bean.jhgk.DmYdjh;
import com.dsic.gj_erp.bean.kc.ImCkwpkwp;
import lombok.Getter;
import lombok.Setter;
@ -7,4 +10,26 @@ import lombok.Setter;
@Setter
public class ShangLiao {
private DmYdjh ydjh;
private ImCkwpkwp ckwpkwp;
private String pgdId;//只完成即可
private Integer dwId;
private Integer ceng;
private String czbh;
private String pl;
private String fd;
private String kw;
private String zl;
private String tlth;
private String wph;
private String wpgg;
private String sljhrq;
private String qgjhrq;
private String bfr;//摆放人
public boolean checkCkwp(){
return ObjUtil.isNotEmpty(this.ckwpkwp);
}
}

@ -0,0 +1,13 @@
package com.dsic.gj_erp.controller.zyjh.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SljhSearch {
private String dcch;
private String pl;
private String kw;
private String sljhrq;
}

@ -4,4 +4,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsic.gj_erp.bean.zyjh.YcldwInfo;
public interface YcldwInfoMapper extends BaseMapper<YcldwInfo> {
void daoduo(Integer id,int y);
}

@ -0,0 +1,23 @@
package com.dsic.gj_erp.service.zyjh;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsic.gj_erp.bean.zyjh.Ycldw;
import com.dsic.gj_erp.bean.zyjh.YcldwInfo;
import com.dsic.gj_erp.controller.zyjh.dto.ShangLiao;
import com.dsic.gj_erp.mapper.zyjh.YcldwInfoMapper;
import com.dsic.gj_erp.mapper.zyjh.YcldwMapper;
import org.springframework.stereotype.Service;
@Service
public class YcldwInfoService extends ServiceImpl<YcldwInfoMapper, YcldwInfo> {
public YcldwInfo updateForSl(ShangLiao sl){
YcldwInfo info=YcldwInfo.of(sl);
baseMapper.insert(info);
return info;
}
public void daoduo(Integer id,int y){
baseMapper.daoduo(id,y);
}
}

@ -0,0 +1,17 @@
package com.dsic.gj_erp.service.zyjh;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsic.gj_erp.bean.zyjh.Ycldw;
import com.dsic.gj_erp.mapper.zyjh.YcldwMapper;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class YcldwService extends ServiceImpl<YcldwMapper, Ycldw> {
public List<Ycldw> ycldwList(){
return baseMapper.ycldwList();
}
}

@ -0,0 +1,20 @@
package com.dsic.gj_erp.service.zyjh;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsic.gj_erp.bean.jhgk.DmYdjh;
import com.dsic.gj_erp.controller.zyjh.dto.ShangLiao;
import com.dsic.gj_erp.mapper.jhgk.DmYdjhMapper;
import org.springframework.stereotype.Service;
@Service
public class ZyjhService extends ServiceImpl<DmYdjhMapper,DmYdjh> {
public void updateForSl(ShangLiao sl){
this.update(Wrappers.<DmYdjh>lambdaUpdate()
.set(DmYdjh::getZt,"21")
.eq(DmYdjh::getId,sl.getYdjh().getId())
);
}
}

@ -0,0 +1,49 @@
package com.dsic.gj_erp.ws;
import com.corundumstudio.socketio.SocketConfig;
import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.Transport;
import com.corundumstudio.socketio.annotation.SpringAnnotationScanner;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Slf4j
@Configuration
public class WsConfig {
private final WsProperties properties;
public WsConfig(WsProperties properties) {
this.properties = properties;
}
@Bean
public SocketIOServer socketIOServer(){
com.corundumstudio.socketio.Configuration config=new com.corundumstudio.socketio.Configuration();
config.setHostname(properties.getHost());
config.setPort(properties.getPort());
SocketConfig socketConfig = new SocketConfig();
socketConfig.setReuseAddress(true);
config.setSocketConfig(socketConfig);
config.setOrigin(":*:");
config.setWorkerThreads(properties.getWorkCount());
config.setAllowCustomRequests(properties.getAllowCustomRequests());
config.setUpgradeTimeout(properties.getUpgradeTimeout());
config.setPingTimeout(properties.getPingTimeout());
config.setPingInterval(properties.getPingInterval());
config.setMaxHttpContentLength(properties.getMaxHttpContentLength());
config.setMaxFramePayloadLength(properties.getMaxFramePayloadLength());
config.setTransports(Transport.WEBSOCKET,Transport.POLLING);//指定传输协议为WebSocket
log.info("注册webSocket成功:[{}]", properties);
return new SocketIOServer(config);
}
/**
* socket-io
* SocketIOServer @OnConnect@OnEvent
*/
@Bean
public SpringAnnotationScanner springAnnotationScanner(SocketIOServer socketIOServer) {
return new SpringAnnotationScanner(socketIOServer);
}
}

@ -0,0 +1,44 @@
package com.dsic.gj_erp.ws;
import com.alibaba.fastjson.JSONObject;
import com.corundumstudio.socketio.SocketIOClient;
import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.annotation.OnConnect;
import com.corundumstudio.socketio.annotation.OnDisconnect;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Slf4j
@Component
@AllArgsConstructor
public class WsHandler {
private final SocketIOServer socketIOServer;
private final WsProperties properties;
@OnDisconnect
public void onDisconnect(SocketIOClient client) {
if (client.getHandshakeData().getLocal().getPort()==properties.getPort()){
Map<String, List<String>> urlParams = client.getHandshakeData().getUrlParams();
log.info("--------------------客户端已断开连接-------------------- {}", urlParams);
}
}
@OnConnect
public void onConnect(SocketIOClient client) {
if (client.getHandshakeData().getLocal().getPort()==properties.getPort()){
log.info("{}", client);
Map<String, List<String>> urlParams = client.getHandshakeData().getUrlParams();
log.info("链接开启urlParams{}", urlParams);
}
}
public void sendSlComplete(JSONObject object) {
socketIOServer.getBroadcastOperations().sendEvent("slComplete", object);
}
}

@ -0,0 +1,32 @@
package com.dsic.gj_erp.ws;
import com.corundumstudio.socketio.SocketIOServer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* socket-io
* @Author manster
* @Date 2022/6/13
**/
@Slf4j
@Component
public class WsInitListener implements ApplicationListener<ApplicationReadyEvent> {
private final SocketIOServer socketIOServer;
public WsInitListener(SocketIOServer socketIOServer) {
this.socketIOServer = socketIOServer;
}
@Override
public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
socketIOServer.start();
log.info("--------------------------------------");
log.info("socket.io启动成功: " + socketIOServer.getConfiguration().getPort());
log.info("--------------------------------------");
}
}

@ -0,0 +1,45 @@
package com.dsic.gj_erp.ws;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = "ws")
public class WsProperties {
private String host;
private Integer port;
private Integer workCount;
private Boolean allowCustomRequests;
private Integer upgradeTimeout;
private Integer pingTimeout;
private Integer pingInterval;
private Integer maxHttpContentLength;
private Integer maxFramePayloadLength;
@Override
public String toString() {
return "ImProperties{" +
"host='" + host + '\'' +
", port=" + port +
", workCount=" + workCount +
", allowCustomRequests=" + allowCustomRequests +
", upgradeTimeout=" + upgradeTimeout +
", pingTimeout=" + pingTimeout +
", pingInterval=" + pingInterval +
", maxHttpContentLength=" + maxHttpContentLength +
", maxFramePayloadLength=" + maxFramePayloadLength +
'}';
}
}

@ -0,0 +1,32 @@
package com.dsic.gj_erp.ws;
import com.corundumstudio.socketio.SocketIOServer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextClosedEvent;
import org.springframework.stereotype.Component;
/**
* socket-io
* @Author manster
* @Date 2022/6/13
**/
@Slf4j
@Component
public class WsStopListener implements ApplicationListener<ContextClosedEvent> {
private final SocketIOServer socketIOServer;
public WsStopListener(SocketIOServer socketIOServer) {
this.socketIOServer = socketIOServer;
}
// 监听kill pid 无法监听 kill -9 pid
@Override
public void onApplicationEvent(ContextClosedEvent contextClosedEvent) {
socketIOServer.stop();
log.info("--------------------------------------");
log.info("socket.io 关闭成功");
log.info("--------------------------------------");
}
}

@ -0,0 +1,10 @@
ws:
host: 0.0.0.0
port: 23456
workCount: 100
allowCustomRequests: true
upgradeTimeout: 10000
pingTimeout: 60000
pingInterval: 25000
maxHttpContentLength: 1048576
maxFramePayloadLength: 1048576

@ -22,8 +22,8 @@ spring.servlet.multipart.enabled = true
server.port=8081
spring.datasource.master.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
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.url=jdbc:sqlserver://192.127.0.3:1433;DatabaseName=GJ_ERP
spring.datasource.master.jdbc-url=jdbc:sqlserver://192.127.0.3:1433;DatabaseName=GJ_ERP
spring.datasource.master.username=sa
spring.datasource.master.password=gjerp
spring.datasource.master.initialize=true

@ -23,17 +23,17 @@
dm_sygd_mx.lx,
dm_sygd_mx.xcms,
dm_sygd_mx.kw,
dm_sygd_mx.slrq,
dm_sygd_mx.slrq sljhrq,
dm_sygd_mx.slry,
dm_sygd_mx.pw,
dm_sygd_mx.pwry,
dm_sygd_mx.pwrq,
dm_sygd_mx.pwrq pwjhrq,
dm_sygd_mx.hxsb,
dm_sygd_mx.hxry,
dm_sygd_mx.hxrq,
dm_sygd_mx.hxrq hxjhrq,
dm_sygd_mx.qgsb,
dm_sygd_mx.qgry,
dm_sygd_mx.qgrq,
dm_sygd_mx.qgrq qgjhrq,
dm_sygd_mx.pwsb,
dm_sygd_mx.DC_FD,
dm_sygd_mx.jzbs,

@ -396,7 +396,7 @@
(IM_CKWPKWP.KWH) AS kwh ,
(IM_CKWPKWP.CFCS1) AS cs,
dm_ydjh.slrq as sljhrq,
'01' as zt,,
'01' as zt,
#{bzry},
#{bzrq}
from dm_ydjh LEFT JOIN IM_CKWPKWP on

@ -0,0 +1,8 @@
<?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.dsic.gj_erp.mapper.zyjh.YcldwInfoMapper">
<update id="daoduo">
update ycldw_info set ceng=ceng+#{y} where id=#{id}
</update>
</mapper>

@ -7,6 +7,7 @@
<result column="name" property="name" jdbcType="VARCHAR" />
<collection property="list" ofType="ycldwInfo" javaType="java.util.ArrayList" columnPrefix="info_" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="dw_id" property="dwId" jdbcType="INTEGER" />
<result column="ceng" property="ceng" jdbcType="INTEGER" />
<result column="czbh" property="czbh" jdbcType="VARCHAR" />
<result column="pl" property="pl" jdbcType="VARCHAR" />
@ -25,8 +26,9 @@
</resultMap>
<sql id="ycldwInfo" >
b.id info_id,b.ceng info_ceng,b.czbh info_czbh,b.pl info_pl,b.fd info_fd,b.kw info_kw,b.zl info_zl,b.tlth info_tlth,
b.wpgg info_wpgg,b.wph info_wph,b.sljhrq info_sljhrq,b.qgjhrq info_qgjhrq,b.bfr info_bfr,b.bfrq info_bfrq,b.zt info_zt
b.id info_id,b.dw_id info_dw_id,b.ceng info_ceng,b.czbh info_czbh,b.pl info_pl,b.fd info_fd,b.kw info_kw,b.zl info_zl,
b.tlth info_tlth,b.wpgg info_wpgg,b.wph info_wph,b.sljhrq info_sljhrq,b.qgjhrq info_qgjhrq,b.bfr info_bfr,
b.bfrq info_bfrq,b.zt info_zt
</sql>
<select id="ycldwList" resultMap="ycldwVo">
@ -35,6 +37,6 @@
<include refid="ycldwInfo" />
from
ycldw a left join ycldw_info b on a.id=b.dw_id AND b.zt='BF'
order by ceng desc
order by a.id,ceng
</select>
</mapper>

Loading…
Cancel
Save