Browse Source

Merge branch 'pre-production'

master
pref_mail@163.com 1 year ago
parent
commit
63699d0ee5
  1. 6
      blade-biz-common/src/main/java/org/springblade/common/constant/OldSystemDataPushConfig.java
  2. 54
      blade-biz-common/src/main/java/org/springblade/common/constant/WorkNodeEnums.java
  3. 4
      blade-biz-common/src/main/java/org/springblade/common/constant/factorydata/FactoryDataConstants.java
  4. 46
      blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataOpenIncomingSettingEntity.java
  5. 11
      blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/vo/BasicdataOpenIncomingSettingVO.java
  6. 1
      blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionBillOrderPackVO.java
  7. 7
      blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionSignforStockArticleVO.java
  8. 44
      blade-service-api/logpm-factory-data-api/src/main/java/com/logpm/factorydata/enums/NodeEnums.java
  9. 32
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/controller/BasicdataFactoryCategoryController.java
  10. 109
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/controller/BasicdataOpenIncomingController.java
  11. 12
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/dto/BasicdataOpenIncomingDTO.java
  12. 17
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataOpenIncomingSettingMapper.java
  13. 30
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataOpenIncomingSettingMapper.xml
  14. 15
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/IBasicdataOpenIncomingSettingService.java
  15. 47
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataOpenIncomingSettingServiceImpl.java
  16. 5
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionSignforController.java
  17. 40
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/DistributionStockArticleOweDTO.java
  18. 40
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockArticleMapper.xml
  19. 7
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistrilbutionBillStockMapper.xml
  20. 4
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java
  21. 12
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionClientMessageServiceImpl.java
  22. 5
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryInfoServiceImpl.java
  23. 78
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java
  24. 1
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionReservationServiceImpl.java
  25. 162
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java
  26. 4
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockArticleServiceImpl.java
  27. 3
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockListServiceImpl.java
  28. 27
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/dto/orderPackageDTO.java
  29. 69
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbFactoryNodeOrderEntity.java
  30. 32
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.java
  31. 5
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.xml
  32. 8
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.java
  33. 18
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.xml
  34. 285
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomNodeDataPushListener.java
  35. 33
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IFactoryNodeOrderService.java
  36. 7
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IOrderPackageService.java
  37. 61
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/impl/FactoryNodeOrderServiceImpl.java
  38. 12
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/impl/OrderPackageServiceImpl.java
  39. 136
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/util/QmSignService.java
  40. 16
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/util/QmSignUntil.java
  41. 52
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/vo/OrderPackageSignDTO.java
  42. 1
      blade-service/logpm-report/pom.xml
  43. 6
      blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/InLibraryDeliverServiceImpl.java
  44. 5
      blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/IndexCountServiceImpl.java
  45. 78
      blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java
  46. 2
      blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/dto/WaybillDTO.java
  47. 13
      blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/WarehouseWaybillServiceImpl.java

6
blade-biz-common/src/main/java/org/springblade/common/constant/OldSystemDataPushConfig.java

@ -60,6 +60,12 @@ public class OldSystemDataPushConfig {
// 阳春仓
warehourseIds.add("150");
//宜昌
warehourseIds.add("45");
// 大竹
warehourseIds.add("37");
}

54
blade-biz-common/src/main/java/org/springblade/common/constant/WorkNodeEnums.java

@ -0,0 +1,54 @@
package org.springblade.common.constant;
import lombok.Getter;
import java.io.Serializable;
/**
* 作业节点枚举
*
* @author zhaoqiaobo
* @create 2024-03-20 15:19
*/
@Getter
public enum WorkNodeEnums implements Serializable {
INITIAL_DATA_ENTRY(10, "数据入库"),
INITIAL_WAREHOUSE_ENTRY(20, "始发仓入库"),
BILLING(30, "开单"),
INITIAL_WAREHOUSE_LOADING(40, "始发仓装车"),
CANCEL_INITIAL_WAREHOUSE_LOADING(50, "始发仓取消装车"),
INITIAL_WAREHOUSE_DEPART(60, "始发仓发车"),
CANCEL_INITIAL_WAREHOUSE_DEPART(70, "始发仓取消发车"),
NET_ARRIVE_CAR(80,"网点到车"),
CANCEL_NET_ARRIVE_CAR(90,"网点取消到车"),
UNLOAD_INCOMING_WAREHOUSE(100,"卸车入库"),
TRANSFER_WAREHOUSE_UNLOADING(110, "网点卸车确认"),
TRANSFER_WAREHOUSE_DEPART(120, "网点发车"),
CANEL_TRANSFER_WAREHOUSE_DEPART(130, "网点取消发车"),
FINAL_NET_ARRIVE_CAR(140,"终点到车"),
CANCEL_FINAL_NET_ARRIVE_CAR(150,"终点取消到车"),
SIGN_DIRECT_SHIPPER(160,"直发商家签收"),
END_WAREHOUSE_UNLOADING(170, "末端仓卸车确认"),
TRIPARTITE_TRANSFER_DEPART(180, "三方中转发车"),
CANCEL_TRIPARTITE_TRANSFER_DEPART(190, "三方中转取消发车"),
ARRICE_TRIPARTITE_TRANSFER_DEPART(200, "三方中转到达"),
sign_TRIPARTITE_TRANSFER_DEPART(210, "三方中转签收"),
SORTING_TRAYS(220, "分拣打托"),
UN_SORTING_TRAYS(230, "包件解托"),
PUTAWAY(240, "上架"),
DELIST(250, "下架"),
STOCKING_OPERATION(260, "备货作业"),
DISTRIBUTION_LOADING(270, "配送装车"),
DISTRIBUTION_SIGN_FOR(280, "配送签收"),
CLERK_REVIEW(290, "文员复核");
private Integer code;
private String value;
WorkNodeEnums(Integer code, String value) {
this.code = code;
this.value = value;
}
}

4
blade-biz-common/src/main/java/org/springblade/common/constant/factorydata/FactoryDataConstants.java

