OrderEntityUtils.java 58 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463
  1. package com.ydd.app;
  2. import com.fasterxml.jackson.core.type.TypeReference;
  3. import com.google.common.collect.Lists;
  4. import com.ydd.app.dto.AddressReq;
  5. import com.ydd.app.dto.OrderReq;
  6. import com.ydd.common.enums.DeliveryTypeEnums;
  7. import com.ydd.common.utils.DateUtils;
  8. import com.ydd.common.utils.StringUtils;
  9. import com.ydd.ecloud.core.utils.JsonMapper;
  10. import com.ydd.module.domain.WaimaiOrderDetail;
  11. import com.ydd.module.dto.DeliveryInfo;
  12. import com.ydd.module.dto.SfShopDto;
  13. import com.ydd.third.common.dto.MaKePtProductVo;
  14. import com.ydd.third.common.vo.dada.config.DadaConstant;
  15. import com.ydd.third.common.vo.dada.domain.order.GoodsInfo;
  16. import com.ydd.third.common.vo.vo.order.OrderVo;
  17. import com.ydd.third.common.vo.vo.order.ProductVo;
  18. import com.ydd.third.common.vo.waimai.meituan.OpenApiGood;
  19. import org.apache.commons.collections4.CollectionUtils;
  20. import java.math.BigDecimal;
  21. import java.util.ArrayList;
  22. import java.util.Date;
  23. import java.util.List;
  24. /**
  25. * Project:lb-server
  26. * Class:OrderEntityUtils
  27. * Description:TODO
  28. * Time:2021/3/8 16:14
  29. *
  30. * @author zoe
  31. */
  32. public class OrderEntityUtils {
  33. /**
  34. * @param orderReq
  35. * @param delivery
  36. * @return
  37. * @Description 创建配送订单
  38. * @Author peakren
  39. * @Date 2021/3/26 3:21 PM
  40. */
  41. public static OrderVo createOrderVo(OrderReq orderReq, DeliveryInfo delivery) {
  42. return createOrderVo(orderReq, delivery, false);
  43. }
  44. /**
  45. * @param orderReq
  46. * @param delivery
  47. * @return
  48. * @Description 创建配送订单
  49. * @Author peakren
  50. * @Date 2021/3/26 3:21 PM
  51. *
  52. * app改版需求: 猎豹AI针对配送方都是即时单 2022-02-26修改
  53. */
  54. public static OrderVo createOrderVo(OrderReq orderReq, DeliveryInfo delivery, boolean isTest) {
  55. OrderVo orderVo = new OrderVo();
  56. /**
  57. * 备注
  58. */
  59. // if(StringUtils.isNotBlank(orderReq.getTakeRemark())){
  60. // orderVo.setRemark(orderReq.getTakeRemark().trim());
  61. // }
  62. String remark = orderReq.getWaiMaiRemark();
  63. if(StringUtils.isNotBlank(remark)){
  64. if (StringUtils.isNotBlank(remark) && remark.contains("收餐人隐私号")) {
  65. remark = remark.substring(0, remark.indexOf("收餐人隐私号"));
  66. }
  67. if(StringUtils.isNotBlank(orderReq.getTakeRemark())&&!orderReq.getTakeRemark().equals(remark)){
  68. remark = "【"+orderReq.getTakeRemark()+"】" + remark;
  69. }
  70. if(StringUtils.isNotBlank(remark)&&remark.length()>200){
  71. remark = remark.substring(0,200);
  72. }
  73. orderVo.setRemark(remark);
  74. }else if(StringUtils.isNotBlank(orderReq.getTakeRemark())){
  75. orderVo.setRemark(orderReq.getTakeRemark().trim());
  76. }
  77. /**
  78. * 发件人信息
  79. */
  80. AddressReq sendAddress = orderReq.getSendAddress();
  81. orderVo.setFromAddress(checkAddress(sendAddress.getAddress()));
  82. if(StringUtils.isNotBlank(sendAddress.getStreet()) && !sendAddress.getAddress().endsWith(sendAddress.getStreet())){
  83. orderVo.setFromAddressDetail(checkAddress(sendAddress.getStreet()));
  84. orderVo.setFromAddressWithHouseNumber(checkAddress(sendAddress.getAddress() + sendAddress.getStreet()));
  85. }else{
  86. orderVo.setFromAddressDetail("");
  87. orderVo.setFromAddressWithHouseNumber(checkAddress(sendAddress.getAddress()));
  88. }
  89. if(StringUtils.isNotBlank(sendAddress.getExtension())){
  90. orderVo.setFromMobile(sendAddress.getPhone()+"_"+sendAddress.getExtension());
  91. }else{
  92. orderVo.setFromMobile(sendAddress.getPhone());
  93. }
  94. orderVo.setFromSenderName(sendAddress.getContact());
  95. orderVo.setFromLongitude(new BigDecimal(sendAddress.getLng()));
  96. orderVo.setFromLatitude(new BigDecimal(sendAddress.getLat()));
  97. orderVo.setSenderCity(sendAddress.getCityName());
  98. if (sendAddress.getDistrictName() != null){
  99. orderVo.setFromDistrictName(sendAddress.getDistrictName().toString());
  100. }else {
  101. orderVo.setFromDistrictName("城区");
  102. }
  103. if ("石河子市".equals(sendAddress.getDistrictName()) ){
  104. orderVo.setSenderCity("石河子市");
  105. sendAddress.setCityName("石河子市");
  106. }
  107. /**
  108. * 收件人信息
  109. */
  110. AddressReq receiptAddress = orderReq.getReceiptAddress();
  111. orderVo.setReceiverName(receiptAddress.getContact());
  112. orderVo.setReceiverAddress(checkAddress(receiptAddress.getAddress()));
  113. orderVo.setReceiverCity(receiptAddress.getCityName());
  114. if(StringUtils.isNotBlank(receiptAddress.getStreet())&&!receiptAddress.getAddress().endsWith(receiptAddress.getStreet())){
  115. orderVo.setReceiverAddressDetail(checkAddress(receiptAddress.getStreet()));
  116. orderVo.setReceiverAddressWithHouseNumber(checkAddress(receiptAddress.getAddress() + receiptAddress.getStreet()));
  117. }else{
  118. orderVo.setReceiverAddressDetail("");
  119. orderVo.setReceiverAddressWithHouseNumber(checkAddress(receiptAddress.getAddress()));
  120. }
  121. if ("石河子市".equals(receiptAddress.getDistrictName()) ){
  122. orderVo.setReceiverCity("石河子市");
  123. receiptAddress.setCityName("石河子市");
  124. }
  125. // orderVo.setReceiverAddressDetail(receiptAddress.getStreet());
  126. orderVo.setReceiverLat(new BigDecimal(receiptAddress.getLat()));
  127. orderVo.setReceiverLng(new BigDecimal(receiptAddress.getLng()));
  128. if(StringUtils.isNotBlank(receiptAddress.getExtension())){
  129. orderVo.setReceiverPhone(receiptAddress.getPhone()+"_"+receiptAddress.getExtension().trim());
  130. }else{
  131. orderVo.setReceiverPhone(receiptAddress.getPhone());
  132. }
  133. if (receiptAddress.getDistrictName() != null){
  134. orderVo.setReceiverDistrictName(receiptAddress.getDistrictName().toString());
  135. }else {
  136. orderVo.setReceiverDistrictName("城区");
  137. }
  138. BigDecimal orderMoney = orderReq.getAmount();
  139. BigDecimal waiMaiMoney = orderReq.getMtMoney();
  140. /**
  141. * 外卖商品信息
  142. */
  143. List<WaimaiOrderDetail> details = new ArrayList<>();
  144. if (orderReq.getWaimaiOrderDetails() != null){
  145. details = orderReq.getWaimaiOrderDetails();
  146. }
  147. List<ProductVo> fnGoods = new ArrayList<>();
  148. List<OpenApiGood> mtGoods = new ArrayList<>();
  149. List<GoodsInfo> dadaGoodsList = new ArrayList<>();
  150. List<MaKePtProductVo> maKePtProductVos = Lists.newArrayList();
  151. for (WaimaiOrderDetail d : details){
  152. StringBuilder spec = new StringBuilder();
  153. if(StringUtils.isNotBlank(d.getFoodProperty())){
  154. spec.append(d.getFoodProperty());
  155. }
  156. if(StringUtils.isNotBlank(spec.toString())&&StringUtils.isNotBlank(d.getSpec())){
  157. spec.append(",").append(d.getSpec());
  158. }else if(StringUtils.isBlank(spec.toString())&&StringUtils.isNotBlank(d.getSpec())){
  159. spec.append(d.getSpec());
  160. }
  161. OpenApiGood good = new OpenApiGood();
  162. ProductVo dto = new ProductVo();
  163. GoodsInfo dadaGoods = new GoodsInfo();
  164. MaKePtProductVo ptProductVo = new MaKePtProductVo();
  165. good.setGoodCount(d.getQuantity().intValue());
  166. good.setGoodName(d.getFoodName());
  167. good.setGoodPrice(d.getPrice());
  168. dto.setProductName(d.getFoodName());
  169. dadaGoods.setSku_name(d.getFoodName());
  170. ptProductVo.setName(d.getFoodName());
  171. if(StringUtils.isNotBlank(spec.toString())){
  172. good.setGoodName(d.getFoodName()+"("+spec.toString()+")");
  173. dto.setProductName(d.getFoodName()+"("+spec.toString()+")");
  174. dadaGoods.setSku_name(d.getFoodName()+"("+spec.toString()+")");
  175. ptProductVo.setName(d.getFoodName()+"("+spec.toString()+")");
  176. }
  177. mtGoods.add(good);
  178. dto.setProductNum(d.getQuantity().intValue());
  179. dto.setProductActualMoney(d.getPrice());
  180. dto.setProductMoney(d.getPrice());
  181. fnGoods.add(dto);
  182. dadaGoods.setSrc_product_no(d.getId().toString());
  183. dadaGoods.setCount(d.getQuantity().doubleValue());
  184. dadaGoodsList.add(dadaGoods);
  185. ptProductVo.setNum(d.getQuantity().toString());
  186. ptProductVo.setPrice(d.getPrice().toString());
  187. maKePtProductVos.add(ptProductVo);
  188. }
  189. // 使用的运力平台是自己的平台还是我们的平台
  190. orderVo.setIsMine(orderReq.getIsMine());
  191. // 普通订单价格
  192. if (orderMoney == null) {
  193. orderMoney = new BigDecimal("50");
  194. }
  195. // 外卖订单价格
  196. if (waiMaiMoney != null){
  197. orderMoney = waiMaiMoney;
  198. }
  199. if (DeliveryTypeEnums.DADA.getType().equals(delivery.getType())) {
  200. orderVo.setLbClient(DeliveryTypeEnums.DADA.getName());
  201. if(StringUtils.isNotBlank(orderReq.getShopName())){
  202. orderVo.setFromSenderName(orderReq.getShopName());
  203. }
  204. /**
  205. * 门店编号
  206. * 达达
  207. * shop_no 必传
  208. * 门店编号,门店创建后可在门店列表和单页查看
  209. */
  210. orderVo.setShopNo(delivery.getShopId());
  211. /**
  212. * 第三方订单ID
  213. * 达达
  214. * origin_id 必传
  215. */
  216. orderVo.setOrderNo(orderReq.getOrderSn());
  217. /**
  218. * 达达
  219. * city_code,必传
  220. * 可调用相关接口查看,经查与所在城市的区号一致
  221. */
  222. orderVo.setCityCode(orderReq.getSendAddress().getCityCode());
  223. /**
  224. * 订单金额
  225. * 达达
  226. * cargo_price,必传
  227. * 这个订单的货物的金额,单位元
  228. */
  229. orderVo.setOrderMoney(orderMoney);
  230. /**
  231. * 预约发单时间
  232. * 达达
  233. * delay_publish_time,不必传
  234. * 可以支持未来3天内的订单发预约单。
  235. */
  236. // if (TakeTypeEnum.APPOINTMENT.type.equals(orderReq.getTakeType())) {
  237. // orderVo.setDelayPublishTime(DateUtils.parseDate(orderReq.getTakeTime()));
  238. // }
  239. /**
  240. * 达达
  241. * 回调URL,必传
  242. */
  243. orderVo.setCallback(DadaConstant.getCallbackUrl(isTest));
  244. /**
  245. * 物品类型
  246. * 达达
  247. * cargo_type,不必传
  248. * 订单商品类型:
  249. * 食品小吃-1,饮料-2,鲜花-3,文印票务-8,便利店-9,水果生鲜-13,同城电商-19, 医药-20,蛋糕-21,酒品-24,小商品市场-25,
  250. * 服装-26,汽修零配-27,数码-28,小龙虾-29,火锅-51,其他-5
  251. */
  252. orderVo.setGoodsType(Integer.valueOf(orderReq.getProduct().getDadaProductType()));
  253. /**
  254. * 订单来源标示和订单来源编号
  255. */
  256. if (StringUtils.isNotBlank(orderReq.getOrderSource())){
  257. if (orderReq.getOrderSource().equals("101")){
  258. orderVo.setOriginMark("mt");
  259. orderVo.setOriginMarkNo(orderReq.getPoiSeq());
  260. }else if (orderReq.getOrderSource().equals("102")||orderReq.getOrderSource().equals("103")){
  261. orderVo.setOriginMark("elm");
  262. orderVo.setOriginMarkNo(orderReq.getPoiSeq());
  263. } else if (orderReq.getOrderSource().equals("104")){
  264. orderVo.setOriginMark("jdhome");
  265. orderVo.setOriginMarkNo(orderReq.getPoiSeq());
  266. }
  267. }
  268. /**
  269. * 订单重量
  270. * 达达
  271. * cargo_weight 必传
  272. * 货物重量(单位:Kg)
  273. */
  274. orderVo.setWeight(new BigDecimal(orderReq.getWeight()));
  275. /**
  276. * 订单商品数量
  277. * 达达:
  278. * cargo_num,不必传
  279. */
  280. orderVo.setGoodsNum(1);
  281. //设置是否是指定商家
  282. // if (delivery.getPreferredDelivery().equals(StatusEnum.SHOW.status)) {
  283. orderVo.setIsShansongSH(true);
  284. orderVo.setMerchantId(delivery.getThirdShopId());
  285. orderVo.setAccessToken(delivery.getAuthToken());
  286. orderVo.setTips(orderReq.getTipAmount());
  287. // 订单商品
  288. orderVo.setDadaGoods(dadaGoodsList);
  289. orderVo.setOrderingSourceNo(orderReq.getOrderingSourceNo());
  290. // }
  291. }
  292. if (DeliveryTypeEnums.DADA_YZ.getType().equals(delivery.getType())) {
  293. orderVo.setLbClient(DeliveryTypeEnums.DADA_YZ.getName());
  294. if(StringUtils.isNotBlank(orderReq.getShopName())){
  295. orderVo.setFromSenderName(orderReq.getShopName());
  296. }
  297. /**
  298. * 门店编号
  299. * 达达
  300. * shop_no 必传
  301. * 门店编号,门店创建后可在门店列表和单页查看
  302. */
  303. orderVo.setShopNo(delivery.getShopId());
  304. /**
  305. * 第三方订单ID
  306. * 达达
  307. * origin_id 必传
  308. */
  309. orderVo.setOrderNo(orderReq.getOrderSn());
  310. /**
  311. * 达达
  312. * city_code,必传
  313. * 可调用相关接口查看,经查与所在城市的区号一致
  314. */
  315. orderVo.setCityCode(orderReq.getSendAddress().getCityCode());
  316. /**
  317. * 订单金额
  318. * 达达
  319. * cargo_price,必传
  320. * 这个订单的货物的金额,单位元
  321. */
  322. orderVo.setOrderMoney(orderMoney);
  323. /**
  324. * 预约发单时间
  325. * 达达
  326. * delay_publish_time,不必传
  327. * 可以支持未来3天内的订单发预约单。
  328. */
  329. // if (TakeTypeEnum.APPOINTMENT.type.equals(orderReq.getTakeType())) {
  330. // orderVo.setDelayPublishTime(DateUtils.parseDate(orderReq.getTakeTime()));
  331. // }
  332. /**
  333. * 达达
  334. * 回调URL,必传
  335. */
  336. orderVo.setCallback(DadaConstant.getYzCallbackUrl(isTest));
  337. /**
  338. * 物品类型
  339. * 达达
  340. * cargo_type,不必传
  341. * 订单商品类型:
  342. * 食品小吃-1,饮料-2,鲜花-3,文印票务-8,便利店-9,水果生鲜-13,同城电商-19, 医药-20,蛋糕-21,酒品-24,小商品市场-25,
  343. * 服装-26,汽修零配-27,数码-28,小龙虾-29,火锅-51,其他-5
  344. */
  345. orderVo.setGoodsType(Integer.valueOf(orderReq.getProduct().getDadaProductType()));
  346. /**
  347. * 订单来源标示和订单来源编号
  348. */
  349. if (StringUtils.isNotBlank(orderReq.getOrderSource())){
  350. if (orderReq.getOrderSource().equals("101")){
  351. orderVo.setOriginMark("mt");
  352. orderVo.setOriginMarkNo(orderReq.getPoiSeq());
  353. }else if (orderReq.getOrderSource().equals("102")||orderReq.getOrderSource().equals("103")){
  354. orderVo.setOriginMark("elm");
  355. orderVo.setOriginMarkNo(orderReq.getPoiSeq());
  356. } else if (orderReq.getOrderSource().equals("104")){
  357. orderVo.setOriginMark("jdhome");
  358. orderVo.setOriginMarkNo(orderReq.getPoiSeq());
  359. }
  360. }
  361. /**
  362. * 订单重量
  363. * 达达
  364. * cargo_weight 必传
  365. * 货物重量(单位:Kg)
  366. */
  367. orderVo.setWeight(new BigDecimal(orderReq.getWeight()));
  368. /**
  369. * 订单商品数量
  370. * 达达:
  371. * cargo_num,不必传
  372. */
  373. orderVo.setGoodsNum(1);
  374. orderVo.setIsDirectDelivery(1);
  375. //设置是否是指定商家
  376. // if (delivery.getPreferredDelivery().equals(StatusEnum.SHOW.status)) {
  377. orderVo.setIsShansongSH(true);
  378. orderVo.setMerchantId(delivery.getThirdShopId());
  379. orderVo.setAccessToken(delivery.getAuthToken());
  380. orderVo.setTips(orderReq.getTipAmount());
  381. // 订单商品
  382. orderVo.setDadaGoods(dadaGoodsList);
  383. orderVo.setOrderingSourceNo(orderReq.getOrderingSourceNo());
  384. // }
  385. } else if (DeliveryTypeEnums.SHAN_SONG.getType().equals(delivery.getType())) {
  386. orderVo.setLbClient(DeliveryTypeEnums.SHAN_SONG.getName());
  387. /**
  388. * 第三方平台订单流水号
  389. * 闪送
  390. * orderNo 必传
  391. */
  392. orderVo.setOrderNo(orderReq.getOrderSn());
  393. /**
  394. * 城市名称
  395. * 闪送
  396. * cityName 必传
  397. * 城市名称:市级即可
  398. */
  399. orderVo.setCityName(orderReq.getReceiptAddress().getCityName());
  400. /**
  401. * 预约类型
  402. * 闪送
  403. * appointType 必传
  404. * 闪送:appointType,0立即单,1预约单
  405. */
  406. orderVo.setIsAppoint(0);
  407. // if (TakeTypeEnum.APPOINTMENT.type.equals(orderReq.getTakeType())) {
  408. // orderVo.setIsAppoint(1);
  409. // /**
  410. // * 预约取货时间
  411. // * 闪送
  412. // * 预约单,期望取货时间
  413. // * appointmentDate 非必传
  414. // */
  415. // orderVo.setExpectedPickupTime(DateUtils.parseDate(orderReq.getTakeTime()));
  416. // }
  417. /**
  418. * 物品来源
  419. * 闪送
  420. * orderingSourceType 非必传
  421. * 对应商家版物品来源,支持美团,饿了么,可以为空
  422. * 物品来源流水号 orderingSourceNo
  423. */
  424. if (StringUtils.isNotBlank(orderReq.getOrderSource())){
  425. if (orderReq.getOrderSource().equals("101")){
  426. orderVo.setOrderingSourceType(4);
  427. orderVo.setOrderingSourceNo(orderReq.getPoiSeq());
  428. }else if (orderReq.getOrderSource().equals("102")||orderReq.getOrderSource().equals("103")){
  429. orderVo.setOrderingSourceType(3);
  430. orderVo.setOrderingSourceNo(orderReq.getPoiSeq());
  431. } else if (orderReq.getOrderSource().equals("104")){
  432. orderVo.setOrderingSourceType(6);
  433. orderVo.setOrderingSourceNo(orderReq.getPoiSeq());
  434. }
  435. }
  436. /**
  437. * 小费
  438. * 闪送
  439. * additionFee 非必传
  440. * 小费(单位:元)
  441. */
  442. if (orderReq.getTipAmount() != null && orderReq.getTipAmount().compareTo(BigDecimal.ZERO) > 0) {
  443. orderVo.setTips(orderReq.getTipAmount());
  444. }
  445. /**
  446. * 物品类型
  447. * 闪送
  448. * goodType 必传
  449. * 闪送:goodType
  450. */
  451. orderVo.setGoodsType(Integer.valueOf(orderReq.getProduct().getSsProductType()));
  452. /**
  453. * 物品重量
  454. * 闪送
  455. * weight 必传
  456. * 订单重量(单位:Kg)
  457. */
  458. orderVo.setWeight(new BigDecimal(orderReq.getWeight()));
  459. //设置是否是指定商家
  460. // if (delivery.getPreferredDelivery().equals(StatusEnum.SHOW.status)) {
  461. orderVo.setIsShansongSH(true);
  462. orderVo.setAccessToken(delivery.getAuthToken());
  463. orderVo.setShopNo(delivery.getShopId());
  464. if (StringUtils.isNotBlank(orderReq.getOutOrderId())) {
  465. orderVo.setOrderNumber(orderReq.getOutOrderId());
  466. }
  467. // }
  468. } else if (DeliveryTypeEnums.SHUN_FENG.getType().equals(delivery.getType())) {
  469. orderVo.setLbClient(DeliveryTypeEnums.SHUN_FENG.getName());
  470. if (StringUtils.isNotBlank(delivery.getThirdShopId())) {
  471. orderVo.setShopNo(delivery.getThirdShopId());
  472. /**
  473. * 物品类型
  474. * 顺丰
  475. * 物品类型
  476. * product_type 必传
  477. * 顺丰:product_type1:快餐 2:送药 3:百货 4:脏衣服收 5:干净衣服派 6:生鲜 7:保8:高端饮9:现场勘验 10:快递 12:文件 13:蛋糕 14:鲜花 15:电子数码 16:服装鞋帽 17:汽车配件 18:珠宝
  478. * 20:披萨 21:中餐 22:水产 27:专人直送 32:中端饮品 33:便利店 34:面包糕点 35:火锅 36:证照 41:外部落地 99:其他
  479. */
  480. orderVo.setGoodsType(Integer.valueOf(orderReq.getProduct().getSfProductType()));
  481. } else {
  482. //匹配出顺丰shop_id
  483. List<SfShopDto> list = JsonMapper.nonEmptyMapper().fromJson(delivery.getShopId(), new TypeReference<List<SfShopDto>>() {
  484. });
  485. if (CollectionUtils.isNotEmpty(list)) {
  486. for (SfShopDto dto : list) {
  487. if("张家港市".equals(orderReq.getSendAddress().getDistrictName())||"常熟市".equals(orderReq.getSendAddress().getDistrictName())
  488. ||"寿光市".equals(orderReq.getSendAddress().getDistrictName())){
  489. if (dto.getCity().equals(orderReq.getSendAddress().getDistrictName())) {
  490. orderVo.setShopNo(dto.getShopId());
  491. orderVo.setGoodsType(Integer.valueOf(orderReq.getProduct().getSfProductType()));
  492. break;
  493. }
  494. }
  495. else if(dto.getCity().equals(orderReq.getSendAddress().getCityName())) {
  496. /**
  497. * 店铺ID
  498. * 顺丰:
  499. * shop_id 必传
  500. */
  501. orderVo.setShopNo(dto.getShopId());
  502. /**
  503. * 物品类型
  504. * 顺丰
  505. * 物品类型
  506. * product_type 必传
  507. * 顺丰:product_type1:快餐 2:送药 3:百货 4:脏衣服收 5:干净衣服派 6:生鲜 7:保8:高端饮9:现场勘验 10:快递 12:文件 13:蛋糕 14:鲜花 15:电子数码 16:服装鞋帽 17:汽车配件 18:珠宝
  508. * 20:披萨 21:中餐 22:水产 27:专人直送 32:中端饮品 33:便利店 34:面包糕点 35:火锅 36:证照 41:外部落地 99:其他
  509. */
  510. orderVo.setGoodsType(Integer.valueOf(orderReq.getProduct().getSfProductType()));
  511. break;
  512. }
  513. }
  514. } else {
  515. //不设置商家店铺,默认走全国统一个人快递业务
  516. orderVo.setShopNo("3258674679761");
  517. orderVo.setGoodsType(10); //顺丰开通的默认是快递
  518. }
  519. }
  520. /**
  521. * 店铺类型
  522. * 顺丰
  523. * shop_type 不必传
  524. * 顺丰:1:顺丰店铺ID 2:接入方店铺ID
  525. */
  526. // orderVo.setShopType(1);
  527. /**
  528. * 商家订单号
  529. * 顺丰
  530. * shop_order_id 必传
  531. * 商家订单号 不允许重复
  532. */
  533. orderVo.setOrderNo(orderReq.getOrderSn());
  534. /**
  535. * 闪送,顺丰
  536. * 对应商家版物品来源,支持美团,饿了么,可以为空
  537. * 顺丰:
  538. */
  539. // orderVo.setorderingSourceType;
  540. /**
  541. * 订单接入来源
  542. * 顺丰
  543. * order_source 必传
  544. * 订单接入来源 1:美团;2:饿了么;3:百度;4:口碑;
  545. * 其他请直接填写中文字符串值
  546. *
  547. */
  548. if (StringUtils.isNotBlank(orderReq.getOrderSource())){
  549. if (orderReq.getOrderSource().equals("101")){
  550. orderVo.setOrderSource("1");
  551. orderVo.setOrderSequence(orderReq.getPoiSeq());
  552. }else if (orderReq.getOrderSource().equals("102")||orderReq.getOrderSource().equals("103")){
  553. orderVo.setOrderSource("2");
  554. orderVo.setOrderSequence(orderReq.getPoiSeq());
  555. }
  556. else if (orderReq.getOrderSource().equals("104")){
  557. orderVo.setOrderSource("京东到家");
  558. orderVo.setOrderSequence(orderReq.getPoiSeq());
  559. }
  560. }else {
  561. orderVo.setOrderSource("商家APP");
  562. }
  563. /**
  564. * 店铺名称
  565. * 顺丰
  566. * shop_name 必传
  567. */
  568. orderVo.setShopName(orderReq.getSendAddress().getContact());
  569. /**
  570. * 店铺电话
  571. * 顺丰
  572. * shop_phone 必传
  573. */
  574. orderVo.setShopPhone(orderReq.getSendAddress().getPhone());
  575. /**
  576. * 店铺地址
  577. * 顺丰
  578. * shop_address 必传
  579. */
  580. // orderVo.setShopAddress("北京北京市海淀区华润五彩城购物中心");
  581. orderVo.setShopAddress(orderReq.getSendAddress().getAddress());
  582. /**
  583. * 店铺经度
  584. * 顺丰
  585. * shop_lng 不必传
  586. * 店铺经度
  587. */
  588. orderVo.setShopLng(new BigDecimal(orderReq.getSendAddress().getLng()));
  589. /**
  590. * 店铺纬度
  591. * 顺丰
  592. * shop_lat 不必传
  593. */
  594. orderVo.setShopLat(new BigDecimal(orderReq.getSendAddress().getLat()));
  595. /**
  596. * 订单金额
  597. * 顺丰
  598. * total_price 必传
  599. * 用户订单总金额(单位:元)
  600. *
  601. */
  602. orderVo.setOrderMoney(orderMoney);
  603. /**
  604. * 是否是预约单
  605. * 顺丰
  606. * is_appoint 必传
  607. * 是否是预约单 0:非预约单;1:预约单
  608. */
  609. orderVo.setIsAppoint(0);
  610. /**
  611. * 预约单,期望送达时间
  612. * 顺丰
  613. * expect_time 不必传
  614. * 预约单, 用户期望送达时间,appoint_type=1时需必传,秒级时间戳
  615. */
  616. orderVo.setExpectedDeliveryTime(null);
  617. /**
  618. * 小费
  619. * 顺丰
  620. * gratuity_fee 不必传
  621. * 小费(单位:元,精确小数点后一位)
  622. */
  623. orderVo.setTips(orderReq.getTipAmount());
  624. /**
  625. * 订单重量(单位:Kg)
  626. * 顺丰
  627. * weight 必传
  628. * 订单重量(单位:Kg)
  629. * 物品重量(单位:千克)
  630. */
  631. orderVo.setWeight(new BigDecimal(orderReq.getWeight()));
  632. /**
  633. * 订单商品数量
  634. * 顺丰
  635. * product_num 必传
  636. * 订单商品数量
  637. */
  638. orderVo.setGoodsNum(1);
  639. /**
  640. * 商品类型个数
  641. * 顺丰
  642. * product_type_num 必传
  643. * 商品类型个数
  644. */
  645. orderVo.setGoodsTypeNum(1);
  646. //设置是否是指定商家
  647. // if (delivery.getPreferredDelivery().equals(StatusEnum.SHOW.status)) {
  648. orderVo.setIsShansongSH(true);
  649. orderVo.setAccessToken(delivery.getAuthToken());
  650. List<ProductVo> productList = new ArrayList<>();
  651. if (orderReq.getOrderSource() == null){
  652. // 普通订单
  653. ProductVo vo = new ProductVo();
  654. vo.setProductNum(orderVo.getGoodsNum());
  655. vo.setProductName(orderReq.getProduct().getName());
  656. productList.add(vo);
  657. }else {
  658. // 外卖订单
  659. for (WaimaiOrderDetail d : details){
  660. StringBuilder spec = new StringBuilder();
  661. if(StringUtils.isNotBlank(d.getFoodProperty())){
  662. spec.append(d.getFoodProperty());
  663. }
  664. if(StringUtils.isNotBlank(spec.toString())&&StringUtils.isNotBlank(d.getSpec())){
  665. spec.append(",").append(d.getSpec());
  666. }else if(StringUtils.isBlank(spec.toString())&&StringUtils.isNotBlank(d.getSpec())){
  667. spec.append(d.getSpec());
  668. }
  669. ProductVo vo = new ProductVo();
  670. vo.setProductNum(d.getQuantity().intValue());
  671. vo.setProductName(d.getFoodName());
  672. if(StringUtils.isNotBlank(spec.toString())){
  673. vo.setProductName(d.getFoodName()+"("+spec.toString()+")");
  674. }
  675. productList.add(vo);
  676. }
  677. }
  678. orderVo.setProductList(productList);
  679. // }
  680. } else if (DeliveryTypeEnums.DWD.getType().equals(delivery.getType())) {
  681. orderVo.setLbClient(DeliveryTypeEnums.DWD.getName());
  682. /**
  683. * 商家订单号
  684. */
  685. orderVo.setOrderNo(orderReq.getOrderSn());
  686. orderVo.setShopNo(delivery.getShopId());
  687. /**
  688. * 店铺名称
  689. * 顺丰
  690. * shop_name 必传
  691. */
  692. orderVo.setShopName(orderReq.getSendAddress().getContact());
  693. /**
  694. * 店铺电话
  695. * 顺丰
  696. * shop_phone 必传
  697. */
  698. orderVo.setShopPhone(orderReq.getSendAddress().getPhone());
  699. /**
  700. * 店铺地址
  701. * 顺丰
  702. * shop_address 必传
  703. */
  704. orderVo.setShopAddress(orderReq.getSendAddress().getAddress());
  705. /**
  706. * 店铺经度
  707. * 顺丰
  708. * shop_lng 不必传
  709. * 店铺经度
  710. */
  711. orderVo.setShopLng(new BigDecimal(orderReq.getSendAddress().getLng()));
  712. /**
  713. * 店铺纬度
  714. * 顺丰
  715. * shop_lat 不必传
  716. */
  717. orderVo.setShopLat(new BigDecimal(orderReq.getSendAddress().getLat()));
  718. /**
  719. * 订单金额
  720. * 顺丰
  721. * total_price 必传
  722. * 用户订单总金额(单位:元)
  723. *
  724. */
  725. orderVo.setOrderMoney(new BigDecimal(10));
  726. /**
  727. * 是否是预约单
  728. * 顺丰
  729. * is_appoint 必传
  730. * 是否是预约单 0:非预约单;1:预约单
  731. */
  732. orderVo.setIsAppoint(0);
  733. // if (orderReq.getTakeType().equals(TakeTypeEnum.APPOINTMENT.type)) {
  734. // orderVo.setIsAppoint(1);
  735. // /**
  736. // * 用户期望上门时间
  737. // * 顺丰
  738. // * expect_pickup_time 不必传
  739. // * 预约单,期望取货时间
  740. // */
  741. // orderVo.setExpectedPickupTime(DateUtils.parseDate(orderReq.getTakeTime()));
  742. // }
  743. /**
  744. * 收货人姓名
  745. * 顺丰
  746. * user_name 必传
  747. *
  748. */
  749. orderVo.setReceiverName(orderReq.getReceiptAddress().getContact());
  750. /**
  751. * 收货人地址
  752. * 顺丰
  753. * user_address 不必传
  754. * 用户详细地址
  755. */
  756. orderVo.setReceiverAddress(orderReq.getReceiptAddress().getAddress());
  757. /**
  758. * 收货人地址纬度
  759. * 顺丰
  760. * user_lat 不必传
  761. * 用户地址纬度
  762. */
  763. orderVo.setReceiverLat(new BigDecimal(orderReq.getReceiptAddress().getLat()));
  764. /**
  765. * 收货人地址经度
  766. * 顺丰
  767. * user_lng 不必传
  768. * 用户地址经度
  769. *
  770. */
  771. orderVo.setReceiverLng(new BigDecimal(orderReq.getReceiptAddress().getLng()));
  772. /**
  773. * 收货人手机号
  774. * 顺丰
  775. * user_phone 必传
  776. */
  777. orderVo.setReceiverPhone(orderReq.getReceiptAddress().getPhone());
  778. /**
  779. * 小费
  780. * 顺丰
  781. * gratuity_fee 不必传
  782. * 小费(单位:元,精确小数点后一位)
  783. */
  784. orderVo.setTips(new BigDecimal(0));
  785. /**
  786. * 物品类型
  787. * 顺丰
  788. * 物品类型
  789. * product_type 必传
  790. * 顺丰:product_type1:快餐 2:送药 3:百货 4:脏衣服收 5:干净衣服派 6:生鲜 7:保8:高端饮9:现场勘验 10:快递 12:文件 13:蛋糕 14:鲜花 15:电子数码 16:服装鞋帽 17:汽车配件 18:珠宝
  791. * 20:披萨 21:中餐 22:水产 27:专人直送 32:中端饮品 33:便利店 34:面包糕点 35:火锅 36:证照 41:外部落地 99:其他
  792. */
  793. orderVo.setGoodsType(Integer.valueOf(orderReq.getProduct().getSfProductType()));
  794. /**
  795. * weight 必传
  796. * 物品重量(单位:g)
  797. */
  798. orderVo.setWeight(new BigDecimal(orderReq.getWeight()).multiply(new BigDecimal(10)));
  799. /**
  800. * 订单商品数量
  801. * 顺丰
  802. * product_num 必传
  803. * 订单商品数量
  804. */
  805. orderVo.setGoodsNum(1);
  806. /**
  807. * 商品类型个数
  808. * 顺丰
  809. * product_type_num 必传
  810. * 商品类型个数
  811. */
  812. orderVo.setGoodsTypeNum(1);
  813. } else if (DeliveryTypeEnums.UUPT.getType().equals(delivery.getType())) {
  814. orderVo.setLbClient(DeliveryTypeEnums.UUPT.getName());
  815. orderVo.setCityName(orderReq.getSendAddress().getCityName());
  816. orderVo.setOrderNo(orderReq.getOrderSn());
  817. orderVo.setOpenId(delivery.getShopId());
  818. orderVo.setGoodInfo(orderReq.getProduct().getUuptProductType());
  819. // orderVo.setReceiverPhone(orderReq.getReceiptAddress().getPhone());
  820. if (StringUtils.isNotBlank(orderReq.getOrderSource())){
  821. if (orderReq.getOrderSource().equals("101")){
  822. orderVo.setOrderSource("1");
  823. orderVo.setOrderingSourceNo(orderReq.getPoiSeq());
  824. }else if (orderReq.getOrderSource().equals("102")||orderReq.getOrderSource().equals("103")){
  825. orderVo.setOrderSource("2");
  826. orderVo.setOrderingSourceNo(orderReq.getPoiSeq());
  827. } else if (orderReq.getOrderSource().equals("104")){
  828. orderVo.setOrderSource("3");
  829. orderVo.setOrderingSourceNo(orderReq.getPoiSeq());
  830. }
  831. }else {
  832. orderVo.setOrderSource("3");
  833. }
  834. // if (TakeTypeEnum.APPOINTMENT.type.equals(orderReq.getTakeType())) {
  835. // /**
  836. // * * UUPTorder_type,订单类型(0实时订单 1预约取件时间)
  837. // */
  838. // orderVo.setIsAppoint(1);
  839. // /**
  840. // * 预约单,期望取货时间
  841. // * UUPTorder_type: expect_fetch_time,非必须
  842. // */
  843. // orderVo.setExpectedPickupTime(DateUtils.parseDate(orderReq.getTakeTime()));
  844. //
  845. // /**
  846. // * 预约单,期望送达时间,非必须
  847. // * 蜂鸟V3:require_receive_time,需要送达时间(毫秒)
  848. // */
  849. // orderVo.setExpectedDeliveryTime(null);
  850. // }
  851. orderVo.setWeight(new BigDecimal(orderReq.getWeight()));
  852. if (orderReq.getPriceToken() != null) {
  853. orderVo.setPriceToken(orderReq.getPriceToken());
  854. orderVo.setOrderMoney(new BigDecimal(orderReq.getTotalMoney()));
  855. orderVo.setOrderActualMoney(new BigDecimal(orderReq.getNeedPaymoney()));
  856. }
  857. } else if (DeliveryTypeEnums.AIPT.getType().equals(delivery.getType())) {
  858. // 开始城市-发件,结束城市-收件
  859. orderVo.setLbClient(DeliveryTypeEnums.AIPT.getName());
  860. orderVo.setStartCity(orderReq.getSendAddress().getCityName());
  861. orderVo.setEndCity(orderReq.getReceiptAddress().getCityName());
  862. orderVo.setOrderNo(orderReq.getOrderSn());
  863. // if (delivery.getPreferredDelivery().equals(StatusEnum.SHOW.status)) {
  864. orderVo.setPhone(delivery.getPhone());
  865. // }
  866. orderVo.setGoodInfo(orderReq.getProduct().getName());
  867. orderVo.setOrderId(orderReq.getOrderId());
  868. orderVo.setExpectedPickupTime(DateUtils.parseDate(orderReq.getTakeTime()));
  869. orderVo.setWeight(new BigDecimal(orderReq.getWeight()));
  870. } else if (DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType())) {
  871. /**
  872. * 表示调用蜂鸟的api
  873. */
  874. orderVo.setLbClient(DeliveryTypeEnums.FENG_NIAO.getName());
  875. /**
  876. * 门店编号
  877. * shop_no 必传
  878. * 蜂鸟V3:chain_store_code
  879. */
  880. orderVo.setShopNo(delivery.getThirdShopId()); //"203361315");
  881. /**
  882. * 取货点地址
  883. * 蜂鸟V3:transport_address,取货点地址
  884. */
  885. orderVo.setShopAddress(sendAddress.getAddress());
  886. /**
  887. *
  888. * 第三方订单ID
  889. * 蜂鸟V3:partner_order_code
  890. */
  891. orderVo.setOrderNo(orderReq.getOrderSn());
  892. /**
  893. *
  894. * 订单金额,必传
  895. * 蜂鸟V3:goods_total_amount_cent
  896. * 这个订单的货物的金额,单位元
  897. */
  898. orderVo.setOrderMoney(orderMoney);
  899. /**
  900. * 客户需要支付的金额,必传
  901. * 蜂鸟v3: goods_actual_amount_cent
  902. */
  903. orderVo.setOrderActualMoney(orderMoney);
  904. /**
  905. * * 蜂鸟V3:order_type,订单类型(1:即时单,3:预约单)
  906. */
  907. orderVo.setIsAppoint(0);
  908. /**
  909. * 预约单,期望取货时间
  910. * 蜂鸟V3: expect_fetch_time,非必须
  911. */
  912. orderVo.setExpectedPickupTime(null);
  913. /**
  914. * 预约单,期望送达时间,非必须
  915. * 蜂鸟V3:require_receive_time,需要送达时间(毫秒)
  916. */
  917. orderVo.setExpectedDeliveryTime(null);
  918. // if (TakeTypeEnum.APPOINTMENT.type.equals(orderReq.getTakeType())) {
  919. // /**
  920. // * * 蜂鸟V3:order_type,订单类型(1:即时单,3:预约单)
  921. // */
  922. // orderVo.setIsAppoint(3);
  923. // /**
  924. // * 预约单,期望取货时间
  925. // * 蜂鸟V3: expect_fetch_time,非必须
  926. // */
  927. // orderVo.setExpectedPickupTime(DateUtils.parseDate(orderReq.getTakeTime()));
  928. // /**
  929. // * 预约单,期望送达时间,非必须
  930. // * 蜂鸟V3:require_receive_time,需要送达时间(毫秒)
  931. // */
  932. // orderVo.setExpectedDeliveryTime(null);
  933. // }
  934. /**
  935. * 商家订单流水号
  936. */
  937. orderVo.setPoiSeq(orderReq.getPoiSeq());
  938. /**
  939. * 蜂鸟V3:
  940. * 商户订单来源(如 饿了么、美团等)
  941. * 手发单/未知来源: 0 或不传 美团: 2 口碑: 4 饿了么: 6 支付宝: 7 饿百: 8
  942. */
  943. if (StringUtils.isNotBlank(orderReq.getOrderSource())){
  944. if (orderReq.getOrderSource().equals("101")){
  945. orderVo.setOrderSource("2");
  946. orderVo.setPoiSeq("M"+orderReq.getPoiSeq());
  947. }else if (orderReq.getOrderSource().equals("102")){
  948. orderVo.setOrderSource("6");
  949. }else if (orderReq.getOrderSource().equals("103")){
  950. orderVo.setOrderSource("8");
  951. }else if (orderReq.getOrderSource().equals("104")){
  952. orderVo.setOrderSource("0");
  953. }
  954. } else {
  955. orderVo.setOrderSource("0");
  956. }
  957. /**
  958. * 小费
  959. * 蜂鸟V3:order_tip_amount_cent
  960. * 小费(单位:元,精确小数点后一位)
  961. */
  962. // orderVo.setTips(orderReq.getTipAmount());
  963. /**
  964. * //
  965. * 订单重量
  966. * 蜂鸟V3:goods_weight,订单总重量(kg)
  967. */
  968. orderVo.setWeight(new BigDecimal(orderReq.getWeight()));
  969. /**
  970. * 顺丰,蜂鸟,蜂鸟V3
  971. * 顺丰正式单, 物品详情;数组结构
  972. * 蜂鸟,蜂鸟V3:货物明细
  973. */
  974. // private List<ProductVo> productList;
  975. orderVo.setProductList(fnGoods);
  976. /**
  977. * 蜂鸟V3,
  978. * 商户ID
  979. */
  980. orderVo.setMerchantId(delivery.getShopId());//"3742995"); //"3640883");
  981. /**
  982. * 闪送,蜂鸟V3
  983. * 商户Token
  984. */
  985. orderVo.setAccessToken(delivery.getAuthToken());
  986. /**
  987. * 订单商品数量
  988. * 蜂鸟V3:goods_count
  989. * cargo_num,不必传
  990. */
  991. orderVo.setGoodsNum(1);
  992. } else if (DeliveryTypeEnums.MEI_TUAN.getType().equals(delivery.getType())) {
  993. orderVo.setLbClient(DeliveryTypeEnums.MEI_TUAN.getName());
  994. /**
  995. * 美团
  996. * delivery_id,必传
  997. * 即配送活动标识,由外部系统生成,不同order_id应对应不同的delivery_id-对应我们平台订单编号
  998. */
  999. orderVo.setDeliveryId(Long.valueOf(orderReq.getOrderNo()));
  1000. /**
  1001. * 美团
  1002. * 第三方订单ID
  1003. * 美团:order_id,必传,订单id,即该订单在合作方系统中的id-对应我们平台子订单号
  1004. */
  1005. orderVo.setOrderNo(orderReq.getOrderSn());
  1006. /**
  1007. * 美团
  1008. * 美团:outer_order_source_desc,必传
  1009. * 订单来源: 101.美团(外卖&闪购) 102.饿了么 103.京东到家 201.商家web网站 202.商家小程序-微信 203.商家小程序-支付宝 204.商家APP 205.商家热线 其他,请直接填写中文字符串,最长不超过20个字符 非「其他」需传代码
  1010. * 我们平台->1->美团;2->饿了么
  1011. */
  1012. if (orderReq.getOrderSource() == null) {
  1013. orderVo.setOrderSource("204");
  1014. } else {
  1015. if(orderReq.getOrderSource().equals("103")){
  1016. orderReq.setOrderSource("102");
  1017. }else if (orderReq.getOrderSource().equals("104")){
  1018. orderVo.setOrderSource("103");
  1019. }
  1020. orderVo.setOrderSource(orderReq.getOrderSource());
  1021. }
  1022. /**
  1023. * 美团
  1024. * 美团:outer_order_source_no,不必传,原平台订单号,如订单来源为美团,该字段必填,且为美团平台生成的订单号
  1025. */
  1026. orderVo.setOrderingSourceNo(orderReq.getOrderingSourceNo());
  1027. /**
  1028. * * 门店编号
  1029. * 美团:shop_id,必传, 取货门店id,即合作方向美团提供的门店id
  1030. */
  1031. orderVo.setShopNo(delivery.getThirdShopId());
  1032. /**
  1033. * 美团
  1034. * 配送服务代码,详情见合同
  1035. * 美团:delivery_serviceCode 必传
  1036. * 配送服务代码,详情见合同
  1037. */
  1038. orderVo.setDeliveryServiceCode(100005); //配送服务代码,详情见合同,等确认后要修改
  1039. /**
  1040. * 美团
  1041. * 订单金额
  1042. * 美团:goods_value,必传,货物价格,单位为元
  1043. */
  1044. orderVo.setOrderMoney(orderMoney);
  1045. /**
  1046. * 美团
  1047. * 订单重量(单位:Kg)
  1048. * 美团:goods_weight,必传,货物重量,单位为kg
  1049. */
  1050. orderVo.setWeight(new BigDecimal(orderReq.getWeight()));
  1051. /**
  1052. * 美团
  1053. * 预约单,期望取货时间
  1054. * 美团:expected_pickup_time, 不必传,期望取货时间
  1055. */
  1056. orderVo.setExpectedPickupTime(null);
  1057. /**
  1058. * 美团
  1059. * 是否是预约单
  1060. * 美团:order_type,不必传,订单类型,默认为0 0: 即时单(尽快送达,限当日订单) 1: 预约单
  1061. */
  1062. orderVo.setIsAppoint(0);
  1063. /**
  1064. * 美团
  1065. * 小费(单位:元)
  1066. * 美团:tip_amount,不必传,加小费字段,加小费,精确到元,需要为1或1的倍数,上限20,允许每个运单最多加10次
  1067. */
  1068. orderVo.setTips(orderReq.getTipAmount());
  1069. /**
  1070. * 美团
  1071. * 订单重量(单位:Kg)
  1072. * 美团:goods_weight,必传,货物重量,单位为kg
  1073. */
  1074. orderVo.setWeight(new BigDecimal(orderReq.getWeight()));
  1075. orderVo.setPoiSeq(orderReq.getPoiSeq());
  1076. orderVo.setMtGoods(mtGoods);
  1077. orderVo.setIsTest(1);
  1078. if (isTest){
  1079. orderVo.setIsTest(0);
  1080. }
  1081. } else if (DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType())) {
  1082. orderVo.setLbClient(DeliveryTypeEnums.MEI_TUAN_ZB.getName());
  1083. /**
  1084. * 美团
  1085. * 美团:outer_order_source_no,不必传,原平台订单号,如订单来源为美团,该字段必填,且为美团平台生成的订单号
  1086. */
  1087. orderVo.setOrderingSourceNo(orderReq.getZbOrderingSourceNo());
  1088. /**
  1089. * 美团众包token
  1090. */
  1091. orderVo.setZbToken(orderReq.getZbToken());
  1092. if (StringUtils.isNotBlank(orderReq.getNeedPaymoney())){
  1093. orderVo.setOrderActualMoney(new BigDecimal(orderReq.getNeedPaymoney()));
  1094. }
  1095. } else if (DeliveryTypeEnums.KUAI_FU.getType().equals(delivery.getType())) {
  1096. orderVo.setLbClient(DeliveryTypeEnums.KUAI_FU.getName());
  1097. orderVo.setAccessToken(delivery.getAuthToken());
  1098. orderVo.setOpenId(delivery.getThirdShopId());
  1099. /**
  1100. * 第三方对接平台订单ID,长度不超过16位
  1101. */
  1102. orderVo.setOrderNo(orderReq.getOrderSn());
  1103. /**
  1104. * 美团
  1105. * 美团:source,必传
  1106. * 订单来源: 101.美团(外卖&闪购) 102.饿了么 103.京东到家 201.商家web网站 202.商家小程序-微信 203.商家小程序-支付宝 204.商家APP 205.商家热线 其他,请直接填写中文字符串,最长不超过20个字符 非「其他」需传代码
  1107. * 我们平台->1->美团;2->饿了么
  1108. */
  1109. if (StringUtils.isNotBlank(orderReq.getPoiSeq())) {
  1110. orderVo.setSerialNumber(orderReq.getPoiSeq());
  1111. } else {
  1112. orderVo.setSerialNumber("");
  1113. }
  1114. if (StringUtils.isNotBlank(orderReq.getOrderSource())){
  1115. if (orderReq.getOrderSource().equals("101")){
  1116. orderVo.setOrderSource("美团");
  1117. }else if (orderReq.getOrderSource().equals("102")){
  1118. orderVo.setOrderSource("饿了么");
  1119. }else if (orderReq.getOrderSource().equals("103")){
  1120. orderVo.setOrderSource("饿百");
  1121. }else if (orderReq.getOrderSource().equals("104")){
  1122. orderVo.setOrderSource("京东到家");
  1123. }
  1124. }
  1125. if (orderReq.getTotalMoney() != null) {
  1126. orderVo.setOrderMoney(new BigDecimal(orderReq.getTotalMoney()));
  1127. }
  1128. orderVo.setWeight(new BigDecimal(orderReq.getWeight()));
  1129. orderVo.setGoodsType(Integer.valueOf(orderReq.getProduct().getKfProductType()));
  1130. orderVo.setIsAppoint(0);
  1131. // if (TakeTypeEnum.APPOINTMENT.type.equals(orderReq.getTakeType())) {
  1132. // orderVo.setIsAppoint(1);
  1133. // orderVo.setExpectedDeliveryTime(DateUtils.parseDate(orderReq.getTakeTime()));
  1134. // // 普通订单是取件时间,外卖是送达时间
  1135. // orderVo.setExpectedPickupTime(DateUtils.parseDate(orderReq.getTakeTime()));
  1136. // }
  1137. }else if (DeliveryTypeEnums.HUO_LA_LA.getType().equals(delivery.getType())){
  1138. orderVo.setLbClient(DeliveryTypeEnums.HUO_LA_LA.getName());
  1139. orderVo.setCityId(orderReq.getCityId());
  1140. orderVo.setCityInfoRevision(orderReq.getCityInfoRevision());
  1141. Date orderTime = new Date();
  1142. // if (TakeTypeEnum.APPOINTMENT.type.equals(orderReq.getTakeType())) {
  1143. // orderTime = DateUtils.parseDate(orderReq.getTakeTime());
  1144. // }else {
  1145. // orderTime = DateUtils.addMinutes(orderTime,10);
  1146. // }
  1147. orderTime = DateUtils.addMinutes(orderTime,10);
  1148. orderVo.setOrderTime(orderTime.getTime()/1000);
  1149. orderVo.setOrderVehicleId(orderReq.getOrderVehicleId());
  1150. orderVo.setSpecReq(orderReq.getSpecReq());
  1151. orderVo.setAccessToken(delivery.getAuthToken());
  1152. orderVo.setPayType(4);
  1153. orderVo.setOrderMoney(orderReq.getAmount());
  1154. orderVo.setRemark(orderReq.getTakeRemark());
  1155. if (orderReq.getMemberId() != null){
  1156. orderVo.setMerchantId(orderReq.getMemberId().toString());
  1157. }
  1158. orderVo.setTotalPriceFen(orderReq.getTotalPriceFen());
  1159. // orderVo.setCallback(deliveryConfig.getHllOrderCallBackUrl());
  1160. }else if (DeliveryTypeEnums.MEI_TUAN_SG_ZB.getType().equals(delivery.getType())) {
  1161. orderVo.setLbClient(DeliveryTypeEnums.MEI_TUAN_SG_ZB.getName());
  1162. /**
  1163. * 美团
  1164. * 美团:outer_order_source_no,不必传,原平台订单号,如订单来源为美团,该字段必填,且为美团平台生成的订单号
  1165. */
  1166. orderVo.setOrderingSourceNo(orderReq.getZbOrderingSourceNo());
  1167. /**
  1168. * 美团众包token
  1169. */
  1170. orderVo.setZbToken(orderReq.getZbToken());
  1171. if (StringUtils.isNotBlank(orderReq.getNeedPaymoney())){
  1172. orderVo.setOrderActualMoney(new BigDecimal(orderReq.getNeedPaymoney()));
  1173. }
  1174. }else if (DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType())) {
  1175. /**
  1176. * 表示调用蜂鸟的api
  1177. */
  1178. orderVo.setLbClient(DeliveryTypeEnums.FENG_NIAO_PT.getName());
  1179. /**
  1180. * 门店编号
  1181. * shop_no 必传
  1182. * 蜂鸟V3:chain_store_code
  1183. */
  1184. orderVo.setShopNo(delivery.getThirdShopId()); //"203361315");
  1185. /**
  1186. * 取货点地址
  1187. * 蜂鸟V3:transport_address,取货点地址
  1188. */
  1189. orderVo.setShopAddress(sendAddress.getAddress());
  1190. /**
  1191. *
  1192. * 第三方订单ID
  1193. * 蜂鸟V3:partner_order_code
  1194. */
  1195. orderVo.setOrderNo(orderReq.getOrderSn());
  1196. /**
  1197. *
  1198. * 订单金额,必传
  1199. * 蜂鸟V3:goods_total_amount_cent
  1200. * 这个订单的货物的金额,单位元
  1201. */
  1202. orderVo.setOrderMoney(orderMoney);
  1203. /**
  1204. * 客户需要支付的金额,必传
  1205. * 蜂鸟v3: goods_actual_amount_cent
  1206. */
  1207. orderVo.setOrderActualMoney(orderMoney);
  1208. /**
  1209. * * 蜂鸟V3:order_type,订单类型(1:即时单,3:预约单)
  1210. */
  1211. orderVo.setIsAppoint(0);
  1212. /**
  1213. * 预约单,期望取货时间
  1214. * 蜂鸟V3: expect_fetch_time,非必须
  1215. */
  1216. orderVo.setExpectedPickupTime(null);
  1217. /**
  1218. * 预约单,期望送达时间,非必须
  1219. * 蜂鸟V3:require_receive_time,需要送达时间(毫秒)
  1220. */
  1221. orderVo.setExpectedDeliveryTime(null);
  1222. // if (TakeTypeEnum.APPOINTMENT.type.equals(orderReq.getTakeType())) {
  1223. // /**
  1224. // * * 蜂鸟V3:order_type,订单类型(1:即时单,3:预约单)
  1225. // */
  1226. // orderVo.setIsAppoint(3);
  1227. // /**
  1228. // * 预约单,期望取货时间
  1229. // * 蜂鸟V3: expect_fetch_time,非必须
  1230. // */
  1231. // orderVo.setExpectedPickupTime(DateUtils.parseDate(orderReq.getTakeTime()));
  1232. // /**
  1233. // * 预约单,期望送达时间,非必须
  1234. // * 蜂鸟V3:require_receive_time,需要送达时间(毫秒)
  1235. // */
  1236. // orderVo.setExpectedDeliveryTime(null);
  1237. // }
  1238. /**
  1239. * 商家订单流水号
  1240. */
  1241. orderVo.setPoiSeq(orderReq.getPoiSeq());
  1242. /**
  1243. * 蜂鸟V3:
  1244. * 商户订单来源(如 饿了么、美团等)
  1245. * 手发单/未知来源: 0 或不传 美团: 2 口碑: 4 饿了么: 6 支付宝: 7 饿百: 8
  1246. */
  1247. if (StringUtils.isNotBlank(orderReq.getOrderSource())){
  1248. if (orderReq.getOrderSource().equals("101")){
  1249. orderVo.setOrderSource("2");
  1250. orderVo.setPoiSeq("M"+orderReq.getPoiSeq());
  1251. }else if (orderReq.getOrderSource().equals("102")){
  1252. orderVo.setOrderSource("6");
  1253. }else if (orderReq.getOrderSource().equals("103")){
  1254. orderVo.setOrderSource("8");
  1255. }else if (orderReq.getOrderSource().equals("104")){
  1256. orderVo.setOrderSource("0");
  1257. }
  1258. } else {
  1259. orderVo.setOrderSource("0");
  1260. }
  1261. /**
  1262. * 小费
  1263. * 蜂鸟V3:order_tip_amount_cent
  1264. * 小费(单位:元,精确小数点后一位)
  1265. */
  1266. // orderVo.setTips(orderReq.getTipAmount());
  1267. /**
  1268. * //
  1269. * 订单重量
  1270. * 蜂鸟V3:goods_weight,订单总重量(kg)
  1271. */
  1272. orderVo.setWeight(new BigDecimal(orderReq.getWeight()));
  1273. /**
  1274. * 顺丰,蜂鸟,蜂鸟V3
  1275. * 顺丰正式单, 物品详情;数组结构
  1276. * 蜂鸟,蜂鸟V3:货物明细
  1277. */
  1278. // private List<ProductVo> productList;
  1279. orderVo.setProductList(fnGoods);
  1280. /**
  1281. * 蜂鸟V3,
  1282. * 商户ID
  1283. */
  1284. orderVo.setMerchantId(delivery.getShopId());//"3742995"); //"3640883");
  1285. /**
  1286. * 闪送,蜂鸟V3
  1287. * 商户Token
  1288. */
  1289. orderVo.setAccessToken(delivery.getAuthToken());
  1290. /**
  1291. * 订单商品数量
  1292. * 蜂鸟V3:goods_count
  1293. * cargo_num,不必传
  1294. */
  1295. orderVo.setGoodsNum(1);
  1296. } else if (DeliveryTypeEnums.MA_KE_PT.getType().equals(delivery.getType())) {
  1297. orderVo.setLbClient(DeliveryTypeEnums.MA_KE_PT.getName());
  1298. /**
  1299. * 门店id
  1300. * 对应的猎豹平台门店编号
  1301. */
  1302. orderVo.setShopNo(orderReq.getLbShopCode());
  1303. orderVo.setMaKePtProducts(maKePtProductVos);
  1304. /**
  1305. * 码科跑腿
  1306. * 商户订单来源(1:美团 ,2:饿了么, 3:饿百零售, 4:手工单,5:有赞,6:京东,7:抖音)
  1307. */
  1308. if (StringUtils.isNotBlank(orderReq.getOrderSource())){
  1309. // 美团/美团闪购
  1310. if (orderReq.getOrderSource().equals("101")){
  1311. orderVo.setOrderSource("1");
  1312. }else if (orderReq.getOrderSource().equals("102")){
  1313. // 饿了么
  1314. orderVo.setOrderSource("2");
  1315. }else if (orderReq.getOrderSource().equals("103")){
  1316. // 饿百零售
  1317. orderVo.setOrderSource("3");
  1318. }else if (orderReq.getOrderSource().equals("104")){
  1319. // 京东到家
  1320. orderVo.setOrderSource("6");
  1321. }
  1322. orderVo.setPoiSeq(orderReq.getPoiSeq());
  1323. } else {
  1324. // 手工单
  1325. orderVo.setOrderSource("4");
  1326. orderVo.setPoiSeq(orderReq.getDaySeq());
  1327. }
  1328. orderVo.setOrderNo(orderReq.getOrderSn());
  1329. }
  1330. return orderVo;
  1331. }
  1332. /**
  1333. * 将有特殊符号的地址,将特殊符号去掉
  1334. * @param address
  1335. * @return
  1336. */
  1337. public static String checkAddress(String address){
  1338. String replace = "";
  1339. String regEx = "[ `~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()+|{}【】‘;:”“’。,、?]|\n|\r|\t";
  1340. address = address.replaceAll(regEx,replace);
  1341. return address;
  1342. }
  1343. }