huanglizhi 1 vuosi sitten
vanhempi
sitoutus
b799306c60

+ 29 - 2
module-erp/src/main/java/com/hys/app/controller/erp/use/KdnController.java

@@ -1,8 +1,11 @@
 package com.hys.app.controller.erp.use;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.Log;
+import com.hys.app.service.kuaidiniao.KdConstants;
 import com.hys.app.service.kuaidiniao.KuaiDiNiaoService;
 import com.hys.app.service.kuaidiniao.entity.*;
 import io.swagger.annotations.Api;
@@ -13,6 +16,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * OAuth2.0 授权 API
@@ -44,10 +48,33 @@ public class KdnController {
     }
 
 
-    @ApiOperation(value = "快递鸟创建单号")
+    @ApiOperation(value = "快递鸟创建门店")
     @PostMapping("/createStore")
     @Log(client = LogClient.admin, detail = "快递鸟创建店铺")
     public void createStore(@RequestBody @Valid CreateStoreModel createStoreModel) {
-         kuaiDiNiaoService.createStore(createStoreModel);
+         kuaiDiNiaoService.createStore(createStoreModel,KdConstants.createStore);
     }
+
+    @ApiOperation(value = "创建失败修改参数再次创建快递鸟门店")
+    @PostMapping("/updateStore")
+    @Log(client = LogClient.admin, detail = "快递鸟创建店铺")
+    public void updateStore(@RequestBody @Valid CreateStoreModel createStoreModel) {
+        kuaiDiNiaoService.createStore(createStoreModel,KdConstants.updateStore);
+    }
+
+    @ApiOperation(value = "快递鸟门店列表")
+    @GetMapping("/list")
+    @Log(client = LogClient.admin, detail = "获取快递鸟店铺列表")
+    public Page<CreateStoreModel> getStoreList(BaseQueryParam baseQueryParam) {
+      return   kuaiDiNiaoService.getStoreList(baseQueryParam);
+    }
+
+    @ApiOperation(value = "selectAudit")
+    @GetMapping("/selectAudit")
+    @Log(client = LogClient.admin, detail = "获取快递鸟店铺列表")
+    public void  selectAudit(CreateStoreModel createStoreModel) {
+           kuaiDiNiaoService.selectAudit(createStoreModel);
+    }
+
+
 }

+ 15 - 0
module-erp/src/main/java/com/hys/app/mapper/erp/KdnMapper.java

@@ -0,0 +1,15 @@
+package com.hys.app.mapper.erp;
+
+import com.hys.app.framework.database.mybatisplus.base.BaseMapperX;
+import com.hys.app.model.erp.dos.LockedStockDetailDO;
+import com.hys.app.service.kuaidiniao.entity.CreateStoreModel;
+
+/**
+ * 商品库存的Mapper
+ *
+ * @author 张崧
+ * @since 2023-12-07 10:08:44
+ */
+public interface KdnMapper extends BaseMapperX<CreateStoreModel> {
+}
+

+ 5 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/LockedStockDetailDO.java

