1
0
Pārlūkot izejas kodu

通知回调接口1123

qng 3 gadi atpakaļ
vecāks
revīzija
27e6af365d

+ 83 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/OrderProcessRecordExternalController.java

@@ -0,0 +1,83 @@
+package com.kmall.admin.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.kmall.admin.entity.OrderProcessRecordEntity;
+import com.kmall.admin.fromcomm.service.SysConfigService;
+import com.kmall.admin.haikong.utils.Message;
+import com.kmall.admin.haikong.utils.OutRequestMessage;
+import com.kmall.admin.service.OrderProcessRecordService;
+import com.kmall.admin.utils.jackson.JacksonUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static com.kmall.admin.haikong.utils.VmcconnectSignUtils.checkMsg;
+
+
+/**
+ * 订单流转过程记录表外部接口
+ *
+ */
+@RestController
+@RequestMapping("/orderProRecordExternal")
+public class OrderProcessRecordExternalController {
+
+    private final Logger logger = LoggerFactory.getLogger(OrderProcessRecordExternalController.class);
+
+    @Autowired
+    private OrderProcessRecordService orderProcessRecordService;
+    @Autowired
+    private SysConfigService sysConfigService;
+
+    /**
+     * 订单流转信息回调通知接口
+     * @return
+     */
+    @PostMapping("/hkNotice")
+    public Message hknoticeMsg(@RequestBody OutRequestMessage outRequestMessage) {
+        try{
+            List<OrderProcessRecordEntity> orderProcessRecordList  = JacksonUtil.fromStringJson(outRequestMessage.getData(), List.class);
+            //签名验证
+            String strSign =outRequestMessage.getSign()==null?"":outRequestMessage.getSign();
+            String timestamp = outRequestMessage.getTimestamp()==null?"":outRequestMessage.getTimestamp();
+            String key = sysConfigService.getValueHk("HK_NOTICE_KEY");
+            Integer dataNum = Integer.valueOf(sysConfigService.getValueHk("HK_NOTICE_NUM"));
+            if(strSign.equals("")||timestamp.equals("")){
+                return Message.error("1001","参数错误");
+
+            }
+            if(!strSign.equals(checkMsg(timestamp,key))){
+                return Message.error("1003","签名错误");
+            }
+            if(orderProcessRecordList.size()>dataNum){
+                return Message.error("1003","通知数据最多"+dataNum+"条,请分批通知");
+            }
+            // 根据指定属性分组,并统计数量(key:指定属性,value:数量)
+            Map<Object, Long> mapGroup = orderProcessRecordList.stream().collect(Collectors.groupingBy(recordEntity -> recordEntity.getOrderSn(), Collectors.counting()));
+            // 筛选Map中value大于1的key
+            Stream<Object> stringStream = mapGroup.entrySet().stream().filter(entry -> entry.getValue() > 1).map(entry -> entry.getKey());
+            Long num = stringStream.count();
+            if(num>0L){
+                return Message.error("1003","订单数据存在重复");
+            }
+            return orderProcessRecordService.saveHkNoticeMsg(orderProcessRecordList);
+        }catch (Exception e){
+            logger.error("hknoticeMsg---订单流转信息回调通知接口数据="+ JSON.toJSONString(outRequestMessage),e);
+            return Message.error("1001","参数错误");
+        }
+    }
+
+    @RequestMapping("/users")
+    public String test() {
+        return "qwqwq";
+    }
+
+
+
+}

+ 4 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/OrderProcessRecordDao.java

@@ -18,4 +18,8 @@ public interface OrderProcessRecordDao extends BaseDao<OrderProcessRecordEntity>
     OrderProcessRecordEntity queryObjectByOrderSn(String orderSn);
 
     List<OrderProcessRecordEntity> queryListBySendSmsStatus(@Param("customsSendSmsStatus") String customsSendSmsStatus);
+
+    void updateHkNoticeMsg(List<OrderProcessRecordEntity> orderProcessRecordList);
+
+    Integer queryHkOrderTotal(List<OrderProcessRecordEntity> orderProcessRecordList);
 }

+ 84 - 1
kmall-admin/src/main/java/com/kmall/admin/entity/OrderProcessRecordEntity.java

