From 9fb8d2fc786acf0785c47afa51b5a7987952ff01 Mon Sep 17 00:00:00 2001 From: baoge <751575283@qq.com> Date: Tue, 7 May 2024 09:40:19 +0800 Subject: [PATCH] =?UTF-8?q?opt:=20=E4=BF=AE=E6=94=B9=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E5=8D=95=E6=8D=AE=E5=A4=84=E7=90=86=E6=95=B0=E9=87=8F=EF=BC=8C?= =?UTF-8?q?=E5=8D=95=E6=8D=AE=E6=98=8E=E7=BB=86=E5=AE=9E=E6=97=B6=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=AE=A1=E6=A0=B8=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nlsso-server/pom.xml | 25 +- .../websocket/SendHomeWebSocketServer.java | 16 +- .../nl/common/websocket/WebSocketConfig.java | 34 ++ .../java/org/nl/config/WebSocketConfig.java | 33 -- .../notice/impl/SysNoticeServiceImpl.java | 1 - .../controller/EasOutInBillController.java | 12 +- .../database/eas/dao/EasOutInBillDetail.java | 9 + .../wms/database/eas/dao/InventoryInfo.java | 2 +- .../dao/mapper/EasOutInBillDetailMapper.java | 8 +- .../eas/dao/mapper/EasOutInBillMapper.java | 4 +- .../eas/dao/xml/EasOutInBillDetailMapper.xml | 49 ++- .../eas/dao/xml/EasOutInBillMapper.xml | 10 +- .../database/eas/dto/EasBillDetailDto.java | 112 ++++++ .../eas/dto/EasOutInBillDetailVO.java | 7 + .../eas/service/IeasOutInBillService.java | 23 +- .../impl/EasOutInBillDetailServiceImpl.java | 36 +- .../service/impl/EasOutInBillServiceImpl.java | 337 ++++++++++++++---- .../org/nl/wms/ext/eas/WmsToEasService.java | 9 +- .../org/nl/wms/ext/srm/WmsToSrmService.java | 47 +-- .../org/nl/wms/schedule/EasBillSchedule.java | 145 ++++---- .../resources/config/application-devLocal.yml | 2 +- 21 files changed, 628 insertions(+), 293 deletions(-) create mode 100644 nlsso-server/src/main/java/org/nl/common/websocket/WebSocketConfig.java delete mode 100644 nlsso-server/src/main/java/org/nl/config/WebSocketConfig.java create mode 100644 nlsso-server/src/main/java/org/nl/wms/database/eas/dto/EasBillDetailDto.java diff --git a/nlsso-server/pom.xml b/nlsso-server/pom.xml index 1aaaa7a..3f992a4 100644 --- a/nlsso-server/pom.xml +++ b/nlsso-server/pom.xml @@ -50,13 +50,18 @@ axis 1.4 - - - wsdl4j - wsdl4j - 1.6.2 - - + + + wsdl4j + wsdl4j + 1.6.2 + + + + org.springframework.boot + spring-boot-starter-websocket + + javax.xml @@ -383,12 +388,6 @@ - - - org.springframework.boot - spring-boot-starter-websocket - - io.jsonwebtoken diff --git a/nlsso-server/src/main/java/org/nl/common/websocket/SendHomeWebSocketServer.java b/nlsso-server/src/main/java/org/nl/common/websocket/SendHomeWebSocketServer.java index f16ec4b..9b9c9f1 100644 --- a/nlsso-server/src/main/java/org/nl/common/websocket/SendHomeWebSocketServer.java +++ b/nlsso-server/src/main/java/org/nl/common/websocket/SendHomeWebSocketServer.java @@ -14,10 +14,13 @@ * limitations under the License. */ package org.nl.common.websocket; + +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.nl.wms.database.eas.dao.HomeBillCounts; import org.springframework.stereotype.Component; + import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; @@ -26,6 +29,7 @@ import java.util.List; import java.util.concurrent.CopyOnWriteArraySet; +@SaIgnore @ServerEndpoint("/webSocket/SendHomeInfo/{sid}") @Slf4j @Component @@ -36,11 +40,15 @@ public class SendHomeWebSocketServer { */ private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet<>(); - /**静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。*/ + /** + * 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 + */ private static int onlineCount = 0; - /**与某个客户端的连接会话,需要通过它来给客户端发送数据*/ + /** + * 与某个客户端的连接会话,需要通过它来给客户端发送数据 + */ private Session session; /** * 与某个客户端的连接会话,需要通过它来给客户端发送数据 @@ -91,6 +99,7 @@ public class SendHomeWebSocketServer { Integer d = 1; return session; } + // 发送消息,在定时任务中会调用此方法 public void sendMessage(String message) throws IOException { this.session.getBasicRemote().sendText(message); @@ -99,13 +108,14 @@ public class SendHomeWebSocketServer { public void sendDataToClient(List data) { try { - if (this.session != null&& data != null && !data.isEmpty()) { + if (this.session != null && data != null && !data.isEmpty()) { this.session.getBasicRemote().sendText(JSON.toJSONString(data)); } } catch (IOException e) { log.error("发送消息给客户端失败", e); } } + public static synchronized int getOnlineCount() { return onlineCount; } diff --git a/nlsso-server/src/main/java/org/nl/common/websocket/WebSocketConfig.java b/nlsso-server/src/main/java/org/nl/common/websocket/WebSocketConfig.java new file mode 100644 index 0000000..dc43b0a --- /dev/null +++ b/nlsso-server/src/main/java/org/nl/common/websocket/WebSocketConfig.java @@ -0,0 +1,34 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.websocket; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + + +/** + * @author ZhangHouYing + * @date 2019-08-24 15:44 + */ +@Configuration +public class WebSocketConfig { + + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } +} diff --git a/nlsso-server/src/main/java/org/nl/config/WebSocketConfig.java b/nlsso-server/src/main/java/org/nl/config/WebSocketConfig.java deleted file mode 100644 index 79c201b..0000000 --- a/nlsso-server/src/main/java/org/nl/config/WebSocketConfig.java +++ /dev/null @@ -1,33 +0,0 @@ -///* -// * Copyright 2019-2020 Zheng Jie -// * -// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -//package org.nl.config; -// -//import org.springframework.context.annotation.Bean; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.web.socket.server.standard.ServerEndpointExporter; -// -///** -// * @author ZhangHouYing -// * @date 2019-08-24 15:44 -// */ -//@Configuration -//public class WebSocketConfig { -// -// @Bean -// public ServerEndpointExporter serverEndpointExporter() { -// return new ServerEndpointExporter(); -// } -//} diff --git a/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java b/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java index 78cb10f..b68d70a 100644 --- a/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java +++ b/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java @@ -17,7 +17,6 @@ import org.nl.common.exception.BadRequestException; import org.nl.common.websocket.MsgType; import org.nl.common.websocket.SocketMsg; import org.nl.common.websocket.WebSocketServer; -import org.nl.common.websocket.SocketMsg; import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.dict.dao.mapper.SysDictMapper; import org.nl.system.service.notice.ISysNoticeService; diff --git a/nlsso-server/src/main/java/org/nl/wms/database/eas/controller/EasOutInBillController.java b/nlsso-server/src/main/java/org/nl/wms/database/eas/controller/EasOutInBillController.java index 9a31f29..55b7172 100644 --- a/nlsso-server/src/main/java/org/nl/wms/database/eas/controller/EasOutInBillController.java +++ b/nlsso-server/src/main/java/org/nl/wms/database/eas/controller/EasOutInBillController.java @@ -11,6 +11,7 @@ import org.nl.common.base.CommonPage; import org.nl.common.base.CommonResult; import org.nl.common.base.RestBusinessTemplate; import org.nl.common.base.ResultCode; +import org.nl.common.websocket.SendHomeWebSocketServer; import org.nl.wms.database.eas.dao.EasOutInBill; import org.nl.wms.database.eas.dao.EasOutInBillDetail; import org.nl.wms.database.eas.dao.HomeBillCounts; @@ -41,7 +42,6 @@ public class EasOutInBillController { @Resource private IeasOutInBillService easOutInBillService; - /** * 审核单据 * @@ -56,19 +56,20 @@ public class EasOutInBillController { if (ids == null || ids.isEmpty()) { return CommonResult.failed(ResultCode.FAILED); } - return RestBusinessTemplate.execute(() -> easOutInBillService.audit(ids)); + return RestBusinessTemplate.execute(() -> easOutInBillService.audit(ids, true)); } /** * APP升级 + * * @return APP升级 */ @PostMapping("/appUpdate") - @Log("审核") + @Log("APP升级") @SaIgnore //@SaCheckPermission("@el.check(EasOutInBill:edit')") public CommonResult appUpdate() { - return RestBusinessTemplate.execute(() -> easOutInBillService.appUpdate()); + return RestBusinessTemplate.execute(() -> easOutInBillService.appUpdate()); } /** @@ -93,7 +94,6 @@ public class EasOutInBillController { } - /** * 获取单据列表 */ @@ -104,8 +104,6 @@ public class EasOutInBillController { } - - /** * 条件查询 * diff --git a/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/EasOutInBillDetail.java b/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/EasOutInBillDetail.java index 300b6e1..ef4bfb2 100644 --- a/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/EasOutInBillDetail.java +++ b/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/EasOutInBillDetail.java @@ -2,6 +2,7 @@ package org.nl.wms.database.eas.dao; import java.io.Serializable; import java.math.BigDecimal; +import java.util.Date; import lombok.*; import lombok.Data; @@ -182,6 +183,9 @@ public class EasOutInBillDetail extends Model { * 库存数量 */ private BigDecimal kcsl; + + + /** * 推荐库位编码 */ @@ -287,6 +291,11 @@ public class EasOutInBillDetail extends Model { */ private BigDecimal czsl; + /** + * 修改时间 + */ + private Date xgsj; + /** * 获取主键值 * diff --git a/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/InventoryInfo.java b/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/InventoryInfo.java index dbc37bb..21ccac8 100644 --- a/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/InventoryInfo.java +++ b/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/InventoryInfo.java @@ -60,7 +60,7 @@ public class InventoryInfo extends Model { /** * 库位编码 */ - private String kwbm; + private String tjkwbm; /** diff --git a/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/mapper/EasOutInBillDetailMapper.java b/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/mapper/EasOutInBillDetailMapper.java index 539f14e..743848e 100644 --- a/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/mapper/EasOutInBillDetailMapper.java +++ b/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/mapper/EasOutInBillDetailMapper.java @@ -3,6 +3,7 @@ import com.baomidou.dynamic.datasource.annotation.DS; import io.lettuce.core.dynamic.annotation.Param; import org.nl.wms.database.eas.dao.EasOutInBillDetail; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.database.eas.dto.EasBillDetailDto; import org.nl.wms.database.eas.dto.EasOutInBillDetailDto; import org.nl.wms.database.eas.dao.InventoryInfo; import org.nl.wms.database.eas.dto.EasOutInBillDetailVO; @@ -22,6 +23,9 @@ public interface EasOutInBillDetailMapper extends BaseMapper List queryBillDetailList(@Param("ids") Set ids); + List queryDetailList(@Param("ids") Set ids); + + void insertBatch(List entities); @DS("oracle_eas") @@ -35,9 +39,9 @@ public interface EasOutInBillDetailMapper extends BaseMapper @DS("oracle_eas") List selectPageWithInventory(); @DS("oracle_eas") - Set selectEasIds(); + List selectEasIds(); @DS("mysql_srm") - Set selectSrmIds(); + List selectSrmIds(); @DS("mysql_srm") List selectSrmPageWithInventory(); diff --git a/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/mapper/EasOutInBillMapper.java b/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/mapper/EasOutInBillMapper.java index 8c1b57f..809dc92 100644 --- a/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/mapper/EasOutInBillMapper.java +++ b/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/mapper/EasOutInBillMapper.java @@ -25,8 +25,8 @@ public interface EasOutInBillMapper extends BaseMapper { List getSrmBills(); //AND STR_TO_DATE( cjsj, '%Y-%m-%d' ) >= CURDATE() - INTERVAL 1 MONTH; - Set queryExistBills(); - Set queryLocalBills(); + List queryExistBills(); + List queryLocalBills(); diff --git a/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/xml/EasOutInBillDetailMapper.xml b/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/xml/EasOutInBillDetailMapper.xml index 105d9f7..4372419 100644 --- a/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/xml/EasOutInBillDetailMapper.xml +++ b/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/xml/EasOutInBillDetailMapper.xml @@ -9,23 +9,29 @@ WHERE DJZT = '提交' AND TO_DATE(cjsj, 'YYYY-MM-DD') >= TRUNC(SYSDATE) - INTERVAL '91' DAY(3) - SELECT - FLID + *, + 2 AS DJLY FROM - EAS_NOBLE.V_UC_OUTINBILL - WHERE DJZT = '提交' - AND TO_DATE(cjsj, 'YYYY-MM-DD') >= TRUNC(SYSDATE) - INTERVAL '7' DAY(3) + V_WMS_INBILL_THIRD + WHERE + DJZT = '未入库' + AND CJSJ >= DATE_SUB( + CURDATE(), + INTERVAL 91 DAY) - SELECT - * - FROM V_WMS_INBILL_THIRD - WHERE DJZT='未入库' AND CJSJ >= DATE_SUB(CURDATE(), INTERVAL 91 DAY) + DJID,FLID + FROM + EAS_NOBLE.V_UC_OUTINBILL + WHERE DJZT = '提交' + AND TO_DATE(cjsj, 'YYYY-MM-DD') >= TRUNC(SYSDATE) - INTERVAL '3' DAY(3) - SELECT - FLID + FLID,DJID FROM V_WMS_INBILL_THIRD WHERE DJZT='未入库' AND CJSJ >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) @@ -113,6 +119,27 @@ #{item} + insert into eas_out_in_bill_detail(id,djid, djlx, ywlx, djbh, zzbm, zzmc, btbz, djzt, cjsj, ywrq, cjr, flid, flxh, wlbm, wlmc, ggxh, pc, jldw, jbjldw, fzjldw, sl, jbsl, fzsl, ckbm, ckmc, kwbm, kwmc, flbz, sysl, code, cksj, llr,tjkwbm,tjkwmc,kcsl,djly,trackno,update_id,update_name,update_time,czsl,bmbm,bmmc) diff --git a/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/xml/EasOutInBillMapper.xml b/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/xml/EasOutInBillMapper.xml index 7f644d3..7744e19 100644 --- a/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/xml/EasOutInBillMapper.xml +++ b/nlsso-server/src/main/java/org/nl/wms/database/eas/dao/xml/EasOutInBillMapper.xml @@ -31,16 +31,16 @@ djzt = '提交' - SELECT - DJID + DJID,FLID,XGSJ FROM - EAS_OUT_IN_BILL + EAS_OUT_IN_BILL_DETAIL - SELECT - FLID + FLID,DJID FROM EAS_OUT_IN_BILL_DETAIL WHERE diff --git a/nlsso-server/src/main/java/org/nl/wms/database/eas/dto/EasBillDetailDto.java b/nlsso-server/src/main/java/org/nl/wms/database/eas/dto/EasBillDetailDto.java new file mode 100644 index 0000000..ba50071 --- /dev/null +++ b/nlsso-server/src/main/java/org/nl/wms/database/eas/dto/EasBillDetailDto.java @@ -0,0 +1,112 @@ +package org.nl.wms.database.eas.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.math.BigDecimal; + + +/** + * {@code @Description:} (EasOutInBillDetail)实体类 + * {@code @Author:} gbx + * + * @since 2024-02-22 + */ +@Data +@ToString +@EqualsAndHashCode(callSuper = false) +@SuppressWarnings("serial") +public class EasBillDetailDto { + + /** + * eas单据id + */ + private String billId; + + + /** + * eas单据编号 + */ + private String billNo; + + /** + * 操作人 + */ + private String inWhUser; + + + /** + * 业务日期 + */ + private String bizDate; + + + /** + * 业务类型 + */ + private String billType; + + + /** + * 备注 + */ + private String description; + + /** + * 单据来源 + */ + private String djly; + + + /** + * 单据id + */ + private String djid; + + /** + * 序号 + */ + private String seq; + + + /** + * 明细id + */ + private String entryId; + + + /** + * 数量 + */ + private BigDecimal qty; + + + /** + * 仓库编码 + */ + private String warehouseNo; + + + /** + * 库位编码 + */ + private String locationNo; + + + /** + * 单位 + */ + private String unitNo; + + + /** + * 备注 + */ + private String remark; + + +} + + + diff --git a/nlsso-server/src/main/java/org/nl/wms/database/eas/dto/EasOutInBillDetailVO.java b/nlsso-server/src/main/java/org/nl/wms/database/eas/dto/EasOutInBillDetailVO.java index 7bb619c..1143f0b 100644 --- a/nlsso-server/src/main/java/org/nl/wms/database/eas/dto/EasOutInBillDetailVO.java +++ b/nlsso-server/src/main/java/org/nl/wms/database/eas/dto/EasOutInBillDetailVO.java @@ -26,6 +26,13 @@ public class EasOutInBillDetailVO extends BaseQuery { * 单据id */ private String djid; + + /** + * 库存数量 + */ + private BigDecimal kcsl; + + /** * 单据类型 */ diff --git a/nlsso-server/src/main/java/org/nl/wms/database/eas/service/IeasOutInBillService.java b/nlsso-server/src/main/java/org/nl/wms/database/eas/service/IeasOutInBillService.java index 94f85ef..7bc559e 100644 --- a/nlsso-server/src/main/java/org/nl/wms/database/eas/service/IeasOutInBillService.java +++ b/nlsso-server/src/main/java/org/nl/wms/database/eas/service/IeasOutInBillService.java @@ -26,8 +26,6 @@ import org.nl.wms.database.eas.dto.EasOutInBillQuery; public interface IeasOutInBillService extends IService { - - /** * APP升级 */ @@ -35,6 +33,7 @@ public interface IeasOutInBillService extends IService { /** * 首页显示出入库单据数量 + * * @return JSONObject */ List getBillsCount(); @@ -58,26 +57,26 @@ public interface IeasOutInBillService extends IService { /** * Eas视图查询未提交的出入库单据 + * * @return List */ List getEasBills(); - /** * 查询本地的出入库单据 + * * @return List */ - Set queryExistBills(); + List queryExistBills(); /** * 查询本地未提交的出入库单据 + * * @return List */ - Set queryLocalBills(); - - + List queryLocalBills(); /** @@ -89,11 +88,9 @@ public interface IeasOutInBillService extends IService { /** - * 出入库单据同步 - * - * @param detailList 出入库单据明细 + * 单据新增或更新 */ - void createBills(List detailList); + void insertOrUpdateBills(List easOutInBillDetails, List existingIds); /** @@ -102,14 +99,14 @@ public interface IeasOutInBillService extends IService { * @param entity 对象实体 */ - void update(EasOutInBillQuery entity); + void update(EasOutInBillQuery entity); /** * 审核 * * @param ids / */ - void audit(Set ids); + void audit(Set ids, boolean isDetail); /** diff --git a/nlsso-server/src/main/java/org/nl/wms/database/eas/service/impl/EasOutInBillDetailServiceImpl.java b/nlsso-server/src/main/java/org/nl/wms/database/eas/service/impl/EasOutInBillDetailServiceImpl.java index 5cb573c..58ecd58 100644 --- a/nlsso-server/src/main/java/org/nl/wms/database/eas/service/impl/EasOutInBillDetailServiceImpl.java +++ b/nlsso-server/src/main/java/org/nl/wms/database/eas/service/impl/EasOutInBillDetailServiceImpl.java @@ -7,13 +7,17 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.wms.database.eas.dao.EasOutInBill; import org.nl.wms.database.eas.dao.InventoryInfo; import org.nl.wms.database.eas.dao.EasOutInBillDetail; +import org.nl.wms.database.eas.dto.EasOutInBillDetailDto; import org.nl.wms.database.eas.dto.EasOutInBillDetailVO; import org.nl.wms.database.eas.dao.mapper.EasOutInBillDetailMapper; +import org.nl.wms.database.eas.dto.EasOutInBillDto; import org.nl.wms.database.eas.service.IeasOutInBillDetailService; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.wms.database.eas.service.IeasOutInBillService; import org.springframework.stereotype.Service; import cn.hutool.core.util.ObjectUtil; import org.springframework.beans.BeanUtils; @@ -21,9 +25,12 @@ import org.springframework.beans.BeanUtils; import javax.annotation.Resource; import org.nl.common.base.CommonPage; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.stream.Collectors; @@ -37,6 +44,10 @@ import java.util.stream.Collectors; public class EasOutInBillDetailServiceImpl extends ServiceImpl implements IeasOutInBillDetailService { + + @Resource + private IeasOutInBillService ieasOutInBillService; + @Resource private EasOutInBillDetailMapper easOutInBillDetailMapper; @@ -59,12 +70,19 @@ public class EasOutInBillDetailServiceImpl extends ServiceImpl matchedInventory = inventoryInfoList.stream() .filter(inventory -> { boolean isMatched = true; + //去向部门 if (bill.getZzbm() != null && !bill.getZzbm().isEmpty()) { isMatched &= Objects.equals(inventory.getZzbm(), bill.getZzbm()); } + //仓库编码 if (bill.getCkbm() != null && !bill.getCkbm().isEmpty()) { isMatched &= Objects.equals(inventory.getCkbm(), bill.getCkbm()); } + //库位编码 + if (bill.getTjkwbm() != null && !bill.getTjkwbm().isEmpty()) { + isMatched &= Objects.equals(inventory.getTjkwbm(), bill.getTjkwbm()); + } + //物料编码 if (bill.getWlbm() != null && !bill.getWlbm().isEmpty()) { isMatched &= Objects.equals(inventory.getWlbm(), bill.getWlbm()); } @@ -76,9 +94,6 @@ public class EasOutInBillDetailServiceImpl extends ServiceImpl minKcsl = matchedInventory.stream() .min(Comparator.comparing(InventoryInfo::getKcsl)); minKcsl.ifPresent(m -> { + //todo 增加库存数量本地计算 自动审核单据 确认明细单据是否逐一审核 bill.setKcsl(m.getKcsl()); }); }); @@ -104,7 +120,7 @@ public class EasOutInBillDetailServiceImpl extends ServiceImpl queryInventoryInfoList(List easOutInBillDetailList) { List zzbmList = getNonNullValues(easOutInBillDetailList, EasOutInBillDetail::getZzbm); List ckbmList = getNonNullValues(easOutInBillDetailList, EasOutInBillDetail::getCkbm); - List kwbmList = getNonNullValues(easOutInBillDetailList, EasOutInBillDetail::getKwbm); + List kwbmList = getNonNullValues(easOutInBillDetailList, EasOutInBillDetail::getTjkwbm); List wlbmList = getNonNullValues(easOutInBillDetailList, EasOutInBillDetail::getWlbm); List pcList = getNonNullValues(easOutInBillDetailList, EasOutInBillDetail::getPc); List tracknoList = getNonNullValues(easOutInBillDetailList, EasOutInBillDetail::getTrackno); @@ -127,8 +143,8 @@ public class EasOutInBillDetailServiceImpl extends ServiceImpl queryInventoryInfo(List params) { //todo 查询推荐库位 - List inventoryInfoList = new ArrayList<>(); - InventoryInfo inventoryInfo = new InventoryInfo(); + //List inventoryInfoList = new ArrayList<>(); + //InventoryInfo inventoryInfo = new InventoryInfo(); CommonPage commonPage = new CommonPage<>(); commonPage.setResult(params); commonPage.setCode(1); @@ -172,10 +188,12 @@ public class EasOutInBillDetailServiceImpl extends ServiceImpl entityList) { if (CollectionUtils.isNotEmpty(entityList)) { List entityLists = entityList.stream().filter(r -> StringUtils.isNotEmpty(r.getKwbm())).collect(Collectors.toList()); - List ids = entityLists.stream().map(EasOutInBillDetailVO::getCode).collect(Collectors.toList()); + Set ids = entityLists.stream().map(EasOutInBillDetailVO::getFlid).collect(Collectors.toSet()); + //ieasOutInBillService.audit(ids,false); if (ids.size() == entityList.size() && ids.size() > 1) { entityList.forEach(r -> { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -183,11 +201,11 @@ public class EasOutInBillDetailServiceImpl extends ServiceImpl easOutInBills = easOutInBillMapper.selectPage(new Page<>(params.getPage(), params.getSize()), new QueryWrapper() .lambda() .eq(ObjectUtil.isNotEmpty(params.getDjlx()), EasOutInBill::getDjlx, params.getDjlx()) + .eq(ObjectUtil.isNotEmpty(params.getDjzt()), EasOutInBill::getDjzt, "1".equals(params.getDjzt()) ? "提交" : "审核") .nested(ObjectUtil.isNotEmpty(params.getFuzzy()), i -> i.like(EasOutInBill::getDjid, params.getFuzzy()) .or() @@ -142,7 +145,7 @@ public class EasOutInBillServiceImpl extends ServiceImpl queryExistBills() { + public List queryExistBills() { return easOutInBillMapper.queryExistBills(); } @@ -150,7 +153,7 @@ public class EasOutInBillServiceImpl extends ServiceImpl queryLocalBills() { + public List queryLocalBills() { return easOutInBillMapper.queryLocalBills(); } @@ -164,15 +167,64 @@ public class EasOutInBillServiceImpl extends ServiceImpl detailList) { + public void insertOrUpdateBills(List easOutInBillDetails, List existingIds) { + CompletableFuture.runAsync(() -> { + try { + insertBills(easOutInBillDetails, existingIds); + } catch (Exception e) { + log.error("异常信息:" + e.toString()); + } + }, pool); + CompletableFuture.runAsync(() -> { + try { + updateBills(easOutInBillDetails, existingIds); + } catch (Exception e) { + log.error("异常信息:" + e.toString()); + } + }, pool); + CompletableFuture.runAsync(() -> { + try { + //todo 检查事务是否会失效 + autoDeleteBill(easOutInBillDetails, existingIds); + } catch (Exception e) { + log.error("异常信息:" + e.toString()); + } + }, pool); + } + + + private void insertBills(List easOutInBillDetails, List existingIds) { + Set ids = existingIds.stream().map(EasOutInBillDetail::getFlid).collect(Collectors.toSet()); + // 过滤出需要插入的新单据,并根据来源设置 ID + List insertEasBills = easOutInBillDetails.stream() + .filter(bill -> !ids.contains(bill.getFlid())) + .peek(bill -> { + bill.setId(IdUtil.getStringId()); + bill.setCode(IdUtil.getStringId()); + bill.setTjkwbm(bill.getKwbm()); + bill.setSysl(bill.getSl()); + bill.setCzsl(BigDecimal.ZERO); + bill.setKcsl(BigDecimal.ZERO); + if (bill.getSl().compareTo(BigDecimal.ZERO) < 0) { + bill.setSl(bill.getSl().abs()); + } + if (bill.getDjly() == null) { + bill.setDjly("1"); + } else { + //srm的未入库改为提交 + bill.setDjzt("提交"); + } + }) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(insertEasBills)) { + this.insertBills(insertEasBills); + } + } + + + private void insertBills(List detailList) { List distinctDetailList = new ArrayList<>(detailList.stream() .collect(Collectors.toMap(EasOutInBillDetail::getDjid, Function.identity(), (existing, replacement) -> existing)) .values()); @@ -180,6 +232,9 @@ public class EasOutInBillServiceImpl extends ServiceImpl { EasOutInBill bill = new EasOutInBill(); bill.setId(IdUtil.getStringId()); + bill.setBmbm(detail.getBmbm()); + bill.setBmmc(detail.getBmmc()); + bill.setDjid(detail.getDjid()); bill.setDjid(detail.getDjid()); bill.setDjbh(detail.getDjbh()); bill.setDjlx(detail.getDjlx()); @@ -195,7 +250,6 @@ public class EasOutInBillServiceImpl extends ServiceImpl easOutInBillDetails, List existingIds) { + Set ids = existingIds.stream().map(EasOutInBillDetail::getFlid).collect(Collectors.toSet()); + // 过滤出需要插入的新单据,并根据来源设置 ID + List insertEasBills = easOutInBillDetails.stream() + .filter(bill -> ids.contains(bill.getDjid())) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(insertEasBills)) { + //比较insertEasBills与existingIds的修改时间进行按需更新 + for (EasOutInBillDetail entity : insertEasBills) { + EasOutInBillDetail existing = existingIds.stream() + .filter(e -> e.getFlid().equals(entity.getFlid()) && e.getXgsj().after(entity.getXgsj())) + .findFirst() + .orElse(null); + if (existing != null) { + EasOutInBillDetail updateEntity = new EasOutInBillDetail(); + updateEntity.setDjlx(entity.getDjlx()); + updateEntity.setYwlx(entity.getYwlx()); + updateEntity.setZzbm(entity.getZzbm()); + updateEntity.setZzmc(entity.getZzmc()); + updateEntity.setBmbm(entity.getBmbm()); + updateEntity.setBmmc(entity.getBmmc()); + updateEntity.setDjzt(entity.getDjzt()); + updateEntity.setBtbz(entity.getBtbz()); + updateEntity.setCjsj(entity.getCjsj()); + updateEntity.setYwrq(entity.getYwrq()); + updateEntity.setCjr(entity.getCjr()); + updateEntity.setFlxh(entity.getFlxh()); + updateEntity.setWlbm(entity.getWlbm()); + updateEntity.setWlmc(entity.getWlmc()); + updateEntity.setGgxh(entity.getGgxh()); + updateEntity.setSl(entity.getSl()); + updateEntity.setCkbm(entity.getCkbm()); + updateEntity.setCkmc(entity.getCkmc()); + updateEntity.setKwbm(entity.getKwbm()); + updateEntity.setKwmc(entity.getKwmc()); + updateEntity.setFlbz(entity.getFlbz()); + updateEntity.setTrackno(entity.getTrackno()); + updateEntity.setPc(entity.getPc()); + updateEntity.setWlmc(entity.getWlmc()); + updateEntity.setXgsj(entity.getXgsj()); + easOutInBillDetailMapper.update(updateEntity, new QueryWrapper().eq("flid", entity.getFlid())); + } + } + } + } + + + /** + * 定时删除源头已删除单据 + */ + + @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) + public void autoDeleteBill(List easOutInBillDetails, List existingIds) { + // 获取easOutInBillDetails中flid字段的集合 + Set easFlidSet = easOutInBillDetails.stream() + .map(EasOutInBillDetail::getFlid) + .collect(Collectors.toSet()); + // 找出existingIds中flid字段集合不在easOutInBillDetails中flid字段集合中的记录 + List idsToDelete = existingIds.stream() + .filter(e -> !easFlidSet.contains(e.getFlid())) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(idsToDelete)) { + //找出idsToDelete中DJID相同且元素只有一个的集合,说明是最后一个明细行要被删除,那么主单据也要被删除 + Map idCounts = idsToDelete.stream() + .collect(Collectors.groupingBy(EasOutInBillDetail::getDjid, Collectors.counting())); + Set billIds = idCounts.entrySet().stream() + .filter(entry -> entry.getValue() == 1) + .map(Map.Entry::getKey) + .collect(Collectors.toSet()); + if (CollectionUtils.isNotEmpty(billIds)) { + //删除主数据 + deleteAll(billIds); + } + //删除明细单据 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Set filds = idsToDelete.stream().map(EasOutInBillDetail::getFlid).collect(Collectors.toSet()); + queryWrapper.in(EasOutInBillDetail::getFlid, filds); + easOutInBillDetailMapper.delete(queryWrapper); + } + + } + + /** * 编辑 * @@ -244,91 +381,98 @@ public class EasOutInBillServiceImpl extends ServiceImpl ids) { + @Transactional(rollbackFor = Exception.class) + public void audit(Set ids, boolean isDetail) { if (CollectionUtils.isEmpty(ids)) { throw new BadRequestException("id不能为空!"); } - //所有主表 - List easOutInBillList = easOutInBillMapper.queryBillList(ids); - //所有明细表 - List easOutInBillDetailList = easOutInBillDetailMapper.queryBillDetailList(ids); - long count= easOutInBillDetailList.stream().filter(r->r.getQty().compareTo(BigDecimal.ZERO)==0).count(); - if(count==easOutInBillDetailList.size()){ - throw new BadRequestException("该单据无任何出入库操作,请检查"); + List easBills = new ArrayList<>(); + List srmBills = new ArrayList<>(); + //明细行自动审核 + if (!isDetail) { + List easBillDetailList = easOutInBillDetailMapper.queryDetailList(ids); + if (CollectionUtils.isEmpty(easBillDetailList)) { + throw new BadRequestException("找不到该单据明细项!"); + } + EasOutInBillDto easOutInBillDto = new EasOutInBillDto(); + easOutInBillDto.setBillNo(easBillDetailList.get(0).getBillNo()); + easOutInBillDto.setBillId(easBillDetailList.get(0).getBillId()); + easOutInBillDto.setBillType(easBillDetailList.get(0).getBillType()); + easOutInBillDto.setDjly(easBillDetailList.get(0).getDjly()); + easOutInBillDto.setInWhUser(SecurityUtils.getCurrentNickName() == null ? "admin" : SecurityUtils.getCurrentNickName()); + easOutInBillDto.setDescription(easBillDetailList.get(0).getDescription()); + easOutInBillDto.setBizDate(easBillDetailList.get(0).getBizDate()); + List entrys = new ArrayList<>(); + easBillDetailList.forEach(r -> { + EasOutInBillDetailDto dto = new EasOutInBillDetailDto(); + BeanUtils.copyProperties(r, dto); + entrys.add(dto); + } + ); + easOutInBillDto.setEntrys(entrys); + if ("1".equals(easOutInBillDto.getDjly())) { + easBills.add(easOutInBillDto); + } else { + srmBills.add(easOutInBillDto); + } + } else { + //所有主表 + List easOutInBillList = easOutInBillMapper.queryBillList(ids); + //所有明细表 + List easOutInBillDetailList = easOutInBillDetailMapper.queryBillDetailList(ids); + // long count = easOutInBillDetailList.stream().filter(r -> r.getQty().compareTo(BigDecimal.ZERO) == 0).count(); + // if (count == easOutInBillDetailList.size()) { + // throw new BadRequestException("该单据无任何出入库操作,请检查"); + // } + //报文组合 + if (CollectionUtils.isNotEmpty(easOutInBillList)) { + easOutInBillList.forEach(b -> { + List billDetails = easOutInBillDetailList.stream().filter(d -> + Objects.equals(d.getDjid(), b.getBillId())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(billDetails)) { + b.setInWhUser(SecurityUtils.getCurrentNickName() == null ? "admin" : SecurityUtils.getCurrentNickName()); + b.setEntrys(billDetails); + } + }); + } + easBills = easOutInBillList.stream().filter(r -> "1".equals(r.getDjly())).collect(Collectors.toList()); + srmBills = easOutInBillList.stream().filter(r -> "2".equals(r.getDjly())).collect(Collectors.toList()); } - //报文组合 - if (CollectionUtils.isNotEmpty(easOutInBillList)) { - easOutInBillList.forEach(b -> { - List billDetails = easOutInBillDetailList.stream().filter(d -> - Objects.equals(d.getDjid(), b.getBillId())).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(billDetails)) { - b.setInWhUser(SecurityUtils.getCurrentNickName() == null ? "admin" : SecurityUtils.getCurrentNickName()); - b.setEntrys(billDetails); - } - }); - List easBills = easOutInBillList.stream().filter(r -> "1".equals(r.getDjly())).collect(Collectors.toList()); - List srmBills = easOutInBillList.stream().filter(r -> "2".equals(r.getDjly())).collect(Collectors.toList()); + //单据头多选审核 + if (easBills.size() > 1 || srmBills.size() > 1) { //eas单据推送 if (CollectionUtils.isNotEmpty(easBills)) { + List finalEasBills = easBills; CompletableFuture.runAsync(() -> { - syncEasAuditBills(easBills); + syncEasAuditBills(finalEasBills); }, pool); } //srm单据推送 if (CollectionUtils.isNotEmpty(srmBills)) { + List finalSrmBills = srmBills; CompletableFuture.runAsync(() -> { - syncSrmAuditBills(srmBills); + syncSrmAuditBills(finalSrmBills); }, pool); } - } - - - } - - @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) - public void syncEasAuditBills(List bills) { - for (EasOutInBillDto bill : bills) { - try { - EasData easData = new EasData(); - easData.setData(bill); - String billJson = com.alibaba.fastjson.JSON.toJSONString(easData, SerializerFeature.WriteMapNullValue); - wmsToEasService.sendWebService(billJson); - easOutInBillMapper.update(null, new UpdateWrapper().set("djzt", "审核").set("update_id", SecurityUtils.getCurrentUserId()).set("update_name", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.format(DateUtil.beginOfDay(DateUtil.date()), "yyyy-MM-dd")).eq("djid", bill.getBillId())); - } catch (Exception e) { - log.error("推送Eas单据失败,单据号为:[" + bill.getBillId() + "]异常原因:" + e.toString()); - //throw new BadRequestException(e.toString()); + } else { + //eas单据推送 + if (CollectionUtils.isNotEmpty(easBills)) { + asyncAuditBill(easBills.get(0)); } - } - // List billIds = bills.stream().map(EasOutInBillDto::getBillId).collect(Collectors.toList()); - // if (CollectionUtils.isNotEmpty(billIds)) { - // easOutInBillMapper.update(null, new UpdateWrapper().set("djzt", "提交").in("djid", billIds)); - // } - } - - @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) - public void syncSrmAuditBills(List bills) { - for (EasOutInBillDto bill : bills) { - try { - String billJson = com.alibaba.fastjson.JSON.toJSONString(bill, SerializerFeature.WriteMapNullValue); - wmsToSrmService.sendWebPostData(billJson); - easOutInBillMapper.update(null, new UpdateWrapper().set("djzt", "审核").set("update_id", SecurityUtils.getCurrentUserId()).set("update_name", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.format(DateUtil.beginOfDay(DateUtil.date()), "yyyy-MM-dd")).eq("djid", bill.getBillId())); - } catch (Exception e) { - log.error("推送Eas单据失败,单据号为:[" + bill.getBillId() + "]异常原因:" + e.toString()); - //throw new BadRequestException(e.toString()); + //srm单据推送 + if (CollectionUtils.isNotEmpty(srmBills)) { + asyncAuditBill(srmBills.get(0)); } } - // List billIds = bills.stream().map(EasOutInBillDto::getBillId).collect(Collectors.toList()); - // if (CollectionUtils.isNotEmpty(billIds)) { - // easOutInBillMapper.update(null, new UpdateWrapper().set("djzt", "提交").in("djid", billIds)); - // } } - @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) + /** + * 单个单据审核 + */ public void asyncAuditBill(EasOutInBillDto bill) { try { if (bill.getDjly().equals("1")) { - MsgDto msgDto = new MsgDto(); + MsgDto msgDto; EasData easData = new EasData(); easData.setData(bill); String billJson = com.alibaba.fastjson.JSON.toJSONString(easData, SerializerFeature.WriteMapNullValue); @@ -339,22 +483,59 @@ public class EasOutInBillServiceImpl extends ServiceImpl().set("djzt", "审核").set("update_id", SecurityUtils.getCurrentUserId()).set("update_name", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.format(DateUtil.beginOfDay(DateUtil.date()), "yyyy-MM-dd")).eq("djid", bill.getBillId())); + updateBills(bill); } catch (Exception e) { log.error("推送Eas单据失败,单据号为:[" + bill.getBillId() + "]异常原因:" + e.toString()); throw new BadRequestException(e.toString()); } + } + + /** + * Eas多个单据审核 + */ + public void syncEasAuditBills(List bills) { + for (EasOutInBillDto bill : bills) { + try { + EasData easData = new EasData(); + easData.setData(bill); + String billJson = com.alibaba.fastjson.JSON.toJSONString(easData, SerializerFeature.WriteMapNullValue); + wmsToEasService.sendWebService(billJson); + updateBills(bill); + } catch (Exception e) { + log.error("推送Eas单据失败,单据号为:[" + bill.getBillId() + "]异常原因:" + e.toString()); + throw new BadRequestException(e.toString()); + } + } + } + + /** + * Srm多个单据审核 + */ + public void syncSrmAuditBills(List bills) { + for (EasOutInBillDto bill : bills) { + try { + String billJson = com.alibaba.fastjson.JSON.toJSONString(bill, SerializerFeature.WriteMapNullValue); + wmsToSrmService.sendWebPostData(billJson); + updateBills(bill); + } catch (Exception e) { + log.error("推送Eas单据失败,单据号为:[" + bill.getBillId() + "]异常原因:" + e.toString()); + throw new BadRequestException(e.toString()); + } + } + } + + private void updateBills(EasOutInBillDto bill) { + easOutInBillMapper.update(null, new UpdateWrapper().set("djzt", "审核").set("update_id", SecurityUtils.getCurrentUserId()).set("update_name", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.format(DateUtil.beginOfDay(DateUtil.date()), "yyyy-MM-dd")).eq("djid", bill.getBillId())); } diff --git a/nlsso-server/src/main/java/org/nl/wms/ext/eas/WmsToEasService.java b/nlsso-server/src/main/java/org/nl/wms/ext/eas/WmsToEasService.java index 38f4555..fe204f1 100644 --- a/nlsso-server/src/main/java/org/nl/wms/ext/eas/WmsToEasService.java +++ b/nlsso-server/src/main/java/org/nl/wms/ext/eas/WmsToEasService.java @@ -58,7 +58,7 @@ public class WmsToEasService { call.setReturnClass(WSContext.class); call.setReturnQName(new QName("", "loginReturn")); //超时时间 自由配置 - call.setTimeout(1000 * 60); + call.setTimeout(1000 * 15); call.setMaintainSession(true); WSContext result = null; //解决方案:eas @@ -90,11 +90,8 @@ public class WmsToEasService { log.error("Eas同步接口invoke调用结果:" + invoke.toString()); log.error("Eas同步接口调用结果:" + results); System.out.println(invoke); - - - MsgDto d2 = JSON.parseObject(String.valueOf(invoke), MsgDto.class); - MsgDto d1 = JSON.toJavaObject(JSON.parseObject((String) invoke), MsgDto.class); - + MsgDto d2 = JSON.parseObject(String.valueOf(invoke), MsgDto.class); + MsgDto d1 = JSON.toJavaObject(JSON.parseObject((String) invoke), MsgDto.class); return d1; } } \ No newline at end of file diff --git a/nlsso-server/src/main/java/org/nl/wms/ext/srm/WmsToSrmService.java b/nlsso-server/src/main/java/org/nl/wms/ext/srm/WmsToSrmService.java index 0e0596e..7c6eaef 100644 --- a/nlsso-server/src/main/java/org/nl/wms/ext/srm/WmsToSrmService.java +++ b/nlsso-server/src/main/java/org/nl/wms/ext/srm/WmsToSrmService.java @@ -33,7 +33,7 @@ public class WmsToSrmService { public SrmMsgDto sendWebPostData(String json) throws ServiceException, RemoteException { log.error("Srm同步接口开始请求,请求json为:"+json); - SrmMsgDto srmMsgDto =new SrmMsgDto(); + SrmMsgDto srmMsgDto; com.alibaba.fastjson.JSONObject result; String resultMsg = HttpRequest.post(host) .body(json) @@ -44,49 +44,4 @@ public class WmsToSrmService { } - public void sendWebService(String json) throws ServiceException, RemoteException { -// Service s = new Service(); -// Call call = (Call) s.createCall(); -// call.setReturnType(new QName("urn:client", "WSContext")); -// //本地根据wsdl文件建立的返回对象 -// call.setReturnClass(WSContext.class); -// // call.setOperationName("login"); -// // //登录的webservice的wsdl的地址 -// // call.setTargetEndpointAddress(host + "EASLogin?wsdl"); -// // call.setReturnQName(new QName("", "loginReturn")); -// // //超时时间 自由配置 -// // call.setTimeout(1000 * 60); -// // call.setMaintainSession(true); -// // //解决方案:eas -// // //语言:L2 简体中文 L3 繁体中文 -// // //数据库类型:0 SQL Server 1 Oracle 2 DB2 -// // result = (WSContext) call.invoke(new Object[]{user, password, "eas", datacenter, "L2", 1, "BaseDB"}); -// // //关键点,获取登录时返回的sessionid -// // String sessionId = result.getSessionId(); -// // System.out.println(sessionId); -// // //登录失败抛出异常 -// // if (sessionId == null) { -// // log.error("sendWebService调用结果" + "login Eas Fail"); -// // throw new Exception("login Eas Fail"); -// // } -// // call.clearOperation(); -// //超时时间 自由配置 -// call.setTimeout(1000 * 60); -// call.setMaintainSession(true); -// call.setTargetEndpointAddress(host + wsdlService + "?wsdl"); -// call.setReturnQName(new QName("", "dealTaskReturn")); -// //具体某个方法 -// call.setOperationName(operationName); -// //关键点 传sessionid -// //call.addHeader(new SOAPHeaderElement("http://login.webservice.bos.kingdee.com", "SessionId")); -// //接口报文 -// Object invoke = call.invoke(new Object[]{json}); -// JSONObject jsonObject = JSON.parseObject((String) invoke); -// int results = jsonObject.getIntValue("result"); -// log.error("sendWebService调用:" + "调用成功!"); -// log.error("sendWebService调用结果:" + invoke.toString()); -// log.error("sendWebService调用结果:" + results); -// System.out.println(invoke); - - } } \ No newline at end of file diff --git a/nlsso-server/src/main/java/org/nl/wms/schedule/EasBillSchedule.java b/nlsso-server/src/main/java/org/nl/wms/schedule/EasBillSchedule.java index d836fe3..9f1d6e0 100644 --- a/nlsso-server/src/main/java/org/nl/wms/schedule/EasBillSchedule.java +++ b/nlsso-server/src/main/java/org/nl/wms/schedule/EasBillSchedule.java @@ -1,8 +1,10 @@ package org.nl.wms.schedule; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -28,10 +30,12 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.CopyOnWriteArraySet; import java.util.stream.Collectors; import org.nl.wms.database.eas.dao.EasOutInBill; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** @@ -41,6 +45,7 @@ import org.springframework.transaction.annotation.Transactional; @Component @Slf4j @EnableScheduling +@SaIgnore public class EasBillSchedule { @Resource @@ -60,49 +65,91 @@ public class EasBillSchedule { // 获取srm视图查询未提交的单据 List srmOutInBillDetails = easOutInBillDetailMapper.selectSrmPageWithInventory(); if (CollectionUtils.isNotEmpty(easOutInBillDetails) || CollectionUtils.isNotEmpty(srmOutInBillDetails)) { - // 查询已存在的单据 - Set existingIds = easOutInBillService.queryExistBills(); - // 过滤出需要插入的新单据,并根据来源设置 ID - List insertEasBills = easOutInBillDetails.stream() - .filter(bill -> !existingIds.contains(bill.getDjid())) - .peek(bill -> { - if (bill.getSl().compareTo(BigDecimal.ZERO) < 0) { - bill.setSl(bill.getSl().abs()); - } - bill.setCode(IdUtil.getStringId()); - bill.setSysl(bill.getSl()); - bill.setCzsl(BigDecimal.ZERO); - bill.setKcsl(BigDecimal.ZERO); - }) - .collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(srmOutInBillDetails)) { - List insertSrmBills = srmOutInBillDetails.stream() - .filter(bill -> !existingIds.contains(bill.getDjid())) - .peek(bill -> { - if (bill.getSl().compareTo(BigDecimal.ZERO) < 0) { - bill.setSl(bill.getSl().abs()); - } - bill.setId(IdUtil.getStringId()); - bill.setDjzt("提交"); - bill.setDjly("2"); - bill.setCode(IdUtil.getStringId()); - bill.setSysl(bill.getSl()); - bill.setCzsl(BigDecimal.ZERO); - bill.setKcsl(BigDecimal.ZERO); - }) - .collect(Collectors.toList()); - insertEasBills.addAll(insertSrmBills); + if (CollectionUtils.isNotEmpty(easOutInBillDetails)) { + easOutInBillDetails.addAll(srmOutInBillDetails); + //查询已存在的单据 + List existingIds = easOutInBillService.queryExistBills(); + easOutInBillService.insertOrUpdateBills(easOutInBillDetails, existingIds); + //autoDeleteBill(easOutInBillDetails, existingIds); } - if (CollectionUtils.isNotEmpty(insertEasBills)) { - easOutInBillService.createBills(insertEasBills); + } + } + + /** + * 定时删除源头已删除单据 + */ + @Async("taskExecutor") + @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) + public void autoDeleteBill(List easOutInBillDetails, List existingIds) { + // 获取easOutInBillDetails中flid字段的集合 + Set easFlidSet = easOutInBillDetails.stream() + .map(EasOutInBillDetail::getFlid) + .collect(Collectors.toSet()); + // 找出existingIds中flid字段集合不在easOutInBillDetails中flid字段集合中的记录 + List idsToDelete = existingIds.stream() + .filter(e -> !easFlidSet.contains(e.getFlid())) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(idsToDelete)) { + //找出idsToDelete中DJID相同且元素只有一个的集合,说明是最后一个明细行要被删除,那么主单据也要被删除 + Map idCounts = idsToDelete.stream() + .collect(Collectors.groupingBy(EasOutInBillDetail::getDjid, Collectors.counting())); + Set billIds = idCounts.entrySet().stream() + .filter(entry -> entry.getValue() == 1) + .map(Map.Entry::getKey) + .collect(Collectors.toSet()); + if (CollectionUtils.isNotEmpty(billIds)) { + //删除主数据 + easOutInBillService.deleteAll(billIds); } + //删除明细单据 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Set filds = idsToDelete.stream().map(EasOutInBillDetail::getFlid).collect(Collectors.toSet()); + queryWrapper.in(EasOutInBillDetail::getFlid, filds); + easOutInBillDetailMapper.delete(queryWrapper); + } + + } + + + /** + * 定时删除源头已删除单据 + */ + @Async("taskExecutor") + @Transactional(rollbackFor = Exception.class) + public void autoDeleteBills(List easOutInBillDetails, List existingIds) { + // 获取easOutInBillDetails中flid字段的集合 + Set easFlidSet = easOutInBillDetails.stream() + .map(EasOutInBillDetail::getFlid) + .collect(Collectors.toSet()); + // 找出existingIds中flid字段集合不在easOutInBillDetails中flid字段集合中的记录 + List idsToDelete = existingIds.stream() + .filter(e -> !easFlidSet.contains(e.getFlid())) + .collect(Collectors.toList()); + // 找出idsToDelete中DJID相同且元素只有一个的集合,说明是最后一个明细行要被删除,那么主单据也要被删除 + Set billIds = idsToDelete.stream() + .collect(Collectors.groupingBy(EasOutInBillDetail::getDjid, Collectors.counting())) + .entrySet().stream() + .filter(entry -> entry.getValue() == 1) + .map(Map.Entry::getKey) + .collect(Collectors.toSet()); + if (CollectionUtils.isNotEmpty(billIds)) { + // 删除主数据 + easOutInBillService.deleteAll(billIds); + } + // 删除明细单据 + if (CollectionUtils.isNotEmpty(idsToDelete)) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(EasOutInBillDetail::getFlid, idsToDelete); + easOutInBillDetailMapper.delete(queryWrapper); } } + + /** * 首页信息推送 */ @Async("taskExecutor") - @Scheduled(cron = "0/15 * * * * *") + @Scheduled(cron = "0/4 * * * * *") public void sendHomeInfoTask() { //StopWatch stopWatch = new StopWatch(); //stopWatch.start(); @@ -117,31 +164,6 @@ public class EasBillSchedule { //System.out.println("1task-首页及头部信息推送-sendHomeInfoTask-花费时间----------------------------------------------------------------****************************************************************= totalTime = " + stopWatch.getTotalTimeMillis()); } - /** - * 定时删除源头已删除单据 - */ - @Async("taskExecutor") - @Scheduled(cron = "0/180 * * * * *") - public void autoDeleteBill() { - // 获取eas视图查询未提交的单据 - Set easIds = easOutInBillDetailMapper.selectEasIds(); - // 获取srm视图查询未提交的单据 - Set srmIds = easOutInBillDetailMapper.selectSrmIds(); - if (CollectionUtils.isNotEmpty(easIds) || CollectionUtils.isNotEmpty(srmIds)) { - // 查询已存在的单据 - Set existingIds = easOutInBillService.queryLocalBills(); - easIds.addAll(srmIds); - // 需要删除的ID集合 - Set idsToDelete = existingIds.stream() - .filter(r -> !easIds.contains(r)) - .collect(Collectors.toSet()); - if (CollectionUtils.isNotEmpty(idsToDelete)) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(EasOutInBillDetail::getFlid, idsToDelete); - easOutInBillDetailMapper.delete(queryWrapper); - } - } - } /** * 定时清空单据 @@ -155,8 +177,7 @@ public class EasBillSchedule { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.lt(EasOutInBill::getCjsj, days); List oldBills = easOutInBillService.list(queryWrapper); - if(CollectionUtils.isNotEmpty(oldBills)) - { + if (CollectionUtils.isNotEmpty(oldBills)) { Set ids = oldBills.stream().map(EasOutInBill::getDjid).collect(Collectors.toSet()); if (CollectionUtils.isNotEmpty(ids)) { easOutInBillDetailMapper.deleteDetail(ids); diff --git a/nlsso-server/src/main/resources/config/application-devLocal.yml b/nlsso-server/src/main/resources/config/application-devLocal.yml index 8dd6b93..1678d49 100644 --- a/nlsso-server/src/main/resources/config/application-devLocal.yml +++ b/nlsso-server/src/main/resources/config/application-devLocal.yml @@ -1,5 +1,5 @@ server: - port: 8011 + port: 8012 #配置数据源 spring: autoconfigure: