Преглед изворни кода

调整和商城的对接逻辑

wuxw пре 2 година
родитељ
комит
a3ebd41668

+ 37 - 0
java110-interface/src/main/java/com/java110/intf/job/IMallInnerServiceSMO.java

@@ -0,0 +1,37 @@
+package com.java110.intf.job;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.config.feign.FeignConfiguration;
+import com.java110.dto.user.UserDto;
+import com.java110.vo.ResultVo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+/**
+ * @ClassName ITaskInnerServiceSMO
+ * @Description dataBus统一处理类
+ * @Author wuxw
+ * @Date 2019/4/24 9:04
+ * @Version 1.0
+ * add by wuxw 2019/4/24
+ **/
+@FeignClient(name = "job-service", configuration = {FeignConfiguration.class})
+@RequestMapping("/mallApi")
+public interface IMallInnerServiceSMO {
+
+
+    /**
+     * <p>重启设备</p>
+     *
+     * @param reqJson 请求信息
+     * @return TaskDto 对象数据
+     */
+    @RequestMapping(value = "/postMall", method = RequestMethod.POST)
+    ResultVo postMall(@RequestBody JSONObject reqJson);
+
+
+    @RequestMapping(value = "/generatorMallCode", method = RequestMethod.POST)
+    String generatorMallCode(@RequestBody UserDto userDto);
+}

+ 26 - 0
service-job/src/main/java/com/java110/job/mall/ISendMall.java

@@ -0,0 +1,26 @@
+package com.java110.job.mall;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.vo.ResultVo;
+
+/**
+ *
+ */
+public interface ISendMall {
+
+    /***
+     * post 请求
+     * @param url
+     * @param paramIn
+     * @return
+     */
+    ResultVo post(String url, JSONObject paramIn);
+
+
+    /***
+     * post 请求
+     * @param url
+     * @return
+     */
+    ResultVo get(String url);
+}

+ 195 - 0
service-job/src/main/java/com/java110/job/mall/SendMallImpl.java