@ -9,6 +9,9 @@ package org.springblade.common.constant.factorydata;
public abstract class FactoryDataConstants {
public interface Mq {
String DELAYED = "true";
/**
* 定义交换机
*/
@ -18,6 +21,7 @@ public abstract class FactoryDataConstants {
* 作业节点数据推送
*/
String NODE_DATA_PUSH = "factory.data.exchange.topic.nodeDataPush";
String NODE_DATA_PUSH_DELAYED = "factory.data.exchange.topic.nodeDataPushDelayed";
/**
* 工厂订单数据
*/

46
blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataOpenIncomingSettingEntity.java

@ -0,0 +1,46 @@
package com.logpm.basicdata.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.tenant.mp.TenantEntity;
@Data
@TableName("logpm_basicdata_open_incoming")
@ApiModel(value = "BasicdataOpenIncomingSetting对象", description = "开单及入库设置表")
@EqualsAndHashCode(callSuper = true)
public class BasicdataOpenIncomingSettingEntity extends TenantEntity {
/**
* 预留1
*/
@ApiModelProperty(value = "预留1")
private String reserve1;
/**
* 预留2
*/
@ApiModelProperty(value = "预留2")
private String reserve2;
/**
* 预留3
*/
@ApiModelProperty(value = "预留3")
private String reserve3;
/**
* 预留4
*/
@ApiModelProperty(value = "预留4")
private String reserve4;
/**
* 预留5
*/
@ApiModelProperty(value = "预留5")
private String reserve5;
private Long warehouseId;
private String brand;
}

11
blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/vo/BasicdataOpenIncomingSettingVO.java

@ -0,0 +1,11 @@
package com.logpm.basicdata.vo;
import com.logpm.basicdata.entity.BasicdataOpenIncomingSettingEntity;
import lombok.Data;
@Data
public class BasicdataOpenIncomingSettingVO extends BasicdataOpenIncomingSettingEntity {
private String warehouseName;
}

1
blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionBillOrderPackVO.java

@ -29,6 +29,7 @@ public class DistributionBillOrderPackVO {
private String sendWarehouseName; //客户车次号
private String orderCode; //始发仓
private String stockupStatusName; //备货状态名称
private String orderStatusName; //包件状态
private String stockupConsignee; //提货人员
private String stockupPickUpPlate; //提货车牌
private String stockupConditions; //提货状态

7
blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionSignforStockArticleVO.java

@ -206,6 +206,13 @@ public class DistributionSignforStockArticleVO implements Serializable {
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 签收扫描时间
*/
@ApiModelProperty(value = "签收扫描时间")
private Date scanSigningTime;
/**
* 创建时间
*/

44
blade-service-api/logpm-factory-data-api/src/main/java/com/logpm/factorydata/enums/NodeEnums.java

@ -13,21 +13,35 @@ import java.io.Serializable;
@Getter
public enum NodeEnums implements Serializable {
INITIAL_WAREHOUSE_ENTRY(10, "始发仓入库"),
BILLING(20, "开单"),
INITIAL_WAREHOUSE_LOADING(30, "始发仓装车"),
INITIAL_WAREHOUSE_DEPART(40, "始发仓发车"),
TRANSFER_WAREHOUSE_UNLOADING(50, "中转仓卸车确认"),
TRANSFER_WAREHOUSE_DEPART(60, "中转仓发车"),
END_WAREHOUSE_UNLOADING(70, "末端仓卸车确认"),
TRIPARTITE_TRANSFER_DEPART(75, "三方中转发车"),
SORTING_TRAYS(80, "分拣打托"),
PUTAWAY(90, "上架"),
STOCKING_OPERATION(100, "备货作业"),
DELIST(110, "下架"),
DISTRIBUTION_LOADING(120, "配送装车"),
DISTRIBUTION_SIGN_FOR(130, "配送签收"),
CLERK_REVIEW(140, "文员复核");
INITIAL_DATA_ENTRY(10, "数据入库"),
INITIAL_WAREHOUSE_ENTRY(20, "始发仓入库"),
BILLING(30, "开单"),
INITIAL_WAREHOUSE_LOADING(40, "始发仓装车"),
CANCEL_INITIAL_WAREHOUSE_LOADING(50, "始发仓取消装车"),
INITIAL_WAREHOUSE_DEPART(60, "始发仓发车"),
CANCEL_INITIAL_WAREHOUSE_DEPART(70, "始发仓取消发车"),
NET_ARRIVE_CAR(80,"网点到车"),
CANCEL_NET_ARRIVE_CAR(90,"网点取消到车"),
UNLOAD_INCOMING_WAREHOUSE(100,"卸车入库"),
TRANSFER_WAREHOUSE_UNLOADING(110, "网点卸车确认"),
TRANSFER_WAREHOUSE_DEPART(120, "网点发车"),
CANEL_TRANSFER_WAREHOUSE_DEPART(130, "网点取消发车"),
FINAL_NET_ARRIVE_CAR(140,"终点到车"),
CANCEL_FINAL_NET_ARRIVE_CAR(150,"终点取消到车"),
SIGN_DIRECT_SHIPPER(160,"直发商家签收"),
END_WAREHOUSE_UNLOADING(170, "末端仓卸车确认"),
TRIPARTITE_TRANSFER_DEPART(180, "三方中转发车"),
CANCEL_TRIPARTITE_TRANSFER_DEPART(190, "三方中转取消发车"),
ARRICE_TRIPARTITE_TRANSFER_DEPART(200, "三方中转到达"),
sign_TRIPARTITE_TRANSFER_DEPART(210, "三方中转签收"),
SORTING_TRAYS(220, "分拣打托"),
UN_SORTING_TRAYS(230, "包件解托"),
PUTAWAY(240, "上架"),
DELIST(250, "下架"),
STOCKING_OPERATION(260, "备货作业"),
DISTRIBUTION_LOADING(270, "配送装车"),
DISTRIBUTION_SIGN_FOR(280, "配送签收"),
CLERK_REVIEW(290, "文员复核");
private Integer code;
private String value;

32
blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/controller/BasicdataFactoryCategoryController.java

@ -28,7 +28,7 @@ public class BasicdataFactoryCategoryController extends BladeController {
@ResponseBody
@PostMapping("/pageList")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "提货单列表", notes = "传入basicdataFactoryCategoryDTO")
@ApiOperation(value = "工厂物料列表", notes = "传入basicdataFactoryCategoryDTO")
public R pageList(@RequestBody BasicdataFactoryCategoryDTO basicdataFactoryCategoryDTO) {
String method = "############pageList: ";
log.info(method+"请求参数{}",basicdataFactoryCategoryDTO);
@ -40,8 +40,8 @@ public class BasicdataFactoryCategoryController extends BladeController {
log.error(e.message,e);
return R.fail(e.code,e.message);
}catch (Exception e){
log.error("############sendOrders: 系统异常",e);
return R.fail(500,"############sendOrders: 系统异常");
log.error(method+"系统异常",e);
return R.fail(500,method+"系统异常");
}
}
@ -49,7 +49,7 @@ public class BasicdataFactoryCategoryController extends BladeController {
@ResponseBody
@PostMapping("/save")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "提货单列表", notes = "传入basicdataFactoryCategoryDTO")
@ApiOperation(value = "新增工厂物料", notes = "传入basicdataFactoryCategoryDTO")
public R save(@RequestBody BasicdataFactoryCategoryDTO basicdataFactoryCategoryDTO) {
String method = "############save: ";
log.info(method+"请求参数{}",basicdataFactoryCategoryDTO);
@ -59,8 +59,28 @@ public class BasicdataFactoryCategoryController extends BladeController {
log.error(e.message,e);
return R.fail(e.code,e.message);
}catch (Exception e){
log.error("############sendOrders: 系统异常",e);
return R.fail(500,"############sendOrders: 系统异常");
log.error(method+"系统异常",e);
return R.fail(500,method+"系统异常");
}
}
@ResponseBody
@PostMapping("/remove")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "移除工厂物料", notes = "传入basicdataFactoryCategoryDTO")
public R remove(@RequestBody BasicdataFactoryCategoryDTO basicdataFactoryCategoryDTO) {
String method = "############remove: ";
log.info(method+"请求参数{}",basicdataFactoryCategoryDTO);
Long factoryCategoryId = basicdataFactoryCategoryDTO.getId();
try{
return R.status(basicdataFactoryCategoryService.removeById(factoryCategoryId));
}catch (CustomerException e){
log.error(e.message,e);
return R.fail(e.code,e.message);
}catch (Exception e){
log.error(method+"系统异常",e);
return R.fail(500,method+"系统异常");
}
}

109
blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/controller/BasicdataOpenIncomingController.java

@ -0,0 +1,109 @@
package com.logpm.basicdata.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.logpm.basicdata.dto.BasicdataOpenIncomingDTO;
import com.logpm.basicdata.service.IBasicdataOpenIncomingSettingService;
import com.logpm.basicdata.vo.BasicdataOpenIncomingSettingVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.common.exception.CustomerException;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.web.bind.annotation.*;
import java.util.Objects;
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("/openIncoming")
@Api(value = "开单及入库", tags = "开单及入库配置接口")
public class BasicdataOpenIncomingController {
private final IBasicdataOpenIncomingSettingService basicdataOpenIncomingSettingService;
@ResponseBody
@PostMapping("/pageList")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "开单及入库配置表", notes = "传入basicdataOpenIncomingDTO")
public R pageList(@RequestBody BasicdataOpenIncomingDTO basicdataOpenIncomingDTO) {
String method = "############pageList: ";
log.info(method+"请求参数{}",basicdataOpenIncomingDTO);
try{
IPage<BasicdataOpenIncomingSettingVO> pages = basicdataOpenIncomingSettingService.pageList(basicdataOpenIncomingDTO);
return R.data(pages);
}catch (CustomerException e){
log.error(e.message,e);
return R.fail(e.code,e.message);
}catch (Exception e){
log.error(method+"系统异常",e);
return R.fail(500,method+"系统异常");
}
}
@ResponseBody
@PostMapping("/addEntity")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "新增开单及入库配置", notes = "传入basicdataOpenIncomingDTO")
public R addEntity(@RequestBody BasicdataOpenIncomingDTO basicdataOpenIncomingDTO) {
String method = "############addEntity: ";
log.info(method+"请求参数{}",basicdataOpenIncomingDTO);
try{
String brand = basicdataOpenIncomingDTO.getBrand();
Long warehouseId = basicdataOpenIncomingDTO.getWarehouseId();
if(StringUtil.isBlank(brand)){
log.warn(method+"品牌不能为空");
return R.fail(405,"品牌不能为空");
}
if(Objects.isNull(warehouseId)){
log.warn(method+"仓库不能为空");
return R.fail(405,"仓库不能为空");
}
return basicdataOpenIncomingSettingService.addEntity(basicdataOpenIncomingDTO);
}catch (CustomerException e){
log.error(e.message,e);
return R.fail(e.code,e.message);
}catch (Exception e){
log.error(method+"系统异常",e);
return R.fail(500,method+"系统异常");
}
}
@ResponseBody
@PostMapping("/remove")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "移除开单及入库配置", notes = "传入basicdataOpenIncomingDTO")
public R remove(@RequestBody BasicdataOpenIncomingDTO basicdataOpenIncomingDTO) {
String method = "############addEntity: ";
log.info(method+"请求参数{}",basicdataOpenIncomingDTO);
try{
String brand = basicdataOpenIncomingDTO.getBrand();
Long warehouseId = basicdataOpenIncomingDTO.getWarehouseId();
if(StringUtil.isBlank(brand)){
log.warn(method+"品牌不能为空");
return R.fail(405,"品牌不能为空");
}
if(Objects.isNull(warehouseId)){
log.warn(method+"仓库不能为空");
return R.fail(405,"仓库不能为空");
}
return basicdataOpenIncomingSettingService.addEntity(basicdataOpenIncomingDTO);
}catch (CustomerException e){
log.error(e.message,e);
return R.fail(e.code,e.message);
}catch (Exception e){
log.error(method+"系统异常",e);
return R.fail(500,method+"系统异常");
}
}
}

12
blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/dto/BasicdataOpenIncomingDTO.java

@ -0,0 +1,12 @@
package com.logpm.basicdata.dto;
import com.logpm.basicdata.entity.BasicdataOpenIncomingSettingEntity;
import lombok.Data;
@Data
public class BasicdataOpenIncomingDTO extends BasicdataOpenIncomingSettingEntity {
private Integer pageSize;
private Integer pageNum;
}

17
blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataOpenIncomingSettingMapper.java

@ -0,0 +1,17 @@
package com.logpm.basicdata.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.logpm.basicdata.dto.BasicdataOpenIncomingDTO;
import com.logpm.basicdata.entity.BasicdataOpenIncomingSettingEntity;
import com.logpm.basicdata.vo.BasicdataOpenIncomingSettingVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface BasicdataOpenIncomingSettingMapper extends BaseMapper<BasicdataOpenIncomingSettingEntity> {
IPage<BasicdataOpenIncomingSettingVO> pageList(IPage<Object> page, @Param("param") BasicdataOpenIncomingDTO basicdataOpenIncomingDTO);
BasicdataOpenIncomingSettingEntity findEntityByParam(@Param("param") BasicdataOpenIncomingDTO basicdataOpenIncomingDTO);
}

30
blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataOpenIncomingSettingMapper.xml

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.logpm.basicdata.mapper.BasicdataOpenIncomingSettingMapper">
<select id="pageList" resultType="com.logpm.basicdata.vo.BasicdataOpenIncomingSettingVO">
select lboi.brand brand,
lww.name warehouseName
from logpm_basicdata_open_incoming lboi
left join logpm_warehouse_warehouse lww on lww.id = lboi.warehouse_id
where 1=1
and lboi.is_deleted = 0
<if test="param.warehouseId != null">
and lboi.warehouse_id = #{param.warehouseId}
</if>
<if test="param.brand != null and param.brand != ''">
and lboi.brand = #{param.brand}
</if>
</select>
<select id="findEntityByParam" resultType="com.logpm.basicdata.entity.BasicdataOpenIncomingSettingEntity">
select *
from logpm_basicdata_open_incoming
where 1=1
and is_deleted = 0
and warehouse_id = #{param.warehouseId}
and brand = #{param.brand}
</select>
</mapper>

15
blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/IBasicdataOpenIncomingSettingService.java

@ -0,0 +1,15 @@
package com.logpm.basicdata.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.logpm.basicdata.dto.BasicdataOpenIncomingDTO;
import com.logpm.basicdata.entity.BasicdataOpenIncomingSettingEntity;
import com.logpm.basicdata.vo.BasicdataOpenIncomingSettingVO;
import org.springblade.core.mp.base.BaseService;
import org.springblade.core.tool.api.R;
public interface IBasicdataOpenIncomingSettingService extends BaseService<BasicdataOpenIncomingSettingEntity> {
IPage<BasicdataOpenIncomingSettingVO> pageList(BasicdataOpenIncomingDTO basicdataOpenIncomingDTO);
R addEntity(BasicdataOpenIncomingDTO basicdataOpenIncomingDTO);
}

47
blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataOpenIncomingSettingServiceImpl.java

@ -0,0 +1,47 @@
package com.logpm.basicdata.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.logpm.basicdata.dto.BasicdataOpenIncomingDTO;
import com.logpm.basicdata.entity.BasicdataOpenIncomingSettingEntity;
import com.logpm.basicdata.mapper.BasicdataOpenIncomingSettingMapper;
import com.logpm.basicdata.service.IBasicdataOpenIncomingSettingService;
import com.logpm.basicdata.vo.BasicdataOpenIncomingSettingVO;
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springblade.common.exception.CustomerException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.api.R;
import org.springframework.stereotype.Service;
import java.util.Objects;
@Service
@AllArgsConstructor
@Log4j2
public class BasicdataOpenIncomingSettingServiceImpl extends BaseServiceImpl<BasicdataOpenIncomingSettingMapper, BasicdataOpenIncomingSettingEntity> implements IBasicdataOpenIncomingSettingService {
@Override
public IPage<BasicdataOpenIncomingSettingVO> pageList(BasicdataOpenIncomingDTO basicdataOpenIncomingDTO) {
IPage<Object> page = new Page<>();
page.setCurrent(basicdataOpenIncomingDTO.getPageNum());
page.setSize(basicdataOpenIncomingDTO.getPageSize());
IPage<BasicdataOpenIncomingSettingVO> pageList = baseMapper.pageList(page,basicdataOpenIncomingDTO);
return pageList;
}
@Override
public R addEntity(BasicdataOpenIncomingDTO basicdataOpenIncomingDTO) {
BasicdataOpenIncomingSettingEntity basicdataOpenIncomingSettingEntity = baseMapper.findEntityByParam(basicdataOpenIncomingDTO);
if(!Objects.isNull(basicdataOpenIncomingSettingEntity)){
log.warn("############addEntity: 配置已存在");
return R.fail(405,"配置已存在");
}
save(basicdataOpenIncomingDTO);
return R.success("新增成功");
}
}

5
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionSignforController.java

@ -464,7 +464,10 @@ public class DistributionSignforController extends BladeController {
@ApiOperationSupport(order = 7)
@ApiOperation(value = "PC下载签收图片", notes = "传入ids")
public void handlePicture(@RequestParam String ids,HttpServletResponse res) {
distributionSignforService.handlePicture(ids,res);
if(StringUtils.isNotBlank(ids)){
distributionSignforService.handlePicture(ids,res);
}
}

40
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/DistributionStockArticleOweDTO.java

@ -1,9 +1,11 @@
package com.logpm.distribution.dto;
import com.logpm.distribution.entity.DistributionStockArticleEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import java.util.List;
/**
@ -35,5 +37,43 @@ public class DistributionStockArticleOweDTO extends DistributionStockArticleEnti
private String startDate;
private String entDate;
private String signinTime;
/**
* 入库时间起始
*/
@ApiModelProperty(value = "复核时间起始")
private Date signingTimeStart;
/**
* 入库时间结束
*/
@ApiModelProperty(value = "复核时间结束")
private Date signingTimeEnd;
/**
* 入库时间起始
*/
@ApiModelProperty(value = "签收扫描时间区间起始")
private Date scanSigningTimeStart;
/**
* 扫描时间
*/
@ApiModelProperty(value = "扫描时间")
private Date scanSigningTime;
/**
* 入库时间结束
*/
@ApiModelProperty(value = "签收扫描时间区间结束")
private Date scanSigningTimeEnd;
/**
* 入库时间起始
*/
@ApiModelProperty(value = "入库时间起始")
private Date warehouseEntryTimeStart;
/**
* 入库时间结束
*/
@ApiModelProperty(value = "入库时间结束")
private Date warehouseEntryTimeEnd;
private List<Long> warehouseIdList;
}

40
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockArticleMapper.xml

@ -1161,7 +1161,8 @@
GROUP_CONCAT(DISTINCT IFNULL( m.driverName,'')) AS driverName,
GROUP_CONCAT(DISTINCT IFNULL( m.vehicleName,'')) AS vehicleName,
GROUP_CONCAT(DISTINCT IFNULL( m.examine_user_name,'')) AS examineUserNames,
k.earliestWarehouseEntryTime AS earliestWarehouseEntryTime
k.earliestWarehouseEntryTime AS earliestWarehouseEntryTime,
j.scanSigningTime AS scanSigningTime
FROM
logpm_distribution_stock_article AS ldsa
LEFT JOIN (
@ -1191,7 +1192,7 @@
CONCAT( lds.examine_user_name ) AS examine_user_name,
CONCAT( lddl.driver_name ) AS driverName,
CONCAT( lddl.vehicle_name ) AS vehicleName,
lds.signing_time
MAX(lds.signing_time) AS signing_time
FROM
logpm_distribution_reservation_stockarticle AS ldrs
LEFT JOIN logpm_distribution_reservation ldr ON ldrs.reservation_id = ldr.id
@ -1200,8 +1201,10 @@
LEFT JOIN
logpm_distribution_signfor As lds ON lds.reservation_id = ldr.id
LEFT JOIN logpm_distribution_delivery_list AS lddl ON lds.delivery_id = lddl.id
GROUP BY ldr.id
) AS m ON ldsa.id = m.stock_article_id AND t.reservation_id = m.reservation_id
LEFT JOIN ( SELECT stock_article_id, min( create_time ) AS earliestWarehouseEntryTime FROM logpm_distribution_parcel_list) AS k ON k.stock_article_id = ldsa.id
LEFT JOIN ( SELECT stock_article_id, min( create_time ) AS earliestWarehouseEntryTime FROM logpm_distribution_parcel_list GROUP BY stock_article_id) AS k ON k.stock_article_id = ldsa.id
LEFT JOIN ( SELECT order_id, max( signing_time ) AS scanSigningTime FROM logpm_distribution_loadscan WHERE scan_status != 1 AND signfor_state = 2 GROUP BY order_id ) AS j ON j.order_id = ldsa.id
<where>
ldsa.order_status in ('70','80')
<if test="param.waybillNumber != null and param.waybillNumber != ''">
@ -1246,19 +1249,19 @@
</if>
<if test="param.warehouseIdList != null and param.warehouseId != ''">
AND ldsa.warehouse_id IN
<foreach collection="param.warehouseIdList" item="item" index="index" open="AND ldsa.warehouse_id in (" close=")" separator=",">
<foreach collection="param.warehouseIdList" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="param.orderCodeNumList != null and param.orderCodeNumList != ''">
AND ldsa.order_code in
<foreach collection="param.orderCodeNumList" item="item" index="index" open="AND ldsa.warehouse_id in (" close=")" separator=",">
<foreach collection="param.orderCodeNumList" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="param.waybillNumList != null and param.waybillNumList != ''">
AND ldsa.waybill_number in
<foreach collection="param.waybillNumList" item="item" index="index" open="AND ldsa.warehouse_id in (" close=")" separator=",">
<foreach collection="param.waybillNumList" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
@ -1277,10 +1280,27 @@
<if test=" param.earliestWarehouseEntryTime != null ">and DATE(k.earliestWarehouseEntryTime) =
#{param.earliestWarehouseEntryTime}
</if>
<!-- <if test=" param.warehouseEntryTimeEnd != null ">and DATE(ldsa.warehouse_entry_time) =-->
<!-- #{param.warehouseEntryTimeEnd}-->
<!-- </if>-->
<if test=" param.scanSigningTime != null ">and DATE(j.scanSigningTime) =
#{param.scanSigningTime}
</if>
<if test=" param.warehouseEntryTimeStart != null ">and DATE(k.earliestWarehouseEntryTime) &gt;
#{param.warehouseEntryTimeStart}
</if>
<if test=" param.warehouseEntryTimeEnd != null ">and DATE(k.earliestWarehouseEntryTime) &lt;
#{param.warehouseEntryTimeEnd}
</if>
<if test=" param.signingTimeStart != null ">and DATE(m.signing_time) &gt;
#{param.signingTimeStart}
</if>
<if test=" param.signingTimeEnd != null ">and DATE(m.signing_time) &lt;
#{param.signingTimeEnd}
</if>
<if test=" param.scanSigningTimeStart != null ">and DATE(j.scanSigningTime) &gt;
#{param.scanSigningTimeStart}
</if>
<if test=" param.scanSigningTimeEnd != null ">and DATE(j.scanSigningTime) &lt;
#{param.scanSigningTimeEnd}
</if>
</where>
GROUP BY
ldsa.id

7
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistrilbutionBillStockMapper.xml

@ -174,6 +174,13 @@
when lds.id is null then '未备货'
else '已备货'
end as stockupStatusName,
CASE ldpl.order_package_status
WHEN '70' THEN '已签收'
WHEN '20' THEN '已入库'
WHEN '60' THEN '已出库'
ELSE
'未签收'
END orderStatusName,
lds.create_time stockupCreateTime,
ldbl.consignee stockupConsignee,
ldbl.pick_up_plate stockupPickUpPlate,

4
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java

@ -1539,7 +1539,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService {
@Transactional(rollbackFor = Exception.class)
@Async
public void sendReviewFactory(Long signingId, String warehouseName, Long warehouseId) {
String brands = "梦天,欧派";//可追加 ,志邦
String brands = "梦天,欧派,志邦";//可追加
log.info(">>>>>>>>>>> 签收推送 对象 {}", "signingId:=" + signingId + "warehouseName:=" + warehouseName + "warehouseId:=" + warehouseId);
//查询签收信息
DistributionSignforEntity distributionSignforEntity = distributionSignforMapper.selectById(signingId);
@ -1657,7 +1657,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService {
NodePushMsg msg = new NodePushMsg();
msg.setNode(NodeEnums.CLERK_REVIEW);
msg.setBrand(BrandEnums.ZB);
msg.setOperator(AuthUtil.getUser().getNickName());
msg.setOperator(distributionSignforEntity.getDeliveryDriverName());
msg.setOperatorTime(new Date());
msg.setContent(contents);
log.info("推送工厂数据:{}", JSONUtil.toJsonStr(msg));

12
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionClientMessageServiceImpl.java

@ -78,18 +78,6 @@ public class DistributionClientMessageServiceImpl extends BaseServiceImpl<Distri
}
for (String s : split) {
//修改在库记录的地址
// List<DistributionStockArticleEntity> list = distributionStockArticleService.list(Wrappers.<DistributionStockArticleEntity>query().lambda()
// .eq(DistributionStockArticleEntity::getId, s)
// );
// DistributionStockArticleEntity distributionStockArticleEntity = list.get(0);
// distributionStockArticleEntity.setCustomerName(distributionClientMessage.getName());
// distributionStockArticleEntity.setCustomerTelephone(distributionClientMessage.getPhone());
// distributionStockArticleEntity.setCustomerAddress(distributionClientMessage.getAddress());
// distributionStockArticleService.updateById(distributionStockArticleEntity);
// DistributionClientMessageEntity distributionClientMessageEntity = new DistributionClientMessageEntity();
// BeanUtils.copyProperties(distributionClientMessage,distributionClientMessageEntity);
// distributionClientMessageEntity.setStockArticleId(s);
// this.save(distributionClientMessageEntity);
DistributionStockArticleEntity oldStockArticle = distributionStockArticleService.getById(Long.parseLong(s));
DistributionStockArticleEntity newStockArticle = new DistributionStockArticleEntity();
BeanUtil.copy(oldStockArticle,newStockArticle);

5
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryInfoServiceImpl.java

@ -115,7 +115,10 @@ public class DistributionDeliveryInfoServiceImpl extends BaseServiceImpl<Distrib
List<DistributionParcelListVO> parcelListVOS = DistributionParcelListWrapper.build().listVO(parcelListEntityList);
parcelListVOS.forEach(p -> {
//查询扫描表,
DistributionLoadscanEntity loadscanEntity = distributionLoadscanService.getOne(Wrappers.<DistributionLoadscanEntity>query().lambda().eq(DistributionLoadscanEntity::getPackageId, p.getId()).eq(DistributionLoadscanEntity::getOrderPackageCode, p.getOrderPackageCode()));
DistributionLoadscanEntity loadscanEntity = distributionLoadscanService.getOne(Wrappers.<DistributionLoadscanEntity>query().lambda()
.eq(DistributionLoadscanEntity::getPackageId, p.getId())
.eq(DistributionLoadscanEntity::getOrderPackageCode, p.getOrderPackageCode())
);
if (Func.isNotEmpty(loadscanEntity)) {
try {
p.setLoadingTime(loadscanEntity.getScanTime());

78
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java

@ -559,7 +559,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
DistributionDeliveryListEntity distributionDeliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId());
//异步确认包条扫描信息
// distributionAsyncService.changeOrderSignforStatus(distrilbutionloadingscanDTO.getBarcode());
List<Long> packageLockIds = new ArrayList<>();
DistributionDeliverySelfEntity distributionDeliverySelfEntity = new DistributionDeliverySelfEntity();
if ("1".equals(distributionDeliveryListEntity.getKind())) {
if (!Objects.isNull(distrilbutionloadingscanDTO.getLoadingId())) {
@ -655,6 +655,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
loadscanEntity.setLoadedNub(parcelListEntity.getQuantity());
distributionLoadscanService.save(loadscanEntity);
//更新包件装车状态
packageLockIds.add(loadscanEntity.getPackageId());
parcelListEntity.setOrderPackageLoadingStatus(OrderPackageLoadingStatusConstant.yizhuangche.getValue());
parcelListEntity.setOrderPackageGroundingStatus(OrderPackageGroundingStatusConstant.daishangjia.getValue());
parcelListEntity.setOrderPackageStatus(OrderPackageStatusConstant.yichuku.getValue());
@ -832,6 +833,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
orderPackageCodes.add(parcelListEntity.getOrderPackageCode());
parcelListEntity.setOrderPackageLoadingStatus(OrderPackageLoadingStatusConstant.yizhuangche.getValue());
distributionParcelListService.updateById(parcelListEntity);
packageLockIds.add(loadscanEntity.getPackageId());
}
}
distributionLoadscanService.saveBatch(reservationLoadscanEntities);
@ -867,6 +869,22 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
return Resp.scanFail("查询托盘货物失败", "查询托盘货物失败");
}
}
//添加缓存
if (!packageLockIds.isEmpty()){
List<Long> a = bladeRedis.get("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:");
if (Func.isNotEmpty(a)){
boolean flag = a.stream().anyMatch(any -> packageLockIds.contains(any));
if (flag){
//正在操作,请稍后重试
throw new RuntimeException("该包件正在被操作,请稍后再试!!!");
}else {
packageLockIds.addAll(a);
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:",packageLockIds,60L);
}
}else {
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:" ,packageLockIds,60L);
}
}
//查询已装车件数
// String str = getLoadingMsg(distrilbutionloadingscanDTO);
@ -1956,6 +1974,10 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
@Override
@Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
public Resp loadinginventory(DistrilbutionloadingscanDTO distrilbutionloadingscanDTO) {
BasicdataWarehouseEntity myCurrentWarehouse = warehouseClient.getMyCurrentWarehouse();
if (Func.isEmpty(myCurrentWarehouse)){
return Resp.scanFail("未授权","未授权!!!");
}
//库存品
//获取当前用户司机
DistributionDeliveryListEntity distributionDeliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId());
@ -1966,6 +1988,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
DistributionDeliveryTripartiteEntity distributionDeliveryTripartiteEntity = distributionDeliveryTripartiteMapper.selectById(distrilbutionloadingscanDTO.getLoadingId());
BeanUtils.copyProperties(distributionDeliveryTripartiteEntity, distributionDeliverySelfEntity);
}
List<Long> packageLockIds = new ArrayList<>();
//根据传递进来的库存品条码进行库存品的校验
//获取之前的
@ -1990,6 +2013,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
disStockListDetailEntity.setStockLockingStatus(OrderPackageLoadingStatusConstant.yizhuangche.getValue());
disStockListDetailService.updateById(disStockListDetailEntity);
DistributionLoadscaninvnEntity distributionLoadscaninvnEntity = getDistributionLoadscaninvnEntity(distrilbutionloadingscanDTO, distributionDeliverySelfEntity, disStockListDetailEntities);
packageLockIds.add(distributionLoadscaninvnEntity.getInventoryPackageId());
distributionLoadscaninvnService.save(distributionLoadscaninvnEntity);
//查询本车次是否第一次扫码,没有则更新上车时间
Integer a = distributionDeliveryListMapper.updateloadingTimeById(distributionLoadscaninvnEntity.getDeliveryId());
@ -2018,6 +2042,21 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
}
}
}
if (!packageLockIds.isEmpty()){
List<Long> a = bladeRedis.get("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:");
if (Func.isNotEmpty(a)){
boolean flag = a.stream().anyMatch(any -> packageLockIds.contains(any));
if (flag){
//正在操作,请稍后重试
throw new RuntimeException("该包件正在被操作,请稍后再试!!!");
}else {
packageLockIds.addAll(a);
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:",packageLockIds,60L);
}
}else {
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:" ,packageLockIds,60L);
}
}
String msg = getLoadingMsg(distrilbutionloadingscanDTO);
return Resp.scanSuccess("扫描成功", msg);
}
@ -5332,6 +5371,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
log.error("配送计划null:{}", deliveryListEntity);
return Resp.scanFail("操作失败", "服务器正忙...");
}
List<Long> packageLockIds = new ArrayList<>();
List<DistributionParcelListEntity> parcelListEntities = distributionParcelListService.list(Wrappers.<DistributionParcelListEntity>query().lambda()
.eq(DistributionParcelListEntity::getOrderPackageCode, distrilbutionloadingscanDTO.getBarcode())
.eq(DistributionParcelListEntity::getWarehouseId, myCurrentWarehouse.getId())
@ -5464,7 +5504,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
Integer j = distributionSignforMapper.updateloadByReservationId(loadscanEntity.getDeliveryId(), loadscanEntity.getReservationId(), loadscanEntity.getPackageNub());
//维护订单信息
distributionStockArticleService.maintenanceOrderInfo(parcelListEntity.getOrderCode(), myCurrentWarehouse.getId());
packageLockIds.add(loadscanEntity.getPackageId());
DistributionSignforEntity signforEntity = distributionSignforService.getOne(Wrappers.<DistributionSignforEntity>query().lambda().eq(DistributionSignforEntity::getReservationId, reservationEntity.getId()).eq(DistributionSignforEntity::getDeliveryId, distrilbutionloadingscanDTO.getDeliveryId()));
if (Func.isNotEmpty(signforEntity)) {
//标识该客户存在异常装车包件,为了后续的异常装车审核
@ -5485,6 +5525,21 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
if (Func.isNotEmpty(abnormalLoadingPack)) {
abnormalTotal = abnormalLoadingPack.stream().mapToInt(DistributionLoadscanEntity::getLoadedNub).sum();
}
if (!packageLockIds.isEmpty()){
List<Long> a = bladeRedis.get("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:" );
if (Func.isNotEmpty(a)){
boolean flag = a.stream().anyMatch(any -> packageLockIds.contains(any));
if (flag){
//正在操作,请稍后重试
throw new RuntimeException("该包件正在被操作,请稍后再试!!!");
}else {
packageLockIds.addAll(a);
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:" ,packageLockIds,60L);
}
}else {
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:",packageLockIds,60L);
}
}
return Resp.scanSuccess("操作成功", "异常" + abnormalTotal + "件");
}
@ -5578,7 +5633,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
BeanUtils.copyProperties(distributionDeliveryTripartiteEntity, distributionDeliverySelfEntity);
}
String now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
List<Long> packageLockIds = new ArrayList<>();
if (Func.isNotEmpty(distrilbutionloadingscanDTO.getReservationId())) {
//查询该订单是否属于当前配送任务
List<DistributionReservationStockarticleEntity> reservationStockarticleEntityList = distributionReservationMapper.selectStockArticleByReservationId(distrilbutionloadingscanDTO.getReservationId());
@ -5699,6 +5754,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
// loadingNum.getAndAdd(loadscanEntity.getLoadedNub());
distributionAsyncService.checkZeroStockArticleLoadingStatus(parcelNumberEntity, loadscanEntity.getDeliveryId(), loadscanEntity.getReservationId());
// distributionAsyncService.checkLoadingByPackage(parcelListEntity,loadscanEntity.getDeliveryId(),loadscanEntity.getReservationId());
packageLockIds.add(loadscanEntity.getPackageId());
}
}
} else {
@ -5750,6 +5806,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
parcelNumberEntity.setHandQuantity(parcelNumberEntity.getHandQuantity() - parcelListDTO.getLoadingNum());
distributionParcelNumberService.updateById(parcelNumberEntity);
distributionAsyncService.checkZeroStockArticleLoadingStatus(parcelNumberEntity, loadscanEntity.getDeliveryId(), loadscanEntity.getReservationId());
packageLockIds.add(loadscanEntity.getPackageId());
}
// loadingNum.getAndAdd(loadscanEntity.getLoadedNub());
@ -5788,6 +5845,21 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
if (abnormalLoadingNum.get() > 0) {
str.append("异常").append(abnormalLoadingNum.get() + "件");
}
if (!packageLockIds.isEmpty()){
List<Long> a = bladeRedis.get("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:");
if (Func.isNotEmpty(a)){
boolean aaa = a.stream().anyMatch(any -> packageLockIds.contains(any));
if (aaa){
//正在操作,请稍后重试
throw new RuntimeException("该包件正在被操作,请稍后再试!!!");
}else {
packageLockIds.addAll(a);
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:" ,packageLockIds,60L);
}
}else {
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:",packageLockIds ,60L);
}
}
return Resp.scanSuccess("装车成功", str.toString());
}

