huanglizhi 1 жил өмнө
parent
commit
f0ae98217e

+ 30 - 4
module-erp/src/main/java/com/hys/app/controller/erp/use/ScanCodeController.java

@@ -1,21 +1,24 @@
 package com.hys.app.controller.erp.use;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.hys.app.framework.database.WebPage;
+import com.hys.app.model.erp.dos.GoodsSnDO;
 import com.hys.app.model.erp.dto.EnterpriseDTO;
 import com.hys.app.model.erp.dto.EnterpriseQueryParams;
-import com.hys.app.model.erp.vo.EnterpriseVO;
-import com.hys.app.model.erp.vo.GoodsSnVO;
-import com.hys.app.model.erp.vo.ProductStockVO;
-import com.hys.app.model.erp.vo.ProductVO;
+import com.hys.app.model.erp.vo.*;
 import com.hys.app.service.erp.EnterpriseManager;
 import com.hys.app.service.erp.ScanCodeManager;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.elasticsearch.common.collect.HppcMaps;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -33,6 +36,8 @@ public class ScanCodeController {
 
     @Autowired
     private ScanCodeManager scanCodeManager;
+    @Autowired
+    private RedisTemplate redisTemplate;
 
     @ApiOperation(value = "扫描订单")
     @GetMapping("/{orderCode}")
@@ -51,5 +56,26 @@ public class ScanCodeController {
     public GoodsSnVO getSnCode(@PathVariable(value = "sku") String sku, @PathVariable(value = "snCode") String snCode, @PathVariable(value = "type") String type) {
         return scanCodeManager.getSnCode( sku, snCode, type);
     }
+
+    @ApiOperation(value = "序列号缓存")
+    @PostMapping("skuRedis")
+    public Object skuRedis(@RequestBody SkuRedisDO skuRedisDO) {
+        if (skuRedisDO.getType() != null && skuRedisDO.getType().equals("enter")){
+            return redisTemplate.opsForHash().entries(skuRedisDO.getSendOrderId());
+        }
+        Object o = redisTemplate.opsForHash().get(skuRedisDO.getSendOrderId(), skuRedisDO.getItemId());
+        List<GoodsSnDO> val =(List<GoodsSnDO>) o;
+        if (CollUtil.isEmpty(val)){
+            List<Object> list = new ArrayList<>();
+            list.add(skuRedisDO.getSku());
+            redisTemplate.opsForHash().put(skuRedisDO.getSendOrderId(),skuRedisDO.getItemId(),list);
+        }else {
+            val.add(skuRedisDO.getSku());
+            redisTemplate.opsForHash().put(skuRedisDO.getSendOrderId(),skuRedisDO.getItemId(),val);
+        }
+        Map entries = redisTemplate.opsForHash().entries(skuRedisDO.getSendOrderId());
+        return entries;
+    }
+
 }
 

+ 5 - 2
module-erp/src/main/java/com/hys/app/model/erp/dos/AreaStock.java

@@ -30,10 +30,13 @@ public class AreaStock implements Serializable {
     @ApiModelProperty(name = "warehouseId", value = "仓库id")
     private Long warehouseId;
 
-    @ApiModelProperty(name = "warehouse_id", value = "库id")
+    @ApiModelProperty(name = "warehouse_id", value = "库id")
     private Long warehouseAreaId;
 
-    @ApiModelProperty(name = "warehouse_id", value = "仓库id")
+    @ApiModelProperty(name = "warehouseAreaName", value = "库位名称")
+    private String warehouseAreaName;
+
+    @ApiModelProperty(name = "warehouse_id", value = "库存id")
     private Long productStockId;
 
     @TableField(exist = false)

+ 7 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/OrderItemDO.java

@@ -1,15 +1,19 @@
 package com.hys.app.model.erp.dos;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.hys.app.framework.database.annotation.Table;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 订单明细 DO
@@ -124,4 +128,7 @@ public class OrderItemDO implements Serializable {
 
     private Integer  dayNum;
 
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<AreaStock> areaStockList;
+
 }

+ 6 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/OrderSendItemDO.java

@@ -1,8 +1,10 @@
 package com.hys.app.model.erp.dos;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.hys.app.model.erp.enums.OrderTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
@@ -11,6 +13,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 订单明细 DO
@@ -66,4 +69,7 @@ public class OrderSendItemDO implements Serializable {
     @ApiModelProperty(name = "remark", value = "备注")
     private String remark;
 
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<AreaStock> areaStockList;
+
 }

+ 4 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/OrderItemDTO.java

@@ -1,6 +1,7 @@
 package com.hys.app.model.erp.dto;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.hys.app.model.erp.dos.AreaStock;
 import com.hys.app.model.erp.dos.ProductDO;
 import com.hys.app.model.erp.vo.GoodsVO;
 import com.hys.app.model.erp.vo.ProductVO;
@@ -12,6 +13,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 订单明细 新增|编辑 请求参数
@@ -60,5 +62,7 @@ public class OrderItemDTO {
 
     private Integer dayNum;
 
+    List<AreaStock> areaStockList;
+
 }
 

+ 2 - 1
module-erp/src/main/java/com/hys/app/model/erp/enums/SaleOrderSendStatusEnum.java

@@ -13,7 +13,8 @@ public enum SaleOrderSendStatusEnum {
 
     TO_BE_SEND("TO_BE_SEND", "待发货"),
     SENDING("SENDING", "配送中"),
-    TO_BE_SINGE("TO_BE_SINGE", "已签收");
+    TO_BE_SINGE("TO_BE_SINGE", "已签收"),
+    TO_BE_SINGE_NOT("TO_BE_SINGE", "已拒收");
 
     SaleOrderSendStatusEnum(String value, String label) {
         this.value = value;

+ 28 - 0
module-erp/src/main/java/com/hys/app/model/erp/vo/SkuRedisDO.java

@@ -0,0 +1,28 @@
+package com.hys.app.model.erp.vo;
+
+import com.hys.app.model.erp.dos.GoodsSnDO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 商品VO
+ *
+ * @author 张崧
+ * 2023-12-26 15:56:58
+ */
+@Data
+public class SkuRedisDO   {
+
+    @ApiModelProperty(name = "sendOrderId", value = "发货单id")
+    private String sendOrderId;
+
+    @ApiModelProperty(name = "itemId", value = "详情id")
+    private String itemId;
+
+    @ApiModelProperty(name = "goodsVO", value = "sku")
+    private GoodsSnDO sku;
+
+    @ApiModelProperty("操作类型  如果是进入页面带 enter   扫描不用传值")
+    private String  type;
+}
+

+ 3 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/OrderManagerImpl.java

@@ -32,6 +32,7 @@ import com.hys.app.service.kuaidiniao.entity.PreOrderModelDTO;
 import com.hys.app.service.kuaidiniao.entity.resReturnBackBase;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -63,6 +64,7 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
     private GoodsSnManager goodsSnManager;
     private LockedStockDetailManager lockedStockDetailManager;
     private OrderCustomerFeeManager orderCustomerFeeManager;
+    private RedisTemplate redisTemplate;
 
     @Override
     public WebPage<OrderVO> list(OrderQueryParams queryParams) {
@@ -282,6 +284,7 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void orderSend(Long sendOrderId, PreOrderModelDTO orderSendDO) {
+        redisTemplate.delete(sendOrderId);
         OrderSendDO aDo = orderSendManager.getById(sendOrderId);
         OrderDO orderDO = getById(aDo.getOrderId());
         converter.copyProperties(aDo, orderSendDO, orderSendDO.getReceiver(), orderSendDO.getSender());

+ 2 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseAreaManagerImpl.java

@@ -111,6 +111,7 @@ public class WarehouseAreaManagerImpl extends BaseServiceImpl<WarehouseAreaMappe
 
     @Override
     public void bindAreaStock(Long warehouseId, Long warehouseAreaId, List<Long> stockIdList) {
+        WarehouseAreaDO areaDO = getById(warehouseAreaId);
         areaStockManager.remove(new LambdaQueryWrapper<AreaStock>()
                 .eq(AreaStock::getWarehouseAreaId, warehouseAreaId)
                 .eq(AreaStock::getWarehouseAreaId, warehouseAreaId)
@@ -119,6 +120,7 @@ public class WarehouseAreaManagerImpl extends BaseServiceImpl<WarehouseAreaMappe
         for (Long aLong : stockIdList) {
             AreaStock stock = new AreaStock();
             stock.setProductStockId(aLong);
+            stock.setWarehouseAreaName(areaDO.getName());
             stock.setWarehouseId(warehouseId);
             stock.setWarehouseAreaId(warehouseAreaId);
             list.add(stock);

+ 19 - 6
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java

@@ -2,6 +2,7 @@ package com.hys.app.service.kuaidiniao;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.codec.Base64;
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.digest.DigestUtil;
@@ -32,6 +33,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.net.URLEncoder;
+import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -100,6 +102,7 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
 
     @Override
     public String kdShip(PreOrderModelDTO preOrderModel, Long orderId, AddressDTO addressDTO) {
+        preOrderModel.setOrderCode(IdUtil.fastUUID());
         fillParam(preOrderModel);
         String kdnCode = sendUrl(JSONUtil.toJsonStr(preOrderModel));
         if (StrUtil.isNotEmpty(kdnCode)) {
@@ -281,18 +284,22 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
         } catch (Exception e) {
             e.printStackTrace();
 //            return "1234567899";
-            throw new ServiceException("请求快递鸟发货异常,请联系客服");
         }
         return null;
     }
 
     private void fillParam(PreOrderModel preOrderModel) {
+        if (preOrderModel.getAppointmentType() == 1 ){
+            if (LocalDateTime.now().plusHours(2).isAfter(preOrderModel.getAppointmentTime())){
+                throw new ServiceException("预约单必须在当前时间完后2小时");
+            }
+        }
         //填充送货人的经纬度
-        LongitudeLatitude longitudeLatitudeSender = GaoDeUtil.getLongitudeLatitude(preOrderModel.getSender().getProvinceCityAreaAddress());
+        LongitudeLatitude longitudeLatitudeSender = GaoDeUtil.getLongitudeLatitude(preOrderModel.getSender().getProvinceName()+preOrderModel.getSender().getCityName()+preOrderModel.getSender().getAreaName()+preOrderModel.getSender().getAddress());
         preOrderModel.getSender().setLongitude(longitudeLatitudeSender.getLongitude());
         preOrderModel.getSender().setLatitude(longitudeLatitudeSender.getLatitude());
         //填充收货人的经纬度
-        LongitudeLatitude longitudeLatitudeReceiver = GaoDeUtil.getLongitudeLatitude(preOrderModel.getSender().getProvinceCityAreaAddress());
+        LongitudeLatitude longitudeLatitudeReceiver = GaoDeUtil.getLongitudeLatitude(preOrderModel.getReceiver().getProvinceName()+preOrderModel.getReceiver().getCityName()+preOrderModel.getReceiver().getAreaName()+preOrderModel.getReceiver().getAddress());
         preOrderModel.getReceiver().setLongitude(longitudeLatitudeReceiver.getLongitude());
         preOrderModel.getReceiver().setLatitude(longitudeLatitudeReceiver.getLatitude());
         //获取下单人信息
@@ -327,14 +334,14 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
         resReturnBackBase base = new resReturnBackBase();
         base.setKdnOrderCode(map.get("kdnOrderCode").toString());
         //验签
-        OrderSendDO aDo = orderSendManager.getById(Long.valueOf(map.get("orderCode").toString()));
+        OrderSendDO aDo = orderSendManager.getOne(new LambdaQueryWrapper<OrderSendDO>().eq(OrderSendDO::getKdnOrderCode,map.get("kdnOrderCode").toString()));
         OrderDO orderDO = orderManager.getById(aDo.getOrderId());
         //        if (!checkDesign(aDo, returnBackBase.getDataSign())) {
 //            base.setRequestData("验签失败");
 //            base.setResultCode(1002);
 //            return base;
 //        }
-        if (ObjectUtil.isNull(aDo)) {
+        if (ObjectUtil.isNull(aDo) || ObjectUtil.isNull(orderDO)) {
             base.setReason("未找到对应的订单");
             log.error("未找到对应的订单-------------------------------" + map.get("orderCode").toString());
             base.setResultCode(1002);
@@ -366,7 +373,7 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
                 break;
             case KdConstants.callBackSignRefuse:
                 aDo.setSignIn(map);
-                aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SINGE);
+                aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SINGE_NOT);
                 if (OrderTypeEnum.TO_B.equals(orderDO.getType())) {
                     orderDO.setStatus(SaleOrderStatusEnum.ORDER_END);
                 }
@@ -375,9 +382,15 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
                 }
                 break;
             case KdConstants.callBackCancelStatus:
+                //如果推送取消状态,需要重新下单
+                aDo.setKdnOrderCode(null);
+                aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SEND);
                 aDo.setCancelOrderKdn(map);
                 break;
             case KdConstants.callBackCreateOrderFail:
+                //如果下单失败更爱订单中黄台,清空快递鸟单号,让用户可以重新下单
+                aDo.setKdnOrderCode(null);
+                aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SEND);
                 aDo.setCreateOrderFail(map);
                 break;
             case KdConstants.callBackFeeStatus:

+ 3 - 3
module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/PreOrderModel.java

@@ -41,9 +41,9 @@ public class PreOrderModel {
     private Integer appointmentType;
 
     @ApiModelProperty(value = "预约上门单必填预约上门时间格式:YYYY-MM-DD  hh:mm:ss说明:当前时间+2小时,10分钟间隔向上取整。")
-//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-    private String appointmentTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private LocalDateTime appointmentTime;
 
     @ApiModelProperty(value = "交通方式,默认0:未指定。指定交通方式会产生额外的费用。暂不支持")
     private Integer travelWay = 0;

+ 0 - 3
module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/ReceiverSender.java

@@ -22,9 +22,6 @@ public class ReceiverSender {
     @ApiModelProperty(value = "地址")
     private String address;
 
-    @ApiModelProperty(value = "拼接好的地址")
-    private String  provinceCityAreaAddress;
-
     @ApiModelProperty(value = "寄件人/收件人名称")
     private String name;