@@ -36,6 +36,9 @@ public class LockedStockDetailDO implements Serializable {
     @ApiModelProperty(name = "order_id", value = "单据id")
     private Long orderId;
 
+    @ApiModelProperty(name = "order_sn", value = "单据编号")
+    private  String orderSn;
+
     @ApiModelProperty(name = "order_id", value = "商品详情id")
     private Long orderItemId;
 
@@ -62,4 +65,6 @@ public class LockedStockDetailDO implements Serializable {
 
     @TableField(exist = false)
     private ProductDO productVO;
+
+
 }

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

@@ -207,6 +207,7 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
             LockedStockDetailDO detailDO = new LockedStockDetailDO();
             detailDO.setProductStockId(orderItemDO.getProductStockId());
             detailDO.setOrderId(id);
+            detailDO.setOrderSn(aDo.getSn());
             detailDO.setOrderItemId(orderItemDO.getId());
             detailDO.setOrderType(DetailOrderTypeEnum.ORDER);
             detailDO.setLockedNum(orderItemDO.getNum());

+ 1 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/StockDamageReportManagerImpl.java

@@ -116,6 +116,7 @@ public class StockDamageReportManagerImpl extends ServiceImpl<StockDamageReportM
             LockedStockDetailDO detailDO = new LockedStockDetailDO();
             detailDO.setProductStockId(dto.getProductStockId());
             detailDO.setOrderId(report.getId());
+            detailDO.setOrderSn(report.getSn());
             detailDO.setOrderItemId(dto.getId());
             detailDO.setOrderType(DetailOrderTypeEnum.DAMAGE);
             detailDO.setLockedNum(dto.getReportNum());

+ 1 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/StockTransferManagerImpl.java

@@ -106,6 +106,7 @@ public class StockTransferManagerImpl extends BaseServiceImpl<StockTransferMappe
             LockedStockDetailDO detailDO = new LockedStockDetailDO();
             detailDO.setProductStockId(aDoOut.getId());
             detailDO.setOrderId(aDo.getId());
+            detailDO.setOrderSn(aDo.getSn());
             detailDO.setOrderItemId(productDTO.getId());
             detailDO.setOrderType(DetailOrderTypeEnum.INVENTORY);
             detailDO.setLockedNum(productDTO.getNum());

+ 4 - 0
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KdConstants.java

@@ -35,6 +35,10 @@ public class KdConstants {
     public static final String queryRoad = "2215";
 
 
+    @ApiModelProperty(value = "查询路由轨迹地图接口")
+    public static final String queryStoreStatus = "2218";
+
+
     @ApiModelProperty(value = "回调")
     public static final String callBack = "103";
     @ApiModelProperty(value = "推送待接单状态")

+ 16 - 1
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoService.java

@@ -1,5 +1,7 @@
 package com.hys.app.service.kuaidiniao;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.service.kuaidiniao.entity.*;
 
 public interface KuaiDiNiaoService {
@@ -25,5 +27,18 @@ public interface KuaiDiNiaoService {
      * 快递鸟创建门店
      * @param createStoreModel
      */
-    void createStore(CreateStoreModel createStoreModel);
+    void createStore(CreateStoreModel createStoreModel, String constants);
+
+    /**
+     * 获取门店列表
+     * @param baseQueryParam
+     * @return
+     */
+    Page<CreateStoreModel> getStoreList(BaseQueryParam baseQueryParam);
+
+    /**
+     *
+     * @param createStoreModel
+     */
+    void selectAudit(CreateStoreModel createStoreModel);
 }

+ 73 - 8
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java

@@ -1,7 +1,6 @@
 package com.hys.app.service.kuaidiniao;
 
 import cn.hutool.core.codec.Base64;
-import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.digest.DigestUtil;
@@ -9,21 +8,21 @@ import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.converter.erp.OrderConverter;
 import com.hys.app.framework.context.user.AdminUserContext;
+import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.framework.exception.ServiceException;
 import com.hys.app.framework.util.ScriptUtil;
+import com.hys.app.mapper.erp.KdnMapper;
 import com.hys.app.mapper.goods.ProductMapper;
 import com.hys.app.model.erp.dos.*;
 import com.hys.app.model.erp.enums.OrderTypeEnum;
 import com.hys.app.model.erp.enums.SaleOrderSendStatusEnum;
 import com.hys.app.model.erp.enums.SaleOrderStatusEnum;
-import com.hys.app.model.erp.enums.SnCodeStatusEnum;
-import com.hys.app.model.erp.vo.OrderSendItemVO;
 import com.hys.app.service.erp.ItemSnCodeManager;
 import com.hys.app.service.erp.OrderManager;
 import com.hys.app.service.erp.OrderSendManager;
-import com.hys.app.service.erp.ProductManager;
 import com.hys.app.service.kuaidiniao.entity.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,7 +31,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.net.URLEncoder;
-import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -71,6 +70,9 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
     @Autowired
     private ProductMapper productMapper;
 
+    @Autowired
+    private KdnMapper kdnMapper;
+
 
     private static final Logger log = LoggerFactory.getLogger(ScriptUtil.class);
 
@@ -94,24 +96,80 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
     }
 
     @Override
-    public void createStore(CreateStoreModel createStoreModel) {
+    public void createStore(CreateStoreModel createStoreModel, String constants) {
+        Long modelId = createStoreModel.getId();
+        createStoreModel.setId(null);
+        fillParam(createStoreModel);
         try {
             String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(createStoreModel) + apiKey)), "UTF-8");
             System.out.println("创建店铺签名--------------------------------------" + design);
             //拼接参数
-            String param = "interfaceType=" + KdConstants.createStore + "&customerCode=" + id + "&requestData=" + JSONUtil.toJsonStr(createStoreModel) + "&dataSign=" + design;
+            String param = "interfaceType=" + constants + "&customerCode=" + id + "&requestData=" + JSONUtil.toJsonStr(createStoreModel) + "&dataSign=" + design;
             //发请求
             String res = HttpUtil.post(url, param);
             Map map = JSON.parseObject(res, Map.class);
-            if (ObjectUtil.isNotNull(map.get("resultCode")) && !(100 == Integer.valueOf(map.get("resultCode").toString()))) {
+            if (ObjectUtil.isNotNull(map.get("resultCode")) && !(100 == Integer.parseInt(map.get("resultCode").toString()))) {
                 throw new ServiceException("店铺创建失败" + map.get("reason").toString());
             }
+            Map dataMap = JSON.parseObject(JSON.toJSONString(map.get("data")), Map.class);
+            createStoreModel.setKdnStoreCode(dataMap.get("kdnStoreCode").toString());
+            if (ObjectUtil.isNotNull(modelId)){
+                createStoreModel.setId(modelId);
+                kdnMapper.updateById(createStoreModel);
+            }else {
+                kdnMapper.insert(createStoreModel);
+            }
         } catch (Exception e) {
             e.printStackTrace();
             throw new ServiceException("店铺创建异常");
         }
     }
 
+    @Override
+    public Page<CreateStoreModel> getStoreList(BaseQueryParam baseQueryParam) {
+        return kdnMapper.selectPage(new Page<>(baseQueryParam.getPageNo(), baseQueryParam.getPageSize()), new LambdaQueryWrapper<>());
+    }
+
+    @Override
+    public void selectAudit(CreateStoreModel createStoreModel) {
+        Map<String, Object> hashMap = new HashMap<>();
+        hashMap.put("storeCode",createStoreModel.getStoreCode());
+        try {
+            String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(hashMap) + apiKey)), "UTF-8");
+            System.out.println("获取门店状态签名--------------------------------------" + design);
+            //拼接参数
+            String param = "interfaceType=" + KdConstants.queryStoreStatus + "&customerCode=" + id + "&requestData=" + JSONUtil.toJsonStr(hashMap) + "&dataSign=" + design;
+            //发请求
+            String res = HttpUtil.post(url, param);
+            Map map = JSON.parseObject(res, Map.class);
+            if (ObjectUtil.isNotNull(map.get("resultCode")) && !(100 == Integer.parseInt(map.get("resultCode").toString()))) {
+                throw new ServiceException("请求状态失败" + map.get("reason").toString());
+            }
+            Map dataMap = JSON.parseObject(JSON.toJSONString(map.get("data")), Map.class);
+            List<Map> storeDetail = JSON.parseArray(dataMap.get("storeDetail").toString(), Map.class);
+            for (Map statusMap : storeDetail) {
+                switch (statusMap.get("intraCode").toString()) {
+                    case "SS":
+                        createStoreModel.setSsStatus(Integer.parseInt(statusMap.get("storeStatus").toString()));
+                        createStoreModel.setSsReason(statusMap.get("operationFailReason").toString());
+                    case "DD":
+                        createStoreModel.setDdStatus(Integer.parseInt(statusMap.get("storeStatus").toString()));
+                        createStoreModel.setDdReason(statusMap.get("operationFailReason").toString());
+                    case "FN":
+                        createStoreModel.setFnStatus(Integer.parseInt(statusMap.get("storeStatus").toString()));
+                        createStoreModel.setFnReason(statusMap.get("operationFailReason").toString());
+                    case "MTPS":
+                        createStoreModel.setMtStatus(Integer.parseInt(statusMap.get("storeStatus").toString()));
+                        createStoreModel.setMtReason(statusMap.get("operationFailReason").toString());
+                }
+            }
+            kdnMapper.updateById(createStoreModel);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ServiceException("请求发生异常");
+        }
+    }
+
 
     /**
      * @param dataJson 业务参数
@@ -165,6 +223,13 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
 
     }
 
+    private void fillParam(CreateStoreModel model) {
+        LongitudeLatitude longitudeLatitudeSender = GaoDeUtil.getLongitudeLatitude(model.getProvinceName() + model.getCityName() + model.getAreaName() + model.getAddress());
+        model.setLongitude(longitudeLatitudeSender.getLongitude());
+        model.setLatitude(longitudeLatitudeSender.getLatitude());
+        //填充送货人的经纬度
+    }
+
     /**
      * 推送待接单状态	接口指令103,状态码100
      * 推送业务员接单状态	接口指令103,状态码201

+ 26 - 8
module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/CreateStoreModel.java

@@ -1,5 +1,6 @@
 package com.hys.app.service.kuaidiniao.entity;
 
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -12,8 +13,11 @@ import java.util.List;
  * 预下单参数
  */
 @Data
