1
0

SalesDetaiServicelImpl.java 14 KB

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