SalesDetaiServicelImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  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.OmsUtils;
  5. import com.emato.biz.domain.mall.InventoryDataPushVo;
  6. import com.emato.biz.domain.mall.InventoryDataVo;
  7. import com.emato.biz.domain.mall.NewSystemFormatEntiy;
  8. import com.emato.biz.mapper.mall.InventoryDataMapper;
  9. import com.emato.biz.mapper.mall.MallMngChangeMapper;
  10. import com.emato.biz.service.mall.ISalesDetaiServicel;
  11. import com.emato.common.core.Result;
  12. import com.emato.common.utils.DateUtils;
  13. import com.emato.common.utils.sign.Md5Utils;
  14. import com.emato.system.mapper.SysConfigMapper;
  15. import org.slf4j.Logger;
  16. import org.slf4j.LoggerFactory;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import javax.servlet.http.HttpServletRequest;
  20. import java.sql.*;
  21. import java.util.ArrayList;
  22. import java.util.Date;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;
  26. /**
  27. * CW推送数据接口
  28. */
  29. @Service
  30. public class SalesDetaiServicelImpl implements ISalesDetaiServicel {
  31. private final Logger logger = LoggerFactory.getLogger(SalesDetaiServicelImpl.class);
  32. @Autowired
  33. private InventoryDataMapper inventoryDataMapper;
  34. @Autowired
  35. private MallMngChangeMapper mallMngChangeMapper;
  36. @Autowired
  37. private SysConfigMapper configMapper;
  38. @Autowired
  39. private OmsUtils omsUtils;
  40. /**
  41. * kmall向eccs系统推送数据
  42. * @param newSystemFormatEntiy
  43. * @return
  44. */
  45. @Override
  46. public int pushSalesDetaiServicel(NewSystemFormatEntiy newSystemFormatEntiy) {
  47. return mallMngChangeMapper.pushSalesDetaiDate(newSystemFormatEntiy);
  48. }
  49. /**
  50. * 外部系统查询订单销售数据
  51. * @param msg
  52. * @return
  53. */
  54. @Override
  55. public Result getSalesDetaiData(JSONObject msg, HttpServletRequest httpServletRequest) {
  56. try {
  57. //校验签名
  58. Map<String, Object> weChatMapSalesMsg = JSONObject.toJavaObject(msg, Map.class);
  59. //签名验证
  60. String strSign = weChatMapSalesMsg.get("sign").toString().trim();
  61. String merchId = weChatMapSalesMsg.get("merchId").toString().trim()==null?"":weChatMapSalesMsg.get("merchId").toString().trim();
  62. String timestamp = weChatMapSalesMsg.get("timestamp").toString().trim()==null?"":weChatMapSalesMsg.get("timestamp").toString().trim();
  63. String str = configMapper.getConfigValue("salesdetai").trim();;
  64. if(timestamp.equals("")||merchId.equals("")){
  65. return Result.error("900051","参数错误");
  66. }
  67. if(!strSign.trim().equals(checkType(weChatMapSalesMsg.get("data").toString(),timestamp,str))){
  68. return Result.error("900052","签名错误");
  69. }
  70. Map<String, Object> weSalesMsg = JSONObject.toJavaObject(JSON.parseObject(weChatMapSalesMsg.get("data").toString()), Map.class);
  71. String starTime = (String) weSalesMsg.get("starTime");
  72. String endTime = (String) weSalesMsg.get("endTime");
  73. Integer pageIndex = Integer.parseInt(weSalesMsg.get("pageIndex")+"");
  74. Integer pageSize = Integer.parseInt(weSalesMsg.get("pageSize")+"");
  75. weSalesMsg.put("starTime", DateUtils.getStrDate((String) weSalesMsg.get("starTime")));
  76. weSalesMsg.put("endTime",DateUtils.getStrDate((String)weSalesMsg.get("endTime")));
  77. if(pageIndex>500){
  78. return Result.error("900053","请求总数或时间区间过大");
  79. }
  80. pageIndex = (pageIndex-1)*pageSize;
  81. weSalesMsg.put("offset",pageIndex);
  82. weSalesMsg.put("limit",pageSize);
  83. //记录调用参数接口日志
  84. long diff=(Long.parseLong(endTime) - Long.parseLong(starTime))/1000/60/60;
  85. if(diff<=24){
  86. pullQueryData(weChatMapSalesMsg);
  87. List<NewSystemFormatEntiy> list = mallMngChangeMapper.getSalesDetaiData(weSalesMsg);
  88. Integer total = mallMngChangeMapper.getTotalRecord(weSalesMsg);
  89. //desList = DesUtils.encode(JSON.toJSONString(list));
  90. if(list.size()==0){
  91. return Result.error("900054","该条件下无数据");
  92. }else{
  93. Map<String,Object> map = new HashMap<>();
  94. map.put("total",total);
  95. map.put("rows",list);
  96. return Result.success(map);
  97. }
  98. }else{
  99. return Result.error("900053","请求总数或时间区间过大");
  100. }
  101. }catch (Exception e){
  102. logger.error("外部系统查询订单销售数据错误="+ JSON.toJSONString(msg),e);
  103. return Result.error("900051","参数错误");
  104. }
  105. }
  106. /**
  107. * 记录外部调用接口参数,时间和调用方
  108. * @param msg
  109. */
  110. private void pullQueryData(Map msg) {
  111. Map<String,Object> map = new HashMap<>();
  112. map.put("tranDirection",msg.get("merchId"));
  113. map.put("msg",msg.toString());
  114. mallMngChangeMapper.pullQueryData(map);
  115. }
  116. /**
  117. * 插入来源于oms的库存数据
  118. * @param inventoryDataVo
  119. */
  120. @Override
  121. public Result inserInventory(InventoryDataVo inventoryDataVo) {
  122. try{
  123. logger.error("插入来源于oms的库存数据");
  124. //查询是否存在该库存信息
  125. Integer checkStuts = inventoryDataMapper.queryOneInventory(inventoryDataVo);
  126. if(checkStuts>0){
  127. inventoryDataMapper.updateInventory(inventoryDataVo);
  128. }else{
  129. inventoryDataMapper.inserInventory(inventoryDataVo);
  130. }
  131. return Result.success();
  132. }catch (Exception e){
  133. logger.error("插入来源于oms的库存数据"+JSON.toJSONString(inventoryDataVo),e);
  134. return Result.error("1001","数据插入出错");
  135. }
  136. }
  137. /**
  138. * 查询库存数据提供给外部系统
  139. * @param msg
  140. * @param httpServletRequest
  141. * @return
  142. */
  143. @Override
  144. public Result queryInventory(JSONObject msg, HttpServletRequest httpServletRequest) {
  145. try{
  146. //校验签名
  147. Map<String, Object> weChatMapMsg = JSONObject.toJavaObject(msg, Map.class);
  148. //签名验证
  149. String strSign = weChatMapMsg.get("sign").toString().trim();
  150. String merchId = weChatMapMsg.get("merchId").toString().trim()==null?"":weChatMapMsg.get("merchId").toString().trim();
  151. String timestamp = weChatMapMsg.get("timestamp").toString().trim()==null?"":weChatMapMsg.get("timestamp").toString().trim();
  152. String str = configMapper.getConfigValue("inventory");;
  153. if(timestamp.equals("")||merchId.equals("")){
  154. return Result.error("900001","参数错误");
  155. }
  156. if(!strSign.trim().equals(checkType(weChatMapMsg.get("data").toString(),timestamp,str))){
  157. return Result.error("900002","签名错误");
  158. }
  159. Map<String, Object> weDtilMsg = JSONObject.toJavaObject(JSON.parseObject(weChatMapMsg.get("data").toString()), Map.class);
  160. Integer pageIndex = Integer.parseInt(weDtilMsg.get("pageIndex")+"");
  161. Integer pageSize = Integer.parseInt(weDtilMsg.get("pageSize")+"");
  162. pageIndex = (pageIndex-1)*pageSize;
  163. weChatMapMsg.put("offset",pageIndex);
  164. weChatMapMsg.put("limit",pageSize);
  165. weChatMapMsg.put("merchId",merchId);
  166. weChatMapMsg.put("sign",strSign);
  167. String merchSn = weDtilMsg.get("merchSn").toString().trim()==null?"":weDtilMsg.get("merchSn").toString().trim();
  168. if(merchSn.equals("")){
  169. return Result.error("900001","参数错误");
  170. }
  171. if(pageSize>3000){
  172. return Result.error("900003","请求数量过大");
  173. }
  174. pullQueryData(weChatMapMsg);
  175. // 数据查询
  176. //List<InventoryDataPushVo> list = inventoryDataMapper.getInventoryData(weChatMapMsg);
  177. List<InventoryDataPushVo> list = getOmsData(weDtilMsg,weChatMapMsg);
  178. Integer total = inventoryDataMapper.getInventoryTotal();
  179. if(list.size()==0){
  180. return Result.error("900004","该条件下无数据");
  181. }else{
  182. Map<String,Object> map = new HashMap<>();
  183. map.put("total",total);
  184. map.put("invTime",DateUtils.dateToStrLong(new Date()));
  185. map.put("rows",list);
  186. return Result.success(map);
  187. }
  188. }catch (Exception e){
  189. logger.error("外部系统查询库存系统条件="+JSON.toJSONString(msg),e);
  190. return Result.error("900001","参数错误");
  191. }
  192. }
  193. //签名加密校验
  194. public String checkType(String data,String timestamp,String sekey) {
  195. String sign = sekey+"data" + data + "timestamp" + timestamp;
  196. return Md5Utils.encryption(sign);
  197. }
  198. public List<InventoryDataPushVo> getOmsData(Map<String, Object> weDtilMsg,Map<String, Object> weChatMapMsg){
  199. String driver=omsUtils.getOmsDriver();
  200. String user=omsUtils.getOmsUser();
  201. String password=omsUtils.getOmsPassword();
  202. String url=omsUtils.getOmsUrl();
  203. List<InventoryDataPushVo> inventoryDataPushVos = null;
  204. try{
  205. //加载数据库驱动
  206. Class.forName(driver);
  207. //连接数据库
  208. Connection conn = DriverManager.getConnection(url,user,password);
  209. //创建Statement对象
  210. Statement stmt = conn.createStatement();
  211. String sql = "SELECT wmsi.merch_sn,ppr.prod_barcode,ppr.prod_name,wmsi.shop_sn,wim.valid_num,wmsi.shop_inve FROM wb_inve_mng wim LEFT JOIN pd_product_record ppr ON wim.sku = ppr.sku LEFT JOIN wb_merch_shop_inve wmsi ON wim.sku = wmsi.sku WHERE ppr.is_record = 1 AND ppr.is_valid = 0 AND wim.inve_status = 0 AND wim.is_valid = 0 AND wmsi.is_valid = 0 AND wim.merch_sn='"+weDtilMsg.get("merchSn")+"' limit "+weChatMapMsg.get("offset")+","+weChatMapMsg.get("limit")+"";
  212. //建立结果集
  213. ResultSet rs = stmt.executeQuery(sql);
  214. inventoryDataPushVos =convertList(rs);
  215. //关闭结果集
  216. rs.close();
  217. //关闭Statement对象
  218. stmt.close();
  219. //关闭数据库
  220. conn.close();
  221. }catch(Exception e){
  222. logger.error("查询oms库存数据出错");
  223. }
  224. return inventoryDataPushVos;
  225. }
  226. private static List<InventoryDataPushVo> convertList(ResultSet rs) throws SQLException {
  227. List<InventoryDataPushVo> list = new ArrayList();
  228. while (rs.next()) {
  229. InventoryDataPushVo inventoryDataPushVo = new InventoryDataPushVo();
  230. inventoryDataPushVo.setBarcode(rs.getString("prod_barcode"));
  231. inventoryDataPushVo.setProductName(rs.getString("prod_name"));
  232. inventoryDataPushVo.setShopSn(rs.getString("shop_sn"));
  233. inventoryDataPushVo.setShopInvent(rs.getInt("shop_inve"));
  234. inventoryDataPushVo.seteMatou(rs.getInt("valid_num"));
  235. list.add(inventoryDataPushVo);
  236. }
  237. return list;
  238. }
  239. }