@@ -0,0 +1,195 @@
+package com.java110.job.mall;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.client.RestTemplate;
+import com.java110.core.factory.AuthenticationFactory;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.machine.MachineTranslateErrorDto;
+import com.java110.intf.common.IMachineTranslateErrorInnerServiceSMO;
+import com.java110.job.adapt.hcIot.IotConstant;
+import com.java110.po.machine.MachineTranslateErrorPo;
+import com.java110.utils.cache.CommonCache;
+import com.java110.utils.cache.MappingCache;
+import com.java110.utils.constant.CommonConstant;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.UUID;
+
+@Service
+public class SendMallImpl implements ISendMall {
+
+    public static final String GET_TOKEN_URL = "/mall/api/login.pcUserLogin";
+    private static final String DEFAULT_MALL_URL = "https://mall.homecommunity.cn";
+    public static final String MALL_DOMAIN = "MALL"; // 物联网域
+
+    public static final String MALL_TOKEN = "MALL_ACCESS_TOKEN";
+    private static final String MALL_URL = "MALL_URL";
+
+
+    @Autowired
+    private RestTemplate outRestTemplate;
+
+    @Autowired
+    private IMachineTranslateErrorInnerServiceSMO machineTranslateErrorInnerServiceSMOImpl;
+
+
+    @Override
+    public ResultVo get(String url) {
+        HttpHeaders header = getHeaders(url, "", HttpMethod.POST);
+        HttpEntity<String> httpEntity = new HttpEntity<String>("", header);
+        ResponseEntity<String> tokenRes = outRestTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
+
+        String body = tokenRes.getBody();
+        JSONObject paramOut = JSONObject.parseObject(body);
+
+        return new ResultVo(paramOut.getIntValue("code"), paramOut.getString("msg"), paramOut.get("data"));
+    }
+
+    @Override
+    public ResultVo post(String url, JSONObject paramIn) {
+        url = getUrl(url);
+        HttpHeaders header = getHeaders(url, paramIn.toJSONString(), HttpMethod.POST);
+        HttpEntity<String> httpEntity = new HttpEntity<String>(paramIn.toJSONString(), header);
+        ResponseEntity<String> tokenRes = outRestTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
+
+        String body = tokenRes.getBody();
+        JSONObject paramOut = JSONObject.parseObject(body);
+
+        if (paramOut.getIntValue("code") != ResultVo.CODE_OK) {
+            saveTranslateError(paramIn.getString("communityId"), paramIn.toJSONString(), body, url);
+        }
+
+        int total = 1;
+        int records = 1;
+        if (paramOut.containsKey("total")) {
+            total = paramOut.getIntValue("total");
+        }
+
+        if (paramOut.containsKey("records")) {
+            records = paramOut.getIntValue("records");
+        }
+
+        return new ResultVo(records, total, paramOut.getIntValue("code"), paramOut.getString("msg"), paramOut.get("data"));
+    }
+
+
+    public void saveTranslateError(String communityId, String reqJson, String resJson, String url) {
+        MachineTranslateErrorPo machineTranslateErrorPo = new MachineTranslateErrorPo();
+        machineTranslateErrorPo.setLogId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_logId));
+        machineTranslateErrorPo.setCommunityId(communityId);
+        machineTranslateErrorPo.setMachineTranslateId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_machineTranslateId));
+        machineTranslateErrorPo.setReqBody(reqJson);
+        machineTranslateErrorPo.setReqHeader("");
+        machineTranslateErrorPo.setResBody(resJson);
+        machineTranslateErrorPo.setReqPath(url);
+        machineTranslateErrorPo.setCommunityId("-1");
+        machineTranslateErrorPo.setReqType(MachineTranslateErrorDto.REQ_TYPE_URL);
+        machineTranslateErrorInnerServiceSMOImpl.saveMachineTranslateError(machineTranslateErrorPo);
+    }
+
+
+    /**
+     * 封装头信息
+     *
+     * @return
+     */
+    private HttpHeaders getHeaders(String url, String param, HttpMethod method) {
+        HttpHeaders header = new HttpHeaders();
+        header.add(CommonConstant.APP_ID.toLowerCase(), MappingCache.getValue(MALL_DOMAIN, "APP_ID"));
+        header.add(CommonConstant.USER_ID.toLowerCase(), CommonConstant.ORDER_DEFAULT_USER_ID);
+        header.add(CommonConstant.TRANSACTION_ID.toLowerCase(), UUID.randomUUID().toString());
+        header.add(CommonConstant.REQUEST_TIME.toLowerCase(), DateUtil.getDefaultFormateTimeString(new Date()));
+        createSign(header, method, url, param);
+        header.add("Authorization", "Bearer " + getToken(false));
+        return header;
+    }
+
+    public String getToken(boolean refreshAccessToken) {
+        String token = CommonCache.getValue(MALL_TOKEN);
+        if (!StringUtil.isEmpty(token) && !refreshAccessToken) {
+            return token;
+        }
+
+        String url = getUrl(GET_TOKEN_URL);
+
+        String userName = MappingCache.getValue(MALL_DOMAIN, "IOT_USERNAME");
+        String password = MappingCache.getValue(MALL_DOMAIN, "IOT_PASSWORD");
+        JSONObject param = new JSONObject();
+        param.put("username", userName);
+        param.put("passwd", password);
+
+        HttpHeaders header = new HttpHeaders();
+        header.add(CommonConstant.APP_ID.toLowerCase(), MappingCache.getValue(MALL_DOMAIN, "APP_ID"));
+        header.add(CommonConstant.USER_ID.toLowerCase(), CommonConstant.ORDER_DEFAULT_USER_ID);
+        header.add(CommonConstant.TRANSACTION_ID.toLowerCase(), UUID.randomUUID().toString());
+        header.add(CommonConstant.REQUEST_TIME.toLowerCase(), DateUtil.getDefaultFormateTimeString(new Date()));
+        createSign(header, HttpMethod.POST, url, param.toJSONString());
+        HttpEntity<String> httpEntity = new HttpEntity<String>(param.toJSONString(), header);
+
+        ResponseEntity<String> tokenRes = outRestTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
+
+
+        JSONObject tokenObj = JSONObject.parseObject(tokenRes.getBody());
+        if (tokenObj.getIntValue("code") != 0) {
+            throw new IllegalArgumentException("获取token失败" + tokenRes.getBody());
+        }
+        if (!tokenObj.containsKey("token")) {
+            throw new IllegalArgumentException("获取token失败" + tokenRes.getBody());
+        }
+
+        token = tokenObj.getString("token");
+        int expiresIn = 30 * 60; //todo 30分钟
+
+        CommonCache.setValue(MALL_TOKEN, token, expiresIn - 200);
+
+        return token;
+    }
+
+    private static String getUrl(String param) {
+        String url = MappingCache.getValue(MALL_DOMAIN, MALL_URL);
+
+        if (StringUtil.isEmpty(url)) {
+            return DEFAULT_MALL_URL + param;
+        }
+
+        return url + param;
+    }
+
+    /**
+     * 创建鉴权
+     *
+     * @param headers
+     * @param httpMethod
+     * @param url
+     * @param param
+     */
+    public static void createSign(HttpHeaders headers, HttpMethod httpMethod, String url, String param) {
+        String appId = headers.getFirst(CommonConstant.APP_ID);
+        String transactionId = headers.getFirst(CommonConstant.TRANSACTION_ID);
+        String requestTime = headers.getFirst(CommonConstant.REQUEST_TIME);
+        String securityCode = MappingCache.getValue(MALL_DOMAIN, "APP_SECRET");
+
+        if (StringUtil.isEmpty(securityCode)) {
+            return;
+        }
+        String paramStr = "";
+        if (HttpMethod.GET == httpMethod) {
+            paramStr = url.substring(url.indexOf("?"));
+        } else {
+            paramStr = param;
+        }
+        String sign = transactionId + requestTime + appId + paramStr + securityCode;
+        headers.remove("sign");
+        headers.add("sign", AuthenticationFactory.md5(sign));
+    }
+
+}

+ 69 - 0
service-job/src/main/java/com/java110/job/smo/impl/MallInnerServiceSMOImpl.java

@@ -0,0 +1,69 @@
+package com.java110.job.smo.impl;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.user.UserDto;
+import com.java110.intf.job.IMallInnerServiceSMO;
+import com.java110.job.adapt.hcIot.IotConstant;
+import com.java110.job.adapt.hcIotNew.http.ISendIot;
+import com.java110.job.mall.ISendMall;
+import com.java110.utils.cache.MappingCache;
+import com.java110.vo.ResultVo;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @ClassName FloorInnerServiceSMOImpl
+ * @Description 定时任务属性内部服务实现类
+ * @Author wuxw
+ * @Date 2019/4/24 9:20
+ * @Version 1.0
+ * add by wuxw 2019/4/24
+ **/
+@RestController
+public class MallInnerServiceSMOImpl extends BaseServiceSMO implements IMallInnerServiceSMO {
+    private static final Logger logger = LoggerFactory.getLogger(MallInnerServiceSMOImpl.class);
+
+    private static final String MALL_DOMAIN = "MALL";
+
+
+    @Autowired
+    private ISendMall sendMallImpl;
+
+
+    @Override
+    public ResultVo postMall(@RequestBody JSONObject paramIn) {
+        ResultVo resultVo = sendMallImpl.post("/mall/api/common.openCommonApi", paramIn);
+        return resultVo;
+    }
+
+    @Override
+    public String generatorMallCode(@RequestBody UserDto userDto) {
+
+        String mallSwitch = MappingCache.getValue(MALL_DOMAIN, "MALL_SWITCH");
+
+        if ("OFF".equals(mallSwitch)) {
+            throw new IllegalArgumentException("未部署商城系统");
+        }
+
+        JSONObject paramIn = new JSONObject();
+        paramIn.put("userId", userDto.getUserId());
+        paramIn.put("tel", userDto.getTel());
+        paramIn.put("password", userDto.getPassword());
+        paramIn.put("userName", userDto.getName());
+        paramIn.put("address", userDto.getAddress());
+
+        ResultVo resultVo = sendMallImpl.post("/mall/api/common.generatorCode", paramIn);
+
+        if (resultVo.getCode() != ResultVo.CODE_OK) {
+            throw new IllegalArgumentException(resultVo.getMsg());
+        }
+
+        return resultVo.getData().toString();
+    }
+
+}

+ 11 - 3
service-user/src/main/java/com/java110/user/bmo/userLogin/impl/GetUserLoginBMOImpl.java

@@ -4,10 +4,12 @@ import com.alibaba.fastjson.JSONObject;
 import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.dto.user.UserDto;
 import com.java110.dto.user.UserLoginDto;
+import com.java110.intf.job.IMallInnerServiceSMO;
 import com.java110.intf.user.IUserInnerServiceSMO;
 import com.java110.intf.user.IUserLoginInnerServiceSMO;
 import com.java110.user.bmo.userLogin.IGetUserLoginBMO;
 import com.java110.utils.cache.CommonCache;
+import com.java110.utils.util.ListUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -29,6 +31,9 @@ public class GetUserLoginBMOImpl implements IGetUserLoginBMO {
     @Autowired
     private IUserInnerServiceSMO userInnerServiceSMOImpl;
 
+    @Autowired
+    private IMallInnerServiceSMO mallInnerServiceSMOImpl;
+
     /**
      * @param userLoginDto
      * @return 订单服务能够接受的报文
@@ -63,12 +68,15 @@ public class GetUserLoginBMOImpl implements IGetUserLoginBMO {
 
         List<UserDto> userDtos = userInnerServiceSMOImpl.getUsers(userDto);
 
-        if(userDtos == null || userDtos.size()< 1){
+        if(ListUtil.isNull(userDtos)){
             throw new IllegalArgumentException("用户不存在");
         }
 
-        String hcCode = PREFIX_CODE + GenerateCodeFactory.getUUID();
-        CommonCache.setValue(hcCode, JSONObject.toJSONString(userDtos.get(0)), CommonCache.defaultExpireTime);
+        //todo 调用商城接口 获取hcCode
+        String hcCode = mallInnerServiceSMOImpl.generatorMallCode(userDtos.get(0));
+
+//        String hcCode = PREFIX_CODE + GenerateCodeFactory.getUUID();
+//        CommonCache.setValue(hcCode, JSONObject.toJSONString(userDtos.get(0)), CommonCache.defaultExpireTime);
         JSONObject paramOut = new JSONObject();
         paramOut.put("hcCode", hcCode);
         return ResultVo.createResponseEntity(paramOut);