1
0

SalesDetaiServicelImpl.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package com.emato.biz.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.emato.biz.domain.mall.InventoryDataPushVo;
  5. import com.emato.biz.domain.mall.InventoryDataVo;
  6. import com.emato.biz.domain.mall.NewSystemFormatEntiy;
  7. import com.emato.biz.mapper.mall.InventoryDataMapper;
  8. import com.emato.biz.mapper.mall.MallMngChangeMapper;
  9. import com.emato.biz.service.mall.ISalesDetaiServicel;
  10. import com.emato.common.core.Result;
  11. import com.emato.common.utils.DateUtils;
  12. import com.emato.common.utils.sign.Md5Utils;
  13. import com.emato.system.mapper.SysConfigMapper;
  14. import org.slf4j.Logger;
  15. import org.slf4j.LoggerFactory;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import javax.servlet.http.HttpServletRequest;
  19. import java.util.HashMap;
  20. import java.util.List;
  21. import java.util.Map;
  22. /**
  23. * CW推送数据接口
  24. */
  25. @Service
  26. public class SalesDetaiServicelImpl implements ISalesDetaiServicel {
  27. private final Logger logger = LoggerFactory.getLogger(SalesDetaiServicelImpl.class);
  28. @Autowired
  29. private InventoryDataMapper inventoryDataMapper;
  30. @Autowired
  31. private MallMngChangeMapper mallMngChangeMapper;
  32. @Autowired
  33. private SysConfigMapper configMapper;
  34. /**
  35. * kmall向eccs系统推送数据
  36. * @param newSystemFormatEntiy
  37. * @return
  38. */
  39. @Override
  40. public int pushSalesDetaiServicel(NewSystemFormatEntiy newSystemFormatEntiy) {
  41. return mallMngChangeMapper.pushSalesDetaiDate(newSystemFormatEntiy);
  42. }
  43. /**
  44. * 外部系统查询订单销售数据
  45. * @param msg
  46. * @return
  47. */
  48. @Override
  49. public Result getSalesDetaiData(JSONObject msg, HttpServletRequest httpServletRequest) {
  50. try {
  51. //校验签名
  52. Map<String, Object> weChatMapSalesMsg = JSONObject.toJavaObject(msg, Map.class);
  53. //签名验证
  54. String strSign = weChatMapSalesMsg.get("sign").toString().trim();
  55. String merchId = weChatMapSalesMsg.get("merchId").toString().trim()==null?"":weChatMapSalesMsg.get("merchId").toString().trim();
  56. String timestamp = weChatMapSalesMsg.get("timestamp").toString().trim()==null?"":weChatMapSalesMsg.get("timestamp").toString().trim();
  57. String str = configMapper.getConfigValue("salesdetai").trim();;
  58. if(timestamp.equals("")||merchId.equals("")){
  59. return Result.error("900000051","参数错误");
  60. }
  61. if(!strSign.trim().equals(checkType(weChatMapSalesMsg.get("data").toString(),timestamp,str))){
  62. return Result.error("900000052","签名错误");
  63. }
  64. Map<String, Object> weSalesMsg = JSONObject.toJavaObject(JSON.parseObject(weChatMapSalesMsg.get("data").toString()), Map.class);
  65. String starTime = (String) weSalesMsg.get("starTime");
  66. String endTime = (String) weSalesMsg.get("endTime");
  67. Integer pageIndex = Integer.parseInt(weSalesMsg.get("pageIndex")+"");
  68. Integer pageSize = Integer.parseInt(weSalesMsg.get("pageSize")+"");
  69. weSalesMsg.put("starTime", DateUtils.getStrDate((String) weSalesMsg.get("starTime")));
  70. weSalesMsg.put("endTime",DateUtils.getStrDate((String)weSalesMsg.get("endTime")));
  71. weSalesMsg.put("offset",pageIndex);
  72. weSalesMsg.put("limit",pageSize);
  73. if((pageSize-pageIndex)>500){
  74. return Result.error("900000053","请求总数或时间区间过大");
  75. }
  76. //记录调用参数接口日志
  77. long diff=(Long.parseLong(endTime) - Long.parseLong(starTime))/1000/60/60;
  78. if(diff<=24){
  79. pullQueryData(weChatMapSalesMsg);
  80. List<NewSystemFormatEntiy> list = mallMngChangeMapper.getSalesDetaiData(weSalesMsg);
  81. Integer total = mallMngChangeMapper.getTotalRecord(weSalesMsg);
  82. //desList = DesUtils.encode(JSON.toJSONString(list));
  83. if(list.size()==0){
  84. return Result.error("900000054","该条件下无数据");
  85. }else{
  86. Map<String,Object> map = new HashMap<>();
  87. map.put("total",total);
  88. map.put("rows",list);
  89. return Result.success(map);
  90. }
  91. }else{
  92. return Result.error("900000053","请求总数或时间区间过大");
  93. }
  94. }catch (Exception e){
  95. logger.error("外部系统查询订单销售数据错误="+ JSON.toJSONString(msg),e);
  96. return Result.error("900000051","参数错误");
  97. }
  98. }
  99. /**
  100. * 记录外部调用接口参数,时间和调用方
  101. * @param msg
  102. */
  103. private void pullQueryData(Map msg) {
  104. Map<String,Object> map = new HashMap<>();
  105. map.put("tranDirection",msg.get("merchId"));
  106. map.put("msg",msg.toString());
  107. mallMngChangeMapper.pullQueryData(map);
  108. }
  109. /**
  110. * 插入来源于oms的库存数据
  111. * @param inventoryDataVo
  112. */
  113. @Override
  114. public Result inserInventory(InventoryDataVo inventoryDataVo) {
  115. try{
  116. logger.error("插入来源于oms的库存数据");
  117. //查询是否存在该库存信息
  118. Integer checkStuts = inventoryDataMapper.queryOneInventory(inventoryDataVo);
  119. if(checkStuts>0){
  120. inventoryDataMapper.updateInventory(inventoryDataVo);
  121. }else{
  122. inventoryDataMapper.inserInventory(inventoryDataVo);
  123. }
  124. return Result.success();
  125. }catch (Exception e){
  126. logger.error("插入来源于oms的库存数据"+JSON.toJSONString(inventoryDataVo),e);
  127. return Result.error("1001","数据插入出错");
  128. }
  129. }
  130. /**
  131. * 查询库存数据提供给外部系统
  132. * @param msg
  133. * @param httpServletRequest
  134. * @return
  135. */
  136. @Override
  137. public Result queryInventory(JSONObject msg, HttpServletRequest httpServletRequest) {
  138. try{
  139. //校验签名
  140. Map<String, Object> weChatMapMsg = JSONObject.toJavaObject(msg, Map.class);
  141. //签名验证
  142. String strSign = weChatMapMsg.get("sign").toString().trim();
  143. String merchId = weChatMapMsg.get("merchId").toString().trim()==null?"":weChatMapMsg.get("merchId").toString().trim();
  144. String timestamp = weChatMapMsg.get("timestamp").toString().trim()==null?"":weChatMapMsg.get("timestamp").toString().trim();
  145. String str = configMapper.getConfigValue("inventory");;
  146. if(timestamp.equals("")||merchId.equals("")){
  147. return Result.error("900000001","参数错误");
  148. }
  149. if(!strSign.trim().equals(checkType(weChatMapMsg.get("data").toString(),timestamp,str))){
  150. return Result.error("900000002","签名错误");
  151. }
  152. Map<String, Object> weDtilMsg = JSONObject.toJavaObject(JSON.parseObject(weChatMapMsg.get("data").toString()), Map.class);
  153. Integer pageIndex = Integer.parseInt(weDtilMsg.get("pageIndex")+"");
  154. Integer pageSize = Integer.parseInt(weDtilMsg.get("pageSize")+"");
  155. weChatMapMsg.put("offset",pageIndex);
  156. weChatMapMsg.put("limit",pageSize);
  157. weChatMapMsg.put("merchId",merchId);
  158. weChatMapMsg.put("sign",strSign);
  159. if(pageSize>3000){
  160. return Result.error("900000003","请求数量过大");
  161. }
  162. //数据查询
  163. pullQueryData(weChatMapMsg);
  164. List<InventoryDataPushVo> list = inventoryDataMapper.getInventoryData(weChatMapMsg);
  165. Integer total = inventoryDataMapper.getInventoryTotal();
  166. if(list.size()==0){
  167. return Result.error("900000004","该条件下无数据");
  168. }else{
  169. Map<String,Object> map = new HashMap<>();
  170. map.put("total",total);
  171. map.put("rows",list);
  172. return Result.success(map);
  173. }
  174. }catch (Exception e){
  175. logger.error("外部系统查询库存系统条件="+JSON.toJSONString(msg),e);
  176. return Result.error("900000001","参数错误");
  177. }
  178. }
  179. //签名加密校验
  180. public String checkType(String data,String timestamp,String sekey) {
  181. String sign = sekey+"data" + data + "timestamp" + timestamp;
  182. return Md5Utils.encryption(sign);
  183. }
  184. }