1
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionReservationServiceImpl.java

@ -1532,6 +1532,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
List<DistributionParcelListEntity> distributionParcelListEntities = distributionParcelListService.list(Wrappers.<DistributionParcelListEntity>query().lambda().eq(DistributionParcelListEntity::getStockArticleId, distributionStockArticleDTO.getId())
.ne(DistributionParcelListEntity::getOrderPackageLoadingStatus, OrderPackageLoadingStatusConstant.yizhuangche.getValue())
.ne(DistributionParcelListEntity::getOrderPackageReservationStatus, OrderPackageReservationStatusConstant.yiyueyue.getValue())
.eq(DistributionParcelListEntity::getConditions, 1)
.notIn(DistributionParcelListEntity::getOrderPackageStatus, new String[]{OrderPackageStatusConstant.yichuku.getValue(), OrderPackageStatusConstant.yiqianshou.getValue()}));
distributionParcelListEntities.forEach(dp -> {
if (!dp.getOrderPackageStatus().equals(OrderPackageStatusConstant.yiqianshou.getValue())) {

162
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java

@ -77,6 +77,7 @@ import org.springblade.common.utils.CommonUtil;
import org.springblade.common.utils.FileUtil;
import org.springblade.common.utils.GaoDeApiUtil;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
@ -208,6 +209,9 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
@Autowired
private IUserClient userClient;
@Autowired
private BladeRedis bladeRedis;
@Override
public IPage<DistributionSignforVO> selectDistributionSignforPage(IPage<DistributionSignforVO> page, DistributionSignforVO distributionSignfor) {
@ -2059,7 +2063,11 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
if (Objects.isNull(myCurrentWarehouse)) {
return R.fail(403, "仓库信息不能为空");
}
DistributionDeliveryListEntity deliveryListEntity = distributionDeliveryListService.getById(distrilbutionloadingscanDTO.getDeliveryId());
if (Objects.isNull(myCurrentWarehouse)) {
return R.fail(403, "配送任务错误");
}
List<Long> packageLockIds = new ArrayList<>();
try {
nickName = AuthUtil.getNickName();
@ -2073,6 +2081,9 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
if (Func.isEmpty(parcelListEntity)) {
return Resp.scanFail("系统无编码", "系统无编码");
}
if (parcelListEntity.equals(OrderPackageStatusConstant.yiqianshou.getValue())){
return Resp.scanFail("包件已签收", "包件已签收");
}
DistributionReservationEntity distributionReservationEntity = distributionReservationMapper.selectById(distrilbutionloadingscanDTO.getReservationId());
if (Func.isEmpty(distributionReservationEntity)) {
log.error("########无效的预约单,reservationId:{}", distrilbutionloadingscanDTO.getReservationId());
@ -2111,7 +2122,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
loadscanEntity.setSigningTime(simpleDateFormat.format(new Date()));
loadscanEntity.setSignforState(2);
loadscanEntity.setReceivedQuantity(loadscanEntity.getLoadedNub());
packageLockIds.add(loadscanEntity.getPackageId());
loadscanEntity.setSigningUser(nickName);
loadscanEntity.setSigningUserId(userId);
@ -2128,7 +2139,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
//维护订单状态
} else {
//这里装车的数据需要进行补录
DistributionDeliveryListEntity deliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId());
// DistributionDeliveryListEntity deliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId());
DistributionDeliverySelfEntity distributionDeliverySelfEntity = new DistributionDeliverySelfDTO();
if (deliveryListEntity.getKind().equals(ServiceConstant.DELIVERLIST_KIND_SELF)) {
distributionDeliverySelfEntity = distributionDeliverySelfMapper.selectOne(new QueryWrapper<DistributionDeliverySelfEntity>().lambda()
@ -2194,6 +2205,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
Integer m = distributionSignforMapper.updateSignUser(distributionLoadscanEntity.getDeliveryId(), distributionLoadscanEntity.getReservationId(), AuthUtil.getUser());
//包件解托下架
warehouseUpdownTypeClient.downPackageOrDelTray(collect.get(0).getOrderPackageCode(), myCurrentWarehouse.getId(),"签收下架解托");
packageLockIds.add(distributionLoadscanEntity.getPackageId());
}
//修改包件状态为装车、签收
DistributionParcelListEntity updatePackage = collect.get(0);
@ -2246,6 +2258,21 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
//一个客户下出现重复包条码
log.error("############出现重复包条码:{}", collect);
}
if (!packageLockIds.isEmpty()){
List<Long> a = bladeRedis.get("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:" + packageLockIds);
if (Func.isNotEmpty(a)){
boolean flag = a.stream().anyMatch(any -> packageLockIds.contains(any));
if (flag){
//正在操作,请稍后重试
throw new RuntimeException("该包件正在被操作,请稍后再试!!!");
}else {
packageLockIds.addAll(a);
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:" + packageLockIds,packageLockIds,60L);
}
}else {
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:" + packageLockIds,packageLockIds,60L);
}
}
@ -2302,8 +2329,13 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
.in(DistributionParcelListEntity::getOrderPackageCode, distrilbutionloadingscanDTO.getBarcodes())
.eq(DistributionParcelListEntity::getWarehouseId, myCurrentWarehouse.getId())
);
DistributionDeliveryListEntity deliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId());
if (Func.isEmpty(deliveryListEntity)){
throw new CustomerException(403, "配送异常!!!");
}
if (Func.isNotEmpty(parcelListEntities)) {
boolean flag = parcelListEntities.stream().anyMatch(p -> p.getOrderPackageStatus().equals(OrderPackageStatusConstant.yiqianshou.getValue()));
boolean flag = parcelListEntities.stream().anyMatch(p -> OrderPackageStatusConstant.yiqianshou.getValue().equals(p.getOrderPackageStatus()));
if (flag) {
log.error("########缺失参数,barcodes:{}", distrilbutionloadingscanDTO.getBarcodes());
return R.fail("存在已签收包件!!");
@ -2318,6 +2350,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
return R.fail("请联系管理员!!!");
}
List<String> orderpackages = new ArrayList<>();
List<Long> packageLockIds = new ArrayList<>();
for (String orderPackageCode : orderPackageCodes) {
List<DistributionParcelListEntity> collect = parcelListEntityList.stream().filter(p -> p.getOrderPackageCode().equals(orderPackageCode)).collect(Collectors.toList());
if (Func.isNotEmpty(collect) && collect.size() == 1) {
@ -2342,6 +2375,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
loadscanEntity.setSigningUserId(userId);
distributionLoadscanService.updateById(loadscanEntity);
packageLockIds.add(loadscanEntity.getPackageId());
//缺少一个异步维护包件签收的方法
// distributionAsyncService.changeOrderSignforStatus(collect.get(0));
Integer j = distributionSignforMapper.updateSignforNum(loadscanEntity.getDeliveryId(), loadscanEntity.getReservationId(), loadscanEntity.getPackageNub());
@ -2352,7 +2386,6 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
//维护订单状态
} else {
//这里装车的数据需要进行补录
DistributionDeliveryListEntity deliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId());
DistributionDeliverySelfEntity distributionDeliverySelfEntity = new DistributionDeliverySelfDTO();
if (deliveryListEntity.getKind().equals(ServiceConstant.DELIVERLIST_KIND_SELF)) {
distributionDeliverySelfEntity = distributionDeliverySelfMapper.selectOne(new QueryWrapper<DistributionDeliverySelfEntity>().lambda()
@ -2410,6 +2443,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
distributionLoadscanEntity.setSigningUserId(AuthUtil.getUser().getUserId());
distributionLoadscanEntity.setScanStatus(LoadingStatusConstant.buluzhuangche.getValue());
distributionLoadscanService.save(distributionLoadscanEntity);
packageLockIds.add(distributionLoadscanEntity.getPackageId());
//进行签收数量的修改
Integer i = distributionDeliveryListMapper.updateloadingTimeById(distrilbutionloadingscanDTO.getDeliveryId());
//更新装车包件数和签收包件数
@ -2436,6 +2471,22 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
throw new RuntimeException("包件数据异常,请联系管理员!!!");
}
}
//添加缓存
if (!packageLockIds.isEmpty()){
List<Long> a = bladeRedis.get("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:");
if (Func.isNotEmpty(a)){
boolean flag = a.stream().anyMatch(any -> packageLockIds.contains(any));
if (flag){
//正在操作,请稍后重试
throw new RuntimeException("该包件正在被操作,请稍后再试!!!");
}else {
packageLockIds.addAll(a);
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:" ,packageLockIds,60L);
}
}else {
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:" ,packageLockIds,60L);
}
}
//维护客户
distributionReservationService.maintenanceReservationInfo(distrilbutionloadingscanDTO.getReservationId());
//维护配送任务
@ -2603,6 +2654,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
return R.fail("请联系管理员!!!");
}
if ((signforEntity.getReceivedQuantity() + signforEntity.getReceivedinQuantity()) <= 0) {
log.error("signforack############未进行签收上传图片");
return Resp.scanFail(12000, "请先进行签收扫描后上传图片", "请先进行签收扫描后上传图片", null);
}
@ -2612,7 +2664,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
if (ObjectUtils.isNotNull(distributionSignfor.getMap())) {
List<DistributionSignPrintEntity> distributionSignPrintList = new ArrayList<>();
distributionSignfor.getMap().forEach((k, v) -> {
v.stream().forEach(i -> {
v.forEach(i -> {
DistributionSignPrintEntity distributionSignPrint = new DistributionSignPrintEntity();
BeanUtils.copyProperties(i, distributionSignPrint);
distributionSignPrint.setId(null);
@ -2653,6 +2705,11 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
.eq(DistributionParcelListEntity::getOrderPackageCode, distrilbutionloadingscanDTO.getBarcode())
.eq(DistributionParcelListEntity::getWarehouseId, myCurrentWarehouse.getId())
);
DistributionDeliveryListEntity distributionDeliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId());
if (Func.isEmpty(distributionDeliveryListEntity)) {
return R.fail(403, "配送错误!!!");
}
List<Long> packageLockIds = new ArrayList<>();
if (Func.isNotEmpty(parcelListEntityList) && parcelListEntityList.size() == 1) {
DistributionParcelListEntity parcelListEntity = parcelListEntityList.get(0);
if (parcelListEntity.getOrderPackageStatus().equals(OrderPackageStatusConstant.yiqianshou.getValue())) {
@ -2669,7 +2726,6 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
DistributionReservationEntity reservationEntity = distributionReservationMapper.selectById(distrilbutionloadingscanDTO.getReservationId());
DistributionStockArticleEntity stockArticleEntity = distributionStockArticleService.getById(parcelListEntity.getStockArticleId());
DistributionDeliveryListEntity distributionDeliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId());
DistributionDeliverySelfEntity distributionDeliverySelfEntity = new DistributionDeliverySelfEntity();
if (distributionDeliveryListEntity.getKind().equals("1")) {
distributionDeliverySelfEntity = distributionDeliverySelfMapper.selectOne(new QueryWrapper<DistributionDeliverySelfEntity>().lambda()
@ -2823,6 +2879,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
//进行签收数量的修改
Integer i = distributionDeliveryListMapper.updateloadingTimeById(distrilbutionloadingscanDTO.getDeliveryId());
//修改包件装车、签收状态
packageLockIds.add(distributionLoadscanEntity.getPackageId());
} else {
return Resp.scanFail("操作失败", "不属于该客户");
}
@ -2875,6 +2932,21 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
return Resp.scanFail("操作失败", "包件信息有误");
}
String s = checkAbnormalSignNum(distrilbutionloadingscanDTO);
if (!packageLockIds.isEmpty()){
List<Long> a = bladeRedis.get("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:" );
if (Func.isNotEmpty(a)){
boolean flag = a.stream().anyMatch(any -> packageLockIds.contains(any));
if (flag){
//正在操作,请稍后重试
throw new RuntimeException("该包件正在被操作,请稍后再试!!!");
}else {
packageLockIds.addAll(a);
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:",packageLockIds,10L);
}
}else {
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:" ,packageLockIds,10L);
}
}
return Resp.scanSuccess("操作成功", s);
}
@ -3077,12 +3149,21 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
return Resp.scanFail("请在订制品页面扫描此码", "请在订制品页面扫描此码");
}
}
BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient.getMyCurrentWarehouse();
if (Func.isEmpty(myCurrentWarehouse)){
return R.fail(403,"未授权!!!");
}
//查询已完成备货的库存品包件
List<DisStockListDetailEntity> detailEntities = distributionReservationMapper.selectInventoryListByReservation(distrilbutionloadingscanDTO.getReservationId());
if (Func.isEmpty(detailEntities)) {
return Resp.scanFail("此码无效", "此码无效");
}
DistributionDeliveryListEntity deliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId());
if (Func.isEmpty(deliveryListEntity)){
return R.fail(403,"配送错误");
}
List<Long> packageLockIds = new ArrayList<>();
boolean isHaveCode = detailEntities.stream().anyMatch(inven -> Func.isNotEmpty(inven.getStockPackageCode()));
if (isHaveCode) {
@ -3106,6 +3187,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
loadscaninvnEntity.setSignforState(LoadScanSigningStatusConstant.yiqianshou.getValue());
loadscaninvnEntity.setSigningTime(simpleDateFormat.format(new Date()));
loadscaninvnEntity.setOneQclick(1);
packageLockIds.add(loadscaninvnEntity.getInventoryPackageId());
distributionLoadscaninvnService.updateById(loadscaninvnEntity);
//维护签收数量
Integer j = distributionSignforMapper.updateSignforNum(loadscaninvnEntity.getDeliveryId(), loadscaninvnEntity.getReservationId(), loadscaninvnEntity.getPackageNub());
@ -3114,7 +3196,6 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
} else {
//库存品未进行装车
//这里装车的数据需要进行补录
DistributionDeliveryListEntity deliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId());
DistributionDeliverySelfEntity distributionDeliverySelfEntity = new DistributionDeliverySelfDTO();
if (deliveryListEntity.getKind().equals(ServiceConstant.DELIVERLIST_KIND_SELF)) {
distributionDeliverySelfEntity = distributionDeliverySelfMapper.selectOne(new QueryWrapper<DistributionDeliverySelfEntity>().lambda()
@ -3172,6 +3253,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
Integer i = distributionSignforMapper.updateSignUser(distributionLoadscaninvnEntity.getDeliveryId(), distributionLoadscaninvnEntity.getReservationId(), AuthUtil.getUser());
//扣减库存
distributionStockListMapper.deductionQuantityStock(distributionLoadscaninvnEntity.getInventoryId(), distributionLoadscaninvnEntity.getLoadedNub());
packageLockIds.add(distributionLoadscaninvnEntity.getInventoryPackageId());
// //扣减库存
// DistributionStockListEntity stockListEntity = distributionStockListService.getById(inventory.get(0).getStockListId());
// stockListEntity.setQuantityOccupied(stockListEntity.getQuantityOccupied() - distributionLoadscaninvnEntity.getPackageNub());
@ -3211,6 +3293,21 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
//维护配送任务
distributionDeliveryListService.maintenanceDeliveryInfo(distrilbutionloadingscanDTO.getDeliveryId());
String str = checkSignNum(distrilbutionloadingscanDTO);
if (!packageLockIds.isEmpty()){
List<Long> a = bladeRedis.get("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:" );
if (Func.isNotEmpty(a)){
boolean flag = a.stream().anyMatch(any -> packageLockIds.contains(any));
if (flag){
//正在操作,请稍后重试
throw new RuntimeException("该包件正在被操作,请稍后再试!!!");
}else {
packageLockIds.addAll(a);
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:",packageLockIds,60L);
}
}else {
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:" ,packageLockIds,60L);
}
}
return Resp.scanSuccess("签收成功", str);
}
@ -4220,6 +4317,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
log.error(method+"reservationEntity参数错误:{}", reservationEntity);
return R.fail("服务器正忙~~");
}
List<Long> packageLockIds = new ArrayList<>();
//查询数据
DistributionSignforEntity distributionSignforEntity = baseMapper.selectOne(new QueryWrapper<DistributionSignforEntity>().lambda()
.eq(DistributionSignforEntity::getDeliveryId, distributionSignfor.getDeliveryId())
@ -4286,6 +4384,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
Integer j = distributionSignforMapper.updatesignforByinvn(loadscaninvnEntity.getDeliveryId(), loadscaninvnEntity.getReservationId(), loadscaninvnEntity.getPackageNub());
//更新签收人
Integer m = distributionSignforMapper.updateSignUser(loadscaninvnEntity.getDeliveryId(), loadscaninvnEntity.getReservationId(), AuthUtil.getUser());
packageLockIds.add(loadscaninvnEntity.getInventoryPackageId());
}
} else {
DistributionLoadscaninvnEntity newLoadscaninvnEntity = new DistributionLoadscaninvnEntity();
@ -4331,6 +4430,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
newLoadscaninvnEntity.setMsg("司机一键签收数据补录");
}
distributionLoadscaninvnService.save(newLoadscaninvnEntity);
packageLockIds.add(newLoadscaninvnEntity.getInventoryPackageId());
//维护预约库存品数据
//扣减库存
DistributionStockListEntity stockListEntity = distributionStockListService.getById(detailEntity.getStockListId());
@ -4386,6 +4487,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
distributionLoadscanEntity.setLoadedNub(parcelNumberEntity.getReservationNum());
distributionLoadscanEntity.setReceivedQuantity(parcelNumberEntity.getReservationNum());
distributionLoadscanService.updateById(distributionLoadscanEntity);
packageLockIds.add(distributionLoadscanEntity.getPackageId());
} else {
log.error("################扫描签收零担订单数量异常:{}", distributionLoadscanEntity);
return Resp.scanFail("数量录入错误", "数量录入错误");
@ -4406,6 +4509,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
distributionLoadscanEntity.setMsg("司机一键签收数据补录");
}
distributionLoadscanService.updateById(distributionLoadscanEntity);
packageLockIds.add(distributionLoadscanEntity.getPackageId());
}
}else {
//不存在装车数据
@ -4453,6 +4557,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
loadscanEntity.setMsg("司机一键签收数据补录");
}
distributionLoadscanService.save(loadscanEntity);
packageLockIds.add(loadscanEntity.getPackageId());
}
//维护出库数量和签收数量
parcelNumberServiceById.setSigninQuantity(signinQuantity);
@ -4524,6 +4630,9 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
loadscanEntity.setMsg("司机一键签收数据补录");
}
distributionLoadscanService.save(loadscanEntity);
packageLockIds.add(loadscanEntity.getPackageId());
} else {
//存在装车数据
if (distributionSignfor.getIsClerk()) {
@ -4542,6 +4651,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
loadscanEntities.setReceivedQuantity(parcelListEntity.getQuantity());
loadscanEntities.setSigningTime(signingTime);
distributionLoadscanService.updateById(loadscanEntities);
packageLockIds.add(loadscanEntities.getPackageId());
}
}
distributionAsyncService.sendFactory(parcelListEntity, simpleDateFormat.format(new Date()), reservationEntity.getId(), reservationEntity.getReservationCode(), myCurrentWarehouse.getName(), user.getNickName());
@ -4590,7 +4701,21 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
log.info(method+"装车库存品数>>>>>>>>>>>>>>:{}",loadingInventoryNum);
log.info(method+"签收包件数>>>>>>>>>>>>>>:{}",signingPackageNum);
log.info(method+"签收库存品数>>>>>>>>>>>>>>:{}",signingPackageNum);
if (!packageLockIds.isEmpty()){
List<Long> a = bladeRedis.get("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:" );
if (Func.isNotEmpty(a)){
boolean flag = a.stream().anyMatch(any -> packageLockIds.contains(any));
if (flag){
//正在操作,请稍后重试
throw new RuntimeException("该包件正在被操作,请稍后再试!!!");
}else {
packageLockIds.addAll(a);
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:" ,packageLockIds,60L);
}
}else {
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + distributionDeliveryListEntity.getTrainNumber() + "orderPackageCode:" ,packageLockIds,60L);
}
}
LambdaUpdateWrapper<DistributionSignforEntity> set = new UpdateWrapper<DistributionSignforEntity>().lambda()
.eq(DistributionSignforEntity::getId, distributionSignforEntity.getId())
.set(StringUtils.isNotBlank(distributionSignfor.getDeliverySignPictures()), DistributionSignforEntity::getDeliverySignPictures, distributionSignfor.getDeliverySignPictures())
@ -5154,6 +5279,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
log.error("###################零担订单品类信息错误:{}", parcelNumberDTOS);
return Resp.scanFail("操作失败", "服务器正忙....");
}
List<Long> packageLockIds = new ArrayList<>();
//这里装车的数据需要进行补录
DistributionDeliveryListEntity deliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId());
DistributionDeliverySelfEntity distributionDeliverySelfEntity = new DistributionDeliverySelfDTO();
@ -5336,11 +5462,27 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
parcelNumberEntity.setHandQuantity(handQuantity.subtract(signNum).intValue());
parcelNumberEntity.setDeliveryQuantity(deliveryQuantity.subtract(signNum).intValue());
parcelNumberEntity.setOutboundQuantity(outboundQuantity.add(signNum).intValue());
packageLockIds.add(loadscanEntity.getPackageId());
}
}
}
distributionParcelNumberService.updateById(parcelNumberEntity);
});
if (!packageLockIds.isEmpty()){
List<Long> a = bladeRedis.get("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:" );
if (Func.isNotEmpty(a)){
boolean flag = a.stream().anyMatch(any -> packageLockIds.contains(any));
if (flag){
//正在操作,请稍后重试
throw new RuntimeException("该包件正在被操作,请稍后再试!!!");
}else {
packageLockIds.addAll(a);
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:" ,packageLockIds,10L);
}
}else {
bladeRedis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "trainNumber:" + deliveryListEntity.getTrainNumber() + "orderPackageCode:",packageLockIds,10L);
}
}
String str = checkSignNum(distrilbutionloadingscanDTO);
return Resp.scanSuccess("签收成功", str);
}