+@TableName("erp_store_kdn")
 public class CreateStoreModel {
 
+    private Long id;
+
     @ApiModelProperty(value = "1、storeCode平台门店编码(商家自定义门店编码,唯一),个人即时配编码固定传storeCode;2、merchantCode快递鸟门店编码(商家门店编码映射KDN门店编码)个人即时配编码固传merchantCode”;3、平台门店编码和快递鸟门店编码必填一项,且两者只能同时填一项。")
     @NotBlank
     private String storeCode;
@@ -43,29 +47,25 @@ public class CreateStoreModel {
     private String address;
 
     @ApiModelProperty(value = "坐标类型1:百度地图、 2:高德地图 、3:腾讯地图")
-    @NotBlank
     private Integer lbsType = 2;
 
     @ApiModelProperty(value = "经度,精确到小数点后5位")
-    @NotBlank
     private String longitude;
 
     @ApiModelProperty(value = "纬度,精确到小数点后5位")
-    @NotBlank
     private String latitude;
 
     @ApiModelProperty(value = "门店联系人姓名,存在配送员上门前联系门店场景,如没有找到门店,联系门店联系人进行确认")
     @NotBlank
     private String contactName;
 
-    @ApiModelProperty(value = "门店联系人手机号(门店联系人手机号和座机号必填一项)")
-    @NotBlank
-    private String  mobile;
-
     @ApiModelProperty(value = "门店联系人电话(门店联系人手机号和座机号必填一项)")
     @NotBlank
     private String phone;
 
+    @ApiModelProperty(value = "附件类型(有上传附件时,该字段必填)1:URL地址2:Base64(不支持) 3:图片hash值")
+    private Integer attachType = 1;
+
     @ApiModelProperty(value = "身份证正面图片(使用美团、蜂鸟必填)")
     @NotBlank
     private String idCardFront;
@@ -92,9 +92,27 @@ public class CreateStoreModel {
 
     @ApiModelProperty(value = "门店照图片(使用美团、蜂鸟必填)")
     @NotBlank
-    private String  shopPicture;
+    private String shopPicture;
 
     @ApiModelProperty(value = "门店拥有人手持身份证、营业执照图片(使用美团、蜂鸟必填)")
     @NotBlank
     private String handheldLicencePic;
+
+    private String provinceCityArea;
+
+    private String kdnStoreCode;
+
+    private Integer ssStatus;
+    private String ssReason;
+
+    private Integer ddStatus;
+    private String ddReason;
+
+    private Integer mtStatus;
+    private String mtReason;
+
+    private Integer fnStatus;
+    private String fnReason;
+
+
 }

+ 1 - 1
server/src/main/resources/application.yml

@@ -4,7 +4,7 @@ spring:
   application:
     name: erp-server
   profiles:
-    active: test
+    active: local
   jackson:
     property-naming-strategy: SNAKE_CASE
   servlet: