|
|
@@ -0,0 +1,205 @@
|
|
|
+package org.dromara.external.controller.jiaotou;
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.http.HttpUtil;
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
+import io.swagger.v3.oas.annotations.Operation;
|
|
|
+import io.swagger.v3.oas.annotations.tags.Tag;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.dromara.common.core.constant.GlobalConstants;
|
|
|
+import org.dromara.common.core.domain.jiaotou.JiaoTouResult;
|
|
|
+import org.dromara.common.encrypt.utils.EncryptUtils;
|
|
|
+import org.dromara.common.redis.utils.RedisUtils;
|
|
|
+import org.dromara.external.api.jiaotou.domian.bo.JTAddressBo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.bo.JTDeliveredBo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.bo.JTGetTokenBo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.bo.JTRefreshTokenBo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.bo.JTSaveGoodsInfoBo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.bo.JTSaveGoodsStorageBo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.bo.JTShipBo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.bo.JTUpdateGoodsSaleStatusBo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.vo.JTAddressVo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.vo.JTCategoryVo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.vo.JTOrderResultVo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.vo.JTSaveGoodsResultVo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.vo.JTSaveStorageResultVo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.vo.JTTokenVo;
|
|
|
+import org.dromara.external.api.jiaotou.domian.vo.JTUpdateSaleStatusResultVo;
|
|
|
+import org.springframework.validation.annotation.Validated;
|
|
|
+import org.springframework.web.bind.annotation.PostMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestBody;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
+
|
|
|
+import java.time.Duration;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 我们请求交投的接口(i交投提供,电商调用)
|
|
|
+ *
|
|
|
+ * @author
|
|
|
+ * @date 2025/8/5 下午6:31
|
|
|
+ */
|
|
|
+@Tag(name = "i交投-我方调用i交投接口")
|
|
|
+@Slf4j
|
|
|
+@Validated
|
|
|
+@RequiredArgsConstructor
|
|
|
+@RestController
|
|
|
+@RequestMapping(value = "/api/jiaotou/pull")
|
|
|
+public class JiaoTouPullController {
|
|
|
+ // i交投接口
|
|
|
+ private final String url = "http://ijtapi.ceczy.com:8085";
|
|
|
+ // redis key前缀
|
|
|
+ private static final String REDIS_KEY_PREFIX = "jiaoTou:token";
|
|
|
+ //username
|
|
|
+ private static final String USERNAME = "admin";
|
|
|
+ //password
|
|
|
+ private static final String PASSWORD = "admin";
|
|
|
+ // RSA公钥
|
|
|
+ private static final String PUBLIC_KEY = "";
|
|
|
+ //client_id
|
|
|
+ private static final String CLIENT_ID = "admin";
|
|
|
+ //client_secret
|
|
|
+ private static final String CLIENT_SECRET = "admin";
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 2.1.1 获取token
|
|
|
+ */
|
|
|
+ @Operation(summary = "2.1.1 获取token")
|
|
|
+ @PostMapping("/oauth/token")
|
|
|
+ public JiaoTouResult<JTTokenVo> getToken(@RequestBody JTGetTokenBo bo) {
|
|
|
+ bo.setGrant_type("sign");
|
|
|
+ bo.setUsername(USERNAME);
|
|
|
+ //password需要使用RSA公钥加密
|
|
|
+ bo.setPassword(EncryptUtils.encryptByRsa(PASSWORD, PUBLIC_KEY));
|
|
|
+ bo.setClient_id(CLIENT_ID);
|
|
|
+ bo.setClient_secret(CLIENT_SECRET);
|
|
|
+ //获取当日开始时间时间戳
|
|
|
+ bo.setDeviceId(String.valueOf(DateUtil.beginOfDay(DateUtil.date()).getTime()));
|
|
|
+ String json = JSONUtil.toJsonStr(bo);
|
|
|
+ String post = HttpUtil.post(url + "/czy-uaa/oauth/token", json);
|
|
|
+ JTTokenVo data = JSONUtil.toBean(post, JTTokenVo.class);
|
|
|
+ //将token保存到redis中
|
|
|
+ if(ObjectUtil.isNotEmpty(data) && data.getAccess_token() != null){
|
|
|
+ //AccessToken有效期100小时
|
|
|
+ data.setExpires_in("100");
|
|
|
+ RedisUtils.setCacheObject(GlobalConstants.GLOBAL_REDIS_KEY+REDIS_KEY_PREFIX, data, Duration.ofHours(Long.parseLong(data.getExpires_in())));
|
|
|
+ }
|
|
|
+ return JiaoTouResult.ok(data);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 2.1.2 刷新token
|
|
|
+ */
|
|
|
+ @Operation(summary = "2.1.2 刷新token")
|
|
|
+ @PostMapping("/oauth/refreshToken")
|
|
|
+ public JiaoTouResult<JTTokenVo> refreshToken(@RequestBody JTRefreshTokenBo bo) {
|
|
|
+ bo.setRefresh_token(bo.getRefresh_token());
|
|
|
+
|
|
|
+ String json = JSONUtil.toJsonStr(bo);
|
|
|
+ String post = HttpUtil.post(url + "/czy-uaa/oauth/token", json);
|
|
|
+ JTTokenVo data = JSONUtil.toBean(post, JTTokenVo.class);
|
|
|
+ return JiaoTouResult.ok(data);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 2.2.1 获取一级(省级)地址
|
|
|
+ */
|
|
|
+ @Operation(summary = "2.2.1 获取一级(省级)地址")
|
|
|
+ @PostMapping("/address/getProvinces")
|
|
|
+ public JiaoTouResult<List<JTAddressVo>> getProvinces() {
|
|
|
+ JTAddressBo jtAddressBo = new JTAddressBo();
|
|
|
+ String json = JSONUtil.toJsonStr(jtAddressBo);
|
|
|
+ String post = HttpUtil.post(url + "/api/address/getProvinces", json);
|
|
|
+ JiaoTouResult bean = JSONUtil.toBean(post, JiaoTouResult.class);
|
|
|
+ return JiaoTouResult.ok(bean.getData() == null ? null : (List<JTAddressVo>) bean.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 2.2.2 根据上级编码获取下一级地址
|
|
|
+ */
|
|
|
+ @Operation(summary = "2.2.2 根据上级编码获取下一级地址")
|
|
|
+ @PostMapping("/address/getAddress")
|
|
|
+ public JiaoTouResult<List<JTAddressVo>> getAddress(@RequestBody JTAddressBo bo) {
|
|
|
+ String json = JSONUtil.toJsonStr(bo);
|
|
|
+ String post = HttpUtil.post(url + "/api/address/getAddress", json);
|
|
|
+ JiaoTouResult bean = JSONUtil.toBean(post, JiaoTouResult.class);
|
|
|
+ return JiaoTouResult.ok(bean.getData() == null ? null : (List<JTAddressVo>) bean.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 2.2.3 获取全量品目分类信息
|
|
|
+ */
|
|
|
+ @Operation(summary = "2.2.3 获取全量品目分类信息")
|
|
|
+ @PostMapping("/category/all")
|
|
|
+ public JiaoTouResult<List<JTCategoryVo>> getCategoryAll() {
|
|
|
+ String json = "";
|
|
|
+ String post = HttpUtil.post(url + "/api/category/all", json);
|
|
|
+ JiaoTouResult bean = JSONUtil.toBean(post, JiaoTouResult.class);
|
|
|
+ return JiaoTouResult.ok(bean.getData() == null ? null : (List<JTCategoryVo>) bean.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 2.3.1 保存(更新)商品信息
|
|
|
+ */
|
|
|
+ @Operation(summary = "2.3.1 保存(更新)商品信息")
|
|
|
+ @PostMapping("/goods/saveGoodsInfo")
|
|
|
+ public JiaoTouResult<List<JTSaveGoodsResultVo>> saveGoodsInfo(@RequestBody JTSaveGoodsInfoBo bo) {
|
|
|
+ String json = JSONUtil.toJsonStr(bo);
|
|
|
+ String post = HttpUtil.post(url + "/api/goods/saveGoodsInfo", json);
|
|
|
+ JiaoTouResult bean = JSONUtil.toBean(post, JiaoTouResult.class);
|
|
|
+ return JiaoTouResult.ok(bean.getData() == null ? null : (List<JTSaveGoodsResultVo>) bean.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 2.3.2 保存(更新)商品库存
|
|
|
+ */
|
|
|
+ @Operation(summary = "2.3.2 保存(更新)商品库存")
|
|
|
+ @PostMapping("/goods/saveGoodsStorage")
|
|
|
+ public JiaoTouResult<List<JTSaveStorageResultVo>> saveGoodsStorage(@RequestBody JTSaveGoodsStorageBo bo) {
|
|
|
+ String json = JSONUtil.toJsonStr(bo);
|
|
|
+ String post = HttpUtil.post(url + "/api/goods/saveGoodsStorage", json);
|
|
|
+ JiaoTouResult bean = JSONUtil.toBean(post, JiaoTouResult.class);
|
|
|
+ return JiaoTouResult.ok(bean.getData() == null ? null : (List<JTSaveStorageResultVo>) bean.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 2.3.3 更新商品上下架状态
|
|
|
+ */
|
|
|
+ @Operation(summary = "2.3.3 更新商品上下架状态")
|
|
|
+ @PostMapping("/goods/updateGoodsSaleStatus")
|
|
|
+ public JiaoTouResult<List<JTUpdateSaleStatusResultVo>> updateGoodsSaleStatus(@RequestBody JTUpdateGoodsSaleStatusBo bo) {
|
|
|
+ String json = JSONUtil.toJsonStr(bo);
|
|
|
+ String post = HttpUtil.post(url + "/api/goods/updateGoodsSaleStatus", json);
|
|
|
+ JiaoTouResult bean = JSONUtil.toBean(post, JiaoTouResult.class);
|
|
|
+ return JiaoTouResult.ok(bean.getData() == null ? null : (List<JTUpdateSaleStatusResultVo>) bean.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 2.4.4 发货
|
|
|
+ */
|
|
|
+ @Operation(summary = "2.4.4 发货")
|
|
|
+ @PostMapping("/order/ship")
|
|
|
+ public JiaoTouResult<JTOrderResultVo> ship(@RequestBody JTShipBo bo) {
|
|
|
+ String json = JSONUtil.toJsonStr(bo);
|
|
|
+ String post = HttpUtil.post(url + "/api/order/ship", json);
|
|
|
+ JiaoTouResult bean = JSONUtil.toBean(post, JiaoTouResult.class);
|
|
|
+ return JiaoTouResult.ok(bean.getData() == null ? null : JSONUtil.toBean(JSONUtil.toJsonStr(bean.getData()), JTOrderResultVo.class));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 2.4.6 妥投
|
|
|
+ */
|
|
|
+ @Operation(summary = "2.4.6 妥投")
|
|
|
+ @PostMapping("/order/delivered")
|
|
|
+ public JiaoTouResult<JTOrderResultVo> delivered(@RequestBody JTDeliveredBo bo) {
|
|
|
+ String json = JSONUtil.toJsonStr(bo);
|
|
|
+ String post = HttpUtil.post(url + "/api/order/delivered", json);
|
|
|
+ JiaoTouResult bean = JSONUtil.toBean(post, JiaoTouResult.class);
|
|
|
+ return JiaoTouResult.ok(bean.getData() == null ? null : JSONUtil.toBean(JSONUtil.toJsonStr(bean.getData()), JTOrderResultVo.class));
|
|
|
+ }
|
|
|
+
|
|
|
+}
|