4
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockArticleServiceImpl.java

@ -1370,6 +1370,7 @@ public class DistributionStockArticleServiceImpl extends BaseServiceImpl<Distrib
QueryWrapper<DistributionParcelListEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("order_code", orderCode)
.eq("warehouse_id", warehouseId)
.eq("conditions", 1)
.eq("is_deleted", 0);
List<DistributionParcelListEntity> list = distributionParcelListService.list(queryWrapper);
Integer incomingNum = 0;
@ -1549,6 +1550,7 @@ public class DistributionStockArticleServiceImpl extends BaseServiceImpl<Distrib
//查询包件列表
List<DistributionParcelListEntity> parcelListEntities = distributionParcelListService.list(Wrappers.<DistributionParcelListEntity>query().lambda()
.eq(DistributionParcelListEntity::getOrderCode, s)
.eq(DistributionParcelListEntity::getConditions, 1)
.eq(DistributionParcelListEntity::getStockArticleId, stockArticleEntity.getId())
.eq(DistributionParcelListEntity::getWarehouseId, warehouseId)
);
@ -1989,7 +1991,7 @@ public class DistributionStockArticleServiceImpl extends BaseServiceImpl<Distrib
// if(Func.isNotEmpty(stockArticleEntity.getReservation())){
// stockArticleEntity.setReservationStatus("10");
// }
List<BasicdataWarehouseEntity> myWarehouseList = warehouseClient.getMyWatchWarehouse();
List<BasicdataWarehouseEntity> myWarehouseList = warehouseClient.getMyWarehouseList();
List<Long> collect = myWarehouseList.stream().map(BasicdataWarehouseEntity::getId).collect(Collectors.toList());
if (collect.size() > 1) {

3
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockListServiceImpl.java

@ -372,7 +372,8 @@ public class DistributionStockListServiceImpl extends BaseServiceImpl<Distributi
distributionStockListInfo.setId(null);
distributionUnpackingDetailsService.save(distributionUnpackingDetails);
//对原来的库存品进行数据维护
one.setQuantityStock(one.getQuantityStock() - Integer.parseInt(distributionStockListDTO.getPackageNum()));
one.setQuantityStock(one.getQuantityStock() - distributionStockListDTO.getUnpackingQuantity());
one.setOutboundQuantity(one.getOutboundQuantity() + distributionStockListDTO.getUnpackingQuantity());
this.updateById(one);
//添加拆包记录
distributionUnpackingDetails.setStockArticleId(Optional.ofNullable(one.getStockArticleId()).orElse(null));

27
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/dto/orderPackageDTO.java

@ -0,0 +1,27 @@
package com.logpm.factorydata.zbom.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @author zhaoqiaobo
* @create 2024-04-08
*/
@Data
public class orderPackageDTO implements Serializable {
/**
* 包条码
*/
private String packageCode;
/**
* 已推送节点
*/
private String pushNode;
/**
* 签收状态
*/
private Integer signStatus;
}

69
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbFactoryNodeOrderEntity.java

@ -0,0 +1,69 @@
package com.logpm.factorydata.zbom.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springblade.core.mp.base.BaseEntity;
/**
* 加盟商单号+发货单号的节点操作数据
*
* @Author zqb
* @Date 2024/3/26
**/
@Builder
@Data
@TableName("zb_factory_node_order")
@ApiModel(value = "发货单号的节点操作数据", description = "发货单号的节点操作数据")
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class ZbFactoryNodeOrderEntity extends BaseEntity {
/**
* 预留1
*/
@ApiModelProperty(name = "预留1", notes = "")
private String reserve1;
/**
* 预留2
*/
@ApiModelProperty(name = "预留2", notes = "")
private String reserve2;
/**
* 预留3
*/
@ApiModelProperty(name = "预留3", notes = "")
private String reserve3;
/**
* 预留4
*/
@ApiModelProperty(name = "预留4", notes = "")
private String reserve4;
/**
* 预留5
*/
@ApiModelProperty(name = "预留5", notes = "")
private String reserve5;
/**
* 发车单号
*/
@ApiModelProperty(name = "发车单号", notes = "")
private String departCode;
/**
* 加盟商单号
*/
@ApiModelProperty(name = "加盟商单号", notes = "")
private String platformOrderCode;
/**
* 已推送过的节点
*/
@ApiModelProperty(name = "已推送过的节点", notes = "")
private String pushNode;
}

32
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.java

@ -0,0 +1,32 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.logpm.factorydata.zbom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodeOrderEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 发货单号的节点操作数据 Mapper
*
* @author zqb
* @since 2024-03-26
*/
@Mapper
public interface FactoryNodeOrderMapper extends BaseMapper<ZbFactoryNodeOrderEntity> {
}

5
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.xml

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.logpm.factorydata.zbom.mapper.FactoryNodeOrderMapper">
</mapper>

8
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.java

@ -19,7 +19,8 @@ package com.logpm.factorydata.zbom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.logpm.factorydata.zbom.entity.ZbOrderPackageEntity;
import com.logpm.factorydata.zbom.vo.NoSignNumberDTO;
import com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageSignDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -34,9 +35,12 @@ import java.util.List;
@Mapper
public interface OrderPackageMapper extends BaseMapper<ZbOrderPackageEntity> {
List<NodeConfirmParamDTO> findOrderCodebypackageCodes(@Param("packageList") List<String> packageCodeList);
List<OrderPackageSignDTO> findOrderCodebypackageCodes(@Param("packageList") List<String> packageCodeList);
void updateSignForStatus(@Param("packageCodeList") List<String> packageCodeList);
List<NoSignNumberDTO> findNoSignNumber(@Param("packageCodeList") List<String> packageCodeList);
List<OrderPackageDTO> findByPackageCodes(@Param("packageCodeList") List<String> packageCodeList);
}

18
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.xml

@ -16,9 +16,10 @@
) packageCodeIds where packageCodeIds.pid = t.package_code)
</update>
<select id="findOrderCodebypackageCodes" resultType="com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO">
<select id="findOrderCodebypackageCodes" resultType="com.logpm.factorydata.zbom.vo.OrderPackageSignDTO">
select re.depart_code,
t.platform_order_code,
group_concat(t.package_code) packageCode,
count(*) signQty
from zb_order_package t
left join zb_receipt re on re.id = t.receipt_id
@ -61,5 +62,20 @@
and t.sign_status = 0
group by re.depart_code, t.platform_order_code
</select>
<select id="findByPackageCodes" resultType="com.logpm.factorydata.zbom.vo.OrderPackageDTO">
select t.package_code,t.sign_status,t.push_status from zb_order_package t
where exists(
select 1 from (
<foreach collection="packageCodeList" index="ind" item="item">
<if test="ind == 0">
select #{item} pid
</if>
<if test="ind != 0">
union all
select #{item} pid
</if>
</foreach>
) packageCodeIds where packageCodeIds.pid = t.package_code)
</select>
</mapper>