@@ -182,7 +182,34 @@ public class OrderProcessRecordEntity implements Serializable {
 
 
     private String customsSendSmsStatus;
-
+    /**
+     * 订单申报时间
+     */
+    private Date orderDeclarationTime;
+    /**
+     * 订单申报状态
+     */
+    private String orderDeclareStatus;
+    /**
+     * 快递公司简称
+     */
+    private String shippingCode;
+    /**
+     * 快递公司名称
+     */
+    private String shippingName;
+    /**
+     * 运单申报时间
+     */
+    private Date ewbStartTime;
+    /**
+     * 清单编号
+     */
+    private String clearNo;
+    /**
+     * 海关清关类型 ,1:放行:2:查验;3:清关失败; 4:其他
+     */
+    private String clearType;
 
     public String getCustomsSendSmsStatus() {
         return customsSendSmsStatus;
@@ -658,4 +685,60 @@ public class OrderProcessRecordEntity implements Serializable {
     public Date getTstm() {
         return tstm;
     }
+
+    public Date getOrderDeclarationTime() {
+        return orderDeclarationTime;
+    }
+
+    public void setOrderDeclarationTime(Date orderDeclarationTime) {
+        this.orderDeclarationTime = orderDeclarationTime;
+    }
+
+    public String getOrderDeclareStatus() {
+        return orderDeclareStatus;
+    }
+
+    public void setOrderDeclareStatus(String orderDeclareStatus) {
+        this.orderDeclareStatus = orderDeclareStatus;
+    }
+
+    public String getShippingCode() {
+        return shippingCode;
+    }
+
+    public void setShippingCode(String shippingCode) {
+        this.shippingCode = shippingCode;
+    }
+
+    public String getShippingName() {
+        return shippingName;
+    }
+
+    public void setShippingName(String shippingName) {
+        this.shippingName = shippingName;
+    }
+
+    public Date getEwbStartTime() {
+        return ewbStartTime;
+    }
+
+    public void setEwbStartTime(Date ewbStartTime) {
+        this.ewbStartTime = ewbStartTime;
+    }
+
+    public String getClearNo() {
+        return clearNo;
+    }
+
+    public void setClearNo(String clearNo) {
+        this.clearNo = clearNo;
+    }
+
+    public String getClearType() {
+        return clearType;
+    }
+
+    public void setClearType(String clearType) {
+        this.clearType = clearType;
+    }
 }

+ 48 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/vip/Mall2MemberConsumptionRecordsEntity.java

@@ -60,6 +60,22 @@ public class Mall2MemberConsumptionRecordsEntity implements Serializable {
      * +时间戳
      */
     private Date tstm;
+    /**
+     * 会员唯一标识或者电话
+     */
+    private String open_id;
+    /**
+     * 积分变动流水Id
+     */
+    private String statement_id;
+    /**
+     * 回退积分数量
+     */
+    private Integer rollback_score;
+    /**
+     * 渠道自定义积分变动唯一标识,
+     */
+    private String change_id;
 
     /**
      * 设置:主键
@@ -220,4 +236,36 @@ public class Mall2MemberConsumptionRecordsEntity implements Serializable {
     public void setShopName(String shopName) {
         this.shopName = shopName;
     }
+
+    public String getOpen_id() {
+        return open_id;
+    }
+
+    public void setOpen_id(String open_id) {
+        this.open_id = open_id;
+    }
+
+    public String getStatement_id() {
+        return statement_id;
+    }
+
+    public void setStatement_id(String statement_id) {
+        this.statement_id = statement_id;
+    }
+
+    public Integer getRollback_score() {
+        return rollback_score;
+    }
+
+    public void setRollback_score(Integer rollback_score) {
+        this.rollback_score = rollback_score;
+    }
+
+    public String getChange_id() {
+        return change_id;
+    }
+
+    public void setChange_id(String change_id) {
+        this.change_id = change_id;
+    }
 }

+ 6 - 0
kmall-admin/src/main/java/com/kmall/admin/fromcomm/service/SysConfigService.java

@@ -62,4 +62,10 @@ public interface SysConfigService {
      */
     public <T> T getConfigObject(String key, Class<T> clazz);
 
+    /**
+     * 根据key,获取配置的value值
+     *
+     * @param key          key
+     */
+    public String getValueHk(String key);
 }

+ 6 - 0
kmall-admin/src/main/java/com/kmall/admin/fromcomm/service/impl/SysConfigServiceImpl.java

@@ -74,4 +74,10 @@ public class SysConfigServiceImpl implements SysConfigService {
 			throw new RRException("获取参数失败");
 		}
 	}
+
+	@Override
+	public String getValueHk(String key) {
+		String value = sysConfigDao.queryByKey(key);
+		return value;
+	}
 }

