diff --git a/blade-biz-common/src/main/java/org/springblade/common/constant/ModuleNameConstant.java b/blade-biz-common/src/main/java/org/springblade/common/constant/ModuleNameConstant.java index 95746ccec..153720380 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/constant/ModuleNameConstant.java +++ b/blade-biz-common/src/main/java/org/springblade/common/constant/ModuleNameConstant.java @@ -46,6 +46,10 @@ public interface ModuleNameConstant { * 仓库服务名称 */ String APPLICATION_WAREHOUSE_NAME = "logpm-warehouse"+DEVAUTH; + /** + * 仓库服务名称 + */ + String APPLICATION_WEBSTOCKET_NAME = "logpm-webstocket"+DEVAUTH; /** * 配送签收服务名称 diff --git a/blade-biz-common/src/main/java/org/springblade/common/constant/RedisKeyConstant.java b/blade-biz-common/src/main/java/org/springblade/common/constant/RedisKeyConstant.java index 1ff321801..afa7dc7b0 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/constant/RedisKeyConstant.java +++ b/blade-biz-common/src/main/java/org/springblade/common/constant/RedisKeyConstant.java @@ -3,4 +3,10 @@ package org.springblade.common.constant; public class RedisKeyConstant { + /** + * 欧派入库扫描缓存key + */ + public static final String cache_oupai_key ="cache:oupai-key:"; + + } diff --git a/blade-biz-common/src/main/java/org/springblade/common/utils/FileUtil.java b/blade-biz-common/src/main/java/org/springblade/common/utils/FileUtil.java index 964758b6b..59b2fc610 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/utils/FileUtil.java +++ b/blade-biz-common/src/main/java/org/springblade/common/utils/FileUtil.java @@ -30,8 +30,7 @@ public class FileUtil extends TimerTask { } public static File checkZipFile(String reservationCode) { - String savePath = "D:/Test" +"/"+ reservationCode; - + String savePath = CommonConstant.SYSTEMFILEPATH+"reservationZip/"+ reservationCode; return new File(savePath+".zip"); } @@ -57,31 +56,30 @@ public class FileUtil extends TimerTask { */ public static void handleSignPictureZip(List urls, String type, String code, String consignee) { //将图片下载至本地中 -// String imgPath = CommonConstant.SYSTEMFILEPATH; - String savePath = "D:/Test" +"/"+ code; - String imgPath = savePath; + String savePath = CommonConstant.SYSTEMFILEPATH+"reservationZip/"; + String imgPath = savePath+code+"/"; // 打开连接 //设置请求超时为20s switch (type) { case "photo_1": //上门 - imgPath += "\\door"; + imgPath += "/door"; break; case "photo_2": - imgPath += "\\stacking"; + imgPath += "/stacking"; //堆码 break; case "photo_3": - imgPath +="\\friability"; + imgPath +="/friability"; //易碎 break; case "photo_4": - imgPath +="\\home-delivery"; + imgPath +="/home-delivery"; //家配 break; case "photo_5": - imgPath +="\\signing"; + imgPath +="/signing"; //签收 break; } @@ -170,7 +168,7 @@ public class FileUtil extends TimerTask { } //jdk 1.7 新特性自动关闭 InputStream in = con.getInputStream(); - OutputStream out = new FileOutputStream(sf.getPath() + "\\" + str); + OutputStream out = new FileOutputStream(sf.getPath() + "/" + str); //创建缓冲区 byte[] buff = new byte[1024]; int n; diff --git a/blade-biz-common/src/main/java/org/springblade/common/utils/QRCodeUtil.java b/blade-biz-common/src/main/java/org/springblade/common/utils/QRCodeUtil.java index 043b42dce..d6d4940b8 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/utils/QRCodeUtil.java +++ b/blade-biz-common/src/main/java/org/springblade/common/utils/QRCodeUtil.java @@ -80,7 +80,7 @@ public class QRCodeUtil { public static String createCodeToFile(String content) { try { - String imgPath = CommonConstant.SYSTEMFILEPATH; + String imgPath = CommonConstant.SYSTEMFILEPATH+"qrCodeImg/"; File codeImgFileSaveDir = new File(imgPath); //1. 使用UUID重新生成文件名,防止文件名称重复造成文件覆盖 String fileName = UUID.randomUUID() + "." +FileFormat; @@ -108,7 +108,7 @@ public class QRCodeUtil { public static String createCodeToFileType(String content) { try { //getResource("/")等同于到resource文件夹下 - String imgPath = CommonConstant.SYSTEMFILEPATH; + String imgPath = CommonConstant.SYSTEMFILEPATH+"qrCodeImg/"; File codeImgFileSaveDir = new File(imgPath); //1. 使用UUID重新生成文件名,防止文件名称重复造成文件覆盖 String fileName = UUID.randomUUID() + "." +FileFormat; diff --git a/blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesExchangeEntity.java b/blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesExchangeEntity.java index 1bc9169c1..2e9dd1da4 100644 --- a/blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesExchangeEntity.java +++ b/blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesExchangeEntity.java @@ -92,4 +92,21 @@ public class AftersalesExchangeEntity extends TenantEntity { @ApiModelProperty(value = "仓库ID") private String warehouseId; + + @Override + public String toString() { + return "AftersalesExchangeEntity{" + + "reserve1='" + reserve1 + '\'' + + ", reserve2='" + reserve2 + '\'' + + ", reserve3='" + reserve3 + '\'' + + ", reserve4='" + reserve4 + '\'' + + ", reserve5='" + reserve5 + '\'' + + ", workOrderId='" + workOrderId + '\'' + + ", businessName='" + businessName + '\'' + + ", businessId='" + businessId + '\'' + + ", content='" + content + '\'' + + ", annex='" + annex + '\'' + + ", warehouseId='" + warehouseId + '\'' + + '}'; + } } diff --git a/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataClientEntity.java b/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataClientEntity.java index 0a3d5dc35..263d4d0ae 100644 --- a/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataClientEntity.java +++ b/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataClientEntity.java @@ -188,4 +188,6 @@ public class BasicdataClientEntity extends TenantEntity { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date contractEntTime; + @ApiModelProperty(value = "默认付款方式 1现付 2到付 3月结 4回付 5内部结算 ") + private String defaultPaymentMethods; } diff --git a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionStockListVO.java b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionStockListVO.java index b7e23522d..3d97d9459 100644 --- a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionStockListVO.java +++ b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionStockListVO.java @@ -117,6 +117,11 @@ public class DistributionStockListVO extends DistributionStockListEntity { */ @ApiModelProperty(value = "货位信息") private String positionCode; + /** + * 品牌名称 + */ + @ApiModelProperty(value = "品牌名称") + private String brandName; /** * 类型 */ diff --git a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/app/DistributionAppStockArticleVO.java b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/app/DistributionAppStockArticleVO.java index be9c98cd5..73c6b3952 100644 --- a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/app/DistributionAppStockArticleVO.java +++ b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/app/DistributionAppStockArticleVO.java @@ -39,7 +39,7 @@ public class DistributionAppStockArticleVO extends DistributionStockArticleEntit * 扫描数 */ @ApiModelProperty(value = "扫描数") - private Integer loadingNub; + private Integer loadingNub=0; /** * 订单ID @@ -50,7 +50,7 @@ public class DistributionAppStockArticleVO extends DistributionStockArticleEntit * 签收数 */ @ApiModelProperty(value = "签收(订单)") - private Integer signforNub; + private Integer signforNub=0; /** * 是否存在异常包间 diff --git a/blade-service-api/logpm-old-project-api/src/main/java/com/logpm/oldproject/entity/LocationEntity.java b/blade-service-api/logpm-old-project-api/src/main/java/com/logpm/oldproject/entity/LocationEntity.java index a033076d3..2c4cc3469 100644 --- a/blade-service-api/logpm-old-project-api/src/main/java/com/logpm/oldproject/entity/LocationEntity.java +++ b/blade-service-api/logpm-old-project-api/src/main/java/com/logpm/oldproject/entity/LocationEntity.java @@ -1,6 +1,7 @@ package com.logpm.oldproject.entity; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; @@ -53,6 +54,7 @@ public class LocationEntity { private Integer floor ; /** 当前列 */ @ApiModelProperty(name = "当前列",notes = "") + @TableField(value = "`row`") private Integer row ; } diff --git a/blade-service-api/logpm-warehouse-api/src/main/java/com/logpm/warehouse/entity/QuestDetailEntity.java b/blade-service-api/logpm-warehouse-api/src/main/java/com/logpm/warehouse/entity/QuestDetailEntity.java index 1e242c892..02ce36e2c 100644 --- a/blade-service-api/logpm-warehouse-api/src/main/java/com/logpm/warehouse/entity/QuestDetailEntity.java +++ b/blade-service-api/logpm-warehouse-api/src/main/java/com/logpm/warehouse/entity/QuestDetailEntity.java @@ -24,6 +24,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.tenant.mp.TenantEntity; +import java.util.Date; import java.util.List; /** @@ -115,6 +116,18 @@ public class QuestDetailEntity extends TenantEntity { */ @ApiModelProperty(value = "品类名称;对应零担") private String categoryName; + + /** + * 发站仓名称 + */ + @ApiModelProperty(value = "发站仓名称") + private String sendWarehouseName; + + /** + * 品牌名称 + */ + @ApiModelProperty(value = "品牌名称") + private String brandName; /** * 库存品ID;对应库存品 */ @@ -172,8 +185,7 @@ public class QuestDetailEntity extends TenantEntity { /** * 托盘名称 */ - @ApiModelProperty(value = "托盘码") - @TableField(exist = false) + @ApiModelProperty(value = "托盘名称") private String trayName; /** @@ -227,6 +239,23 @@ public class QuestDetailEntity extends TenantEntity { */ @ApiModelProperty(value = "批次号") private String incomingBatch; + /** + * 盘点人 + */ + @ApiModelProperty(value = "盘点人") + private Long inventoryUser; + + /** + * 盘点时间 + */ + @ApiModelProperty(value = "盘点时间") + private Date inventoryTime; + @ApiModelProperty(value = "盘点开始时间") + @TableField(exist = false) + private String startTime;// 开始时间 + @ApiModelProperty(value = "盘点结束时间") + @TableField(exist = false) + private String endTime;// 结束时间 } diff --git a/blade-service/logpm-aftersales/pom.xml b/blade-service/logpm-aftersales/pom.xml index a934b97bb..b093409c6 100644 --- a/blade-service/logpm-aftersales/pom.xml +++ b/blade-service/logpm-aftersales/pom.xml @@ -16,6 +16,17 @@ jar + + + org.springframework.boot + spring-boot-starter-websocket + + + spring-boot-starter-tomcat + org.springframework.boot + + + org.springblade blade-core-boot diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/AftersalesApplication.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/AftersalesApplication.java index b0db4c432..dac63b988 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/AftersalesApplication.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/AftersalesApplication.java @@ -19,6 +19,9 @@ package com.logpm.aftersales; import org.springblade.common.constant.ModuleNameConstant; import org.springblade.core.cloud.client.BladeCloudApplication; import org.springblade.core.launch.BladeApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.web.socket.config.annotation.EnableWebSocket; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; /** * Demo启动器 @@ -26,11 +29,20 @@ import org.springblade.core.launch.BladeApplication; * @author Chill */ @BladeCloudApplication +//@EnableWebSocket public class AftersalesApplication { public static void main(String[] args) { BladeApplication.run(ModuleNameConstant.APPLICATION_AFTERSALES_NAME, AftersalesApplication.class, args); } + /** + * 如果直接使用springboot的内置容器,而不是使用独立的servlet容器,就要注入ServerEndpointExporter,外部容器则不需要。 + */ +/* @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + }*/ + } diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/config/WebSocketConfig.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/config/WebSocketConfig.java new file mode 100644 index 000000000..ce3c898b7 --- /dev/null +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/config/WebSocketConfig.java @@ -0,0 +1,38 @@ +package com.logpm.aftersales.config; + +import com.logpm.aftersales.launcher.OpcSessionHandler; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.config.annotation.EnableWebSocket; +import org.springframework.web.socket.config.annotation.WebSocketConfigurer; +import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +import javax.annotation.Resource; + +/** + * 开启WebSocket支持 + * @author 12702 + */ +@Slf4j +@Configuration +@EnableWebSocket +@ConditionalOnProperty(name = "system.websocket.isOpen",havingValue = "true") +//@ConditionalOnProperty(name = "spring.profiles.active",havingValue = "dev") +public class WebSocketConfig implements WebSocketConfigurer { + + @Resource + private OpcSessionHandler opcSessionHandler; + +// @Bean +// public ServerEndpointExporter serverEndpointExporter() { +// return new ServerEndpointExporter(); +// } + + @Override + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + registry.addHandler(opcSessionHandler, "/ws/automate").setAllowedOrigins("*"); + } +} diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java index b93ca2c2a..b221f489a 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java @@ -46,6 +46,8 @@ import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.tool.constant.BladeConstant; import springfox.documentation.annotations.ApiIgnore; + +import java.util.Calendar; import java.util.Map; import java.util.List; import javax.servlet.http.HttpServletResponse; @@ -91,6 +93,21 @@ public class AftersalesWorkOrderController extends BladeController { return R.data(AftersalesWorkOrderWrapper.build().pageVO(pages)); } + /** + * 客服异常工单 查询异常完整数据集合 + */ + @GetMapping("/listOwn") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "分页", notes = "传入aftersalesWorkOrder") + public R> getListOwn(@ApiIgnore @RequestParam Map aftersalesWorkOrder, Query query) { + BasicdataWarehouseEntity myCurrentWarehouse = warehouseClient.getMyCurrentWarehouse(); + if(ObjectUtils.isNotNull(myCurrentWarehouse)){ + aftersalesWorkOrder.put("warehouseId", myCurrentWarehouse.getId()); + } + IPage pages = aftersalesWorkOrderService.pageListOwn(aftersalesWorkOrder, Condition.getPage(query)); + return R.data(AftersalesWorkOrderWrapper.build().pageVO(pages)); + } + /** * 客服异常工单 自定义分页 */ @@ -114,11 +131,11 @@ public class AftersalesWorkOrderController extends BladeController { /** - * 客服异常工单 完结处理熟练 + * 客服异常工单 完结处理 */ @PostMapping("/addCompletionEnd") @ApiOperationSupport(order = 4) - @ApiOperation(value = "新增", notes = "传入aftersalesWorkOrder") + @ApiOperation(value = "完结处理", notes = "传入aftersalesWorkOrder") public R addCompletionEnd(@Valid @RequestBody List aftersalesWorkOrder) { return R.status(aftersalesWorkOrderService.addCompletionEnd(aftersalesWorkOrder)); diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/launcher/OpcSessionHandler.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/launcher/OpcSessionHandler.java new file mode 100644 index 000000000..122e63215 --- /dev/null +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/launcher/OpcSessionHandler.java @@ -0,0 +1,78 @@ +package com.logpm.aftersales.launcher; + + +import lombok.extern.slf4j.Slf4j; +import org.springframework.lang.NonNull; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.*; +import java.io.IOException; +import java.util.concurrent.CopyOnWriteArraySet; + +/** + * @author tarzan + */ +@Component +@Slf4j +public class OpcSessionHandler implements WebSocketHandler { + + + + private static final CopyOnWriteArraySet SESSIONS=new CopyOnWriteArraySet<>(); + + + private final static String ALERT="alert"; + private final static String CONTROL="control"; + + @Override + public void afterConnectionEstablished(@NonNull WebSocketSession session) throws Exception { + SESSIONS.add(session); + log.info(session.getId()+" OpcSessionHandler当前在线人数:"+SESSIONS.size()); + } + + @Override + public void handleMessage(WebSocketSession session, WebSocketMessage message) throws Exception { + String msg = message.getPayload().toString(); + log.info("接收消息"+session.getId()+":"+msg); + + } + + + + @Override + public void handleTransportError(WebSocketSession session,@NonNull Throwable exception) throws Exception { + log.error("OpcSessionHandler连接出错"+session.getId()); + SESSIONS.remove(session); + if (!session.isOpen()) { + session.close(); + } + } + + @Override + public void afterConnectionClosed(WebSocketSession session, @NonNull CloseStatus closeStatus) throws Exception { + log.info("OpcSessionHandler关闭连接"+session.getId()); + SESSIONS.remove(session); + } + + + @Override + public boolean supportsPartialMessages() { + return false; + } + + + public void sendMessageToUser(WebSocketSession session, String contents) { + if (session != null && session.isOpen()) { + TextMessage message = new TextMessage(contents); + try { + session.sendMessage(message); + } catch (IOException e) { + log.error(e.getMessage()); + } + } + } + + public void sendMessageToAllUsers(String contents) { + SESSIONS.forEach(session->sendMessageToUser(session, contents)); + } + +} diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/resp/NoticeWebsocketResp.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/resp/NoticeWebsocketResp.java new file mode 100644 index 000000000..f947a4fe1 --- /dev/null +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/resp/NoticeWebsocketResp.java @@ -0,0 +1,20 @@ +package com.logpm.aftersales.resp; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author 12702 + */ +@Data +@ApiModel("ws通知返回对象") +public class NoticeWebsocketResp { + + @ApiModelProperty(value = "通知类型") + private String noticeType; + + @ApiModelProperty(value = "通知内容") + private T noticeInfo; + +} diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/IAftersalesWorkOrderService.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/IAftersalesWorkOrderService.java index f21ee8adf..be2067b41 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/IAftersalesWorkOrderService.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/IAftersalesWorkOrderService.java @@ -24,6 +24,7 @@ import com.logpm.aftersales.excel.AftersalesWorkOrderExcel; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; import java.util.List; +import java.util.Map; /** * 客服异常工单 服务类 @@ -71,4 +72,13 @@ public interface IAftersalesWorkOrderService extends BaseService aftersalesWorkOrder); + + /** + * 查询异常完整数据集合 + * + * @param aftersalesWorkOrder + * @param page + * @return + */ + IPage pageListOwn(Map aftersalesWorkOrder, IPage page); } diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/WebSocketServer.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/WebSocketServer.java new file mode 100644 index 000000000..2a65474af --- /dev/null +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/WebSocketServer.java @@ -0,0 +1,105 @@ +package com.logpm.aftersales.service; + + +import com.alibaba.fastjson.JSONObject; +import com.logpm.aftersales.config.WebSocketConfig; +import lombok.EqualsAndHashCode; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.tool.utils.CollectionUtil; +import org.springblade.core.tool.utils.Func; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +import javax.websocket.*; +import javax.websocket.server.ServerEndpoint; +import java.util.List; +import java.util.concurrent.CopyOnWriteArraySet; + +/** + * @author tarzan + */ +@ConditionalOnClass(value = WebSocketConfig.class) +@ServerEndpoint("/ws/automate") +@Slf4j +@EqualsAndHashCode +public class WebSocketServer { + + /** 虽然@Component默认是单例模式的,但springboot还是会为每个websocket连接初始化一个bean,所以可以用一个静态set保存起来。 */ + private static final CopyOnWriteArraySet WEBSOCKET_CLIENTS =new CopyOnWriteArraySet<>(); + /** 当前session */ + private Session session; + /** 当前session订阅的话题 */ + private List topics; + + public WebSocketServer() { + } + + @OnOpen + public void onOpen(Session session) { + this.session = session; + WEBSOCKET_CLIENTS.add(this); + log.info("WebSocketServer有新客户端连接加入:{},当前在线人数为:{}", session.getId(),WEBSOCKET_CLIENTS.size()); + } + + @OnClose + public void onClose() { + WEBSOCKET_CLIENTS.remove(this); + log.info("有一连接关闭:{},当前在线人数为:{}", this.session.getId(), WEBSOCKET_CLIENTS.size()); + } + + @OnMessage + public void onMessage(String message, Session session) { + this.topics= Func.toStrList(message); + log.info("服务端收到客户端[{}]的消息:{}", session.getId(), message); + } + + @OnError + public void onError(Session session, Throwable error) { + log.error("发生错误:"+error.getMessage()); + WEBSOCKET_CLIENTS.remove(this); + log.info("有一连接异常:{},当前在线人数为:{}", session.getId(), WEBSOCKET_CLIENTS.size()); + } + + public void sendData(T data, String topicName) { + JSONObject result=new JSONObject(); + result.put("topic",topicName); + result.put("data",data); + //显示值为null的字段 + // String jsonString = JSON.toJSONString(result, SerializerFeature.WriteMapNullValue); + sendMessage(result.toString(),topicName); + } + + /** + * 发送消息广播 + * + * @param message 消息文本 + * @author tarzan + * @date 2022年12月08日 09:24:34 + */ + public void sendMessage(String message,String topic){ + try { + WEBSOCKET_CLIENTS.forEach(client ->{ + if (client.session.isOpen()&&CollectionUtil.isNotEmpty(client.topics)&&client.topics.contains(topic)) { + client.session.getAsyncRemote().sendText(message); + } + }); + } catch (Exception e) { + log.error(e.getMessage()); + } + } + + public static void sendMessageToAllUsers(String message){ + try { + WEBSOCKET_CLIENTS.forEach(client -> { + if (client.session.isOpen()) { + client.session.getAsyncRemote().sendText(message); + } + }); + } catch (Exception e) { + log.error(e.getMessage()); + } + } + + +} diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesExchangeServiceImpl.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesExchangeServiceImpl.java index 0c698aebc..8613b1323 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesExchangeServiceImpl.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesExchangeServiceImpl.java @@ -19,14 +19,16 @@ package com.logpm.aftersales.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.logpm.aftersales.entity.AftersalesExchangeEntity; +import com.logpm.aftersales.service.WebSocketServer; import com.logpm.aftersales.vo.AftersalesExchangeVO; import com.logpm.aftersales.excel.AftersalesExchangeExcel; import com.logpm.aftersales.mapper.AftersalesExchangeMapper; import com.logpm.aftersales.service.IAftersalesExchangeService; +import lombok.AllArgsConstructor; import org.springblade.core.mp.support.Condition; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.utils.AuthUtil; -import org.springblade.core.tool.utils.AesUtil; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -43,8 +45,11 @@ import java.util.Map; * @since 2023-11-17 */ @Service +@AllArgsConstructor public class AftersalesExchangeServiceImpl extends BaseServiceImpl implements IAftersalesExchangeService { + private static int count=0; + @Override public IPage selectAftersalesExchangePage(IPage page, AftersalesExchangeVO aftersalesExchange) { return page.setRecords(baseMapper.selectAftersalesExchangePage(page, aftersalesExchange)); @@ -69,6 +74,7 @@ public class AftersalesExchangeServiceImpl extends BaseServiceImpl pageListOwn(Map aftersalesWorkOrder, IPage page) { + return null; + } + } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/appcontroller/DistributionStockupAppController.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/appcontroller/DistributionStockupAppController.java index dca95f0fd..a99740618 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/appcontroller/DistributionStockupAppController.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/appcontroller/DistributionStockupAppController.java @@ -41,6 +41,7 @@ import com.logpm.distribution.mapper.DistributionReservationMapper; import com.logpm.distribution.mapper.DistributionReservationStocklistMapper; import com.logpm.distribution.service.*; import com.logpm.distribution.vo.*; +import com.logpm.warehouse.entity.WarehouseGoodsAllocationEntity; import com.logpm.warehouse.entity.WarehouseUpdownGoodsEntity; import com.logpm.warehouse.feign.*; import io.swagger.annotations.Api; @@ -675,44 +676,114 @@ public class DistributionStockupAppController extends BladeController { if (!distributionParcelListEntity.getMaterialCode().equals(cargoNumber)){ //不属于该物料库存品包件 return Resp.scanFail(60006,"无效的库存品包件!!!","无效的库存品包件!!!",""); - + } + //该包件不在此库位 + WarehouseUpdownGoodsEntity warehouseUpdownGoodsEntity = new WarehouseUpdownGoodsEntity(); + warehouseUpdownGoodsEntity.setAssociationValue(stockupDTO.getPacketBarCode()); + warehouseUpdownGoodsEntity.setAssociationType("3"); + warehouseUpdownGoodsEntity.setAllocationId(stockupDTO.getAllocationId()); + warehouseUpdownGoodsEntity.setWarehouseId(myCurrentWarehouse.getId()); + WarehouseUpdownGoodsEntity locationInformation = warehouseUpdownGoodsClient.getLocationInformation(warehouseUpdownGoodsEntity); + if (Func.isEmpty(locationInformation)){ + return Resp.scanFail(60007,"库位无此包件!!!","库位无此包件!!!",""); } - - //判断是否可以继续备货 + //判断扫描的包件是否可以继续进行该预约的库存品备货 + int isStockUp = judgmentIsStockUp(stockupDTO.getReservationId(),stockupDTO.getStockListId(),distributionParcelListEntity,myCurrentWarehouse.getId(),stockupDTO.getCargoNumber()); DistributionStockListEntity distributionStockListEntities = distributionStockupService.selectStockListInfoByCargoNumberList(stockupDTO.getReservationId(), stockupDTO.getCargoNumber(), stockupDTO.getAllocationId(), stockupDTO.getPacketBarCode()); - - - if (ObjectUtils.isNull(distributionStockListEntities)) { - return R.data(60003, "", "该包件还未上架!"); + switch (isStockUp){ + case 1: + return Resp.scanFail(60008,"包件不属于此计划!!!","包件不属于此计划!!!",""); + case 2: + return R.data(60002, distributionStockListEntities.getId(), "当前包件批次号与入库批次号不符,是否确认修改计划批次"); +// case 3: +// //查询其他所用的页面信息 +// DistributionStockupStockListVO distributionStockupStockListVO = distributionReservationService.selectStockupStockListByStockListId(reservationId,distributionStockListEntities.getId()); +// return R.data(200, distributionStockupStockListVO, "扫描成功!"); + case 3: + return R.data(200, distributionStockListEntities.getId(), "扫描成功!"); } + //判断是否可以继续备货 +// if (ObjectUtils.isNull(distributionStockListEntities)) { +// return R.data(60003, "", "该包件还未上架!"); +// } + // 通过当前预约单和货物定位当前计划的库存品批次 - List planDistributionStockListEntities = getPlanDistributionStockListEntities(stockupDTO); +// List planDistributionStockListEntities = getPlanDistributionStockListEntities(stockupDTO); - //是否更新计划 - boolean isUpdate = false; - Long updateStockListId = null; +// //是否更新计划 +// boolean isUpdate = false; +// Long updateStockListId = null; // 验证当前货位的货位和计划批次是否相同 + // 验证当前扫描的库存品包件是否属于该计划的库存品批次 +// List distributionReservationStocklistEntities = distributionReservationMapper.selectStockListByReservationId(stockupDTO.getReservationId()); +// distributionReservationStocklistEntities.stream().map(DistributionReservationStocklistEntity::getStocklistId).filter(drs->) +// for (DistributionStockListEntity planDistributionStockListEntity : planDistributionStockListEntities) { +// if (planDistributionStockListEntity.getSourceType().equals("2")) { +// if (planDistributionStockListEntity.getOrderCode().equals(distributionStockListEntities.getIncomingBatch())) { +// isUpdate = true; +// updateStockListId = distributionStockListEntities.getId(); +// break; +// } +// } +// } +// if (isUpdate) { +// return R.data(60002, updateStockListId, "当前包件批次号与入库批次号不符,是否确认修改计划批次"); +// } - for (DistributionStockListEntity planDistributionStockListEntity : planDistributionStockListEntities) { - if (planDistributionStockListEntity.getSourceType().equals("2")) { - if (planDistributionStockListEntity.getOrderCode().equals(distributionStockListEntities.getIncomingBatch())) { - isUpdate = true; - updateStockListId = distributionStockListEntities.getId(); - break; - } - } + } + return R.data(200, "", "扫描成功!"); + } + + private int judgmentIsStockUp(Long reservationId,Long stockListId, DistributionParcelListEntity distributionParcelListEntity, Long warehouseId,String cargoNumber) { + List distributionReservationStocklistEntities = distributionReservationMapper.selectStockListByReservationId(reservationId); + if (Func.isNotEmpty(distributionReservationStocklistEntities)){ + //查询库存品信息 + List stockListIds = distributionReservationStocklistEntities.stream().map(DistributionReservationStocklistEntity::getStocklistId).collect(Collectors.toList()); + + List stockListEntityList = distributionStockListService.list(Wrappers.query().lambda() + .in(DistributionStockListEntity::getId, stockListIds) + .eq(DistributionStockListEntity::getWarehouseId, warehouseId) + .eq(DistributionStockListEntity::getCargoNumber, cargoNumber) + ); + //判断该库存品包件是否属于计划库存品的物料 + //首先判断包件的物料和此计划中的物料是否一致 +// if (!stockListEntityList.getCargoNumber().equals(distributionParcelListEntity.getMaterialCode())){ +// return 1; +// } +// //查看是否和当前页的计划批次一致 +// if (!stockListEntityList.getIncomingBatch().equals(distributionParcelListEntity.getOrderCode())){ +// //查看计划下是否存在该包件对应批次的计划 +// List reservationStocklistEntityList = distributionReservationMapper.selectStockListByReservationIdAndCargoNumber(reservationId, cargoNumber, stockListId); +// if (Func.isNotEmpty(reservationStocklistEntityList)){ +// List stockListIds = reservationStocklistEntityList.stream().map(DistributionReservationStocklistEntity::getStocklistId).collect(Collectors.toList()); +// List distributionStockListEntities = distributionStockListService.listByIds(stockListIds); +// boolean isHave = distributionStockListEntities.stream().map(DistributionStockListEntity::getIncomingBatch).allMatch(s -> s.contains(distributionParcelListEntity.getOrderCode())); +// if (isHave){ +// return 3; +// } +// }else { +// return 2; +// } +// } + + + boolean isHave = stockListEntityList.stream().map(DistributionStockListEntity::getCargoNumber).anyMatch(s -> s.contains(distributionParcelListEntity.getMaterialCode())); + if (!isHave){ + //判断包件是否属于计划物料信息 + return 1; } - if (isUpdate) { - return R.data(60002, updateStockListId, "当前包件批次号与入库批次号不符,是否确认修改计划批次"); + //判断该库存品包件是否属于计划的批次 + boolean isHaveIncomingBatch = stockListEntityList.stream().map(DistributionStockListEntity::getIncomingBatch).anyMatch(s -> s.contains( distributionParcelListEntity.getOrderCode())); + if (!isHaveIncomingBatch){ + return 2; } } - return R.data(200, "", "扫描成功!"); - + return 3; } /** @@ -737,104 +808,254 @@ public class DistributionStockupAppController extends BladeController { //todo 这里代码没有写完 等TJJ 和CYZ 空了来写 - + @ResponseBody + @PostMapping("/updateStockup") + @ApiOperationSupport(order = 1) + @ApiOperation(value = "修改批次", notes = "传入stockupDTO") // 修改预约备货信息 需要传入修改的包条 public R updateStockup(@RequestBody StockupDTO stockupDTO) { - // 增加实际扫描的包件对应的库存品信息 增加在预约库存品中间表上 - DistributionReservationStocklistEntity reservationStocklistEntity = new DistributionReservationStocklistEntity(); - reservationStocklistEntity.setReservationId(stockupDTO.getReservationId()); - reservationStocklistEntity.setReservationNum(1); - reservationStocklistEntity.setLoadingStatus("10"); - reservationStocklistEntity.setSigningStatus("10"); - reservationStocklistEntity.setStockListStatus("3"); - DistributionStockListEntity stockListEntity = distributionStockListService.getById(stockupDTO.getStockListId()); - if(ObjectUtils.isNotNull(stockListEntity)){ - reservationStocklistEntity.setStocklistId(stockListEntity.getId()); - reservationStocklistEntity.setUnit(stockListEntity.getCargoUnit()); - reservationStocklistEntity.setRealityNum(0); - } - distributionReservationStocklistService.save(reservationStocklistEntity); - //扣减对应的库存品信息 - DistributionStockListEntity newStockListEntity = distributionStockListService.getById(stockListEntity.getId()); - newStockListEntity.setQuantityStock(newStockListEntity.getQuantityStock() - reservationStocklistEntity.getReservationNum()); - distributionStockListService.updateById(newStockListEntity); - - //查询该预约该物料的库存品信息 - List reservationStocklistEntities = distributionReservationMapper.selectInventoryListByIdAndMateriel(reservationStocklistEntity.getId(),stockListEntity.getMarketCode()); - //可能会出现同一物料不同批次的库存品 - //根据情况进行计划的数量扣减 - Map> stockListMap; - if (Func.isNotEmpty(reservationStocklistEntities)){ - //查询是否进行备货 - stockListMap = reservationStocklistEntities.stream().collect(Collectors.groupingBy(DistributionReservationStocklistEntity::getStocklistId)); - //过滤已经完成备货的预约库存品批次 - stockListMap.forEach((k,v)->{ - //查询该预约的库存品包件是否完成备货 - v.forEach(o->{ - //查询包件是否完成备货 + List distributionReservationStocklistEntities = distributionReservationMapper.selectStockListByReservationId(stockupDTO.getReservationId()); + //当前预约是否存在该批次库存品计划 +// if (stockupDTO.getStockListId().equals(stockupDTO.getNewStockListId())){ +// if (Func.isNotEmpty(distributionReservationStocklistEntities)){ +// boolean isAdd = distributionReservationStocklistEntities.stream().map(DistributionReservationStocklistEntity::getStocklistId).anyMatch(s -> s.equals(stockupDTO.getStockListId())); +// //扣减对应的库存品信息 +//// DistributionStockListEntity newStockListEntity = distributionStockListService.getById(stockupDTO.getStockListId()); +// if (!isAdd){ +// ///先进行对应的扣减 +// //查询该预约该物料的库存品信息 +// List reservationStocklistEntities = distributionReservationMapper.selectInventoryListByIdAndMateriel(stockupDTO.getReservationId(),stockupDTO.getCargoNumber()); +// //可能会出现同一物料不同批次的库存品 +// List reservationStockList = reservationStocklistEntities.stream().filter(drs -> drs.getReservationNum() > 0 && drs.getRealityNum() < drs.getReservationNum()).collect(Collectors.toList()); +// if (Func.isNotEmpty(reservationStockList)){ +// DistributionReservationStocklistEntity oldReservationStocklistEntity = reservationStockList.get(0); +// //扣减计划数量 +// oldReservationStocklistEntity.setReservationNum(oldReservationStocklistEntity.getReservationNum() - 1); +// distributionReservationStocklistService.updateById(oldReservationStocklistEntity); +// +// //维护对应的库存品包件 +// List stockListDetailEntities = disStockListDetailService.list(Wrappers.query().lambda() +// .eq(DisStockListDetailEntity::getReservationId, oldReservationStocklistEntity.getReservationId()) +// .eq(DisStockListDetailEntity::getStockListId, oldReservationStocklistEntity.getStocklistId()) +// .ne(DisStockListDetailEntity::getStockPackageStatus, ReservationPackageStatusConstant.quxiao.getValue()) +// ); +// +// DistributionStockListEntity oldStockListEntity = distributionStockListService.getById(oldReservationStocklistEntity.getStocklistId()); +// oldStockListEntity.setQuantityOccupied(oldStockListEntity.getQuantityOccupied() - 1); +// distributionStockListService.updateById(oldStockListEntity); +// +// //对指定库存品包件进行库存品ID修改 +// DisStockListDetailEntity disStockListDetailEntity = stockListDetailEntities.stream().filter(sd -> Func.isEmpty(sd.getStockPackageCode())).collect(Collectors.toList()).get(0); +// if (Func.isNotEmpty(disStockListDetailEntity)){ +// disStockListDetailEntity.setStockListId(stockupDTO.getStockListId()); +// disStockListDetailService.updateById(disStockListDetailEntity); +// } +// //维护对应库存品的冻结数量 +// DistributionStockListEntity newStockListEntity = distributionStockListService.getById(stockupDTO.getStockListId()); +// newStockListEntity.setQuantityOccupied(oldStockListEntity.getQuantityOccupied() + 1); +// distributionStockListService.updateById(newStockListEntity); +// } +// +// // 增加实际扫描的包件对应的库存品信息 增加在预约库存品中间表上 +// DistributionReservationStocklistEntity reservationStocklistEntity = new DistributionReservationStocklistEntity(); +// reservationStocklistEntity.setReservationId(stockupDTO.getReservationId()); +// reservationStocklistEntity.setReservationNum(1); +// reservationStocklistEntity.setLoadingStatus("10"); +// reservationStocklistEntity.setSigningStatus("10"); +// reservationStocklistEntity.setStockListStatus("3"); +// DistributionStockListEntity stockListEntity = distributionStockListService.getById(stockupDTO.getStockListId()); +// if(ObjectUtils.isNotNull(stockListEntity)){ +// reservationStocklistEntity.setStocklistId(stockListEntity.getId()); +// reservationStocklistEntity.setUnit(stockListEntity.getCargoUnit()); +// reservationStocklistEntity.setRealityNum(0); +// } +// distributionReservationStocklistService.save(reservationStocklistEntity); +// +// }else { +// //扣减该物料的计划库存品 +// List reservationStocklistEntityList = distributionReservationMapper.selectStockListByReservationIdAndCargoNumber(stockupDTO.getReservationId(), stockupDTO.getCargoNumber(), stockupDTO.getStockListId()); +// List oldReservationStockList = reservationStocklistEntityList.stream().filter(rs -> rs.getReservationNum() > 0 && rs.getRealityNum() < rs.getReservationNum()).collect(Collectors.toList()); +// if (Func.isNotEmpty(oldReservationStockList)){ +// //对老的计划数量进行减少 +// DistributionReservationStocklistEntity reservationStocklistEntity = oldReservationStockList.get(0); +// reservationStocklistEntity.setReservationNum(reservationStocklistEntity.getReservationNum() - 1); +// distributionReservationStocklistService.updateById(reservationStocklistEntity); +// +// +// //维护对应库存品的冻结数量 +// DistributionStockListEntity oldStockListEntity = distributionStockListService.getById(reservationStocklistEntity.getStocklistId()); +// oldStockListEntity.setQuantityOccupied(oldStockListEntity.getQuantityOccupied() - 1); +// distributionStockListService.updateById(oldStockListEntity); +// +// //维护对应的库存品包件 +// List stockListDetailEntities = disStockListDetailService.list(Wrappers.query().lambda() +// .eq(DisStockListDetailEntity::getReservationId, reservationStocklistEntity.getReservationId()) +// .eq(DisStockListDetailEntity::getStockListId, reservationStocklistEntity.getStocklistId()) +// .ne(DisStockListDetailEntity::getStockPackageStatus, ReservationPackageStatusConstant.quxiao.getValue()) +// ); +// +// //对指定库存品包件进行库存品ID修改 +// DisStockListDetailEntity disStockListDetailEntity = stockListDetailEntities.stream().filter(sd -> Func.isEmpty(sd.getStockPackageCode())).collect(Collectors.toList()).get(0); +// if (Func.isNotEmpty(disStockListDetailEntity)){ +// disStockListDetailEntity.setStockListId(stockupDTO.getStockListId()); +// disStockListDetailService.updateById(disStockListDetailEntity); +// distributionReservationStocklistService.updateById(reservationStocklistEntity); +// } +// +// //新的数量进行增加 +// DistributionReservationStocklistEntity stocklistEntity = distributionReservationStocklistService.getOne(Wrappers.query().lambda() +// .eq(DistributionReservationStocklistEntity::getReservationId, stockupDTO.getReservationId()) +// .eq(DistributionReservationStocklistEntity::getStocklistId, stockupDTO.getStockListId()) +// .ne(DistributionReservationStocklistEntity::getStockListStatus, ReservationOrderStatusConstant.quxiao.getValue()) +// ); +// +// stocklistEntity +// .setReservationNum(stocklistEntity.getReservationNum() + 1); +// distributionReservationStocklistService.updateById(stocklistEntity); +// +// //维护对应库存品的冻结数量 +// DistributionStockListEntity newStockListEntity = distributionStockListService.getById(stockupDTO.getStockListId()); +// newStockListEntity.setQuantityOccupied(oldStockListEntity.getQuantityOccupied() + 1); +// distributionStockListService.updateById(newStockListEntity); +// +// +// +// +// } +// +// +//// List reservationStocklistEntities = stockListMap.get(stockupDTO.getStockListId()); +//// DistributionReservationStocklistEntity reservationStocklistEntity = reservationStocklistEntities.get(0); +//// reservationStocklistEntity.setReservationNum(reservationStocklistEntity.getReservationNum() + 1); +//// distributionReservationStocklistService.updateById(reservationStocklistEntity); +//// if (newStockListEntity.getQuantityOccupied() +1 +newStockListEntity.getQuantityOccupied() <= newStockListEntity.getQuantityStock()){ +//// newStockListEntity.setQuantityOccupied(newStockListEntity.getQuantityStock() + 1); +//// } +//// //修改对应库存品的冻结数量 +//// //查询出原来计划的库存品进行扣减 +//// List distributionReservationStocklistEntityList = distributionReservationMapper.selectStockListByReservationIdAndCargoNumber(stockupDTO.getReservationId(),stockupDTO.getCargoNumber(),stockupDTO.getStockListId()); +//// //过滤备货未完成的计划进行数量扣减 +//// DistributionReservationStocklistEntity reservationStocklist = distributionReservationStocklistEntityList.stream().filter(drs -> drs.getReservationNum() > 0 && drs.getRealityNum() < drs.getReservationNum()).collect(Collectors.toList()).get(0); +//// reservationStocklist.setReservationNum(reservationStocklist.getReservationNum() - 1); +//// distributionReservationStocklistService.updateById(reservationStocklist); +//// +//// //维护库存品对应数量 +//// DistributionStockListEntity stockListEntity = distributionStockListService.getById(reservationStocklist.getStocklistId()); +//// stockListEntity.setQuantityOccupied(stockListEntity.getQuantityOccupied() + 1); +//// distributionStockListService.updateById(stockListEntity); +//// //存在 进行新增计划 +// } +// //这里扣减原来的需要排除备货完成的 +// } +// } + + if (Func.isNotEmpty(distributionReservationStocklistEntities)){ + + boolean isAdd = distributionReservationStocklistEntities.stream().map(DistributionReservationStocklistEntity::getStocklistId).anyMatch(s -> s.equals(stockupDTO.getStockListId())); + //扣减对应的库存品信息 +// DistributionStockListEntity newStockListEntity = distributionStockListService.getById(stockupDTO.getStockListId()); + if (!isAdd){ + ///先进行对应的扣减 + //查询该预约该物料的库存品信息 + List reservationStocklistEntities = distributionReservationMapper.selectInventoryListByIdAndMateriel(stockupDTO.getReservationId(),stockupDTO.getCargoNumber()); + //可能会出现同一物料不同批次的库存品 + List reservationStockList = reservationStocklistEntities.stream().filter(drs -> drs.getReservationNum() > 0 && drs.getRealityNum() < drs.getReservationNum()).collect(Collectors.toList()); + if (Func.isNotEmpty(reservationStockList)){ + DistributionReservationStocklistEntity oldReservationStocklistEntity = reservationStockList.get(0); + //扣减计划数量 + oldReservationStocklistEntity.setReservationNum(oldReservationStocklistEntity.getReservationNum() - 1); + distributionReservationStocklistService.updateById(oldReservationStocklistEntity); + + //维护对应的库存品包件 List stockListDetailEntities = disStockListDetailService.list(Wrappers.query().lambda() - .eq(DisStockListDetailEntity::getReservationId, o.getReservationId()) - .eq(DisStockListDetailEntity::getStockListId, o.getStocklistId()) + .eq(DisStockListDetailEntity::getReservationId, oldReservationStocklistEntity.getReservationId()) + .eq(DisStockListDetailEntity::getStockListId, oldReservationStocklistEntity.getStocklistId()) .ne(DisStockListDetailEntity::getStockPackageStatus, ReservationPackageStatusConstant.quxiao.getValue()) ); - boolean stockFlag = stockListDetailEntities.stream().allMatch(s -> Func.isNotEmpty(s.getStockPackageCode())); - if (stockFlag){ - stockListMap.remove(k); + + DistributionStockListEntity oldStockListEntity = distributionStockListService.getById(oldReservationStocklistEntity.getStocklistId()); + oldStockListEntity.setQuantityOccupied(oldStockListEntity.getQuantityOccupied() - 1); + distributionStockListService.updateById(oldStockListEntity); + + //对指定库存品包件进行库存品ID修改 + DisStockListDetailEntity disStockListDetailEntity = stockListDetailEntities.stream().filter(sd -> Func.isEmpty(sd.getStockPackageCode())).collect(Collectors.toList()).get(0); + if (Func.isNotEmpty(disStockListDetailEntity)){ + disStockListDetailEntity.setStockListId(stockupDTO.getStockListId()); + disStockListDetailService.updateById(disStockListDetailEntity); } - }); - }); - } else { - stockListMap = null; - } - - //stockListMap此时剩下的都是满足进行修改的库存品,这里就需要去进行指定删除哪一个库存品,这里默认添加数量为一需要指定一个进行扣减, - if (Func.isNotEmpty(stockListMap)){ - List distributionReservationStocklistEntities = stockListMap.get(0); - DistributionReservationStocklistEntity reservationStocklist = distributionReservationStocklistEntities.get(0); - reservationStocklist.setReservationNum(reservationStocklist.getReservationNum() - reservationStocklistEntity.getReservationNum()); - if (reservationStocklist.getReservationNum() == 0){ - reservationStocklist.setStockListStatus(ReservationOrderStatusConstant.quxiao.getValue()); - } - //查询包件是否完成备货 - List stockListDetailEntities = disStockListDetailService.list(Wrappers.query().lambda() - .eq(DisStockListDetailEntity::getReservationId, reservationStocklist.getReservationId()) - .eq(DisStockListDetailEntity::getStockListId, reservationStocklist.getStocklistId()) - .ne(DisStockListDetailEntity::getStockPackageStatus, ReservationPackageStatusConstant.quxiao.getValue()) - ); - //对指定库存品包件进行库存品ID修改 - DisStockListDetailEntity disStockListDetailEntity = stockListDetailEntities.stream().filter(sd -> Func.isEmpty(sd.getStockPackageCode())).collect(Collectors.toList()).get(0); - if (Func.isNotEmpty(disStockListDetailEntity)){ - disStockListDetailEntity.setStockListId(stockListEntity.getId()); - disStockListDetailService.updateById(disStockListDetailEntity); - distributionReservationStocklistService.updateById(reservationStocklist); - //维护对应库存品的冻结数量 - DistributionStockListEntity oldStockListEntity = distributionStockListService.getById(reservationStocklist.getStocklistId()); - oldStockListEntity.setQuantityStock(oldStockListEntity.getQuantityStock() + reservationStocklistEntity.getReservationNum()); - distributionStockListService.updateById(oldStockListEntity); + //维护对应库存品的冻结数量 + DistributionStockListEntity newStockListEntity = distributionStockListService.getById(stockupDTO.getStockListId()); + newStockListEntity.setQuantityOccupied(newStockListEntity.getQuantityOccupied() + 1); + distributionStockListService.updateById(newStockListEntity); + } + // 增加实际扫描的包件对应的库存品信息 增加在预约库存品中间表上 + DistributionReservationStocklistEntity reservationStocklistEntity = new DistributionReservationStocklistEntity(); + reservationStocklistEntity.setReservationId(stockupDTO.getReservationId()); + reservationStocklistEntity.setReservationNum(1); + reservationStocklistEntity.setLoadingStatus("10"); + reservationStocklistEntity.setSigningStatus("10"); + reservationStocklistEntity.setStockListStatus("3"); + DistributionStockListEntity stockListEntity = distributionStockListService.getById(stockupDTO.getStockListId()); + if(ObjectUtils.isNotNull(stockListEntity)){ + reservationStocklistEntity.setStocklistId(stockListEntity.getId()); + reservationStocklistEntity.setUnit(stockListEntity.getCargoUnit()); + reservationStocklistEntity.setRealityNum(0); + } + distributionReservationStocklistService.save(reservationStocklistEntity); + } +// else { +// //扣减该物料的计划库存品 +// List reservationStocklistEntityList = distributionReservationMapper.selectStockListByReservationIdAndCargoNumber(stockupDTO.getReservationId(), stockupDTO.getCargoNumber(), stockupDTO.getStockListId()); +// List oldReservationStockList = reservationStocklistEntityList.stream().filter(rs -> rs.getReservationNum() > 0 && rs.getRealityNum() < rs.getReservationNum()).collect(Collectors.toList()); +// if (Func.isNotEmpty(oldReservationStockList)){ +// //对老的计划数量进行减少 +// DistributionReservationStocklistEntity reservationStocklistEntity = oldReservationStockList.get(0); +// reservationStocklistEntity.setReservationNum(reservationStocklistEntity.getReservationNum() - 1); +// distributionReservationStocklistService.updateById(reservationStocklistEntity); +// +// +// //维护对应库存品的冻结数量 +// DistributionStockListEntity oldStockListEntity = distributionStockListService.getById(reservationStocklistEntity.getStocklistId()); +// oldStockListEntity.setQuantityOccupied(oldStockListEntity.getQuantityOccupied() - 1); +// distributionStockListService.updateById(oldStockListEntity); +// +// //维护对应的库存品包件 +// List stockListDetailEntities = disStockListDetailService.list(Wrappers.query().lambda() +// .eq(DisStockListDetailEntity::getReservationId, reservationStocklistEntity.getReservationId()) +// .eq(DisStockListDetailEntity::getStockListId, reservationStocklistEntity.getStocklistId()) +// .ne(DisStockListDetailEntity::getStockPackageStatus, ReservationPackageStatusConstant.quxiao.getValue()) +// ); +// +// //对指定库存品包件进行库存品ID修改 +// DisStockListDetailEntity disStockListDetailEntity = stockListDetailEntities.stream().filter(sd -> Func.isEmpty(sd.getStockPackageCode())).collect(Collectors.toList()).get(0); +// if (Func.isNotEmpty(disStockListDetailEntity)){ +// disStockListDetailEntity.setStockListId(stockupDTO.getStockListId()); +// disStockListDetailService.updateById(disStockListDetailEntity); +// distributionReservationStocklistService.updateById(reservationStocklistEntity); +// } +// +// //新的数量进行增加 +// DistributionReservationStocklistEntity stocklistEntity = distributionReservationStocklistService.getOne(Wrappers.query().lambda() +// .eq(DistributionReservationStocklistEntity::getReservationId, stockupDTO.getReservationId()) +// .eq(DistributionReservationStocklistEntity::getStocklistId, stockupDTO.getStockListId()) +// .ne(DistributionReservationStocklistEntity::getStockListStatus, ReservationOrderStatusConstant.quxiao.getValue()) +// ); +// +// stocklistEntity +// .setReservationNum(stocklistEntity.getReservationNum() + 1); +// distributionReservationStocklistService.updateById(stocklistEntity); +// +// //维护对应库存品的冻结数量 +// DistributionStockListEntity newStockListEntity = distributionStockListService.getById(stockupDTO.getStockListId()); +// newStockListEntity.setQuantityOccupied(oldStockListEntity.getQuantityOccupied() + 1); +// distributionStockListService.updateById(newStockListEntity); +// } +// } } - // 默认 计划数量和实际数量为0 - - - return R.fail("操作成功"); - - - //查询出原来的库存品信息 -// DistributionReservationStocklistEntity reservationStocklist = distributionReservationStocklistService.getOne(Wrappers.query().lambda() -// .eq(DistributionReservationStocklistEntity::getReservationId, stockupDTO.getReservationId()) -// .eq(DistributionReservationStocklistEntity::getStocklistId, stockupDTO.getStockListId()) -// .ne(DistributionReservationStocklistEntity::getStockListStatus, ReservationOrderStatusConstant.quxiao.getValue()) -// ); - - - // 再次执行扫描 读取这预约计划下面正常的库存品信息 扣减数量 对新增的预约库存品信息进行增加预约数量和实际数量 - - - // 修改logpm_dis_stock_list_detail 这张表上的库存品ID和包件ID - - + return R.success("操作成功"); } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionStockupController.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionStockupController.java index 0d1c0868c..289555e5c 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionStockupController.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionStockupController.java @@ -18,6 +18,7 @@ package com.logpm.distribution.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import com.logpm.basicdata.entity.BasicdataWarehouseEntity; import com.logpm.basicdata.feign.IBasicdataWarehouseClient; import com.logpm.distribution.entity.DistributionStockupEntity; import com.logpm.distribution.excel.DistributionCityExcel; @@ -203,13 +204,8 @@ public class DistributionStockupController extends BladeController { @ApiOperationSupport(order = 2) @ApiOperation(value = "查询备货人员信息", notes = "传入distributionStockup") public R> listUser() { - //获取当前登录用户 - BladeUser user = AuthUtil.getUser(); - //查询备货岗位 - - - List cc = distributionStockupService.getRoleList(user.getDeptId(), user.getTenantId()); + List cc = distributionStockupService.getRoleList(); // List cc = distributionStockupService.getRoleList(user.getDeptId(), user.getTenantId(), "叉车"); return R.data(cc); } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/app/StockupDTO.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/app/StockupDTO.java index 037723b17..57d3d557c 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/app/StockupDTO.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/app/StockupDTO.java @@ -62,6 +62,7 @@ public class StockupDTO implements Serializable { private Long stockupId;//备货任务区Id private String type;//类型 1 扫码 2 选择 private Long stockListId;//库存品id + private Long newStockListId;//库存品id private Integer packageNum;//包条数量 private String isZero;//零担标识 0否 1是 diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionParcelListMapper.xml b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionParcelListMapper.xml index cece9e1ba..2df87a8fe 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionParcelListMapper.xml +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionParcelListMapper.xml @@ -36,7 +36,7 @@ SELECT - ldrs.*REPEAT - statement_list - UNTIL search_condition END REPEAT; - + ldrs.* FROM logpm_distribution_reservation AS ldr LEFT JOIN logpm_distribution_reservation_stocklist AS ldrs ON ldr.id = ldrs.reservation_id @@ -1303,5 +1333,64 @@ WHERE ldr.id = #{reservationId} AND ldsl.cargo_number = #{cargoNumber} + + diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionSignforMapper.xml b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionSignforMapper.xml index 39960912f..3544b6251 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionSignforMapper.xml +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionSignforMapper.xml @@ -831,7 +831,7 @@ ldsl.cargo_number cargoNumber, ldsl.description_goods descriptionGoods, ldl.signfor_state signforState, - ldl.order_package_code coding, + ldl.order_package_code orderPackageCode, lbm.specification specification, lbm.logpm_unit logpmUnit FROM diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockListMapper.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockListMapper.java index 3b1bfed6c..738aba33d 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockListMapper.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockListMapper.java @@ -111,4 +111,11 @@ public interface DistributionStockListMapper extends BaseMapper getStockListInfo(@Param("par")DistributionStockListEntity distributionStockListEntity); DistributionStockListEntity selectStockInforByOrderPackageCode(@Param("orderPackageCode") String orderPackageCode); + + /** + * 扣减库存品对应的在库数量 + * @param inventoryId + * @param loadedNub + */ + int deductionQuantityStock(@Param("stockListId") Long inventoryId,@Param("decreaseNum") Integer loadedNub); } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockListMapper.xml b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockListMapper.xml index bded5c76c..ca302e47d 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockListMapper.xml +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockListMapper.xml @@ -96,7 +96,7 @@ select ldsl.market_id marketId, diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionReservationService.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionReservationService.java index 4b5c94463..77d477070 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionReservationService.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionReservationService.java @@ -240,4 +240,12 @@ public interface IDistributionReservationService extends BaseService getRetentionReservationList(String reservationIds); + + /** + * 查询预约计划下指定批次库存品信息 + * @param reservationId + * @param id + * @return + */ + DistributionStockupStockListVO selectStockupStockListByStockListId(Long reservationId, Long id); } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionStockupService.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionStockupService.java index 60002f6b2..d51151e78 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionStockupService.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionStockupService.java @@ -216,9 +216,10 @@ public interface IDistributionStockupService extends BaseService getLocationMarketSelectionOrder(StockupDTO stockupDTO); /** + * 查询备货人员 * @return */ - List getRoleList(String deptId, String tenantId); + List getRoleList(); /** * 修改备货任务的备货区 diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java index 88e9d393b..7cce0ed98 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java @@ -486,6 +486,8 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl list = disStockListDetailService.list(Wrappers.query().lambda() + .eq(DisStockListDetailEntity::getStockPackageCode, distrilbutionloadingscanDTO.getBarcode()) + .ne(DisStockListDetailEntity::getStockPackageStatus, ReservationPackageStatusConstant.quxiao.getValue()) + ); + if (Func.isNotEmpty(list)){ + //满足条件此码必定为库存品 + //判断该库存品是否属于当前客户 + List collect = list.stream().filter(l -> l.getReservationId().equals(distrilbutionloadingscanDTO.getReservationId())).collect(Collectors.toList()); + if (Func.isNotEmpty(collect)){ + return Resp.scanFail("请在库存品页面扫描此码", "请在库存品页面扫描此码"); + } + return Resp.scanFail("此码不是订制品", "此码不是订制品"); + } //获取当前用户司机 DistributionDeliveryListEntity distributionDeliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId()); //异步确认包条扫描信息 @@ -559,20 +574,21 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl r.getDeliveryType().equals(DistributionTypeConstant.shangpei.getValue())); @@ -906,7 +927,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl 0) { str.append("异常").append(abnormalLoadingNum.get() + "件"); } @@ -2093,15 +2114,17 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImplquery().lambda().eq(DistributionStockListEntity::getId, distributionLoadscaninvnEntity.getInventoryId())); - BigDecimal quantityStock = new BigDecimal(distributionStockListEntity.getQuantityStock()); - BigDecimal loadedNub = new BigDecimal(distributionLoadscaninvnEntity.getLoadedNub()); - int stockListQuantityStock = quantityStock.subtract(loadedNub).intValue(); - int stockListOutboundQuantity = quantityStock.add(loadedNub).intValue(); - distributionStockListEntity.setQuantityStock(stockListQuantityStock); - distributionStockListEntity.setQuantityOccupied(stockListOutboundQuantity); - distributionStockListEntity.setOutboundQuantity(stockListOutboundQuantity); - distributionStockListMapper.updateById(distributionStockListEntity); + //扣减出库数量 + distributionStockListMapper.deductionQuantityStock(distributionLoadscaninvnEntity.getInventoryId(),distributionLoadscaninvnEntity.getLoadedNub()); +// DistributionStockListEntity distributionStockListEntity = distributionStockListMapper.selectOne(Wrappers.query().lambda().eq(DistributionStockListEntity::getId, distributionLoadscaninvnEntity.getInventoryId())); +// BigDecimal quantityStock = new BigDecimal(distributionStockListEntity.getQuantityStock()); +// BigDecimal loadedNub = new BigDecimal(distributionLoadscaninvnEntity.getLoadedNub()); +// int stockListQuantityStock = quantityStock.subtract(loadedNub).intValue(); +// int stockListOutboundQuantity = quantityStock.add(loadedNub).intValue(); +// distributionStockListEntity.setQuantityStock(stockListQuantityStock); +// distributionStockListEntity.setQuantityOccupied(stockListOutboundQuantity); +// distributionStockListEntity.setOutboundQuantity(stockListOutboundQuantity); +// distributionStockListMapper.updateById(distributionStockListEntity); } else { return Resp.scanFail("窜货", "窜货"); } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionReservationServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionReservationServiceImpl.java index b562081d2..2792add69 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionReservationServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionReservationServiceImpl.java @@ -36,7 +36,9 @@ import com.logpm.distribution.vo.*; import com.logpm.distribution.wrapper.*; import com.logpm.oldproject.entity.WayBillEntity; import com.logpm.oldproject.feign.IWayBillClient; +import com.logpm.warehouse.entity.WarehouseGoodsAllocationEntity; import com.logpm.warehouse.entity.WarehouseWaybillEntity; +import com.logpm.warehouse.feign.IWarehouseGoodsAllocationClient; import com.logpm.warehouse.feign.IWarehouseWaybillClient; import lombok.extern.slf4j.Slf4j; import org.springblade.common.constant.DictBizConstant; @@ -188,6 +190,9 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl retentionReservationList = baseMapper.getRetentionReservationList(ids); return retentionReservationList; } + + @Override + public DistributionStockupStockListVO selectStockupStockListByStockListId(Long reservationId, Long id) { + DistributionStockupStockListVO distributionStockupStockListVO = baseMapper.selectStockupStockListByStockListId(reservationId, id); + if (Func.isBlank(distributionStockupStockListVO.getAllocations())){ + String[] ids = distributionStockupStockListVO.getAllocations().split(","); + List allocationInforByIds = warehouseGoodsAllocationClient.getAllocationInforByIds(ids); + for (WarehouseGoodsAllocationEntity allocationInforById : allocationInforByIds) { + if (distributionStockupStockListVO.getAllocationList() == null) { + distributionStockupStockListVO.setAllocationList(new ArrayList<>()); + } + Map map = new HashMap<>(); + map.put("id", allocationInforById.getId()); + map.put("name", allocationInforById.getQrCode()); + distributionStockupStockListVO.getAllocationList().add(map); + } + } + + return distributionStockupStockListVO; + } } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java index 2e5b07a48..a0aa1b1f2 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java @@ -122,6 +122,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl list = disStockListDetailService.list(Wrappers.query().lambda() + .eq(DisStockListDetailEntity::getStockPackageCode, distrilbutionloadingscanDTO.getBarcode()) + .ne(DisStockListDetailEntity::getStockPackageStatus, ReservationPackageStatusConstant.quxiao.getValue()) + ); + if (Func.isNotEmpty(list)){ + //满足条件此码必定为库存品 + //判断该库存品是否属于当前客户 + List collect = list.stream().filter(l -> l.getReservationId().equals(distrilbutionloadingscanDTO.getReservationId())).collect(Collectors.toList()); + if (Func.isNotEmpty(collect)){ + return Resp.scanFail("请在库存品页面扫描此码", "请在库存品页面扫描此码"); + } + return Resp.scanFail("此码不是订制品", "此码不是订制品"); + } + List parcelListEntityList = distributionReservationMapper.selectPackageListByReservationId(distrilbutionloadingscanDTO.getReservationId()); //查询该客户是否存在该包件信息 List collect = parcelListEntityList.stream().filter(p -> p.getOrderPackageCode().equals(distrilbutionloadingscanDTO.getBarcode())).collect(Collectors.toList()); @@ -389,7 +405,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImplquery().lambda() + .eq(DistributionParcelListEntity::getOrderPackageCode, distrilbutionloadingscanDTO.getBarcode()) + .eq(DistributionParcelListEntity::getWarehouseId, myCurrentWarehouse.getId()) + ); + if (Func.isNotEmpty(one) && one.getConditions() == 2){ + log.error("#####################此包件不是定制品", one.getConditions()); + return Resp.scanFail("此包件不是定制品", "此包件不是定制品"); + } List parcelListEntities = distributionDeliveryListMapper.selectPackageListByDeliveryListId(distrilbutionloadingscanDTO.getDeliveryId()); //该货物是否属于该计划 List distributionParcelListEntities = parcelListEntities.stream().filter(p -> p.getOrderPackageCode().equals(distrilbutionloadingscanDTO.getBarcode())).collect(Collectors.toList()); @@ -942,6 +966,18 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl 没有 此码无效 // 2、查询该客户是否存在满足的库存品 --- 没有 查看是否存在计划 窜货 // 3、是否异常签收 + + //判断扫码是否是包件 + List parcelListEntities = distributionReservationMapper.selectPackageListByReservationId(distrilbutionloadingscanDTO.getReservationId()); + if (Func.isNotEmpty(parcelListEntities)){ + boolean isHave = parcelListEntities.stream().map(DistributionParcelListEntity::getOrderPackageCode).anyMatch(c -> c.contains(distrilbutionloadingscanDTO.getBarcode())); + if (Func.isNotEmpty(isHave)){ + return Resp.scanFail("请在订制品页面扫描此码", "请在订制品页面扫描此码"); + }else { + return Resp.scanFail("扫描错误", "未知二维码"); + } + } + List detailEntities = distributionReservationMapper.selectInventoryListByReservation(distrilbutionloadingscanDTO.getReservationId()); if (Func.isEmpty(detailEntities)) { return Resp.scanFail("此码无效", "此码无效"); @@ -965,6 +1001,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl distributionLoadscaninvnEntities = distributionLoadscaninvnMapper.selectList(new QueryWrapper().lambda() diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java index 97b61a0c6..0a873c351 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java @@ -1693,7 +1693,7 @@ public class DistributionStockupServiceImpl extends BaseServiceImpl 0) { log.warn("###################createPackageCode: 包条数量与预约数量不正确"); @@ -2220,6 +2220,7 @@ public class DistributionStockupServiceImpl extends BaseServiceImplquery().lambda() .eq(DisStockOrdercodeRecoEntity::getCode, stockupDTO.getPacketBarCode()) + .eq(DisStockOrdercodeRecoEntity::getIsDeleted, 0) ); if (ObjectUtils.isNotNull(one) && one.getCodeStatus().equals("1")) { return 8; @@ -2317,20 +2318,26 @@ public class DistributionStockupServiceImpl extends BaseServiceImpl getRoleList(String deptId, String tenantId) { + public List getRoleList() { + //获取当前登录用户 + BladeUser user = AuthUtil.getUser(); + String tenantId = user.getTenantId(); +// String deptId = user.getDeptId(); + //查询备货岗位 List warehouseType = DictBizCache.getList("stock_personnel"); if (warehouseType.isEmpty()) { throw new ServiceException("注意,注意!拣货人员字典未配置!请配置!"); } else { List stringList = new ArrayList<>(); warehouseType.stream().forEach(i -> { + //查询这个角色ID R roleId = sysClient.getRoleIds(tenantId, i.getDictValue()); if (ObjectUtils.isNotNull(roleId.getData())) { stringList.add(roleId.getData()); } }); String roleIds = stringList.stream().collect(Collectors.joining(",")); - R> listR = userSearchClient.listByRole(roleIds); + R> listR = userSearchClient.listByRole(roleIds); //查询角色下的所有人员数据 BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient.getMyCurrentWarehouse(); //有没有选择仓库信息 if (ObjectUtils.isNotNull(myCurrentWarehouse)) { @@ -2926,6 +2933,10 @@ public class DistributionStockupServiceImpl extends BaseServiceImplquery().lambda() .eq(DistributionStockListEntity::getIncomingBatch, byId.getOrderCode()) - .eq(DistributionStockListEntity::getWarehouseId,stockupDTO.getWarehouseId()) + .eq(DistributionStockListEntity::getWarehouseId,myCurrentWarehouse.getId()) + .eq(DistributionStockListEntity::getCargoNumber,stockupDTO.getCargoNumber()) ); if(ObjectUtils.isNull(distributionStockListEntity)){ return R.fail("该包件不是库存品!"); @@ -2959,13 +2971,13 @@ public class DistributionStockupServiceImpl extends BaseServiceImpl first = list.stream().filter(i -> i.getStocklistId().equals(distributionStockListEntity.getId())).findFirst(); - if(first.isPresent()){ + if(!first.isPresent()){ //没有一样的库存品数据 return R.fail("没有一样的库存品数据"); } //判断数量是否可以直接备货 DistributionReservationStocklistEntity reservationStocklistEntity1 = first.get(); - if(reservationStocklistEntity1.getRealityNum() > reservationStocklistEntity1.getReservationNum()){ + if(reservationStocklistEntity1.getRealityNum() < reservationStocklistEntity1.getReservationNum()){ return R.success("可以直接备货!"); } List keYi = new ArrayList<>(); //可以操作的库存品 @@ -2974,7 +2986,7 @@ public class DistributionStockupServiceImpl extends BaseServiceImpl i.getReservationNum() ){ + && i.getRealityNum() < i.getReservationNum() ){ keYi.add(i); } }); @@ -2990,7 +3002,7 @@ public class DistributionStockupServiceImpl extends BaseServiceImpl collect2 = keYi.stream().filter(i -> i.getStocklistId().equals(distributionStockListEntities.get(0).getId())).findFirst(); - if(!collect2.isPresent()){ + if(collect2.isPresent()){ DistributionReservationStocklistEntity distributionReservationStocklistEntity = collect2.get(); Integer reservationNum = distributionReservationStocklistEntity.getReservationNum() - 1; @@ -3033,9 +3045,16 @@ public class DistributionStockupServiceImpl extends BaseServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(ReceivingOrderEntity::getCode, code); List receivingOrderEntities = receivingOrderMapper.selectList(lambdaQueryWrapper); if (ObjectUtils.isNotNull(receivingOrderEntities)) { isUpdate = true; + // 加入缓存 + bladeRedis.setEx(RedisKeyConstant.cache_oupai_key+code,code,60*60*60L); + } return isUpdate; } @@ -631,6 +645,17 @@ public class OuPaiFactoryServiceImpl implements IOuPaiFactoryService { //新发车单数据 ReceivingOrderEntity receivingOrderEntity = new ReceivingOrderEntity(); receivingOrderEntity.setCode(code); + + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(ReceivingOrderEntity::getCode,code); + + + List receivingOrderEntities = receivingOrderMapper.selectList(lambdaQueryWrapper); + if(ObjectUtils.isNotNull(receivingOrderEntities)){ + log.info(">>>>>>>>>>>>>>>>>>>>>>> 收货单已存在 {} ",code); + return ; + } + String type = valueObject.getString("Type"); if ("中转".equals(type)) { receivingOrderEntity.setType(1); @@ -796,6 +821,12 @@ public class OuPaiFactoryServiceImpl implements IOuPaiFactoryService { factoryOrderEntity.setReceiptStatus(0); factoryOrderEntity.setPushStatus(0); factoryOrderEntity.setTurnStatus(0); + + + + // + + boolean save = factoryOrderService.save(factoryOrderEntity); if (!save) { log.warn("############handleData: 保存订单失败 selfCode={}", selfCode); @@ -807,7 +838,10 @@ public class OuPaiFactoryServiceImpl implements IOuPaiFactoryService { String packageCode = packageEntity.getString("Code"); QueryWrapper packageEntityQueryWrapper = new QueryWrapper<>(); packageEntityQueryWrapper.eq("code", packageCode); + + FactoryPackageEntity factoryPackageEntity = factoryPackageService.getOne(packageEntityQueryWrapper); + if (Objects.isNull(factoryPackageEntity)) { factoryPackageEntity = new FactoryPackageEntity(); factoryPackageEntity.setOrderId(orderId); diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/pan/service/impl/PanFactoryDataServiceImpl.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/pan/service/impl/PanFactoryDataServiceImpl.java index 382d53282..d50a7c047 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/pan/service/impl/PanFactoryDataServiceImpl.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/pan/service/impl/PanFactoryDataServiceImpl.java @@ -518,6 +518,10 @@ public class PanFactoryDataServiceImpl implements IPanFactoryDataService { logger.warn("#################handleDataToPlatform: 保存订单信息失败 orderSelfNum={}", orderSelfNum); throw new CustomerException(405, "保存订单信息失败"); } + }else{ + distributionStockArticleEntity.setTotalNumber(total); + distributionStockArticleClient.saveOrUpdate(distributionStockArticleEntity); + } //保存包件信息 @@ -532,27 +536,27 @@ public class PanFactoryDataServiceImpl implements IPanFactoryDataService { // logger.error("################handleDataToPlatform: unitNo={} 打托失败",unitNo); // } - String waybillNumber = distributionStockArticleEntity.getWaybillNumber(); - if(!waybillNumber.contains(waybillNoNum)){ - waybillNumber = waybillNumber+","+waybillNoNum; - } - distributionStockArticleEntity.setWaybillNumber(waybillNumber); - - // 修改入库状态 - distributionStockArticleEntity.setHandQuantity(distributionStockArticleEntity.getHandQuantity() +1); - String orderStatus = checkDistributionStockArticleOrderStatus(distributionStockArticleEntity); - distributionStockArticleEntity.setOrderStatus(orderStatus); - - // 修改收货 - if(distributionStockArticleEntity.getOrderStatus().equals(OrderStatusConstant.ruku.getValue())){ - distributionStockArticleEntity.setOrderReceiveStatus(OrderReceiveStatusConstant.yishouhuo.getValue()); - // 更新齐套状态 - // todo 这里需要多仓齐套的查询条件 - distributionStockArticleEntity.setCompleteSet(1); - } - // 修改最新的入库时间 - distributionStockArticleEntity.setWarehouseEntryTimeEnd(new Date()); - distributionStockArticleClient.saveOrUpdate(distributionStockArticleEntity); +// String waybillNumber = distributionStockArticleEntity.getWaybillNumber(); +// if(!waybillNumber.contains(waybillNoNum)){ +// waybillNumber = waybillNumber+","+waybillNoNum; +// } +// distributionStockArticleEntity.setWaybillNumber(waybillNumber); +// +// // 修改入库状态 +// distributionStockArticleEntity.setHandQuantity(distributionStockArticleEntity.getHandQuantity() +1); +// String orderStatus = checkDistributionStockArticleOrderStatus(distributionStockArticleEntity); +// distributionStockArticleEntity.setOrderStatus(orderStatus); +// +// // 修改收货 +// if(distributionStockArticleEntity.getOrderStatus().equals(OrderStatusConstant.ruku.getValue())){ +// distributionStockArticleEntity.setOrderReceiveStatus(OrderReceiveStatusConstant.yishouhuo.getValue()); +// // 更新齐套状态 +// // todo 这里需要多仓齐套的查询条件 +// distributionStockArticleEntity.setCompleteSet(1); +// } +// // 修改最新的入库时间 +// distributionStockArticleEntity.setWarehouseEntryTimeEnd(new Date()); +// distributionStockArticleClient.saveOrUpdate(distributionStockArticleEntity); // 包件保存成功去修改订单的数量 // distributionStockArticleClient.addHandQuantity(id, 1); @@ -732,6 +736,22 @@ public class PanFactoryDataServiceImpl implements IPanFactoryDataService { if (!b) { logger.warn("#################handleDataToPlatform: 保存包件信息失败 orderCode={}", entity.getOrderCode()); throw new CustomerException(405, "保存包件信息失败"); + }else{ + logger.info("################handleDataToPlatform: 保存包件成功 OrderPackageCode={}",vo.getPacketBarCode()); + Integer handQuantity = distributionStockArticleEntity.getHandQuantity(); + Integer totalNumber = distributionStockArticleEntity.getTotalNumber(); + + if(handQuantity+1 >= totalNumber){ + distributionStockArticleEntity.setCompleteSet(1); + distributionStockArticleEntity.setOrderReceiveStatus(OrderReceiveStatusConstant.yishouhuo.getValue()); + distributionStockArticleEntity.setOrderStatus(OrderStatusConstant.ruku.getValue()); + }else{ + distributionStockArticleEntity.setCompleteSet(0); + distributionStockArticleEntity.setOrderReceiveStatus(OrderReceiveStatusConstant.bufenshouhuo.getValue()); + distributionStockArticleEntity.setOrderStatus(OrderStatusConstant.bufenruku.getValue()); + } + distributionStockArticleEntity.setHandQuantity(handQuantity + 1); + distributionStockArticleClient.saveOrUpdate(distributionStockArticleEntity); } } } diff --git a/blade-service/logpm-old-project/src/main/java/com/logpm/oldproject/mapper/LocationMapper.xml b/blade-service/logpm-old-project/src/main/java/com/logpm/oldproject/mapper/LocationMapper.xml index 36a9f2145..823be1ea9 100644 --- a/blade-service/logpm-old-project/src/main/java/com/logpm/oldproject/mapper/LocationMapper.xml +++ b/blade-service/logpm-old-project/src/main/java/com/logpm/oldproject/mapper/LocationMapper.xml @@ -5,7 +5,7 @@ + + +