285
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomNodeDataPushListener.java

@ -2,27 +2,38 @@ package com.logpm.factorydata.zbom.mq;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.EnumUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.logpm.factorydata.enums.BrandEnums;
import com.logpm.factorydata.enums.NodeEnums;
import com.logpm.factorydata.feign.IFactoryDataClient;
import com.logpm.factorydata.vo.NodePushMsg;
import com.logpm.factorydata.vo.SendMsg;
import com.logpm.factorydata.zbom.constants.ZbomConstants;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodeOrderEntity;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodePushEntity;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodePushFailEntity;
import com.logpm.factorydata.zbom.enums.NodeNeedEnums;
import com.logpm.factorydata.zbom.enums.ZbomNodeEnums;
import com.logpm.factorydata.zbom.enums.ZbomNodeMappingEnums;
import com.logpm.factorydata.zbom.pros.ZbFactoryProperties;
import com.logpm.factorydata.zbom.service.IFactoryNodeOrderService;
import com.logpm.factorydata.zbom.service.IFactoryNodePushFailService;
import com.logpm.factorydata.zbom.service.IFactoryNodePushService;
import com.logpm.factorydata.zbom.service.IOrderPackageService;
import com.logpm.factorydata.zbom.util.ZbomUtil;
import com.logpm.factorydata.zbom.vo.NoSignNumberDTO;
import com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageSignDTO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.common.constant.factorydata.FactoryDataConstants;
import org.springblade.common.utils.HutoolConfigUtil;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
@ -50,9 +61,29 @@ public class ZbomNodeDataPushListener {
private final IOrderPackageService orderPackageService;
private final IFactoryNodePushFailService nodePushFailService;
private final IFactoryNodePushService nodePushService;
private final IFactoryNodeOrderService nodeOrderService;
private final IFactoryDataClient factoryDataClient;
/**
* 该方法用于监听来自ZBOM节点数据推送的延迟消息
* 通过@RabbitListener注解绑定到特定的队列和交换器以接收特定类型的消息
* 接收到消息后会立即调用nodeDataPush方法处理该消息
*
* @param msg 接收到的消息内容类型为String
*/
@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = FactoryDataConstants.Mq.Queues.ZBOM_NODE_DATA_PUSH),
value = @Queue(name = FactoryDataConstants.Mq.Queues.ZBOM_NODE_DATA_PUSH, durable = "true"),
exchange = @Exchange(name = FactoryDataConstants.Mq.Exchanges.NODE_DATA_PUSH_DELAYED, type = ExchangeTypes.TOPIC
, delayed = FactoryDataConstants.Mq.DELAYED),
key = FactoryDataConstants.Mq.RoutingKeys.ZBOM_NODE_DATA_PUSH
))
public void nodeDataPushDelayed(String msg) {
// 直接调用nodeDataPush方法处理接收到的消息
nodeDataPush(msg);
}
@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = FactoryDataConstants.Mq.Queues.ZBOM_NODE_DATA_PUSH, durable = "true"),
exchange = @Exchange(name = FactoryDataConstants.Mq.Exchanges.NODE_DATA_PUSH, type = ExchangeTypes.TOPIC),
key = FactoryDataConstants.Mq.RoutingKeys.ZBOM_NODE_DATA_PUSH
))
@ -63,9 +94,9 @@ public class ZbomNodeDataPushListener {
if (!checkMsg(msg)) {
return;
}
JSONObject msgEntries = JSONUtil.parseObj(msg);
JSONObject entries = JSONUtil.parseObj(msg);
// 业务数据
List<JSONObject> content = msgEntries.getBeanList("content", JSONObject.class);
List<JSONObject> content = entries.getBeanList("content", JSONObject.class);
List<String> packageCodeList = null;
if (CollUtil.isNotEmpty(content)) {
// 查询这次操作的所有包件和运单号
@ -77,64 +108,12 @@ public class ZbomNodeDataPushListener {
}
}
}
// 构建参数对象
List<NodeConfirmParamDTO> nodeConfirmParams = initParam(msgEntries, packageCodeList);
try {
// 推送给志邦
if (CollUtil.isNotEmpty(nodeConfirmParams)) {
for (NodeConfirmParamDTO nodeConfirmParam : nodeConfirmParams) {
String body = JSONUtil.toJsonStr(nodeConfirmParam);
String result = ZbomUtil.pushZbomSystem(zbProperties, body, ZbomConstants.Method.ROUTE_NODE_CONFIRM);
log.info("zb节点推送数据:参数{},返回值{}。", body, result);
if (StrUtil.isNotBlank(result)) {
ZbFactoryNodePushFailEntity build = ZbFactoryNodePushFailEntity.builder().content(body).resultContent(result).build();
if (!StrUtil.contains(result, "code")) {
// 推送失败
nodePushFailService.save(build);
} else {
JSONObject entries = JSONUtil.parseObj(result);
String code = entries.getStr("code");
if (ObjectUtil.equal(code, "1")) {
// 推送失败
nodePushFailService.save(build);
}
if (ObjectUtil.equal(code, "0")) {
ZbFactoryNodePushEntity pushEntity = ZbFactoryNodePushEntity.builder()
.departCode(nodeConfirmParam.getDepartCode())
.platformOrderCode(nodeConfirmParam.getPlatformOrderCode())
.content(body)
.resultContent(result)
.build();
// 推送成功
nodePushService.save(pushEntity);
String node = msgEntries.getStr("node");
NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node);
if (ObjectUtil.equal(nodeEnums, NodeEnums.CLERK_REVIEW)) {
// 修改订单包件表的签收状态
orderPackageService.updateSignForStatus(packageCodeList);
}
}
}
}
}
}
} catch (Exception e) {
// 处理推送不成功的异常情况
log.error("zb节点推送数据异常:{}", e);
e.printStackTrace();
}
}
private List<NodeConfirmParamDTO> initParam(JSONObject entries, List<String> packageCodeList) {
// 处理节点信息
String node = entries.getStr("node");
NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node);
if (CollUtil.isNotEmpty(packageCodeList)) {
// 根据运单号和自编码分组查询出对应的数量
List<NodeConfirmParamDTO> orders = orderPackageService.findOrderCodebypackageCodes(packageCodeList);
List<OrderPackageSignDTO> orders = orderPackageService.findOrderCodebypackageCodes(packageCodeList);
// 根据运单号和自编码分组查询出未签收的数量
List<NoSignNumberDTO> noSignNumberDTOS = orderPackageService.findNoSignNumber(packageCodeList);
log.info("未签收数据:{}", JSONUtil.toJsonStr(noSignNumberDTOS));
@ -145,39 +124,211 @@ public class ZbomNodeDataPushListener {
}
}
if (CollUtil.isNotEmpty(orders)) {
for (NodeConfirmParamDTO order : orders) {
for (OrderPackageSignDTO order : orders) {
Boolean flag = Boolean.TRUE;
NodeConfirmParamDTO paramDTO = new NodeConfirmParamDTO();
paramDTO.setDepartCode(order.getDepartCode());
paramDTO.setPlatformOrderCode(order.getPlatformOrderCode());
paramDTO.setSignQty(order.getSignQty());
order.setOperator(entries.getStr("operator"));
paramDTO.setOperator(entries.getStr("operator"));
order.setOperatorTime(entries.getStr("operatorTime"));
paramDTO.setOperatorTime(entries.getStr("operatorTime"));
order.setAddress(entries.getStr("address"));
paramDTO.setAddress(entries.getStr("address"));
// 如果是签收节点,需要判断是否为全部签收和部分签收
if (EnumUtil.equals(NodeEnums.CLERK_REVIEW, node)) {
log.info("key:{},签收数量:{}", order.getDepartCode() + "_" + order.getPlatformOrderCode(), order.getSignQty());
Integer signNumber = Convert.toInt(order.getSignQty());
ZbFactoryNodeOrderEntity nodeOrder = nodeOrderService.getOne(Wrappers.<ZbFactoryNodeOrderEntity>lambdaQuery()
.eq(ZbFactoryNodeOrderEntity::getPlatformOrderCode, paramDTO.getPlatformOrderCode())
.eq(ZbFactoryNodeOrderEntity::getDepartCode, paramDTO.getDepartCode())
);
if (ObjectUtil.isNotEmpty(nodeOrder)) {
flag = Boolean.FALSE;
}
log.info("key:{},签收数量:{}", paramDTO.getDepartCode() + "_" + paramDTO.getPlatformOrderCode(), paramDTO.getSignQty());
Integer signNumber = Convert.toInt(paramDTO.getSignQty());
// 查询当前未签收的数量与当前签收数量比较,如果未签收数较大,则是部分签收
String key = order.getDepartCode() + order.getPlatformOrderCode();
String key = paramDTO.getDepartCode() + paramDTO.getPlatformOrderCode();
// 部分签收
order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_SECTION_STATUS).getCode());
paramDTO.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_SECTION_STATUS).getCode());
if (ObjectUtil.isNotEmpty(noSignNumberMap) && noSignNumberMap.containsKey(key)) {
Integer noSignNum = noSignNumberMap.get(key);
if (noSignNum <= signNumber) {
// 全部签收
order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_ALL_STATUS).getCode());
paramDTO.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_ALL_STATUS).getCode());
}
} else {
continue;
}
// 第一次签收,节点改为送货抵达
if (flag) {
paramDTO.setRejectQty("");
paramDTO.setSignQty("");
paramDTO.setNode(ZbomNodeEnums.DELIVERY_ARRIVAL.getCode());
}
} else {
order.setRejectQty("");
order.setSignQty("");
order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums).getCode());
paramDTO.setRejectQty("");
paramDTO.setSignQty("");
paramDTO.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums).getCode());
}
try {
// 推送给志邦
// if (CollUtil.isNotEmpty(nodeConfirmParams)) {
// for (NodeConfirmParamDTO nodeConfirmParam : nodeConfirmParams) {
String body = JSONUtil.toJsonStr(paramDTO);
String result = ZbomUtil.pushZbomSystem(zbProperties, body, ZbomConstants.Method.ROUTE_NODE_CONFIRM);
// JSONObject jsonObject = new JSONObject();
// jsonObject.set("code", "0");
// String result = JSONUtil.toJsonStr(jsonObject);
log.info("zb节点推送数据:参数{},返回值{}。", body, result);
saveResult(entries, packageCodeList, order, body, result, flag);
// }
// }
} catch (Exception e) {
// 处理推送不成功的异常情况
log.error("zb节点推送数据异常:{}", e);
// 保存日志
e.printStackTrace();
}
}
}
return orders;
// 构建参数对象
// List<NodeConfirmParamDTO> nodeConfirmParams = initParam(msgEntries, packageCodeList);
}
return null;
}
private void saveResult(JSONObject msgEntries, List<String> packageCodeList, OrderPackageSignDTO
nodeConfirmParam, String body, String result, Boolean flag) {
if (StrUtil.isNotBlank(result)) {
ZbFactoryNodePushFailEntity build = ZbFactoryNodePushFailEntity.builder().content(body).resultContent(result).build();
if (!StrUtil.contains(result, "code")) {
// 推送失败
nodePushFailService.save(build);
} else {
JSONObject entries = JSONUtil.parseObj(result);
String code = entries.getStr("code");
if (ObjectUtil.equal(code, "1")) {
// 推送失败
nodePushFailService.save(build);
}
if (ObjectUtil.equal(code, "0")) {
ZbFactoryNodePushEntity pushEntity = ZbFactoryNodePushEntity.builder()
.departCode(nodeConfirmParam.getDepartCode())
.platformOrderCode(nodeConfirmParam.getPlatformOrderCode())
.content(body)
.resultContent(result)
.build();
// 推送成功
nodePushService.save(pushEntity);
String node = msgEntries.getStr("node");
NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node);
if (ObjectUtil.equal(nodeEnums, NodeEnums.CLERK_REVIEW)) {
if (!flag) {
// 修改订单包件表的签收状态
List<String> packages = CollUtil.newArrayList(nodeConfirmParam.getPackageCode().split(","));
orderPackageService.updateSignForStatus(packages);
} else {
List<Object> js = new ArrayList<>();
String packageCode = nodeConfirmParam.getPackageCode();
for (String s : packageCode.split(",")) {
JSONObject entries1 = new JSONObject();
entries1.set("packageCode", s);
js.add(entries1);
}
NodePushMsg nodePushMsg = NodePushMsg.builder()
.node(NodeEnums.CLERK_REVIEW)
.operator(nodeConfirmParam.getOperator())
.operatorTime(DateUtil.parseDateTime(nodeConfirmParam.getOperatorTime()))
.address(nodeConfirmParam.getAddress())
.brand(BrandEnums.ZB)
.address(nodeConfirmParam.getAddress())
.content(js)
.build();
SendMsg message = SendMsg.builder()
.delay(30 * 60 * 1000)
.exchange(FactoryDataConstants.Mq.Exchanges.NODE_DATA_PUSH_DELAYED)
.routingKey(FactoryDataConstants.Mq.RoutingKeys.ZBOM_NODE_DATA_PUSH)
.message(JSONUtil.toJsonStr(nodePushMsg, HutoolConfigUtil.jsonConfigByDataTimeFormat()))
.build();
factoryDataClient.sendMessage(message);
}
// 修改加盟商单号+发货单号节点数据
nodeOrderService.updateNodeOrder(nodeConfirmParam);
}
}
}
}
}
// private List<NodeConfirmParamDTO> initParam(JSONObject entries, List<String> packageCodeList) {
// // 处理节点信息
// String node = entries.getStr("node");
// NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node);
// if (CollUtil.isNotEmpty(packageCodeList)) {
// // 根据运单号和自编码分组查询出对应的数量
// List<NodeConfirmParamDTO> orders = orderPackageService.findOrderCodebypackageCodes(packageCodeList);
// // 根据运单号和自编码分组查询出未签收的数量
// List<NoSignNumberDTO> noSignNumberDTOS = orderPackageService.findNoSignNumber(packageCodeList);
// log.info("未签收数据:{}", JSONUtil.toJsonStr(noSignNumberDTOS));
// Map<String, Integer> noSignNumberMap = new HashMap<>();
// if (CollUtil.isNotEmpty(noSignNumberDTOS)) {
// for (NoSignNumberDTO noSignNumberDTO : noSignNumberDTOS) {
// noSignNumberMap.put(noSignNumberDTO.getDepartCode() + noSignNumberDTO.getPlatformOrderCode(), noSignNumberDTO.getNum());
// }
// }
// if (CollUtil.isNotEmpty(orders)) {
// for (NodeConfirmParamDTO order : orders) {
// order.setOperator(entries.getStr("operator"));
// order.setOperatorTime(entries.getStr("operatorTime"));
// order.setAddress(entries.getStr("address"));
// // 如果是签收节点,需要判断是否为全部签收和部分签收
// if (EnumUtil.equals(NodeEnums.CLERK_REVIEW, node)) {
// ZbFactoryNodeOrderEntity nodeOrder = nodeOrderService.getOne(Wrappers.<ZbFactoryNodeOrderEntity>lambdaQuery()
// .eq(ZbFactoryNodeOrderEntity::getPlatformOrderCode, order.getPlatformOrderCode())
// .eq(ZbFactoryNodeOrderEntity::getDepartCode, order.getDepartCode())
// );
// Boolean flag = Boolean.FALSE;
// if (ObjectUtil.isNotEmpty(nodeOrder)) {
// flag = Boolean.TRUE;
// }
// log.info("key:{},签收数量:{}", order.getDepartCode() + "_" + order.getPlatformOrderCode(), order.getSignQty());
// Integer signNumber = Convert.toInt(order.getSignQty());
// // 查询当前未签收的数量与当前签收数量比较,如果未签收数较大,则是部分签收
// String key = order.getDepartCode() + order.getPlatformOrderCode();
// // 部分签收
// order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_SECTION_STATUS).getCode());
// if (ObjectUtil.isNotEmpty(noSignNumberMap) && noSignNumberMap.containsKey(key)) {
// Integer noSignNum = noSignNumberMap.get(key);
// if (noSignNum <= signNumber) {
// // 全部签收
// order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_ALL_STATUS).getCode());
// }
// } else {
// continue;
// }
// // 第一次签收,节点改为送货抵达
// if (flag) {
// order.setRejectQty("");
// order.setSignQty("");
// order.setNode(ZbomNodeEnums.DELIVERY_ARRIVAL.getCode());
// }
// } else {
// order.setRejectQty("");
// order.setSignQty("");
// order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums).getCode());
// }
// }
// }
// return orders;
// }
// return null;
// }
private boolean checkMsg(String msg) {
Boolean flag = Boolean.FALSE;
if (StrUtil.isBlank(msg)) {

33
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IFactoryNodeOrderService.java

@ -0,0 +1,33 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.logpm.factorydata.zbom.service;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodeOrderEntity;
import com.logpm.factorydata.zbom.vo.OrderPackageSignDTO;
import org.springblade.core.mp.base.BaseService;
/**
* 发货单号的节点操作数据 服务类
*
* @author pref
* @since 2023-08-21
*/
public interface IFactoryNodeOrderService extends BaseService<ZbFactoryNodeOrderEntity> {
void updateNodeOrder(OrderPackageSignDTO nodeConfirmParam);
}

7
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IOrderPackageService.java

@ -18,7 +18,8 @@ package com.logpm.factorydata.zbom.service;
import com.logpm.factorydata.zbom.entity.ZbOrderPackageEntity;
import com.logpm.factorydata.zbom.vo.NoSignNumberDTO;
import com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageSignDTO;
import org.springblade.core.mp.base.BaseService;
import java.util.List;
@ -31,9 +32,11 @@ import java.util.List;
*/
public interface IOrderPackageService extends BaseService<ZbOrderPackageEntity> {
List<NodeConfirmParamDTO> findOrderCodebypackageCodes(List<String> packageCodeList);
List<OrderPackageSignDTO> findOrderCodebypackageCodes(List<String> packageCodeList);
void updateSignForStatus(List<String> packageCodeList);
List<NoSignNumberDTO> findNoSignNumber(List<String> packageCodeList);
List<OrderPackageDTO> findByPackageCodes(List<String> packageCodeList);
}

61
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/impl/FactoryNodeOrderServiceImpl.java

@ -0,0 +1,61 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.logpm.factorydata.zbom.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.logpm.factorydata.enums.NodeEnums;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodeOrderEntity;
import com.logpm.factorydata.zbom.mapper.FactoryNodeOrderMapper;
import com.logpm.factorydata.zbom.service.IFactoryNodeOrderService;
import com.logpm.factorydata.zbom.vo.OrderPackageSignDTO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.stereotype.Service;
/**
* 发货单号的节点操作数据 服务实现类
*
* @author zqb
* @since 2024-04-08
*/
@Slf4j
@Service
@AllArgsConstructor
public class FactoryNodeOrderServiceImpl extends BaseServiceImpl<FactoryNodeOrderMapper, ZbFactoryNodeOrderEntity> implements IFactoryNodeOrderService {
@Override
public void updateNodeOrder(OrderPackageSignDTO nodeConfirmParam) {
LambdaQueryWrapper<ZbFactoryNodeOrderEntity> wrapper = Wrappers.<ZbFactoryNodeOrderEntity>lambdaQuery()
.eq(ZbFactoryNodeOrderEntity::getPlatformOrderCode, nodeConfirmParam.getPlatformOrderCode())
.eq(ZbFactoryNodeOrderEntity::getDepartCode, nodeConfirmParam.getDepartCode());
ZbFactoryNodeOrderEntity zbFactoryNodeOrderEntity = this.baseMapper.selectOne(wrapper);
if (ObjectUtil.isEmpty(zbFactoryNodeOrderEntity)) {
zbFactoryNodeOrderEntity = new ZbFactoryNodeOrderEntity();
zbFactoryNodeOrderEntity.setPlatformOrderCode(nodeConfirmParam.getPlatformOrderCode());
zbFactoryNodeOrderEntity.setDepartCode(nodeConfirmParam.getDepartCode());
}
zbFactoryNodeOrderEntity.setPushNode(NodeEnums.CLERK_REVIEW.getCode().toString());
// String pushNode = zbFactoryNodeOrderEntity.getPushNode();
// String join = StrUtil.join(",", pushNode, NodeEnums.CLERK_REVIEW.getCode());
// zbFactoryNodeOrderEntity.setPushNode(join);
this.saveOrUpdate(zbFactoryNodeOrderEntity);
}
}

12
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/impl/OrderPackageServiceImpl.java

@ -20,7 +20,8 @@ import com.logpm.factorydata.zbom.entity.ZbOrderPackageEntity;
import com.logpm.factorydata.zbom.mapper.OrderPackageMapper;
import com.logpm.factorydata.zbom.service.IOrderPackageService;
import com.logpm.factorydata.zbom.vo.NoSignNumberDTO;
import com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageSignDTO;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.stereotype.Service;
@ -36,8 +37,8 @@ import java.util.List;
public class OrderPackageServiceImpl extends BaseServiceImpl<OrderPackageMapper, ZbOrderPackageEntity> implements IOrderPackageService {
@Override
public List<NodeConfirmParamDTO> findOrderCodebypackageCodes(List<String> packageCodeList) {
List<NodeConfirmParamDTO> orders = this.baseMapper.findOrderCodebypackageCodes(packageCodeList);
public List<OrderPackageSignDTO> findOrderCodebypackageCodes(List<String> packageCodeList) {
List<OrderPackageSignDTO> orders = this.baseMapper.findOrderCodebypackageCodes(packageCodeList);
return orders;
}
@ -50,4 +51,9 @@ public class OrderPackageServiceImpl extends BaseServiceImpl<OrderPackageMapper,
public List<NoSignNumberDTO> findNoSignNumber(List<String> packageCodeList) {
return this.baseMapper.findNoSignNumber(packageCodeList);
}
@Override
public List<OrderPackageDTO> findByPackageCodes(List<String> packageCodeList) {
return this.baseMapper.findByPackageCodes(packageCodeList);
}
}

136
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/util/QmSignService.java

@ -0,0 +1,136 @@
package com.logpm.factorydata.zbom.util;
import org.springframework.stereotype.Service;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.Map;
@Service
class QmSignService {
/**
* @param params 参数
* @param secret 秘钥
* @param signMethod 加密方式
* @param body 消息体
* @return
* @throws Exception
*/
public static String signTopRequest(Map<String, String> params, String secret, String signMethod, String body) throws Exception {
// 第一步:检查参数是否已经排序
String[] keys = params.keySet().toArray(new String[0]);
Arrays.sort(keys);
// 第二步:把所有参数名和参数值串在一起
StringBuilder query = new StringBuilder();
if ("md5".equalsIgnoreCase(signMethod)) {
query.append(secret);
}
for (String key : keys) {
String value = params.get(key);
String[] array = new String[2];
array[0] = key;
array[1] = value;
if (areNotEmpty(array)) {
query.append(key).append(value);
}
}
// 第三步:使用MD5/HMAC加密
byte[] bytes;
if ("hmac".equalsIgnoreCase(signMethod)) {
bytes = encryptHMAC(query.toString(), secret);
} else {
query.append(body.replaceAll("\\s+", "")).append(secret);
bytes = encryptMD5(query.toString());
}
// 第四步:把二进制转化为大写的十六进制(正确签名应该为32大写字符串,此方法需要时使用)
return byte2hex(bytes);
}
public static boolean areNotEmpty(String[] values) {
boolean result = true;
if ((values == null) || (values.length == 0))
result = false;
else {
for (String value : values) {
result &= !isEmpty(value);
}
}
return result;
}
static boolean isEmpty(String value) {
int strLen;
if ((value == null) || ((strLen = value.length()) == 0))
return true;
for (int i = 0; i < strLen; i++) {
if (!Character.isWhitespace(value.charAt(i))) {
return false;
}
}
return true;
}
static byte[] encryptHMAC(String data, String secret) throws IOException {
byte[] bytes = null;
try {
SecretKey secretKey = new SecretKeySpec(secret.getBytes("utf-8"), "HmacMD5");
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
bytes = mac.doFinal(data.getBytes("utf-8"));
} catch (GeneralSecurityException gse) {
throw new IOException(gse.toString());
}
return bytes;
}
public static byte[] encryptMD5(String data) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = md.digest(data.getBytes("utf-8"));
return bytes;
// return encryptMD5(data.getBytes(Constants.CHARSET_UTF8));
}
public static String byte2hex(byte[] bytes) {
StringBuilder sign = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(bytes[i] & 0xFF);
if (hex.length() == 1) {
sign.append("0");
}
sign.append(hex.toUpperCase());
}
return sign.toString();
}
// public static void main(String[] args) {
// Map<String, String> params = new HashMap<>();
// params.put("method", "route.node.confirm");
// params.put("timestamp", "2024-04-08 17:47:54");
// params.put("format", "json");
// params.put("app_key", "HT");
// params.put("v", "1.0");
// params.put("sign_method", "md5");
// params.put("customerId", "HT");
// try {
// String body = "{\"departCode\":\"937961\",\"platformOrderCode\":\"曲靖202312031\",\"node\":\"T20200\",\"address\":\"test\",\"operator\":\"test\",\"operatorTime\":\"2024-04-0805:47:52\",\"signQty\":\"1\",\"rejectQty\":\"\"}";
// String newSign = signTopRequest(params, "HT", "md5", body);
// System.out.println("==========================================");
// System.out.println(newSign);
// } catch (Exception e) {
// e.printStackTrace();
// }
//
// }
}

16
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/util/QmSignUntil.java

@ -113,19 +113,19 @@ public class QmSignUntil {
//
// Map<String, String> params = new HashMap<>();
// params.put("app_key","HT");
// params.put("customerid","HT");
// params.put("customerId","HT");
// params.put("format","json");
// params.put("method","entry.order.create");
// params.put("method","route.node.confirm");
// params.put("sign_method","md5");
// params.put("timestamp","2015-04-26 00:00:07");
// params.put("timestamp","2024-04-08 17:47:54");
// params.put("v","1.0");
//
// JSONObject jsonObject = new JSONObject();
// jsonObject.put("name","name12345");
// jsonObject.put("age",10);
// String body = "{\"departCode\":\"937961\",\"platformOrderCode\":\"曲靖202312031\",\"node\":\"T20200\",\"address\":\"test\",\"operator\":\"test\",\"operatorTime\":\"2024-04-0805:47:52\",\"signQty\":\"1\",\"rejectQty\":\"\"}";
//// JSONObject jsonObject = new JSONObject();
//// jsonObject.put("name","name12345");
//// jsonObject.put("age",10);
//
// try {
// String s = QmSignUntil.signTopRequest(params, "test", "md5", jsonObject.toJSONString());
// String s = QmSignUntil.signTopRequest(params, "HT", "md5", body);
// System.out.println(s);
// } catch (Exception e) {
// e.printStackTrace();

52
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/vo/OrderPackageSignDTO.java

@ -0,0 +1,52 @@
package com.logpm.factorydata.zbom.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 订单包件签收信息
*
* @author zhaoqiaobo
* @create 2024-03-21 15:04
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class OrderPackageSignDTO implements Serializable {
/**
* 发运单号
*/
private String departCode;
/**
* 加盟商单号
*/
private String platformOrderCode;
/**
* 包条码
*/
private String packageCode;
/**
* 签收数量
*/
private String signQty;
/**
* 地址 在途节点 需要提供详细的地址
*/
private String address;
/**
* 操作人 必填
*/
private String operator;
/**
* 操作时间 必填
*/
private String operatorTime;
}

1
blade-service/logpm-report/pom.xml

@ -63,6 +63,7 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
</plugin>
</plugins>
</build>

6
blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/InLibraryDeliverServiceImpl.java

@ -1,10 +1,11 @@
package com.logpm.report.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.logpm.report.mapper.InLibraryDeliverMapper;
import com.logpm.report.service.InLibraryDeliverService;
import io.swagger.models.auth.In;
import lombok.AllArgsConstructor;
import org.springblade.core.redis.cache.BladeRedis;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@ -19,6 +20,7 @@ public class InLibraryDeliverServiceImpl implements InLibraryDeliverService {
private InLibraryDeliverMapper inLibraryDeliverMapper;
/***
* 总在库数
* @param

5
blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/IndexCountServiceImpl.java

@ -11,6 +11,7 @@ import org.checkerframework.checker.units.qual.A;
import org.springblade.common.constant.aftersales.WorkOrderStatusConstant;
import org.springblade.common.constant.orderpackage.OrderPackageStatusConstant;
import org.springblade.common.constant.stockup.StockupTypeConstant;
import org.springblade.core.redis.cache.BladeRedis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
@ -35,7 +36,7 @@ public class IndexCountServiceImpl implements IndexCountService {
private InLibraryDeliverServiceImpl inLibraryDeliverService;
private BillingServiceImpl billingService;
private final BladeRedis redis;
/**
@ -43,6 +44,8 @@ public class IndexCountServiceImpl implements IndexCountService {
*/
@Cacheable(value = "indexCount=10")
public IndexCountVO indexCount() {
IndexCountVO indexCountVo = new IndexCountVO();
List<Long> warehouse = billingService.getWarehouse();
indexCountVo.setInStoreData(inStoreData(warehouse));

78
blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java

@ -380,7 +380,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
BasicdataWarehouseEntity warehouseEntity = basicdataWarehouseClient.getEntityWarehouseId(nowWarehouseId);
String warehouseAddress = null;
if (ObjectUtil.isNotEmpty(warehouseEntity)) {
warehouseAddress = warehouseEntity.getWarehouseAddress();
warehouseAddress = "从【" + warehouseEntity.getName() + "】发出";
}
sendFactoryData(brands, node, warehouseAddress);
} catch (Exception e) {
@ -942,7 +942,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
BasicdataWarehouseEntity warehouseEntity = basicdataWarehouseClient.getEntityWarehouseId(nowWarehouseId);
String warehouseAddress = null;
if (ObjectUtil.isNotEmpty(warehouseEntity)) {
warehouseAddress = warehouseEntity.getWarehouseAddress();
warehouseAddress = "到达【" + warehouseEntity.getName() + "】";
}
sendFactoryData(brands, node, warehouseAddress);
} catch (Exception e) {
@ -1209,8 +1209,8 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
return R.fail(405, "配载计划不存在");
}
TrunklineCarsLoadLineEntity currentLoadLineEntity = trunklineCarsLoadLineService.findEntityByLoadIdAndNodeId(loadId, warehouseId);
if(Objects.isNull(currentLoadLineEntity)){
log.warn("###############updateCarsLoadBasicData: 配载计划节点不存在 loadId={} nodeId={}", loadId,warehouseId);
if (Objects.isNull(currentLoadLineEntity)) {
log.warn("###############updateCarsLoadBasicData: 配载计划节点不存在 loadId={} nodeId={}", loadId, warehouseId);
return R.fail(405, "配载计划节点不存在");
}
@ -1709,7 +1709,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
BasicdataWarehouseEntity warehouseEntity = basicdataWarehouseClient.getEntityWarehouseId(nowWarehouseId);
String warehouseAddress = null;
if (ObjectUtil.isNotEmpty(warehouseEntity)) {
warehouseAddress = warehouseEntity.getWarehouseAddress();
warehouseAddress = "从【" + warehouseEntity.getName() + "】发出";
}
this.sendFactoryData(brands, NodeEnums.TRIPARTITE_TRANSFER_DEPART, warehouseAddress);
} catch (Exception e) {
@ -2039,7 +2039,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
distributionStockArticleClient.submitHandleNumByOrderId(1, articleId);
remark = "有数据,不在当前仓,异常装车";
updownTypeClient.downPackageOrDelTray(orderPackageCode,fromWarehouseId,"干线装车下架解托");
updownTypeClient.downPackageOrDelTray(orderPackageCode, fromWarehouseId, "干线装车下架解托");
}
} else {
@ -2112,7 +2112,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
distributionParcelListClient.updateOrderPackageCodeById(packageId, "60");
distributionStockArticleClient.submitHandleNumByOrderId(1, articleId);
if (StringUtil.isBlank(trayCode)) {
updownTypeClient.downPackageOrDelTray(orderPackageCode,warehouseId,"干线装车下架解托");
updownTypeClient.downPackageOrDelTray(orderPackageCode, warehouseId, "干线装车下架解托");
}
}
carsLoadScanEntity.setLoadingUserName(AuthUtil.getNickName());
@ -2853,7 +2853,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
String orders = null;
if (0 == isZero) {
unloadPackage(loadId, orderPackageCode, warehouseId, 1, "卸分一体 卸车",incomingType);
unloadPackage(loadId, orderPackageCode, warehouseId, 1, "卸分一体 卸车", incomingType);
Map<String, Object> map = new HashMap<>();
map.put("trayType", trayType);
map.put("trayCode", trayCode);
@ -2877,7 +2877,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
map.put("warehouseId", warehouseId);
map.put("orderCode", orderCode);
map.put("num", enterNum);
map.put("remark","卸分一体零担打托");
map.put("remark", "卸分一体零担打托");
boolean b = trayTypeClient.enterZeroOrderByTrayCode(map);
if (!b) {
log.warn("##########findNextNodeList: 打托失败 trayCode={} orderCode={}", trayCode, orderCode);
@ -3064,7 +3064,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
distributionStockArticleClient.submitHandleNumByOrderId(1, articleId);
distributionParcelListClient.updateOrderPackageCodeById(pacakageId, "60");
updownTypeClient.downPackageOrDelTray(orderPackageCode,wid,"中转卸车下架解托");
updownTypeClient.downPackageOrDelTray(orderPackageCode, wid, "中转卸车下架解托");
}
} else {
// carsLoadScanEntity.getS
@ -3101,8 +3101,8 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
trayId = trayEntity.getId();
trayName = trayEntity.getPalletName();
}
if(unbindTray == 1){
updownTypeClient.downPackageOrDelTray(orderPackageCode,fromWarehouseId,"中转卸车下架解托");
if (unbindTray == 1) {
updownTypeClient.downPackageOrDelTray(orderPackageCode, fromWarehouseId, "中转卸车下架解托");
}
trunklineCarsLoadScanService.updateById(carsLoadScanEntity);
@ -3182,9 +3182,9 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
trunklineCarsUnloadLogService.savaUnloadLog(warehouseId, warehouseName, loadId, loadCode, waybillId, waybillNo, orderCode,
scanCode, enterNum, 2, 1, isAbnormal, trayId, trayCode, trayName, fromWarehouseId, loadScanId, remark);
if(unbindTray == 1){
if(!StringUtil.isBlank(trayCode)){
trayTypeClient.deleteZeroOrderByTrayCode(orderCode,trayCode,fromWarehouseId,"干线中转零担解托");
if (unbindTray == 1) {
if (!StringUtil.isBlank(trayCode)) {
trayTypeClient.deleteZeroOrderByTrayCode(orderCode, trayCode, fromWarehouseId, "干线中转零担解托");
}
}
@ -3247,7 +3247,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
for (UnloadPackageDTO unloadPackageDTO : unloadPackageList) {
String orderPackageCode = unloadPackageDTO.getOrderPackageCode();
unloadPackage(loadId, orderPackageCode, warehouseId, 1, "批量卸车包件正常卸车",incomingType);
unloadPackage(loadId, orderPackageCode, warehouseId, 1, "批量卸车包件正常卸车", incomingType);
}
@ -3749,7 +3749,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
Integer planNum = carsOrderEntity.getPlanNum();
List<DistributionParcelListEntity> entityListByOrderCode = distributionParcelListClient.findEntityListByOrderCodeAndStatus(orderCode, warehouseId, "20");
int size = entityListByOrderCode.size();
if (planNum.equals(size+realNum)) {
if (planNum.equals(size + realNum)) {
for (DistributionParcelListEntity parcelListEntity : entityListByOrderCode) {
String orderPackageCode = parcelListEntity.getOrderPackageCode();
//查询包件是否已经装车
@ -4220,7 +4220,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
public R removeCarsLoadScan(String carsLoadScanIds, Long warehouseId) {
String[] split = carsLoadScanIds.split(",");
Long loadId = null;
for (String str : split) {
long carsLoadScanId = Long.parseLong(str);
@ -4229,7 +4229,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
log.warn("##################removeCarsLoadScan: 配载装车扫描不存在 carsLoadScanId={}", carsLoadScanId);
return R.fail(405, "配载装车扫描不存在");
}
Long loadId = carsLoadScanEntity.getLoadId();
loadId = carsLoadScanEntity.getLoadId();
TrunklineCarsLoadEntity carsLoadEntity = baseMapper.selectById(loadId);
if (Objects.isNull(carsLoadEntity)) {
@ -4295,23 +4295,29 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
String waybillNumber = parcelListEntity.getWaybillNumber();
WarehouseWaybillEntity waybillEntity = warehouseWaybillClient.findByWaybillNo(waybillNumber);
Long destinationWarehouseId = waybillEntity.getDestinationWarehouseId();
parcelListEntity.setOrderPackageStatus("20");
if (destinationWarehouseId.equals(wid)) {
parcelListEntity.setOrderPackageStatus("10");
parcelListEntity.setIsTransfer(0);
} else {
parcelListEntity.setOrderPackageStatus("20");
parcelListEntity.setIsTransfer(1);
}
distributionParcelListClient.update(parcelListEntity);
updownTypeClient.downPackageOrDelTray(scanCode,warehouseId,"包件下架解托");
}else{
trayTypeClient.deleteZeroOrderByTrayCode(orderCode,trayCode,warehouseId,"零担解托");
if (StringUtil.isNotBlank(trayCode)) {
updownTypeClient.downPackageOrDelTray(scanCode, warehouseId, "包件下架解托");
}
} else {
if (StringUtil.isNotBlank(trayCode)) {
trayTypeClient.deleteZeroOrderByTrayCode(orderCode, trayCode, warehouseId, "零担解托");
}
}
}
}
}
// updateNumByLoadId(loadId);
if (!Objects.isNull(loadId)) {
updateNumByLoadId(loadId);
}
return R.success("删除成功");
}
@ -4365,7 +4371,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
}
@Override
public R unloadPackage(Long loadId, String orderPackageCode, Long warehouseId, Integer unbindTray, String remark,Integer incomingType) {
public R unloadPackage(Long loadId, String orderPackageCode, Long warehouseId, Integer unbindTray, String remark, Integer incomingType) {
log.info("#############unloadPackage: 卸车包件");
BasicdataWarehouseEntity basicdataWarehouseEntity = basicdataWarehouseClient.getEntityWarehouseId(warehouseId);
@ -4581,7 +4587,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
}
distributionParcelListClient.update(distributionParcelListEntity);
}
updownTypeClient.downPackageOrDelTray(orderPackageCode,wid,"干线卸车下架解托");
updownTypeClient.downPackageOrDelTray(orderPackageCode, wid, "干线卸车下架解托");
}
//无装车记录异常日志记录
@ -4619,8 +4625,8 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
trayId = trayEntity.getId();
trayName = trayEntity.getPalletName();
}
if(unbindTray == 1){
updownTypeClient.downPackageOrDelTray(orderPackageCode,fromWarehouseId,"干线卸车下架解托");
if (unbindTray == 1) {
updownTypeClient.downPackageOrDelTray(orderPackageCode, fromWarehouseId, "干线卸车下架解托");
}
trunklineCarsLoadScanService.updateById(carsLoadScanEntity);
@ -4829,9 +4835,9 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
trunklineCarsUnloadLogService.savaUnloadLog(warehouseId, warehouseName, loadId, loadCode, waybillId, waybillNo, orderCode,
scanCode, enterNun, 2, 1, isAbnormal, trayId, trayCode, trayName, fromWarehouseId, loadScanId, remark);
if(unbindTray == 1){
if(!StringUtil.isBlank(trayCode)){
trayTypeClient.deleteZeroOrderByTrayCode(orderCode,trayCode,fromWarehouseId,"干线卸车零担解托");
if (unbindTray == 1) {
if (!StringUtil.isBlank(trayCode)) {
trayTypeClient.deleteZeroOrderByTrayCode(orderCode, trayCode, fromWarehouseId, "干线卸车零担解托");
}
}
@ -5066,7 +5072,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
}
@Override
public R unloadTray(Long loadId, String trayCode, Long warehouseId,Integer incomingType) {
public R unloadTray(Long loadId, String trayCode, Long warehouseId, Integer incomingType) {
TrunklineCarsLoadEntity carsLoadEntity = baseMapper.selectById(loadId);
if (Objects.isNull(carsLoadEntity)) {
log.warn("###############unloadTray: 配载计划不存在 loadId={}", loadId);
@ -5080,7 +5086,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
String scanCode = carsLoadScanEntity.getScanCode();
if (type == 1) {
//包件
unloadPackage(loadId, scanCode, warehouseId, 0, "托盘正常卸车",incomingType);
unloadPackage(loadId, scanCode, warehouseId, 0, "托盘正常卸车", incomingType);
} else if (type == 2) {
String waybillNo = carsLoadScanEntity.getWaybillNo();
Integer num = carsLoadScanEntity.getNum();

2
blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/dto/WaybillDTO.java

@ -1,6 +1,5 @@
package com.logpm.warehouse.dto;
import io.swagger.models.auth.In;
import lombok.Data;
import java.io.Serializable;
@ -35,6 +34,7 @@ public class WaybillDTO implements Serializable {
private Integer isZero;
private Integer warehouseId;
}

13
blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/WarehouseWaybillServiceImpl.java

@ -92,6 +92,7 @@ public class WarehouseWaybillServiceImpl extends BaseServiceImpl<WarehouseWaybil
// 通过ID 获取老系统的订单数据
Integer wayBillId = waybillDTO.getId();
Integer allNum = waybillDTO.getNumber();
Integer oprationWarehouseId = waybillDTO.getWarehouseId();
Date date = new Date();
Long waybillId = null;
boolean isOrder = false;
@ -107,11 +108,15 @@ public class WarehouseWaybillServiceImpl extends BaseServiceImpl<WarehouseWaybil
log.warn("##############waybillDataHandler: 老系统中未找到对应运单waybillId={}", waybillDTO.getId());
throw new CustomerException("老系统中未找到对应运单");
}
Integer warehouseId = wayBillEntity.getWarehouseId();
if(!warehouseId.equals(oprationWarehouseId)){
log.warn("##############waybillDataHandler: 作业仓库与目的仓不同 warehouseId={} oprationWarehouseId={}", warehouseId,oprationWarehouseId);
throw new CustomerException("作业仓库与目的仓不同");
}
// 需要验证当前需要开启的数据推送仓库
if(!OldSystemDataPushConfig.getWarehourseIdList().contains(wayBillEntity.getWarehouseId()+"")){
log.info(">>>> waybillDataHandler 当前开单仓库不是目前系统上线运行仓库 {}", wayBillEntity.getWarehouseId());
if(!OldSystemDataPushConfig.getWarehourseIdList().contains(warehouseId+"")){
log.info(">>>> waybillDataHandler 当前开单仓库不是目前系统上线运行仓库 {}", warehouseId);
throw new CustomerException("当前开单仓库不是目前系统上线运行仓库");
}
@ -393,7 +398,7 @@ public class WarehouseWaybillServiceImpl extends BaseServiceImpl<WarehouseWaybil
public WarehouseWaybillEntity findByWaybillNo(String waybillNo) {
QueryWrapper<WarehouseWaybillEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("waybill_no", waybillNo);
return warehouseWaybillMapper.selectOne(queryWrapper);
return warehouseWaybillMapper.selectOne(queryWrapper);
}
@Override

Loading…
Cancel
Save