+ 173 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/utils/Message.java

@@ -0,0 +1,173 @@
+package com.kmall.admin.haikong.utils;
+
+import com.google.common.base.Strings;
+
+import java.io.Serializable;
+
+/**
+ * 通用消息封装
+ * 
+ * @ClassName: Message
+ * @author yechao
+ * @date 2017年5月3日 下午2:03:14
+ * @author Scott Chen
+ * @date 2017-09-19 16:60
+ * @Description:
+ */
+public class Message implements Serializable {
+
+	private static final long serialVersionUID = 4081619286503989887L;
+
+	private boolean isSuccess;
+
+	/**
+	 * 消息代码 , 由使用者自由发挥
+	 */
+	private String code;
+	/**
+	 * 消息内容体 , 由使用者自由发挥
+	 */
+	private String msg;
+	/**
+	 * 扩展
+	 */
+	private Object extend;
+
+	private Message() {
+	}
+
+	public String getCode() {
+		return code;
+	}
+	public String getMsg() {
+		return msg;
+	}
+	public Object getExtend() {
+		return extend;
+	}
+	public boolean isSuccess() {
+		return isSuccess;
+	}
+
+	public static Builder builder() {
+		return new Builder();
+	}
+	public static Builder builder(String code, String msg) {
+		return new Builder(code, msg);
+	}
+	public static Builder builder(String code, String msg, Object extend) {
+		return new Builder(code, msg, extend);
+	}
+
+
+	//---------- 直接返回结果 ----------
+	public static Message success() {
+		return new Builder().build();
+	}
+	public static Message success(Object object) {
+		Builder builder = new Builder();
+		return builder.setExtend(object).build();
+	}
+
+	public static Message success(String msg) {
+		return new Builder(MessageCode.SUCCESS_CODE, msg).build();
+	}
+
+	public static Message success(String msg, Object object) {
+		Builder builder = new Builder(MessageCode.SUCCESS_CODE, msg, object);
+		return builder.build();
+	}
+
+	public static Message success(String code, String msg, Object object) {
+		Builder builder = new Builder(code, msg, object);
+		return builder.build();
+	}
+	public static Message success(String code, String msg) {
+		return new Builder(code, msg).build();
+	}
+
+	//--- 错误----------
+	public static Message error() {
+		return new Builder(MessageCode.ERROR_CODE, MessageCode.ERROR_MSG).build();
+	}
+	public static Message error(String msg) {
+		return new Builder(MessageCode.ERROR_CODE, msg).build();
+	}
+	public static Message error(String code, String msg) {
+		return new Builder(code, msg).build();
+	}
+
+	//--- 失败----------
+	public static Message failed() {
+		return new Builder(MessageCode.FAILED_CODE, MessageCode.FAILED_MSG).build();
+	}
+	public static Message failed(String msg) {
+		return new Builder(MessageCode.FAILED_CODE, msg).build();
+	}
+	public static Message failed(String code, String msg) {
+		return new Builder(code, msg).build();
+	}
+
+
+	/**
+	 * 消息构建器类
+	 */
+	public static class Builder {
+
+		private boolean isSuccess;
+		private String code;
+		private String msg;
+		private Object extend;
+
+		public Builder() {
+			this.isSuccess = true;
+			this.code = MessageCode.SUCCESS_CODE;
+			this.msg = MessageCode.SUCCESS_MSG;
+			this.extend = null;
+		}
+
+		public Builder(String code, String msg) {
+			this.code = Strings.isNullOrEmpty(code) ? MessageCode.SUCCESS_CODE : code;
+			this.msg = Strings.isNullOrEmpty(msg) ? MessageCode.SUCCESS_MSG : msg;
+			this.isSuccess = this.code.equals(MessageCode.SUCCESS_CODE) ? true : false;
+		}
+
+		public Builder(String code, String msg, Object extend) {
+			this.code = Strings.isNullOrEmpty(code) ? MessageCode.SUCCESS_CODE : code;
+			this.msg = Strings.isNullOrEmpty(msg) ? MessageCode.SUCCESS_MSG : msg;
+			this.extend = extend;
+			this.isSuccess = this.code.equals(MessageCode.SUCCESS_CODE) ? true : false;
+		}
+
+		public Message build() {
+			Message message = new Message();
+			message.isSuccess = this.isSuccess;
+			message.code = this.code;
+			message.msg = this.msg;
+			message.extend = this.extend;
+			return message;
+		}
+
+		public void setSuccess(boolean success) {
+			isSuccess = success;
+		}
+
+		public Builder setCode(String code) {
+			this.code = code;
+			return this;
+		}
+
+		public Builder setMsg(String msg) {
+			this.msg = msg;
+			return this;
+		}
+
+		public Builder setExtend(Object extend) {
+			this.extend = extend;
+			return this;
+		}
+
+
+	}
+
+}

