package com.emato.biz.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.emato.biz.domain.mall.InventoryDataPushVo; import com.emato.biz.domain.mall.InventoryDataVo; import com.emato.biz.domain.mall.NewSystemFormatEntiy; import com.emato.biz.mapper.mall.InventoryDataMapper; import com.emato.biz.mapper.mall.MallMngChangeMapper; import com.emato.biz.service.mall.ISalesDetaiServicel; import com.emato.common.core.Result; import com.emato.common.utils.DateUtils; import com.emato.common.utils.sign.Md5Utils; import com.emato.system.mapper.SysConfigMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.List; import java.util.Map; /** * CW推送数据接口 */ @Service public class SalesDetaiServicelImpl implements ISalesDetaiServicel { private final Logger logger = LoggerFactory.getLogger(SalesDetaiServicelImpl.class); @Autowired private InventoryDataMapper inventoryDataMapper; @Autowired private MallMngChangeMapper mallMngChangeMapper; @Autowired private SysConfigMapper configMapper; /** * kmall向eccs系统推送数据 * @param newSystemFormatEntiy * @return */ @Override public int pushSalesDetaiServicel(NewSystemFormatEntiy newSystemFormatEntiy) { return mallMngChangeMapper.pushSalesDetaiDate(newSystemFormatEntiy); } /** * 外部系统查询订单销售数据 * @param msg * @return */ @Override public Result getSalesDetaiData(JSONObject msg, HttpServletRequest httpServletRequest) { try { //校验签名 Map weChatMapSalesMsg = JSONObject.toJavaObject(msg, Map.class); //签名验证 String strSign = weChatMapSalesMsg.get("sign").toString().trim(); String merchId = weChatMapSalesMsg.get("merchId").toString().trim()==null?"":weChatMapSalesMsg.get("merchId").toString().trim(); String timestamp = weChatMapSalesMsg.get("timestamp").toString().trim()==null?"":weChatMapSalesMsg.get("timestamp").toString().trim(); String str = configMapper.getConfigValue("salesdetai").trim();; if(timestamp.equals("")||merchId.equals("")){ return Result.error("900000051","参数错误"); } if(!strSign.equals(checkType(weChatMapSalesMsg.get("data").toString(),timestamp,str))){ return Result.error("900000052","签名错误"); } Map weSalesMsg = JSONObject.toJavaObject(JSON.parseObject(weChatMapSalesMsg.get("data").toString()), Map.class); String starTime = (String) weSalesMsg.get("starTime"); String endTime = (String) weSalesMsg.get("endTime"); Integer pageIndex = Integer.parseInt(weSalesMsg.get("pageIndex")+""); Integer pageSize = Integer.parseInt(weSalesMsg.get("pageSize")+""); weSalesMsg.put("starTime", DateUtils.getStrDate((String) weSalesMsg.get("starTime"))); weSalesMsg.put("endTime",DateUtils.getStrDate((String)weSalesMsg.get("endTime"))); weSalesMsg.put("offset",pageIndex); weSalesMsg.put("limit",pageSize); if((pageSize-pageIndex)>500){ return Result.error("900000053","请求总数或时间区间过大"); } //记录调用参数接口日志 long diff=(Long.parseLong(endTime) - Long.parseLong(starTime))/1000/60/60; if(diff<=24){ pullQueryData(weChatMapSalesMsg); List list = mallMngChangeMapper.getSalesDetaiData(weSalesMsg); //desList = DesUtils.encode(JSON.toJSONString(list)); if(list.size()==0){ return Result.error("900000054","该条件下无数据"); }else{ Map map = new HashMap<>(); map.put("total",list.size()); map.put("rows",list); return Result.success(map); } }else{ return Result.error("900000053","请求总数或时间区间过大"); } }catch (Exception e){ logger.error("外部系统查询订单销售数据错误="+ JSON.toJSONString(msg),e); return Result.error("900000051","参数错误"); } } /** * 记录外部调用接口参数,时间和调用方 * @param msg */ private void pullQueryData(Map msg) { Map map = new HashMap<>(); map.put("tranDirection",msg.get("merchId")); map.put("msg",msg.toString()); mallMngChangeMapper.pullQueryData(map); } /** * 插入来源于oms的库存数据 * @param inventoryDataVo */ @Override public Result inserInventory(InventoryDataVo inventoryDataVo) { try{ logger.error("插入来源于oms的库存数据"); //查询是否存在该库存信息 Integer checkStuts = inventoryDataMapper.queryOneInventory(inventoryDataVo); if(checkStuts>0){ inventoryDataMapper.updateInventory(inventoryDataVo); }else{ inventoryDataMapper.inserInventory(inventoryDataVo); } return Result.success(); }catch (Exception e){ logger.error("插入来源于oms的库存数据"+JSON.toJSONString(inventoryDataVo),e); return Result.error("1001","数据插入出错"); } } /** * 查询库存数据提供给外部系统 * @param msg * @param httpServletRequest * @return */ @Override public Result queryInventory(JSONObject msg, HttpServletRequest httpServletRequest) { try{ //校验签名 Map weChatMapMsg = JSONObject.toJavaObject(msg, Map.class); //签名验证 String strSign = weChatMapMsg.get("sign").toString().trim(); String merchId = weChatMapMsg.get("merchId").toString().trim()==null?"":weChatMapMsg.get("merchId").toString().trim(); String timestamp = weChatMapMsg.get("timestamp").toString().trim()==null?"":weChatMapMsg.get("timestamp").toString().trim(); String str = configMapper.getConfigValue("inventory");; if(timestamp.equals("")||merchId.equals("")){ return Result.error("900000001","参数错误"); } if(!strSign.equals(checkType(weChatMapMsg.get("data").toString(),timestamp,str))){ return Result.error("900000002","签名错误"); } Map weDtilMsg = JSONObject.toJavaObject(JSON.parseObject(weChatMapMsg.get("data").toString()), Map.class); Integer pageIndex = Integer.parseInt(weDtilMsg.get("pageIndex")+""); Integer pageSize = Integer.parseInt(weDtilMsg.get("pageSize")+""); weChatMapMsg.put("offset",pageIndex); weChatMapMsg.put("limit",pageSize); weChatMapMsg.put("merchId",merchId); weChatMapMsg.put("sign",strSign); if(pageSize>3000){ return Result.error("900000003","请求数量过大"); } //数据查询 pullQueryData(weChatMapMsg); List list = inventoryDataMapper.getInventoryData(weChatMapMsg); if(list.size()==0){ return Result.error("900000004","该条件下无数据"); }else{ Map map = new HashMap<>(); map.put("total",list.size()); map.put("rows",list); return Result.success(map); } }catch (Exception e){ logger.error("外部系统查询库存系统条件="+JSON.toJSONString(msg),e); return Result.error("900000001","参数错误"); } } //签名加密校验 public String checkType(String data,String timestamp,String sekey) { String sign = sekey+"data" + data + "timestamp" + timestamp; return Md5Utils.encryption(sign); } }