EfastOrderServiceImpl.java 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894
  1. package com.iamberry.wechat.service.mq;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.regex.Matcher;
  8. import java.util.regex.Pattern;
  9. import net.sf.json.JSONObject;
  10. import org.apache.commons.lang3.StringEscapeUtils;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import com.fasterxml.jackson.core.JsonProcessingException;
  14. import com.fasterxml.jackson.databind.ObjectMapper;
  15. import com.iamberry.app.tool.log.RatFWLogger;
  16. import com.iamberry.wechat.core.entity.coupon.CouponItem;
  17. import com.iamberry.wechat.core.entity.coupon.CouponType;
  18. import com.iamberry.wechat.core.entity.mq.MQMessage;
  19. import com.iamberry.wechat.core.entity.order.Order;
  20. import com.iamberry.wechat.core.entity.order.OrderItem;
  21. import com.iamberry.wechat.core.entity.order.ProbationOrder;
  22. import com.iamberry.wechat.core.entity.product.ProductColor;
  23. import com.iamberry.wechat.face.cart.CartService;
  24. import com.iamberry.wechat.face.giftCard.AgentMachineService;
  25. import com.iamberry.wechat.face.mq.EfastOrderService;
  26. import com.iamberry.wechat.face.order.AdminOrderService;
  27. import com.iamberry.wechat.face.order.AdminProbationOrderService;
  28. import com.iamberry.wechat.face.porduct.ProductColorService;
  29. import com.iamberry.wechat.tools.DateTimeUtil;
  30. import com.iamberry.wechat.tools.HttpClient431Util;
  31. import com.iamberry.wechat.tools.NameUtils;
  32. @Service
  33. public class EfastOrderServiceImpl implements EfastOrderService {
  34. @Autowired
  35. private AdminOrderService adminOrderService;
  36. @Autowired
  37. private AdminProbationOrderService adminProbationOrderService;
  38. @Autowired
  39. private RatFWLogger logger;
  40. @Autowired
  41. private CartService cartService;
  42. @Autowired
  43. private AgentMachineService agentMachineService;
  44. @Autowired
  45. private ProductColorService productColorService;
  46. @Override
  47. public boolean selectEfastSendOrderInfo(MQMessage message) {
  48. // TODO Auto-generated method stub
  49. // 组装数据
  50. Map<String, String> requestData = new HashMap<String, String>();
  51. requestData.put("app_nick", NameUtils.getConfig("app_nick"));
  52. requestData.put("app_key", NameUtils.getConfig("app_key"));
  53. requestData.put("app_secret", NameUtils.getConfig("app_secret"));
  54. requestData.put("timestamp",DateTimeUtil.format(new Date(),"yyyyMMddHHmmss"));
  55. requestData.put("app_act", message.getServiceOtherMessage());
  56. requestData.put("oid", message.getServiceToMessage());
  57. requestData.put("feilds", NameUtils.getConfig("order_field"));
  58. try {
  59. String resultJson = HttpClient431Util.doPost(requestData, NameUtils.getConfig("efast_base_url"));
  60. logger.info("订单号为:" + message.getServiceToMessage() + "的订单,百胜返回信息:" + resultJson);
  61. resultJson = StringEscapeUtils.unescapeJava(resultJson); // unicode
  62. Pattern p = Pattern.compile("\\s*|\t|\r|\n");
  63. Matcher m = p.matcher(resultJson);
  64. if (m.find()) {
  65. resultJson = m.replaceAll("");
  66. }
  67. logger.info("get-订单号为:" + message.getServiceToMessage() + "的订单,百胜返回信息:" + resultJson);
  68. JSONObject jsonObject = JSONObject.fromObject(resultJson);
  69. // default HTTP SUCCESS
  70. JSONObject respData = JSONObject.fromObject(jsonObject.get("resp_data"));
  71. // 发货状态 : shipping_status
  72. String shippingStatus = respData.getString("shipping_status");
  73. if ("1".equals(shippingStatus)) {
  74. // 更新数据:将订单从已支付、代发货状态修改为已发货状态
  75. Order order = new Order();
  76. order.setOldStatus(2); // 已支付、待发货
  77. order.setSalesOrderid(message.getServiceToMessage()); // orderId
  78. order.setSalesStatus(5); // 已发货
  79. order.setSalesPostFirm(respData.getString("shipping_name"));
  80. order.setSalesPostNum(respData.getString("invoice_no"));
  81. adminOrderService.updateOrderDeliver(order);
  82. return true;
  83. }
  84. logger.error(this, "get-订单号为:" + message.getServiceToMessage() + "的订单,百胜返回信息:" + resultJson);
  85. return false;
  86. } catch (Exception e) {
  87. // TODO Auto-generated catch block
  88. logger.error(this, "get-订单号为:" + message.getServiceToMessage() + "的订单,发生错误:" + e.getMessage());
  89. }
  90. return false;
  91. }
  92. @Override
  93. public JSONObject selectEfastSendOrderList() throws Exception {
  94. // TODO Auto-generated method stub
  95. java.util.Calendar rightNow = java.util.Calendar.getInstance();
  96. java.text.SimpleDateFormat sim = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  97. //如果是后退几天,就写 -天数 例如:
  98. rightNow.add(java.util.Calendar.DAY_OF_MONTH, -60);
  99. //进行时间转换
  100. String date = sim.format(rightNow.getTime());
  101. // 组装数据
  102. Map<String, String> requestData = new HashMap<String, String>();
  103. requestData.put("app_nick", NameUtils.getConfig("app_nick"));
  104. requestData.put("app_key", NameUtils.getConfig("app_key"));
  105. requestData.put("app_secret", NameUtils.getConfig("app_secret"));
  106. requestData.put("timestamp",DateTimeUtil.format(new Date(),"yyyyMMddHHmmss"));
  107. requestData.put("app_act", "efast.trade.list.get");
  108. requestData.put("shipping_status", "1");
  109. requestData.put("sd_id", NameUtils.getConfig("sd_id"));
  110. requestData.put("start_time", date);
  111. requestData.put("time_type", "add");
  112. requestData.put("order_status", "1");
  113. requestData.put("page_no", "1");
  114. requestData.put("page_size", "100");
  115. try {
  116. String resultJson = HttpClient431Util.doPost(requestData, NameUtils.getConfig("efast_base_url"));
  117. resultJson = StringEscapeUtils.unescapeJava(resultJson); // unicode
  118. logger.info("get-百胜订单列表,百胜返回信息:" + resultJson);
  119. JSONObject jsonObject = JSONObject.fromObject(resultJson);
  120. // default HTTP SUCCESS
  121. JSONObject respData = JSONObject.fromObject(jsonObject.get("resp_data"));
  122. // 发货状态 : shipping_status
  123. logger.error(this, "get-百胜订单列表,百胜返回信息:" + resultJson);
  124. return respData;
  125. } catch (Exception e) {
  126. // TODO Auto-generated catch block
  127. logger.error(this, "get-百胜订单列表,百胜返回信息,发生错误:" + e.getMessage());
  128. return null;
  129. }
  130. }
  131. @Override
  132. public boolean addOrderInfoToEfast(MQMessage message) throws Exception {
  133. // orderInfo
  134. Order order = adminOrderService.getShopOrderByOrderId(message.getServiceToMessage());
  135. if (order == null || order.getSalesOrderid() == null) {
  136. return false;
  137. }
  138. List<OrderItem> items = adminOrderService.getShopOrderItemByOrderId(order.getSalesOrderid());
  139. // request url
  140. //String url = NameUtils.getConfig("efast_base_url");
  141. String url = NameUtils.getConfig("rst_base_url");
  142. // "http://test.iamberry.com//mallorder/order";
  143. // set Requeset Data
  144. Map<String, String> requestData = new HashMap<String, String>();
  145. int money = order.getSalesYetAmount();
  146. double couponMoney = 0;
  147. double avgPercentage = 0.0; //均摊比例
  148. //将优惠券抵消金额加入实付金额中
  149. if (order.getCouponId() != null && !"".equals(order.getCouponId())) {
  150. CouponItem couponItem = new CouponItem();
  151. couponItem.setCouponItemId(order.getCouponId());
  152. couponItem.setCouponItemUseropenid(order.getSalesOpenid());
  153. CouponType couponType = cartService.getCouponReduceByItemId(couponItem);
  154. if (null != couponType) {
  155. switch (couponType.getCouponType()) {
  156. case 1:
  157. couponMoney = couponType.getCouponReduce();
  158. break;
  159. case 2:
  160. couponMoney = order.getSalesAmount() * couponType.getCouponReduce()/100;
  161. break;
  162. }
  163. }
  164. }
  165. //只计算用户用微信支付的金额,不包含余额支付
  166. if (order.getBalancePayAmount() != null && !"".equals(order.getBalancePayAmount().toString())) {
  167. money = money - order.getBalancePayAmount().intValue();
  168. couponMoney += order.getBalancePayAmount().intValue();
  169. }
  170. //计算分摊金额比例
  171. if (items != null && items.size() > 0) {
  172. double avgMoney = 0;
  173. for (OrderItem item : items) {
  174. avgMoney += item.getItemNum().intValue() * item.getItemProductDiscount();
  175. }
  176. //计算均摊比例
  177. avgPercentage = 1 - couponMoney/avgMoney;
  178. }
  179. /**
  180. * 系统级参数
  181. */
  182. /*requestData.put("app_nick", NameUtils.getConfig("app_nick"));
  183. requestData.put("app_key", NameUtils.getConfig("app_key"));
  184. requestData.put("app_secret", NameUtils.getConfig("app_secret"));
  185. requestData.put("timestamp",DateTimeUtil.format(new Date(),"yyyyMMddHHmmss"));
  186. requestData.put("app_act", message.getServiceOtherMessage());*/ // "efast.trade.new.add"
  187. requestData.put("app_act", "rst.trade.new.add");
  188. /**
  189. * 订单基本信息
  190. */
  191. String [] addressDesc = order.getSalesAddressInfo().split("-");
  192. //判断收货地址从而选择仓库
  193. String sd_id = NameUtils.getConfig("sd_id");
  194. String address = addressDesc[3];
  195. if (addressDesc[3]!=null) {
  196. Pattern p = Pattern.compile("\\s*|\t|\r|\n");
  197. Matcher m = p.matcher(addressDesc[3]);
  198. if (m.find()) {
  199. address = m.replaceAll("");
  200. }
  201. }
  202. String provinceName = addressDesc[0];
  203. if (addressDesc[0].indexOf("北京") != -1) {
  204. provinceName = "北京";
  205. } else if (addressDesc[0].indexOf("上海") != -1) {
  206. provinceName = "上海";
  207. } else if (addressDesc[0].indexOf("天津") != -1) {
  208. provinceName = "天津";
  209. } else if (addressDesc[0].indexOf("重庆") != -1) {
  210. provinceName = "重庆";
  211. }
  212. Map<String, Object> orderData = new HashMap<String, Object>();
  213. orderData.put("add_time", DateTimeUtil.format(order.getSalesCreateDate())); // 时间
  214. orderData.put("address", address); // 收货地址
  215. orderData.put("city_name", addressDesc[1]); // 城市
  216. orderData.put("consignee", order.getSalesAddressName()); // 收货人
  217. orderData.put("district_name", addressDesc[2]); // 区域
  218. orderData.put("email", ""); // email
  219. orderData.put("goods_amount", (order.getSalesAmount()/100.0)); // 商品总价
  220. orderData.put("goods_count", items.size()); // 产品数量
  221. orderData.put("mobile", order.getSalesAddressTel()); // 手机号码
  222. orderData.put("money_paid", (money/100.0)); // 已付款
  223. orderData.put("oid", order.getSalesOrderid()); // 订单号
  224. orderData.put("order_amount", (money/100.0)); // 应付款,应付款金额要与已付款金额相同
  225. /**
  226. * 产品信息
  227. */
  228. List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>();
  229. for (OrderItem item : items) {
  230. Map<String, Object> orders1 = new HashMap<String, Object>();
  231. orders1.put("goods_name", item.getItemProductName()); // 产品名称
  232. orders1.put("goods_number", item.getItemNum()); // 产品数量
  233. orders1.put("goods_price", (item.getItemProductPrice()/100.0)); // 产品原价
  234. orders1.put("outer_sku", item.getProduectRemark()); // 产品SKU
  235. orders1.put("payment_ft", (item.getItemProductDiscount()/100.0*avgPercentage*item.getItemNum())); // 产品分摊价
  236. maps.add(orders1);
  237. }
  238. orderData.put("orders", maps); // 订单产品
  239. orderData.put("pay_name", "weixinpay"); // 支付方式
  240. orderData.put("pay_time", DateTimeUtil.format(order.getSalesTransactionDate()));// 支付时间
  241. orderData.put("postscript", order.getSalesUserRemark()); // 买家留言
  242. orderData.put("province_name", provinceName); // 省份
  243. orderData.put("sd_id", sd_id); // 对应 efast 店铺 id
  244. orderData.put("shipping_fee", 0); // 快递费
  245. orderData.put("shipping_name", "yto"); // 快递公司代码
  246. orderData.put("tel", order.getSalesAddressTel()); // 我司电话
  247. orderData.put("to_buyer", ""); // 商家备注
  248. orderData.put("total_amount", (order.getSalesAmount()/100.0)); // 订单总额
  249. orderData.put("user_name", order.getSalesOpenid()); // 买家账户 百胜根据user_name来判断是否有重复,传openId是为了防止重复
  250. orderData.put("zipcode", order.getSalesAddressPostnum()); // 邮编
  251. com.fasterxml.jackson.databind.ObjectMapper mapper = new ObjectMapper();
  252. String orderDataStr = null;;
  253. try {
  254. orderDataStr = mapper.writeValueAsString(orderData);
  255. } catch (JsonProcessingException e2) {
  256. e2.printStackTrace();
  257. }
  258. requestData.put("info", orderDataStr);
  259. try {
  260. String result = HttpClient431Util.doPost(requestData, url);
  261. result = StringEscapeUtils.unescapeJava(result); // unicode 编码
  262. logger.info("add-推送订单号为:" + order.getSalesOrderid() + "的订单,百胜返回信息:" + result);
  263. // parse JSON String to Object
  264. JSONObject jsonObject = JSONObject.fromObject(result);
  265. JSONObject respData = JSONObject.fromObject(jsonObject.get("resp_data"));
  266. String oderSn = respData.getString("oder_sn");
  267. if (oderSn != null) {
  268. String msg = respData.getString("msg");
  269. if ("success".equals(msg)) {
  270. return true;
  271. }
  272. }
  273. logger.error(this, "add-推送订单号为:" + order.getSalesOrderid() + "的订单,百胜返回信息:" + result);
  274. throw new Exception(respData.getString("msg"));
  275. } catch (Exception e) {
  276. throw e;
  277. }
  278. }
  279. @Override
  280. public boolean addProbationOrderToEfast(MQMessage message) throws Exception {
  281. // TODO Auto-generated method stub
  282. // orderInfo
  283. ProbationOrder probationOrder = new ProbationOrder();
  284. probationOrder.setProbationOrderid(message.getServiceToMessage());
  285. probationOrder = adminProbationOrderService.getProbationOrderByOrderId(probationOrder);
  286. if (probationOrder == null || probationOrder.getProbationOrderid() == null) {
  287. return false;
  288. }
  289. // request url
  290. String url = NameUtils.getConfig("efast_base_url");
  291. // set Requeset Data
  292. Map<String, String> requestData = new HashMap<String, String>();
  293. /**
  294. * 系统级参数
  295. */
  296. requestData.put("app_nick", NameUtils.getConfig("app_nick"));
  297. requestData.put("app_key", NameUtils.getConfig("app_key"));
  298. requestData.put("app_secret", NameUtils.getConfig("app_secret"));
  299. requestData.put("timestamp",DateTimeUtil.format(new Date(),"yyyyMMddHHmmss"));
  300. requestData.put("app_act", message.getServiceOtherMessage()); // "efast.trade.new.add"
  301. /**
  302. * 订单基本信息
  303. */
  304. String [] addressDesc = probationOrder.getProbationAddressInfo().split("-");
  305. String address = addressDesc[3];
  306. if (addressDesc[3]!=null) {
  307. Pattern p = Pattern.compile("\\s*|\t|\r|\n");
  308. Matcher m = p.matcher(addressDesc[3]);
  309. if (m.find()) {
  310. address = m.replaceAll("");
  311. }
  312. }
  313. String provinceName = addressDesc[0];
  314. if (addressDesc[0].indexOf("北京") != -1) {
  315. provinceName = "北京";
  316. } else if (addressDesc[0].indexOf("上海") != -1) {
  317. provinceName = "上海";
  318. } else if (addressDesc[0].indexOf("天津") != -1) {
  319. provinceName = "天津";
  320. } else if (addressDesc[0].indexOf("重庆") != -1) {
  321. provinceName = "重庆";
  322. }
  323. Map<String, Object> orderData = new HashMap<String, Object>();
  324. orderData.put("add_time", DateTimeUtil.format(probationOrder.getProbationCreateTime())); // 时间
  325. orderData.put("address", address); // 收货地址
  326. orderData.put("city_name", addressDesc[1]); // 城市
  327. orderData.put("consignee", probationOrder.getProbationReceiveName()); // 收货人
  328. orderData.put("district_name", addressDesc[2]); // 区域
  329. orderData.put("email", ""); // email
  330. orderData.put("goods_amount", (probationOrder.getProbationAmount()/100.0)); // 商品总价
  331. orderData.put("goods_count", 1); // 产品数量
  332. orderData.put("mobile", probationOrder.getProbationReceiveTel()); // 手机号码
  333. orderData.put("money_paid", probationOrder.getProbationYetAmount()/100.0); // 已付款
  334. orderData.put("oid", probationOrder.getProbationOrderid()); // 订单号
  335. orderData.put("order_amount", probationOrder.getProbationYetAmount()/100.0); // 应付款,应付款金额要与已付款金额相同
  336. /**
  337. * 产品信息
  338. */
  339. List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>();
  340. Map<String, Object> orders1 = new HashMap<String, Object>();
  341. orders1.put("goods_name", probationOrder.getProductName()); // 产品名称
  342. orders1.put("goods_number", 1); // 产品数量
  343. orders1.put("goods_price", (probationOrder.getProductDiscount()/100.0)); // 产品原价
  344. orders1.put("outer_sku", probationOrder.getProductRemark()); // 产品SKU
  345. orders1.put("payment_ft", probationOrder.getProbationYetAmount()/100.0); // 产品分摊价
  346. maps.add(orders1);
  347. orderData.put("orders", maps); // 订单产品
  348. orderData.put("pay_name", "weixinpay"); // 支付方式
  349. orderData.put("pay_time", DateTimeUtil.format(probationOrder.getProbationCreateTime()));// 支付时间 没有支付,传个创建时间
  350. orderData.put("postscript", ""); // 买家留言
  351. orderData.put("province_name", provinceName); // 省份
  352. orderData.put("sd_id", NameUtils.getConfig("sd_id")); // 对应 efast 店铺 id
  353. orderData.put("shipping_fee", 0); // 快递费
  354. orderData.put("shipping_name", "02"); // 快递公司代码
  355. orderData.put("tel", ""); // 我司电话
  356. orderData.put("to_buyer", "试用订单"); // 商家备注
  357. orderData.put("total_amount", (probationOrder.getProbationAmount()/100.0)); // 订单总额
  358. orderData.put("user_name", probationOrder.getProbationOpenid()); // 买家账户 百胜根据user_name来判断是否有重复,传openId是为了防止重复
  359. orderData.put("zipcode", probationOrder.getProbationReceivePostnum()); // 邮编
  360. com.fasterxml.jackson.databind.ObjectMapper mapper = new ObjectMapper();
  361. String orderDataStr = null;;
  362. try {
  363. orderDataStr = mapper.writeValueAsString(orderData);
  364. } catch (JsonProcessingException e2) {
  365. e2.printStackTrace();
  366. }
  367. requestData.put("info", orderDataStr);
  368. try {
  369. String result = HttpClient431Util.doGet(requestData, url);
  370. result = StringEscapeUtils.unescapeJava(result); // unicode 编码
  371. logger.info("add-推送订单号为:" + probationOrder.getProbationOrderid() + "的订单,百胜返回信息:" + result);
  372. // parse JSON String to Object
  373. JSONObject jsonObject = JSONObject.fromObject(result);
  374. JSONObject respData = JSONObject.fromObject(jsonObject.get("resp_data"));
  375. String oderSn = respData.getString("oder_sn");
  376. if (oderSn != null) {
  377. String msg = respData.getString("msg");
  378. if ("success".equals(msg)) {
  379. return true;
  380. }
  381. }
  382. logger.error(this, "add-推送订单号为:" + probationOrder.getProbationOrderid() + "的订单,百胜返回信息:" + result);
  383. throw new Exception(respData.getString("msg"));
  384. } catch (Exception e) {
  385. throw e;
  386. }
  387. }
  388. @Override
  389. public boolean exchangeOrderInfoToEfast(MQMessage message) throws Exception {
  390. // TODO Auto-generated method stub
  391. // orderInfo
  392. Order order = adminOrderService.getShopOrderByOrderId(message.getServiceToMessage());
  393. if (order == null || order.getSalesOrderid() == null) {
  394. return false;
  395. }
  396. String orderId = order.getSalesOrderid() + "HH";
  397. List<OrderItem> items = adminOrderService.getShopOrderItemByOrderId(order.getSalesOrderid());
  398. // request url
  399. String url = NameUtils.getConfig("efast_base_url");
  400. // set Requeset Data
  401. Map<String, String> requestData = new HashMap<String, String>();
  402. int money = order.getSalesYetAmount();
  403. if (order.getCouponId() != null && !"".equals(order.getCouponId())) {
  404. CouponItem couponItem = new CouponItem();
  405. couponItem.setCouponItemId(order.getCouponId());
  406. couponItem.setCouponItemUseropenid(order.getSalesOpenid());
  407. CouponType couponType = cartService.getCouponReduceByItemId(couponItem);
  408. if (null != couponType) {
  409. switch (couponType.getCouponType()) {
  410. case 1:
  411. money += couponType.getCouponReduce();
  412. break;
  413. case 2:
  414. money += order.getSalesAmount() * couponType.getCouponReduce()/100;
  415. break;
  416. }
  417. }
  418. }
  419. /**
  420. * 系统级参数
  421. */
  422. requestData.put("app_nick", NameUtils.getConfig("app_nick"));
  423. requestData.put("app_key", NameUtils.getConfig("app_key"));
  424. requestData.put("app_secret", NameUtils.getConfig("app_secret"));
  425. requestData.put("timestamp",DateTimeUtil.format(new Date(),"yyyyMMddHHmmss"));
  426. requestData.put("app_act", message.getServiceOtherMessage()); // "efast.trade.new.add"
  427. /**
  428. * 订单基本信息
  429. */
  430. String [] addressDesc = order.getSalesAddressInfo().split("-");
  431. //判断收货地址从而选择仓库
  432. String sd_id = NameUtils.getConfig("sd_id");
  433. String provinceName = addressDesc[0];
  434. if (addressDesc[0].indexOf("北京") != -1) {
  435. provinceName = "北京";
  436. } else if (addressDesc[0].indexOf("上海") != -1) {
  437. provinceName = "上海";
  438. } else if (addressDesc[0].indexOf("天津") != -1) {
  439. provinceName = "天津";
  440. } else if (addressDesc[0].indexOf("重庆") != -1) {
  441. provinceName = "重庆";
  442. }
  443. Map<String, Object> orderData = new HashMap<String, Object>();
  444. orderData.put("add_time", DateTimeUtil.format(order.getSalesCreateDate())); // 时间
  445. orderData.put("address", addressDesc[3]); // 收货地址
  446. orderData.put("city_name", addressDesc[1]); // 城市
  447. orderData.put("consignee", order.getSalesAddressName()); // 收货人
  448. orderData.put("district_name", addressDesc[2]); // 区域
  449. orderData.put("email", ""); // email
  450. orderData.put("goods_amount", (order.getSalesAmount()/100.0)); // 产品总价
  451. orderData.put("goods_count", items.size()); // 产品数量
  452. orderData.put("mobile", order.getSalesAddressTel()); // 手机号码
  453. orderData.put("money_paid", (money/100.0)); // 已付款
  454. orderData.put("oid", orderId); // 订单号
  455. orderData.put("order_amount", (order.getSalesAmount()/100.0)); // 订单金额
  456. /**
  457. * 产品信息
  458. */
  459. List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>();
  460. for (OrderItem item : items) {
  461. Map<String, Object> orders1 = new HashMap<String, Object>();
  462. orders1.put("goods_name", item.getItemProductName()); // 产品名称
  463. orders1.put("goods_number", item.getItemNum()); // 产品数量
  464. orders1.put("goods_price", (item.getItemProductPrice()/100.0)); // 产品原价
  465. orders1.put("outer_sku", item.getProduectRemark()); // 产品SKU
  466. orders1.put("payment_ft", 0.00); // 产品分摊价
  467. maps.add(orders1);
  468. }
  469. orderData.put("orders", maps); // 订单产品
  470. orderData.put("pay_name", "weixinpay"); // 支付方式
  471. orderData.put("pay_time", DateTimeUtil.format(order.getSalesTransactionDate()));// 支付时间
  472. orderData.put("postscript", order.getSalesUserRemark()); // 买家留言
  473. orderData.put("province_name", provinceName); // 省份
  474. orderData.put("sd_id", sd_id); // 对应 efast 店铺 id
  475. orderData.put("shipping_fee", 0); // 快递费
  476. orderData.put("shipping_name", "yto"); // 快递公司代码
  477. orderData.put("tel", ""); // 我司电话
  478. orderData.put("to_buyer", ""); // 商家备注
  479. orderData.put("total_amount", (order.getSalesAmount()/100.0)); // 商家备注
  480. orderData.put("user_name", order.getSalesOpenid()); // 买家账户 百胜根据user_name来判断是否有重复,传openId是为了防止重复
  481. orderData.put("zipcode", order.getSalesAddressPostnum()); // 邮编
  482. com.fasterxml.jackson.databind.ObjectMapper mapper = new ObjectMapper();
  483. String orderDataStr = null;;
  484. try {
  485. orderDataStr = mapper.writeValueAsString(orderData);
  486. } catch (JsonProcessingException e2) {
  487. e2.printStackTrace();
  488. }
  489. requestData.put("info", orderDataStr);
  490. try {
  491. String result = HttpClient431Util.doGet(requestData, url);
  492. result = StringEscapeUtils.unescapeJava(result); // unicode 编码
  493. logger.info("add-推送订单号为:" + order.getSalesOrderid() + "的订单,百胜返回信息:" + result);
  494. // parse JSON String to Object
  495. JSONObject jsonObject = JSONObject.fromObject(result);
  496. JSONObject respData = JSONObject.fromObject(jsonObject.get("resp_data"));
  497. String oderSn = respData.getString("oder_sn");
  498. if (oderSn != null) {
  499. String msg = respData.getString("msg");
  500. if ("success".equals(msg)) {
  501. return true;
  502. }
  503. }
  504. logger.error(this, "add-推送订单号为:" + order.getSalesOrderid() + "的订单,百胜返回信息:" + result);
  505. throw new Exception(respData.getString("msg"));
  506. } catch (Exception e) {
  507. throw e;
  508. }
  509. }
  510. @Override
  511. public boolean sendOrderInfoToEfast(MQMessage message) throws Exception {
  512. // TODO Auto-generated method stub
  513. String[] posts = message.getServiceOtherMessage().split("-");
  514. // 组装数据
  515. Map<String, String> requestData = new HashMap<String, String>();
  516. requestData.put("app_nick", NameUtils.getConfig("app_nick"));
  517. requestData.put("app_key", NameUtils.getConfig("app_key"));
  518. requestData.put("app_secret", NameUtils.getConfig("app_secret"));
  519. requestData.put("timestamp",DateTimeUtil.format(new Date(),"yyyyMMddHHmmss"));
  520. requestData.put("app_act", "efast.trade.send"); // efast.trade.send
  521. requestData.put("oid", message.getServiceToMessage());
  522. requestData.put("feilds", NameUtils.getConfig("order_field"));
  523. requestData.put("shipping_code", posts[0]); // 快递代码
  524. requestData.put("invoice_no", posts[1]); // 快递单号
  525. try {
  526. String resultJson = HttpClient431Util.doPost(requestData, NameUtils.getConfig("efast_base_url"));
  527. resultJson = StringEscapeUtils.unescapeJava(resultJson); // unicode
  528. logger.info("send-订单号为:" + message.getServiceToMessage() + "的订单,百胜返回信息:" + resultJson);
  529. JSONObject jsonObject = JSONObject.fromObject(resultJson);
  530. // default HTTP SUCCESS
  531. JSONObject respData = JSONObject.fromObject(jsonObject.get("resp_data"));
  532. String msg = respData.getString("msg");
  533. if ("success".equals(msg)) {
  534. return true;
  535. }
  536. //当订单推送发货失败时,修改订单表状态,将已发货改为待发货状态
  537. Order order = new Order();
  538. order.setSalesOrderid(message.getServiceToMessage());
  539. order.setSalesStatus(2);
  540. order.setOldStatus(5);
  541. adminOrderService.updateOrderStatusByOrderId(order);
  542. logger.error(this, "send-订单号为:" + message.getServiceToMessage() + "的订单,百胜返回信息:" + resultJson);
  543. return false;
  544. } catch (Exception e) {
  545. // TODO Auto-generated catch block
  546. e.printStackTrace();
  547. logger.error(this, "send-订单号为:" + message.getServiceToMessage() + "的订单,发生错误:" + e.getMessage());
  548. }
  549. return false;
  550. }
  551. @Override
  552. public boolean selectEfastReturnOrderInfo(MQMessage message)throws Exception {
  553. // TODO Auto-generated method stub
  554. if (message == null) {
  555. return false;
  556. }
  557. Order orderEfast = this.adminOrderService.getShopOrderByOrderId(message.getServiceToMessage());
  558. if (orderEfast == null) {
  559. return false;
  560. }
  561. if (!"8".equals(orderEfast.getSalesStatus().toString())) {
  562. return false;
  563. }
  564. // 百胜接口所需参数
  565. Map<String, String> requestData = new HashMap<String, String>();
  566. requestData.put("app_nick", NameUtils.getConfig("app_nick"));
  567. requestData.put("app_key", NameUtils.getConfig("app_key"));
  568. requestData.put("app_secret", NameUtils.getConfig("app_secret"));
  569. requestData.put("timestamp",DateTimeUtil.format(new Date(),"yyyyMMddHHmmss"));
  570. requestData.put("app_act", "efast.order.return.info.fetch");
  571. requestData.put("return_sn", orderEfast.getSalesAdminRemark());
  572. try {
  573. String resultJson=HttpClient431Util.doPost(requestData, NameUtils.getConfig("efast_base_url"));
  574. resultJson=StringEscapeUtils.unescapeJava(resultJson);
  575. logger.info("get-订单号为:" + message.getServiceToMessage() + "的订单,百胜返回信息:" + resultJson);
  576. JSONObject jsonObject=JSONObject.fromObject(resultJson);
  577. JSONObject respData = JSONObject.fromObject(jsonObject.get("resp_data"));
  578. String returnOrderStatus=respData.getString("return_order_status"); //退单状态
  579. if("1".equals(returnOrderStatus)){//1表示已确认退单
  580. Order order = new Order();
  581. order.setSalesOpenid("7");
  582. order.setSalesOrderid(message.getServiceToMessage()); // orderId
  583. order.setSalesStatus(8); // 订单退货,关闭
  584. adminOrderService.updateOrderStatusByOrderIdAndToStatus(order);
  585. return true;
  586. }
  587. } catch (Exception e) {
  588. // TODO: handle exception
  589. e.printStackTrace();
  590. logger.error(this, "get-订单号为:" + message.getServiceToMessage() + "的订单,发生错误:" + e.getMessage());
  591. }
  592. return false;
  593. }
  594. @Override
  595. public boolean returnOrderInfoToEfast(MQMessage message) throws Exception {
  596. // TODO Auto-generated method stub
  597. //获取订单信息
  598. Order order = adminOrderService.getShopOrderByOrderId(message.getServiceToMessage());
  599. if (order == null || order.getSalesOrderid() == null) {
  600. return false;
  601. }
  602. JSONObject jsonObj = this.getEfastOrderInfo(message);
  603. if (null == jsonObj) {
  604. return false;
  605. }
  606. String dealCode = jsonObj.getString("deal_code");
  607. String orderSn = jsonObj.getString("order_sn");
  608. List<OrderItem> itemList = adminOrderService.getItemsNumByOrderId(message.getServiceToMessage());
  609. StringBuffer detail = new StringBuffer();
  610. String returnDetail = "";
  611. if (itemList != null && itemList.size() > 1) {
  612. for (OrderItem orderItem : itemList) {
  613. detail = detail.append(orderItem.getProduectRemark() + "@" + orderItem.getItemNum() + "@" + order.getSalesYetAmount() + "@" + dealCode + ",");
  614. }
  615. returnDetail = detail.toString().substring(0, detail.toString().length() - 1);
  616. } else {
  617. OrderItem orderItem = itemList.get(0);
  618. detail = detail.append(orderItem.getProduectRemark() + "@" + orderItem.getItemNum() + "@" + order.getSalesYetAmount() + "@" + dealCode);
  619. returnDetail = detail.toString();
  620. }
  621. String[] posts = message.getServiceOtherMessage().split("-");
  622. // 组装数据
  623. Map<String, String> requestData = new HashMap<String, String>();
  624. requestData.put("return_shipping_name", posts[0]); // 退单物流代码
  625. requestData.put("kehu_return_invoice_no", posts[1]); // 退单物流单号
  626. requestData.put("return_type", "2");
  627. requestData.put("app_nick", NameUtils.getConfig("app_nick"));
  628. requestData.put("app_key", NameUtils.getConfig("app_key"));
  629. requestData.put("app_secret", NameUtils.getConfig("app_secret"));
  630. requestData.put("timestamp",DateTimeUtil.format(new Date(),"yyyyMMddHHmmss"));
  631. requestData.put("app_act", "efast.trade.return");
  632. requestData.put("order_sn", orderSn);
  633. requestData.put("return_shipping", "");
  634. requestData.put("return_pfje_fee", "");
  635. requestData.put("return_other_discount", "");
  636. requestData.put("return_pay", "2");
  637. requestData.put("return_reason", "");
  638. requestData.put("return_desc", "");
  639. requestData.put("return_ck", "");
  640. requestData.put("return_detail", returnDetail);
  641. try {
  642. String resultJson = HttpClient431Util.doPost(requestData, NameUtils.getConfig("efast_base_url"));
  643. resultJson = StringEscapeUtils.unescapeJava(resultJson);
  644. logger.info("return-订单号为:" + message.getServiceToMessage() + "的订单,百胜返回信息:" + resultJson);
  645. JSONObject jsonObject = JSONObject.fromObject(resultJson);
  646. JSONObject respData = JSONObject.fromObject(jsonObject.get("resp_data"));
  647. if (respData != null) {
  648. String returnSn = respData.getString("return_sn");
  649. if (returnSn != null && !"".equals(returnSn)) {
  650. adminOrderService.updateOrderAdminRemarkByOrderId(returnSn, message.getServiceToMessage(), null);
  651. return true;
  652. }
  653. }
  654. //当订单推送发货失败时,修改订单表状态,将已发货改为待发货状态
  655. Order orders = new Order();
  656. orders.setSalesOrderid(message.getServiceToMessage());
  657. orders.setSalesStatus(7);
  658. orders.setOldStatus(8);
  659. adminOrderService.updateOrderStatusByOrderId(order);
  660. logger.error(this, "return-订单号为:" + message.getServiceToMessage() + "的订单,百胜返回信息:" + resultJson);
  661. return false;
  662. } catch (Exception e) {
  663. e.printStackTrace();
  664. logger.error(this, "return-订单号为:" + message.getServiceToMessage() + "的订单,发生错误:" + e.getMessage());
  665. }
  666. return false;
  667. }
  668. //获取百盛那边的订单详细信息
  669. public JSONObject getEfastOrderInfo(MQMessage message) {
  670. // 组装数据
  671. Map<String, String> requestData = new HashMap<String, String>();
  672. requestData.put("app_nick", NameUtils.getConfig("app_nick"));
  673. requestData.put("app_key", NameUtils.getConfig("app_key"));
  674. requestData.put("app_secret", NameUtils.getConfig("app_secret"));
  675. requestData.put("timestamp",DateTimeUtil.format(new Date(),"yyyyMMddHHmmss"));
  676. requestData.put("app_act", "efast.trade.detail.get");
  677. requestData.put("oid", message.getServiceToMessage());
  678. requestData.put("feilds", NameUtils.getConfig("order_field"));
  679. try {
  680. String resultJson = HttpClient431Util.doPost(requestData, NameUtils.getConfig("efast_base_url"));
  681. resultJson = StringEscapeUtils.unescapeJava(resultJson); // unicode
  682. logger.info("get-订单号为:" + message.getServiceToMessage() + "的订单,百胜返回信息:" + resultJson);
  683. JSONObject jsonObject = JSONObject.fromObject(resultJson);
  684. // default HTTP SUCCESS
  685. JSONObject respData = JSONObject.fromObject(jsonObject.get("resp_data"));
  686. if (null != respData.getJSONArray("orders")) {
  687. return respData;
  688. }
  689. } catch (Exception e) {
  690. e.printStackTrace();
  691. logger.error(this, "get-订单号为:" + message.getServiceToMessage() + "的订单,发生错误:" + e.getMessage());
  692. }
  693. return null;
  694. }
  695. /**
  696. * 兑换记录
  697. */
  698. public boolean giftCard(String address, String id, Integer colorId, String addrName, String tel, String openId) throws Exception{
  699. Map<String, Object> orderData = new HashMap<String, Object>();
  700. Map<String, String> requestData = new HashMap<String, String>();
  701. // request url
  702. String url = NameUtils.getConfig("efast_base_url");
  703. requestData.put("app_nick", NameUtils.getConfig("app_nick"));
  704. requestData.put("app_key", NameUtils.getConfig("app_key"));
  705. requestData.put("app_secret", NameUtils.getConfig("app_secret"));
  706. requestData.put("timestamp",DateTimeUtil.format(new Date(),"yyyyMMddHHmmss"));
  707. requestData.put("app_act", "efast.trade.new.add");
  708. //颜色表查询
  709. ProductColor productColor = productColorService.selectProductColorById(colorId);
  710. //地址截取
  711. String [] addressDesc = address.split("-");
  712. String provinceName = addressDesc[0];
  713. if (addressDesc[0].indexOf("北京") != -1) {
  714. provinceName = "北京";
  715. } else if (addressDesc[0].indexOf("上海") != -1) {
  716. provinceName = "上海";
  717. } else if (addressDesc[0].indexOf("天津") != -1) {
  718. provinceName = "天津";
  719. } else if (addressDesc[0].indexOf("重庆") != -1) {
  720. provinceName = "重庆";
  721. }
  722. String sd_id = NameUtils.getConfig("sd_id");
  723. orderData.put("add_time", DateTimeUtil.format(new Date())); // 时间
  724. orderData.put("address", addressDesc[3]); // 收货地址
  725. orderData.put("city_name", addressDesc[1]); // 城市
  726. orderData.put("consignee", addrName); // 收货人
  727. orderData.put("district_name", addressDesc[2]); // 区域
  728. orderData.put("email", ""); // email
  729. orderData.put("goods_amount", productColor.getColorDiscount() / 100); // 商品总价
  730. orderData.put("goods_count", 1); // 产品数量
  731. orderData.put("mobile", tel); // 手机号码
  732. orderData.put("money_paid", productColor.getColorDiscount() / 100); // 已付款
  733. // 兑换
  734. orderData.put("oid", id); // 订单号
  735. orderData.put("order_amount", productColor.getColorDiscount() / 100); // 应付款,应付款金额要与已付款金额相同
  736. /**
  737. * 产品信息
  738. */
  739. List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>();
  740. Map<String, Object> orders1 = new HashMap<String, Object>();
  741. orders1.put("goods_name", "【美国watero】净饮水一体机"); // 产品名称
  742. orders1.put("goods_number",1); // 产品数量
  743. orders1.put("goods_price", productColor.getColorDiscount() / 100); // 产品原价
  744. orders1.put("outer_sku", productColor.getColor69Code()); // 产品SKU
  745. orders1.put("payment_ft", productColor.getColorDiscount() / 100); // 产品分摊价
  746. maps.add(orders1);
  747. orderData.put("orders", maps); // 订单产品
  748. orderData.put("pay_name", "weixinpay"); // 支付方式
  749. orderData.put("pay_time", DateTimeUtil.format(new Date())); // 支付时间
  750. orderData.put("postscript", ""); // 买家留言
  751. orderData.put("province_name", provinceName); // 省份
  752. orderData.put("sd_id", sd_id); // 对应 efast 店铺 id
  753. orderData.put("shipping_fee", 0); // 快递费
  754. orderData.put("shipping_name", "yto"); // 快递公司代码
  755. orderData.put("tel", ""); // 我司电话
  756. orderData.put("to_buyer", ""); // 商家备注
  757. orderData.put("total_amount", productColor.getColorDiscount() / 100); // 订单总额
  758. orderData.put("user_name", openId); // 买家账户 百胜根据user_name来判断是否有重复,传openId是为了防止重复
  759. orderData.put("zipcode", ""); // 邮编
  760. com.fasterxml.jackson.databind.ObjectMapper mapper = new ObjectMapper();
  761. String orderDataStr = null;;
  762. try {
  763. orderDataStr = mapper.writeValueAsString(orderData);
  764. } catch (JsonProcessingException e2) {
  765. e2.printStackTrace();
  766. }
  767. requestData.put("info", orderDataStr);
  768. try {
  769. String result = HttpClient431Util.doGet(requestData, url);
  770. result = StringEscapeUtils.unescapeJava(result); // unicode 编码
  771. logger.info("add-推送订单号为:" + id + "的订单,百胜返回信息:" + result);
  772. // parse JSON String to Object
  773. JSONObject jsonObject = JSONObject.fromObject(result);
  774. JSONObject respData = JSONObject.fromObject(jsonObject.get("resp_data"));
  775. String oderSn = respData.getString("oder_sn");
  776. if (oderSn != null) {
  777. String msg = respData.getString("msg");
  778. if ("success".equals(msg)) {
  779. return true;
  780. }
  781. }
  782. logger.error(this, "add-推送订单号为:" + id + "的订单,百胜返回信息:" + result);
  783. throw new Exception(respData.getString("msg"));
  784. } catch (Exception e) {
  785. throw e;
  786. }
  787. }
  788. }