+ 36 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/utils/MessageCode.java

@@ -0,0 +1,36 @@
+package com.kmall.admin.haikong.utils;
+
+/**
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-09-20 12:38
+ */
+public class MessageCode {
+
+    public static final String SUCCESS_CODE = "0";
+    public static final String SUCCESS_MSG = "成功";
+
+    public static final String FAILED_CODE = "-1";
+    public static final String FAILED_MSG = "失败";
+
+    public static final String ERROR_CODE = "-2";
+    public static final String ERROR_MSG = "错误";
+
+    public static final String EXCEPTION_CODE = "-3";
+    public static final String EXCEPTION_MSG = "系统内部异常!";
+
+    public static final String NULL_CODE = "-4";
+    public static final String NULL_MSG = "为空";
+
+    public static final String TIMESTAMP_EXPIRES_CODE = "-5";
+    public static final String TIMESTAMP_EXPIRES_MSG = "时间戳已过期";
+
+    public static final String ERROR_LENGTH_CODE = "-6";
+    public static final String ERROR_LENGTH_MSG = "超出长度范围";
+
+
+    public static final String CONDUCT_CODE = "2";
+    public static final String CONDUCT_MSG = "进行中";
+
+
+}

+ 46 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/utils/OutRequestMessage.java

@@ -0,0 +1,46 @@
+package com.kmall.admin.haikong.utils;
+
+import java.io.Serializable;
+
+/**
+ * 外部请求消息结构
+ * 由外部系统发起
+ *
+ * @author Scott Chen
+ * @since 1.0
+ * 2018-03-28
+ */
+public class OutRequestMessage implements Serializable {
+    private static final long serialVersionUID = -3044821399294307105L;
+
+    //业务数据
+    private String data;
+    //时间戳
+    private String timestamp;
+    //签名
+    private String sign;
+
+    public String getData() {
+        return data;
+    }
+
+    public void setData(String data) {
+        this.data = data;
+    }
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(String timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
+}

+ 255 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/utils/ResponseMessage.java

@@ -0,0 +1,255 @@
+package com.kmall.admin.haikong.utils;
+
+import com.google.common.base.Strings;
+import com.kmall.admin.utils.data.response.ResponseMessageData;
+import com.kmall.admin.utils.oms.result.Result;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Scott Chen
+ * @date 2017/4/20
+ */
+public class ResponseMessage {
+
+    private static final String SUCCESS_CODE = "0";
+    private static final String SUCCESS_INFO = "成功";
+
+    public static final String ERROR_CODE = "-1";
+    public static final String ERROR_INFO = "消息错误";
+
+    private static final String FAILURE_CODE = "-2";
+    private static final String FAILUER_INFO = "消息失败";
+
+    private String code;
+    private String msg;
+    private ResponseMessageData data;
+
+    private ResponseMessage() {
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public ResponseMessageData getData() {
+        return data;
+    }
+
+    public static boolean isSuccess(ResponseMessage message) {
+        return message.getCode() == null ? false : message.getCode().equals(SUCCESS_CODE) ? true : false;
+    }
+
+    public static ResponseMessage transResponseMessage(Object object) {
+        if (object instanceof Message) {
+            Message message = (Message) object;
+            return new Builder(message.getCode(), message.getMsg(), message.getExtend(), Object.class).build();
+        } else if (object instanceof Result) {
+            Result result = (Result) object;
+            return new Builder(result.getCode(), result.getMsg(), result.getData(), Object.class).build();
+        } else {
+            return null;
+        }
+
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+    public static Builder builder(String code, String msg) {
+        return new Builder(code, msg);
+    }
+    public static Builder builder(String code, String msg, ResponseMessageData responseMessageData) {
+        return new Builder(code, msg, responseMessageData);
+    }
+    public static Builder builder(String code, String msg, List list) {
+        return new Builder(code, msg, list);
+    }
+    public static <T> Builder builder(T t,  Class<T> type) {
+        return new Builder(SUCCESS_CODE, SUCCESS_INFO, t, type);
+    }
+    public static <T> Builder builder(String msg, T t, Class<T> type) {
+        return new Builder(SUCCESS_CODE, msg, t, type);
+    }
+    public static <T> Builder builder(String code, String msg, T t, Class<T> type) {
+        return new Builder(code, msg, t, type);
+    }
+
+
+    //---------- 直接返回结果 ----------
+    //成功
+    public static ResponseMessage success() {
+        return new Builder().build();
+    }
+    public static ResponseMessage success(String code, String msg) {
+        return new Builder(code, msg).build();
+    }
+    public static ResponseMessage success(String msg) {
+        return new Builder(SUCCESS_CODE, msg).build();
+    }
+
+    public static ResponseMessage success(Map map) {
+        return new Builder(SUCCESS_CODE, SUCCESS_INFO, map).build();
+    }
+    public static ResponseMessage success(String msg, Map map) {
+        return new Builder(SUCCESS_CODE, msg, map).build();
+    }
+    public static ResponseMessage success(List rows) {
+        return new Builder(SUCCESS_CODE, SUCCESS_INFO, rows).build();
+    }
+    public static ResponseMessage success(String msg, List rows) {
+        return new Builder(SUCCESS_CODE, msg, rows).build();
+    }
+    public static ResponseMessage success(String code, String msg, List rows) {
+        return new Builder(code, msg, rows).build();
+    }
+    public static <T> ResponseMessage success(T t, Class<T> type) {
+        return new Builder(SUCCESS_CODE, SUCCESS_INFO, t, type).build();
+    }
+    public static <T> ResponseMessage success(String msg, T t, Class<T> type) {
+        return new Builder(SUCCESS_CODE, msg, t, type).build();
+    }
+    public static <T> ResponseMessage success(String code, String msg, T t, Class<T> type) {
+        return new Builder(code, msg, t, type).build();
+    }
+
+    //错误
+    public static ResponseMessage error() {
+        return new Builder(ERROR_CODE, ERROR_INFO).build();
+    }
+    public static ResponseMessage error(String code, String msg) {
+        return new Builder(code, msg).build();
+    }
+    public static ResponseMessage error(String msg) {
+        return new Builder(ERROR_CODE, msg).build();
+    }
+    public static ResponseMessage error(Map map) {
+        return new Builder(ERROR_CODE, ERROR_INFO, map).build();
+    }
+    public static ResponseMessage error(String msg, Map map) {
+        return new Builder(ERROR_CODE, msg, map).build();
+    }
+    public static ResponseMessage error(List rows) {
+        return new Builder(ERROR_CODE, ERROR_INFO, rows).build();
+    }
+    public static ResponseMessage error(String msg, List rows) {
+        return new Builder(ERROR_CODE, msg, rows).build();
+    }
+    public static ResponseMessage error(String code, String msg, List rows) {
+        return new Builder(code, msg, rows).build();
+    }
+
+    //失败
+    public static ResponseMessage failed() {
+        return new Builder(FAILURE_CODE, FAILUER_INFO).build();
+    }
+    public static ResponseMessage failed(String code, String msg) {
+        return new Builder(code, msg).build();
+    }
+    public static ResponseMessage failed(String msg) {
+        return new Builder(FAILURE_CODE, msg).build();
+    }
+
+    public static ResponseMessage failed(Map map) {
+        return new Builder(ERROR_CODE, ERROR_INFO, map).build();
+    }
+    public static ResponseMessage failed(String msg, Map map) {
+        return new Builder(ERROR_CODE, msg, map).build();
+    }
+    public static ResponseMessage failed(List rows) {
+        return new Builder(FAILURE_CODE, FAILUER_INFO, rows).build();
+    }
+    public static ResponseMessage failed(String msg, List rows) {
+        return new Builder(ERROR_CODE, msg, rows).build();
+    }
+    public static ResponseMessage failed(String code, String msg, List rows) {
+        return new Builder(code, msg, rows).build();
+    }
+
+    /**
+     * 消息构建器类
+     */
+    public static class Builder {
+        private String code;
+        private String msg;
+        private ResponseMessageData data;
+
+        public Builder() {
+            this.code = SUCCESS_CODE;
+            this.msg = SUCCESS_INFO;
+            this.data = ResponseMessageData.builder().build();
+        }
+
+        public Builder(String code, String msg) {
+            this.code = Strings.isNullOrEmpty(code) ? SUCCESS_CODE : code;
+            this.msg = Strings.isNullOrEmpty(msg) ? SUCCESS_INFO : msg;
+            this.data = ResponseMessageData.builder().build();
+        }
+
+        public Builder(String code, String msg, ResponseMessageData responseMessageData) {
+            this.code = Strings.isNullOrEmpty(code) ? SUCCESS_CODE : code;
+            this.msg = Strings.isNullOrEmpty(msg) ? SUCCESS_INFO : msg;
+            this.data = responseMessageData;
+        }
+
+        public Builder(String code, String msg, Map map) {
+            this.code = Strings.isNullOrEmpty(code) ? SUCCESS_CODE : code;
+            this.msg = Strings.isNullOrEmpty(msg) ? SUCCESS_INFO : msg;
+            this.data = ResponseMessageData.builder(map, Map.class).build();
+        }
+
+        public Builder(String code, String msg, List rows) {
+            this.code = Strings.isNullOrEmpty(code) ? SUCCESS_CODE : code;
+            this.msg = Strings.isNullOrEmpty(msg) ? SUCCESS_INFO : msg;
+            this.data = ResponseMessageData.builder(rows).build();
+        }
+
+        public <T> Builder(T t, Class<T> type) {
+            this.code = SUCCESS_CODE;
+            this.msg = SUCCESS_INFO;
+            this.data = ResponseMessageData.builder(t, type).build();
+        }
+
+        public <T> Builder(String msg, T t, Class<T> type) {
+            this.code = SUCCESS_CODE;
+            this.msg = Strings.isNullOrEmpty(msg) ? SUCCESS_INFO : msg;
+            this.data = ResponseMessageData.builder(t, type).build();
+        }
+
+        public <T> Builder(String code, String msg, T t, Class<T> type) {
+            this.code = Strings.isNullOrEmpty(code) ? SUCCESS_CODE : code;
+            this.msg = Strings.isNullOrEmpty(msg) ? SUCCESS_INFO : msg;
+            this.data = ResponseMessageData.builder(t, type).build();
+        }
+
+        public Builder setCode(String code) {
+            this.code = code;
+            return this;
+        }
+
+        public Builder setMsg(String msg) {
+            this.msg = msg;
+            return this;
+        }
+
+        public Builder setData(ResponseMessageData data) {
+            this.data = data;
+            return this;
+        }
+
+        public ResponseMessage build() {
+            ResponseMessage message = new ResponseMessage();
+            message.code = this.code;
+            message.msg = this.msg;
+            message.data = this.data;
+            return message;
+        }
+
+    }
+}
+

+ 8 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/utils/VmcconnectSignUtils.java

@@ -29,5 +29,13 @@ public class VmcconnectSignUtils {
     }
 
 
+    //签名加密校验
+    public static String checkMsg(String timestamp,String sekey) {
+        String sign = sekey+ timestamp;
+        return Md5Utils.encryption(sign);
+    }
+
+
+
 
 }

+ 8 - 0
kmall-admin/src/main/java/com/kmall/admin/service/OrderProcessRecordService.java

@@ -2,6 +2,7 @@ package com.kmall.admin.service;
 
 
 import com.kmall.admin.entity.OrderProcessRecordEntity;
+import com.kmall.admin.haikong.utils.Message;
 
 import java.util.List;
 import java.util.Map;
@@ -74,4 +75,11 @@ public interface OrderProcessRecordService {
     OrderProcessRecordEntity queryObjectByOrderSn(String orderSn);
 
     void sendCustomsSuccessSms();
+
+    /**
+     * 订单流转信息回调通知接口
+     * @param orderProcessRecordList
+     * @return
+     */
+    Message saveHkNoticeMsg(List<OrderProcessRecordEntity> orderProcessRecordList);
 }

+ 23 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderProcessRecordServiceImpl.java

@@ -1,5 +1,6 @@
 package com.kmall.admin.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.kmall.admin.dao.OrderDao;
 import com.kmall.admin.dao.OrderProcessRecordDao;
 import com.kmall.admin.dao.StoreSmsConfigDao;
@@ -7,6 +8,7 @@ import com.kmall.admin.entity.OrderEntity;
 import com.kmall.admin.entity.OrderProcessRecordEntity;
 import com.kmall.admin.entity.PickUpCodeEntity;
 import com.kmall.admin.entity.StoreSmsConfigEntity;
+import com.kmall.admin.haikong.utils.Message;
 import com.kmall.admin.service.OrderProcessRecordService;
 import com.kmall.admin.service.PickUpCodeService;
 import com.kmall.api.util.SendMsgUtil;
@@ -155,4 +157,25 @@ public class OrderProcessRecordServiceImpl implements OrderProcessRecordService
 
         }
     }
