• 调用电商集成平台 聚水潭 api接口示例


    先上工具类

    1. package com.zuodou.utlis;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.stereotype.Component;
    4. import javax.xml.crypto.Data;
    5. import java.io.*;
    6. import java.net.HttpURLConnection;
    7. import java.net.URL;
    8. import java.net.URLEncoder;
    9. import java.security.MessageDigest;
    10. import java.util.*;
    11. import java.util.Map.Entry;
    12. import java.util.zip.GZIPInputStream;
    13. @Component
    14. public class ApiUtils {
    15. private static final String SIGN_METHOD_MD5 = "md5";
    16. private static final String CHARSET_UTF8 = "utf-8";
    17. private static final String CONTENT_ENCODING_GZIP = "gzip";
    18. // TOP服务地址,正式环境需要设置为https://openapi.jushuitan.com
    19. // @Value("${erp.serverUrl}")
    20. // public String serverUrl;
    21. //
    22. // @Value("${erp.appKey}")
    23. // public String appKey; // 可替换为您的应用的appKey
    24. //
    25. // @Value("${erp.appSecret}")
    26. // public String appSecret; // 可替换为您的应用的appSecret
    27. //
    28. // @Value("${erp.accessToken}")
    29. // public String accessToken; // 必须替换为授权得到的真实有效accessToken
    30. public static String serverUrl;
    31. public static String appKey;
    32. public static String appSecret;
    33. public static String accessToken;
    34. @Value("${erp.serverUrl}")
    35. public void setServerUrl(String serverUrl) {
    36. ApiUtils.serverUrl = serverUrl;
    37. }
    38. @Value("${erp.appKey}")
    39. public void setAppKey(String appKey) {
    40. ApiUtils.appKey = appKey;
    41. }
    42. @Value("${erp.appSecret}")
    43. public void setAppSecret(String appSecret) {
    44. ApiUtils.appSecret = appSecret;
    45. }
    46. @Value("${erp.accessToken}")
    47. public void setAccessToken(String accessToken) {
    48. ApiUtils.accessToken = accessToken;
    49. }
    50. /**
    51. *
    52. * @param fangfa
    53. * @return
    54. * @throws IOException
    55. */
    56. public static String getSellerItem(String fangfa, String biz) throws IOException {
    57. Map params = new HashMap();
    58. // 公共参数
    59. params.put("app_key",appKey);
    60. params.put("access_token", accessToken);
    61. params.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000));
    62. params.put("version", "2");
    63. params.put("charset", "utf-8");
    64. // 业务参数
    65. params.put("biz", biz);
    66. // 签名参数
    67. params.put("sign", signTopRequest(params, appSecret, SIGN_METHOD_MD5));
    68. // 调用API
    69. return callApi(new URL(serverUrl+fangfa), params);
    70. }
    71. /**
    72. * 对TOP请求进行签名。
    73. */
    74. private static String signTopRequest(Map params, String secret, String signMethod) throws IOException {
    75. // 第一步:检查参数是否已经排序
    76. String[] keys = params.keySet().toArray(new String[0]);
    77. Arrays.sort(keys);
    78. // 第二步:把所有参数名和参数值串在一起
    79. StringBuilder query = new StringBuilder();
    80. if (SIGN_METHOD_MD5.equals(signMethod)) {
    81. query.append(secret);
    82. }
    83. for (String key : keys) {
    84. String value = params.get(key);
    85. if (isNotEmpty(key) && isNotEmpty(value)) {
    86. query.append(key).append(value);
    87. }
    88. }
    89. return createSign(query.toString());
    90. }
    91. /**
    92. * 生成新sign
    93. *
    94. * @param str 字符串
    95. * @return String
    96. */
    97. private static String createSign(String str) {
    98. if (str == null || str.length() == 0) {
    99. return null;
    100. }
    101. char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
    102. try {
    103. MessageDigest mdTemp = MessageDigest.getInstance(SIGN_METHOD_MD5);
    104. mdTemp.update(str.getBytes("UTF-8"));
    105. byte[] md = mdTemp.digest();
    106. int j = md.length;
    107. char[] buf = new char[j * 2];
    108. int k = 0;
    109. int i = 0;
    110. while (i < j) {
    111. byte byte0 = md[i];
    112. buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
    113. buf[k++] = hexDigits[byte0 & 0xf];
    114. i++;
    115. }
    116. return new String(buf);
    117. } catch (Exception e) {
    118. return null;
    119. }
    120. }
    121. private static String callApi(URL url, Map params) throws IOException {
    122. String query = buildQuery(params, CHARSET_UTF8);
    123. byte[] content = {};
    124. if (query != null) {
    125. content = query.getBytes(CHARSET_UTF8);
    126. }
    127. HttpURLConnection conn = null;
    128. OutputStream out = null;
    129. String rsp = null;
    130. try {
    131. conn = (HttpURLConnection) url.openConnection();
    132. conn.setRequestMethod("POST");
    133. conn.setDoInput(true);
    134. conn.setDoOutput(true);
    135. conn.setRequestProperty("Host", url.getHost());
    136. conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + CHARSET_UTF8);
    137. out = conn.getOutputStream();
    138. out.write(content);
    139. rsp = getResponseAsString(conn);
    140. } finally {
    141. if (out != null) {
    142. out.close();
    143. }
    144. if (conn != null) {
    145. conn.disconnect();
    146. }
    147. }
    148. return rsp;
    149. }
    150. private static String buildQuery(Map params, String charset) throws IOException {
    151. if (params == null || params.isEmpty()) {
    152. return null;
    153. }
    154. StringBuilder query = new StringBuilder();
    155. Set> entries = params.entrySet();
    156. boolean hasParam = false;
    157. for (Entry entry : entries) {
    158. String name = entry.getKey();
    159. String value = entry.getValue();
    160. // 忽略参数名或参数值为空的参数
    161. if (isNotEmpty(name) && isNotEmpty(value)) {
    162. if (hasParam) {
    163. query.append("&");
    164. } else {
    165. hasParam = true;
    166. }
    167. query.append(name).append("=").append(URLEncoder.encode(value, charset));
    168. }
    169. }
    170. return query.toString();
    171. }
    172. private static String getResponseAsString(HttpURLConnection conn) throws IOException {
    173. String charset = getResponseCharset(conn.getContentType());
    174. if (conn.getResponseCode() < 400) {
    175. String contentEncoding = conn.getContentEncoding();
    176. if (CONTENT_ENCODING_GZIP.equalsIgnoreCase(contentEncoding)) {
    177. return getStreamAsString(new GZIPInputStream(conn.getInputStream()), charset);
    178. } else {
    179. return getStreamAsString(conn.getInputStream(), charset);
    180. }
    181. } else {// Client Error 4xx and Server Error 5xx
    182. throw new IOException(conn.getResponseCode() + " " + conn.getResponseMessage());
    183. }
    184. }
    185. private static String getStreamAsString(InputStream stream, String charset) throws IOException {
    186. try {
    187. Reader reader = new InputStreamReader(stream, charset);
    188. StringBuilder response = new StringBuilder();
    189. final char[] buff = new char[1024];
    190. int read = 0;
    191. while ((read = reader.read(buff)) > 0) {
    192. response.append(buff, 0, read);
    193. }
    194. return response.toString();
    195. } finally {
    196. if (stream != null) {
    197. stream.close();
    198. }
    199. }
    200. }
    201. private static String getResponseCharset(String ctype) {
    202. String charset = CHARSET_UTF8;
    203. if (isNotEmpty(ctype)) {
    204. String[] params = ctype.split(";");
    205. for (String param : params) {
    206. param = param.trim();
    207. if (param.startsWith("charset")) {
    208. String[] pair = param.split("=", 2);
    209. if (pair.length == 2) {
    210. if (isNotEmpty(pair[1])) {
    211. charset = pair[1].trim();
    212. }
    213. }
    214. break;
    215. }
    216. }
    217. }
    218. return charset;
    219. }
    220. private static boolean isNotEmpty(String value) {
    221. int strLen;
    222. if (value == null || (strLen = value.length()) == 0) {
    223. return false;
    224. }
    225. for (int i = 0; i < strLen; i++) {
    226. if ((Character.isWhitespace(value.charAt(i)) == false)) {
    227. return true;
    228. }
    229. }
    230. return false;
    231. }
    232. public static void main(String[] args) {
    233. int pageNo = 1;
    234. int pageSize = 100;
    235. boolean hasMoreData = true;
    236. List allData = new ArrayList<>();
    237. while (hasMoreData) {
    238. List currentPageData = callThirdPartyApi(pageNo, pageSize); // 调用第三方API获取当前页数据
    239. allData.addAll(currentPageData); // 将当前页数据加入总数据集合
    240. if (currentPageData.size() < pageSize) {
    241. hasMoreData = false; // 当前页数据不足pageSize,表示已获取所有数据
    242. } else {
    243. pageNo++; // 继续获取下一页数据
    244. }
    245. }
    246. // 所有数据已获取完成
    247. System.out.println("Total data count: " + allData.size());
    248. // 进一步处理allData集合...
    249. }
    250. // 调用第三方API获取指定页数据的示例方法
    251. private static List callThirdPartyApi(int pageNo, int pageSize) {
    252. // 调用第三方API获取指定页的数据
    253. // 返回数据列表
    254. return new ArrayList<>(); // 这里仅作示例,实际应调用API并返回数据
    255. }
    256. }

    需求说明,需要把聚水潭所有的售后数据拉取到自研平台进行进一步操作。


    调用接口的限制:分页,每页数量50,请求限制,一秒钟不能超过5次,一分钟不能超过一百次。


    注意代码待完善:accessToken是有过期时间的,但可以在主账号设置,如果超过限制我不会进行记录会漏掉这条数据。有一些注入的地方可以删掉。我定义了一个erpDatas和erpItems类来接收数据,由于返回值是下划线的,而我项目架构是驼峰命名,会导致映射值失败,最下面是处理方法(可以不用的自行删除)。

    1. package com.zuodou.job;
    2. import com.zuodou.mapper.ZuodouTaskDatasMapper;
    3. import com.zuodou.utlis.DataUtil;
    4. import com.zuodou.utlis.TimeUtils;
    5. import lombok.extern.slf4j.Slf4j;
    6. import org.apache.commons.lang3.StringUtils;
    7. import org.quartz.DisallowConcurrentExecution;
    8. import org.quartz.Job;
    9. import org.quartz.JobExecutionContext;
    10. import org.quartz.JobExecutionException;
    11. import org.springframework.beans.factory.annotation.Autowired;
    12. import java.util.*;
    13. /**
    14. * 售后
    15. */
    16. @Slf4j
    17. //禁止并发执行
    18. @DisallowConcurrentExecution
    19. public class TaskDatas implements Job {
    20. @Autowired
    21. private ZuodouTaskDatasMapper zuodouTaskDatasMapper;
    22. @Autowired
    23. private threadService threadService;
    24. /**
    25. * 若参数变量名修改 QuartzJobController中也需对应修改
    26. */
    27. private String parameter;
    28. public void setParameter(String parameter) {
    29. this.parameter = parameter;
    30. }
    31. private String parameterstartime;
    32. public void setParameterstartime(String parameterstartime) {
    33. this.parameterstartime = parameterstartime;
    34. }
    35. /**
    36. * 拿售后数据
    37. * @param jobExecutionContext
    38. * @throws JobExecutionException
    39. *
    40. * token过期
    41. * 1.请求状态
    42. * 2.时间间隔七天
    43. * 3.分页数据
    44. * /open/refund/single/query
    45. *
    46. */
    47. @Override
    48. public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
    49. try {
    50. //1.拿到数据库中最大时间 如果没有,默认多少,如果有生成一个七天时间lsit
    51. //1.1 先判断数据库时间和当前时间是否相差七天,相差七天就减,没有相差就用当前时间当作结束时间
    52. //2.在每个七天里面分页拿取数据,data_count 总数,page_count 有多少页
    53. //3.把分页数据整合到list中
    54. // for (String shopId : Shop_id) {
    55. String start = zuodouTaskDatasMapper.maxOrdersDate(null);
    56. String end = TimeUtils.getStringDate();//比当前时间少一分钟,防止数据重复
    57. if (StringUtils.isBlank(start)) {
    58. start = this.parameterstartime;
    59. }
    60. log.info("聚水潭售后数据拉取开始-------"+TimeUtils.date2Str(new Date()));
    61. Date CalendarstartTime = TimeUtils.DateSwitch(start);
    62. Date CalendarendTime = TimeUtils.DateSwitch(end);
    63. Calendar startCal = Calendar.getInstance();
    64. startCal.setTime(CalendarstartTime) ;
    65. Calendar endCal = Calendar.getInstance();
    66. endCal.setTime(CalendarendTime);
    67. String startTime =start;
    68. String endTime =null;
    69. while (!start.equals(end)) { //当开始时间大于或者等于结束时间
    70. Integer day = DataUtil.countDaynew(start,end );
    71. if (day>7) {
    72. startCal.add(Calendar.DAY_OF_MONTH, 7);
    73. endTime = TimeUtils.date2Str(startCal.getTime());
    74. Integer daya = DataUtil.countDaynew(endTime, end); //判断结束时间加上七天跟当前时间的间隔
    75. if (daya <1) { //如果加上七天大于当前时间或者等于
    76. endTime=end;
    77. }
    78. }
    79. if (StringUtils.isBlank(endTime)){
    80. endTime=end;
    81. }
    82. System.out.println(startTime+"-----3---"+endTime);
    83. String finalStartTime = startTime;
    84. String finalEndTime = endTime;
    85. threadService.apithread(finalStartTime, finalEndTime);
    86. Integer days = DataUtil.countDaynew(startTime,endTime );
    87. Integer daya = DataUtil.countDaynew(endTime, end);
    88. if (days==7){ //超过七天
    89. startTime = endTime;
    90. } else if (days>0&&daya==0){
    91. startTime = endTime;//累计七天的结束时间
    92. endTime = end; //结束时间为当前时间
    93. start = end; //设置停止循环
    94. }else if(daya<7){
    95. endTime=end;
    96. start=end;//用于结束循环
    97. }
    98. }
    99. // }
    100. } catch (Exception e) {
    101. e.printStackTrace();
    102. }
    103. }
    104. public static void main(String[] args) {
    105. String start = "2023-10-09 13:41:20";
    106. String end = TimeUtils.getStringDate();//比当前时间少一分钟,防止数据重复
    107. if (StringUtils.isBlank(start)) {
    108. start = "2023-08-01 00:00:00";
    109. }
    110. Date CalendarstartTime = TimeUtils.DateSwitch(start);
    111. Date CalendarendTime = TimeUtils.DateSwitch(end);
    112. Calendar startCal = Calendar.getInstance();
    113. startCal.setTime(CalendarstartTime) ;
    114. Calendar endCal = Calendar.getInstance();
    115. endCal.setTime(CalendarendTime);
    116. String startTime =start;
    117. String endTime =null;
    118. while (!start.equals(end)) { //当开始时间大于或者等于结束时间
    119. Integer day = DataUtil.countDaynew(start,end );
    120. if (day>7) {
    121. startCal.add(Calendar.DAY_OF_MONTH, 7);
    122. endTime = TimeUtils.date2Str(startCal.getTime());
    123. Integer daya = DataUtil.countDaynew(endTime, end); //判断结束时间加上七天跟当前时间的间隔
    124. if (daya <1) { //如果加上七天大于当前时间或者等于
    125. endTime=end;
    126. }
    127. }
    128. if (StringUtils.isBlank(endTime)){
    129. endTime=end;
    130. }
    131. System.out.println(startTime+"-----3---"+endTime);
    132. Integer days = DataUtil.countDaynew(startTime,endTime );
    133. Integer daya = DataUtil.countDaynew(endTime, end);
    134. if (days==7){ //超过七天
    135. startTime = endTime;
    136. } else if (days>0&&daya==0){
    137. startTime = endTime;//累计七天的结束时间
    138. endTime = end; //结束时间为当前时间
    139. start = end; //设置停止循环
    140. }else if(daya<7){
    141. endTime=end;
    142. start=end;//用于结束循环
    143. }
    144. }
    145. }
    146. }
    1. package com.zuodou.job;
    2. import com.fasterxml.jackson.core.JsonProcessingException;
    3. import com.fasterxml.jackson.databind.JsonNode;
    4. import com.fasterxml.jackson.databind.ObjectMapper;
    5. import com.fasterxml.jackson.databind.node.ArrayNode;
    6. import com.zuodou.entity.ZuodouTaskDatas;
    7. import com.zuodou.entity.ZuodouTaskItem;
    8. import com.zuodou.enums.CommonConstant;
    9. import com.zuodou.enums.ErpStatusEnum;
    10. import com.zuodou.erpmodel.erpData;
    11. import com.zuodou.erpmodel.erpDatas;
    12. import com.zuodou.erpmodel.erpItems;
    13. import com.zuodou.mapper.ZuodouTaskDatasMapper;
    14. import com.zuodou.model.*;
    15. import com.zuodou.service.IZuodouTaskDatasService;
    16. import com.zuodou.service.IZuodouTaskItemService;
    17. import com.zuodou.utlis.BaseUtlis;
    18. import com.zuodou.utlis.TimeUtils;
    19. import lombok.extern.slf4j.Slf4j;
    20. import org.apache.commons.lang3.StringUtils;
    21. import org.springframework.beans.factory.annotation.Autowired;
    22. import org.springframework.stereotype.Service;
    23. import org.springframework.util.CollectionUtils;
    24. import java.io.IOException;
    25. import java.util.*;
    26. import static com.zuodou.utlis.ApiUtils.getSellerItem;
    27. @Service
    28. @Slf4j
    29. public class threadService {
    30. @Autowired
    31. private IZuodouTaskItemService zuodouTaskItemService;
    32. @Autowired
    33. private IZuodouTaskDatasService iZuodouTaskDatasService;
    34. @Autowired
    35. private ZuodouTaskDatasMapper zuodouTaskDatasMapper;
    36. public void apithread(String finalStartTime, String finalEndTime) {
    37. log.info("执行售后任务时间"+finalStartTime+"----"+finalEndTime);
    38. List zuodouTaskDatas = new ArrayList<>();
    39. List updatezuodouTaskDatas = new ArrayList<>();
    40. List zuodouTaskItemList = new ArrayList<>();
    41. List updatezuodouTaskItemList = new ArrayList<>();
    42. List orders = new ArrayList<>();
    43. ObjectMapper objectMapper=new ObjectMapper();
    44. OrderQueryParams queryParams = new OrderQueryParams();
    45. queryParams.setModified_begin(finalStartTime).setModified_end(finalEndTime).setPage_index(1).setPage_size(50);
    46. try {
    47. String valueAsString = objectMapper.writeValueAsString(queryParams);
    48. JsonNode jsonNode = objectMapper.readTree(getSellerItem("/open/refund/single/query", valueAsString));
    49. String msg = jsonNode.get("msg").asText();
    50. String code = jsonNode.get("code").asText();
    51. if (StringUtils.equals(msg, "执行成功") && StringUtils.equals(code, "0")) {
    52. Integer page_count = 0;//有多少页
    53. JsonNode dataNode = jsonNode.get("data");
    54. erpData erpData = null;
    55. erpData = objectMapper.treeToValue(dataNode, erpData.class);
    56. page_count += erpData.getPage_count();
    57. if (page_count > 0) {
    58. for (int j = 1; j <= page_count; j++) {
    59. OrderQueryParams queryParamsdata_count = new OrderQueryParams();
    60. queryParamsdata_count.setModified_begin(finalStartTime).setModified_end(finalEndTime).setPage_index(j).setPage_size(50);
    61. String valueAsStrings = null;
    62. valueAsStrings = objectMapper.writeValueAsString(queryParamsdata_count);
    63. JsonNode jsonNodes = objectMapper.readTree(getSellerItem("/open/refund/single/query", valueAsStrings));
    64. String msgs = jsonNodes.get("msg").asText();
    65. String codes = jsonNodes.get("code").asText();
    66. JsonNode dataNodea = jsonNodes.get("data");
    67. if (StringUtils.equals(msgs, "执行成功") && StringUtils.equals(codes, "0")) {
    68. log.info("售后数据执行成功"+msgs);
    69. JsonNode dataNodes = dataNodea.get("datas");//拿到数据结构
    70. if (dataNodes instanceof ArrayNode) {
    71. ArrayNode ordersArrayNode = (ArrayNode) dataNodes;
    72. for (JsonNode orderNode : ordersArrayNode) {
    73. erpDatas order = objectMapper.treeToValue(orderNode, erpDatas.class);
    74. orders.add(order);
    75. }
    76. }
    77. } else {
    78. log.info("售后数据执行失败"+msgs);
    79. }
    80. try {
    81. // 在apithread方法中休息两秒
    82. Thread.sleep(1000);
    83. } catch (InterruptedException e) {
    84. e.printStackTrace();
    85. }
    86. }
    87. }
    88. log.info("聚水潭售后数据拉取结束-----"+ TimeUtils.date2Str(new Date()));
    89. } else {
    90. log.info("外层分页售后"+msg);
    91. }
    92. try {
    93. // 在apithread方法中休息两秒
    94. Thread.sleep(1000);
    95. } catch (InterruptedException e) {
    96. e.printStackTrace();
    97. }
    98. insertOrdersData(orders, zuodouTaskDatas,updatezuodouTaskDatas, zuodouTaskItemList,updatezuodouTaskItemList);
    99. log.info("开始插入售后数据----"+zuodouTaskDatas.size() + "商品数据---"+zuodouTaskItemList.size()+"需要修改售后数据--"+updatezuodouTaskDatas.size());
    100. iZuodouTaskDatasService.saveBatch(zuodouTaskDatas);
    101. zuodouTaskItemService.saveBatch(zuodouTaskItemList);
    102. iZuodouTaskDatasService.updateBatchById(updatezuodouTaskDatas);
    103. zuodouTaskItemService.updateBatchById(updatezuodouTaskItemList);
    104. } catch (JsonProcessingException e) {
    105. e.printStackTrace();
    106. } catch (IOException e) {
    107. e.printStackTrace();
    108. } catch (IllegalAccessException e) {
    109. e.printStackTrace();
    110. } catch (InterruptedException e) {
    111. e.printStackTrace();
    112. }catch (Exception e){
    113. e.printStackTrace();
    114. }
    115. }
    116. private void insertOrdersData(List orders, List zuodouTaskOrdersList, List updatezuodouTaskOrdersList, List zuodouTaskItemList,List updatezuodouTaskItemList ) throws IllegalAccessException, IOException, InterruptedException {
    117. if (!CollectionUtils.isEmpty(orders)){
    118. for (erpDatas order : orders) {
    119. ZuodouTaskDatas zuodouTaskDatas=new ZuodouTaskDatas();
    120. BaseUtlis.copyProperties(order,zuodouTaskDatas);
    121. String asId = zuodouTaskDatasMapper.oIdasIddatas(order.getO_id(), order.getAs_id());
    122. // boolean exists = zuodouTaskOrdersList.stream()
    123. // .anyMatch(obj -> obj.getOId().equals(order.getO_id()) && obj.getAsId() .equals(order.getAs_id()));
    124. boolean exists = zuodouTaskOrdersList.stream()
    125. .anyMatch(obj -> obj.getAsId() .equals(order.getAs_id()));
    126. if (exists) {//如果插入的list中有那个值就直接跳过
    127. continue;
    128. }else if (StringUtils.isNotBlank(asId)) {
    129. zuodouTaskDatas.setAsId(asId);
    130. zuodouTaskDatas.setStatusName(ErpStatusEnum.getValueName(order.getStatus(), CommonConstant.STATUS));
    131. zuodouTaskDatas.setShopStatusName(ErpStatusEnum.getValueName(order.getShop_status(),CommonConstant.SHOP_STATUS));
    132. zuodouTaskDatas.setGoodStatusName(ErpStatusEnum.getValueName(order.getGood_status(),CommonConstant.GOOD_STATUS));
    133. zuodouTaskDatas.setOrderStatusName(ErpStatusEnum.getValueName(order.getOrder_status(),CommonConstant.ORDER_STATUS));
    134. zuodouTaskDatas.setOrderlabels(String.join(",",order.getOrder_labels()));
    135. updatezuodouTaskOrdersList.add(zuodouTaskDatas);
    136. for (erpItems item : order.getItems()) {
    137. ZuodouTaskItem zuodouTaskItem=new ZuodouTaskItem();
    138. BaseUtlis.copyProperties(item,zuodouTaskItem);
    139. zuodouTaskItem.setSkuTypeName(ErpStatusEnum.getValueName(item.getSku_type(),CommonConstant.SKU_TYPE));
    140. zuodouTaskItem.setSkuType(item.getSku_type());
    141. updatezuodouTaskItemList.add(zuodouTaskItem);
    142. }
    143. }else{
    144. zuodouTaskDatas.setStatusName(ErpStatusEnum.getValueName(order.getStatus(),CommonConstant.STATUS));
    145. zuodouTaskDatas.setShopStatusName(ErpStatusEnum.getValueName(order.getShop_status(),CommonConstant.SHOP_STATUS));
    146. zuodouTaskDatas.setGoodStatusName(ErpStatusEnum.getValueName(order.getGood_status(),CommonConstant.GOOD_STATUS));
    147. zuodouTaskDatas.setOrderStatusName(ErpStatusEnum.getValueName(order.getOrder_status(),CommonConstant.ORDER_STATUS));
    148. zuodouTaskDatas.setOrderlabels(String.join(",",order.getOrder_labels()));
    149. if (!CollectionUtils.isEmpty(order.getItems())){
    150. for (erpItems item : order.getItems()) {
    151. ZuodouTaskItem zuodouTaskItem=new ZuodouTaskItem();
    152. BaseUtlis.copyProperties(item,zuodouTaskItem);
    153. zuodouTaskItem.setSkuTypeName(ErpStatusEnum.getValueName(item.getSku_type(),CommonConstant.SKU_TYPE));
    154. zuodouTaskItem.setSkuType(item.getSku_type());
    155. zuodouTaskItemList.add(zuodouTaskItem);
    156. }
    157. }
    158. zuodouTaskOrdersList.add(zuodouTaskDatas);
    159. }
    160. }
    161. }
    162. }
    163. }

    public static void copyProperties(Object source, Object destination) throws IllegalAccessException {
        Field[] sourceFields = source.getClass().getDeclaredFields();
        Field[] destinationFields = destination.getClass().getDeclaredFields();
    
        for (Field sourceField : sourceFields) {
            sourceField.setAccessible(true);
            String sourceFieldName = sourceField.getName();
            String destinationFieldName = convertToCamelCase(sourceFieldName); // 将下划线命名转换为驼峰命名
    
            for (Field destinationField : destinationFields) {
                if (destinationField.getName().equals(destinationFieldName)) {
                    destinationField.setAccessible(true);
                    destinationField.set(destination, sourceField.get(source));
                    break;
                }
            }
        }
    }

  • 相关阅读:
    k8s系列-kubectl 命令快速参考
    复盘:智能座舱系列文三- 它背后的5种交互技术之触觉
    实验室(检验科)信息系统源码,医学检验LIS系统源码,云LIS源码
    Golang goroutine MPG模式浅析
    高维前缀和和子集dp(状压dp的一种)
    MySQL 1055报错 -this is incompatible with sql_mode=only_full_group_by
    考研数据结构与算法(五)数组
    高等数学(第七版)同济大学 总习题三(后10题) 个人解答
    核心交换机、汇聚层交换机、接入层交换机的区别和特点
    Potplayer通过公网访问群晖WebDav,快速搭建远程办公环境
  • 原文地址:https://blog.csdn.net/andrew_dear/article/details/134439563