+
+    /**
+     * 海控通知回调接口
+     * @param orderProcessRecordList
+     * @return
+     */
+    @Override
+    public Message saveHkNoticeMsg(List<OrderProcessRecordEntity> orderProcessRecordList) {
+       try{
+           Integer count = orderProcessRecordDao.queryHkOrderTotal(orderProcessRecordList);
+           if(orderProcessRecordList.size()!=count){
+               return Message.success("1003","订单不存在");
+           }else{
+               orderProcessRecordDao.updateHkNoticeMsg(orderProcessRecordList);
+           }
+       }catch (Exception e){
+           logger.error("saveHkNoticeMsg-------[海控通知回调接口插入错误]"+ JSON.toJSONString(orderProcessRecordList));
+           return Message.success("1001","参数错误");
+       }
+        return Message.success("1002","通知成功");
+    }
 }

+ 42 - 0
kmall-admin/src/main/resources/mybatis/mapper/OrderProcessRecordDao.xml

@@ -291,4 +291,46 @@ select
 		</foreach>
 	</delete>
 
+
+
+	<!--批量修改-->
+	<update id="updateHkNoticeMsg" parameterType="list">
+		update mall_order_process_record
+		<trim prefix="set" suffixOverrides=",">
+			<trim prefix="points_rules_id =case" suffix="end,">
+				<foreach collection="list" item="item" index="index">
+						when order_sn=#{item.orderSn}
+						then
+							<if test="eleOrderStartTime != null">`ele_order_start_time` = #{item.eleOrderStartTime}, </if>
+							<if test="eleOrderSuccTime != null">`ele_order_succ_time` = #{item.eleOrderSuccTime}, </if>
+							<if test="isEleOrderSend != null">`is_ele_order_send` = #{item.isEleOrderSend}, </if>
+							<if test="waybillStartTime != null">`waybill_start_time` = #{item.waybillStartTime}, </if>
+							<if test="waybillSuccTime != null">`waybill_succ_time` = #{item.waybillSuccTime}, </if>
+							<if test="logisticsNo != null">`logistics_no` = #{item.logisticsNo}, </if>
+							<if test="customsStartTime != null">`customs_start_time` = #{item.customsStartTime}, </if>
+							<if test="customsSuccTime != null">`customs_succ_time` = #{item.customsSuccTime}, </if>
+							<if test="invtNo != null">`invt_no` = #{item.invtNo}, </if>
+							<if test="isCustomsSend != null">`is_customs_send` = #{item.isCustomsSend}, </if>
+				</foreach>
+			</trim>
+		</trim>
+		where order_sn in
+		<foreach collection="list" item="item" index="index" separator="," open="(" close=")">
+			#{item.orderSn}
+		</foreach>
+	</update>
+
+	<select id="queryHkOrderTotal" parameterType="java.util.List" resultType="java.lang.Integer">
+		select
+		 count(*)
+		from mall_order_process_record
+		where
+		<if test="list != null">
+			and order_sn in
+			<foreach collection="list" item="item" open="(" separator="," close=")">
+				#{item.orderSn}
+			</foreach>
+		</if>
+	</select>
+
 </mapper>