FeiYunUtils.java 121 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274
  1. package com.sqx.modules.utils.fieYun;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import com.sqx.common.utils.Result;
  5. import com.sqx.modules.activity.service.ActivityService;
  6. import com.sqx.modules.activity.vo.ActivityOrderVO;
  7. import com.sqx.modules.activity.vo.ActivityVO;
  8. import com.sqx.modules.app.entity.UserEntity;
  9. import com.sqx.modules.app.service.UserService;
  10. import com.sqx.modules.common.service.CommonInfoService;
  11. import com.sqx.modules.coupon.entity.TbCoupon;
  12. import com.sqx.modules.coupon.entity.TbCouponUser;
  13. import com.sqx.modules.coupon.service.TbCouponService;
  14. import com.sqx.modules.goods.entity.GoodsShop;
  15. import com.sqx.modules.goods.service.GoodsShopService;
  16. import com.sqx.modules.order.entity.OrderGoods;
  17. import com.sqx.modules.order.entity.TbOrder;
  18. import com.sqx.modules.order.service.AppOrderService;
  19. import com.sqx.modules.printInfo.entity.*;
  20. import com.sqx.modules.printInfo.service.PrintInfoDetailService;
  21. import com.sqx.modules.printInfo.service.PrintInfoService;
  22. import com.sqx.modules.printInfo.service.PrintInfoShopService;
  23. import com.sqx.modules.utils.fieYun.model.OrderForm;
  24. import lombok.extern.slf4j.Slf4j;
  25. import org.apache.commons.codec.digest.DigestUtils;
  26. import org.apache.commons.lang.StringUtils;
  27. import org.apache.http.HttpEntity;
  28. import org.apache.http.NameValuePair;
  29. import org.apache.http.client.config.RequestConfig;
  30. import org.apache.http.client.entity.UrlEncodedFormEntity;
  31. import org.apache.http.client.methods.CloseableHttpResponse;
  32. import org.apache.http.client.methods.HttpPost;
  33. import org.apache.http.impl.client.CloseableHttpClient;
  34. import org.apache.http.impl.client.HttpClients;
  35. import org.apache.http.message.BasicNameValuePair;
  36. import org.apache.http.util.EntityUtils;
  37. import org.springframework.beans.factory.annotation.Autowired;
  38. import org.springframework.stereotype.Component;
  39. import java.io.IOException;
  40. import java.math.BigDecimal;
  41. import java.text.SimpleDateFormat;
  42. import java.util.ArrayList;
  43. import java.util.List;
  44. import java.util.Optional;
  45. import java.util.stream.Collectors;
  46. @Component
  47. @Slf4j
  48. public class FeiYunUtils {
  49. private static ActivityService activityService;
  50. private static UserService userService;
  51. private static TbCouponService tbCouponService;
  52. private static GoodsShopService goodsShopService;
  53. private static CommonInfoService commonInfoService;
  54. private static PrintInfoShopService printInfoShopService;
  55. private static PrintInfoService printInfoService;
  56. private static AppOrderService appOrderService;
  57. private static PrintInfoDetailService printInfoDetailService;
  58. @Autowired
  59. public void setPrintInfoDetailService(PrintInfoDetailService printInfoDetailService) {
  60. FeiYunUtils.printInfoDetailService = printInfoDetailService;
  61. }
  62. @Autowired
  63. public void setAppOrderService(AppOrderService appOrderService) {
  64. FeiYunUtils.appOrderService = appOrderService;
  65. }
  66. @Autowired
  67. public void setActivityService(ActivityService activityService) {
  68. FeiYunUtils.activityService = activityService;
  69. }
  70. @Autowired
  71. public void setUserService(UserService userService) {
  72. FeiYunUtils.userService = userService;
  73. }
  74. @Autowired
  75. public void setTbCouponService(TbCouponService tbCouponService) {
  76. FeiYunUtils.tbCouponService = tbCouponService;
  77. }
  78. @Autowired
  79. public void setGoodsShopService(GoodsShopService goodsShopService) {
  80. FeiYunUtils.goodsShopService = goodsShopService;
  81. }
  82. @Autowired
  83. public void setCommonInfoService(CommonInfoService commonInfoService) {
  84. FeiYunUtils.commonInfoService = commonInfoService;
  85. }
  86. @Autowired
  87. public void setPrintInfoShopService(PrintInfoShopService printInfoShopService) {
  88. FeiYunUtils.printInfoShopService = printInfoShopService;
  89. }
  90. @Autowired
  91. public void setPrintInfoService(PrintInfoService printInfoService) {
  92. FeiYunUtils.printInfoService = printInfoService;
  93. }
  94. /**
  95. * 添加打印机接口
  96. *
  97. * @param snlist 提示:打印机编号(必填) # 打印机识别码(必填) # 备注名称(选填) # 流量卡号码(选填),多台打印机请换行(\n)添加新打印机信息,每次最多100行(台)。
  98. * @return 正确例子:{"msg":"ok","ret":0,"data":{"ok":["sn#key#remark#carnum","316500011#abcdefgh#快餐前台"],"no":["316500012#abcdefgh#快餐前台#13688889999 (错误:识别码不正确)"]},"serverExecutedTime":3}
  99. * 错误:{"msg":"参数错误 : 该帐号未注册.","ret":-2,"data":null,"serverExecutedTime":37}
  100. */
  101. public static String addprinter(String snlist) {
  102. String URL = commonInfoService.findOne(325).getValue();
  103. String USER = commonInfoService.findOne(326).getValue();
  104. String UKEY = commonInfoService.findOne(327).getValue();
  105. //通过POST请求,发送打印信息到服务器
  106. RequestConfig requestConfig = RequestConfig.custom()
  107. .setSocketTimeout(30000)//读取超时
  108. .setConnectTimeout(30000)//连接超时
  109. .build();
  110. CloseableHttpClient httpClient = HttpClients.custom()
  111. .setDefaultRequestConfig(requestConfig)
  112. .build();
  113. HttpPost post = new HttpPost(URL);
  114. List<NameValuePair> nvps = new ArrayList<NameValuePair>();
  115. nvps.add(new BasicNameValuePair("user", USER));
  116. String STIME = String.valueOf(System.currentTimeMillis() / 1000);
  117. nvps.add(new BasicNameValuePair("stime", STIME));
  118. nvps.add(new BasicNameValuePair("sig", signature(USER, UKEY, STIME)));
  119. nvps.add(new BasicNameValuePair("apiname", "Open_printerAddlist"));//固定值,不需要修改
  120. nvps.add(new BasicNameValuePair("printerContent", snlist));
  121. CloseableHttpResponse response = null;
  122. String result = null;
  123. try {
  124. post.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
  125. response = httpClient.execute(post);
  126. int statecode = response.getStatusLine().getStatusCode();
  127. if (statecode == 200) {
  128. HttpEntity httpentity = response.getEntity();
  129. if (httpentity != null) {
  130. result = EntityUtils.toString(httpentity);
  131. }
  132. }
  133. } catch (Exception e) {
  134. e.printStackTrace();
  135. } finally {
  136. try {
  137. if (response != null) {
  138. response.close();
  139. }
  140. } catch (IOException e) {
  141. e.printStackTrace();
  142. }
  143. try {
  144. post.abort();
  145. } catch (Exception e) {
  146. e.printStackTrace();
  147. }
  148. try {
  149. httpClient.close();
  150. } catch (IOException e) {
  151. e.printStackTrace();
  152. }
  153. }
  154. return result;
  155. }
  156. /**
  157. * 修改打印机接口
  158. *
  159. * @param snlist 提示:打印机编号(必填) # 打印机识别码(必填) # 备注名称(选填) # 流量卡号码(选填),多台打印机请换行(\n)添加新打印机信息,每次最多100行(台)。
  160. * @return 正确例子:{"msg":"ok","ret":0,"data":{"ok":["sn#key#remark#carnum","316500011#abcdefgh#快餐前台"],"no":["316500012#abcdefgh#快餐前台#13688889999 (错误:识别码不正确)"]},"serverExecutedTime":3}
  161. * 错误:{"msg":"参数错误 : 该帐号未注册.","ret":-2,"data":null,"serverExecutedTime":37}
  162. */
  163. public static String updatePrinter(String snlist, String name) {
  164. String URL = commonInfoService.findOne(325).getValue();
  165. String USER = commonInfoService.findOne(326).getValue();
  166. String UKEY = commonInfoService.findOne(327).getValue();
  167. //通过POST请求,发送打印信息到服务器
  168. RequestConfig requestConfig = RequestConfig.custom()
  169. .setSocketTimeout(30000)//读取超时
  170. .setConnectTimeout(30000)//连接超时
  171. .build();
  172. CloseableHttpClient httpClient = HttpClients.custom()
  173. .setDefaultRequestConfig(requestConfig)
  174. .build();
  175. HttpPost post = new HttpPost(URL);
  176. List<NameValuePair> nvps = new ArrayList<NameValuePair>();
  177. nvps.add(new BasicNameValuePair("user", USER));
  178. String STIME = String.valueOf(System.currentTimeMillis() / 1000);
  179. nvps.add(new BasicNameValuePair("stime", STIME));
  180. nvps.add(new BasicNameValuePair("sig", signature(USER, UKEY, STIME)));
  181. nvps.add(new BasicNameValuePair("apiname", "Open_printerEdit"));//固定值,不需要修改
  182. nvps.add(new BasicNameValuePair("sn", snlist));
  183. nvps.add(new BasicNameValuePair("name", name));
  184. CloseableHttpResponse response = null;
  185. String result = null;
  186. try {
  187. post.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
  188. response = httpClient.execute(post);
  189. int statecode = response.getStatusLine().getStatusCode();
  190. if (statecode == 200) {
  191. HttpEntity httpentity = response.getEntity();
  192. if (httpentity != null) {
  193. result = EntityUtils.toString(httpentity);
  194. }
  195. }
  196. } catch (Exception e) {
  197. e.printStackTrace();
  198. } finally {
  199. try {
  200. if (response != null) {
  201. response.close();
  202. }
  203. } catch (IOException e) {
  204. e.printStackTrace();
  205. }
  206. try {
  207. post.abort();
  208. } catch (Exception e) {
  209. e.printStackTrace();
  210. }
  211. try {
  212. httpClient.close();
  213. } catch (IOException e) {
  214. e.printStackTrace();
  215. }
  216. }
  217. return result;
  218. }
  219. /**
  220. * 删除打印机接口
  221. *
  222. * @param snlist 提示:打印机编号(必填) # 打印机识别码(必填) # 备注名称(选填) # 流量卡号码(选填),多台打印机请换行(\n)添加新打印机信息,每次最多100行(台)。
  223. * @return 正确例子:{"msg":"ok","ret":0,"data":{"ok":["sn#key#remark#carnum","316500011#abcdefgh#快餐前台"],"no":["316500012#abcdefgh#快餐前台#13688889999 (错误:识别码不正确)"]},"serverExecutedTime":3}
  224. * 错误:{"msg":"参数错误 : 该帐号未注册.","ret":-2,"data":null,"serverExecutedTime":37}
  225. */
  226. public static String deletePrinter(String snlist) {
  227. try {
  228. String URL = commonInfoService.findOne(325).getValue();
  229. String USER = commonInfoService.findOne(326).getValue();
  230. String UKEY = commonInfoService.findOne(327).getValue();
  231. //通过POST请求,发送打印信息到服务器
  232. RequestConfig requestConfig = RequestConfig.custom()
  233. .setSocketTimeout(30000)//读取超时
  234. .setConnectTimeout(30000)//连接超时
  235. .build();
  236. CloseableHttpClient httpClient = HttpClients.custom()
  237. .setDefaultRequestConfig(requestConfig)
  238. .build();
  239. HttpPost post = new HttpPost(URL);
  240. List<NameValuePair> nvps = new ArrayList<NameValuePair>();
  241. nvps.add(new BasicNameValuePair("user", USER));
  242. String STIME = String.valueOf(System.currentTimeMillis() / 1000);
  243. nvps.add(new BasicNameValuePair("stime", STIME));
  244. nvps.add(new BasicNameValuePair("sig", signature(USER, UKEY, STIME)));
  245. nvps.add(new BasicNameValuePair("apiname", "Open_printerDelList"));//固定值,不需要修改
  246. nvps.add(new BasicNameValuePair("snlist", snlist));
  247. CloseableHttpResponse response = null;
  248. String result = null;
  249. try {
  250. post.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
  251. response = httpClient.execute(post);
  252. int statecode = response.getStatusLine().getStatusCode();
  253. if (statecode == 200) {
  254. HttpEntity httpentity = response.getEntity();
  255. if (httpentity != null) {
  256. result = EntityUtils.toString(httpentity);
  257. }
  258. }
  259. } catch (Exception e) {
  260. e.printStackTrace();
  261. } finally {
  262. try {
  263. if (response != null) {
  264. response.close();
  265. }
  266. } catch (IOException e) {
  267. e.printStackTrace();
  268. }
  269. try {
  270. post.abort();
  271. } catch (Exception e) {
  272. e.printStackTrace();
  273. }
  274. try {
  275. httpClient.close();
  276. } catch (IOException e) {
  277. e.printStackTrace();
  278. }
  279. }
  280. return result;
  281. } catch (Exception e) {
  282. e.printStackTrace();
  283. log.error("删除打印机异常:" + e.getMessage(), e);
  284. }
  285. return null;
  286. }
  287. /**
  288. * 小票机打印订单接口
  289. *
  290. * @param sn 打印机编号
  291. * @param classify 分类 1加油成功出票模版 2提货券推送模版 3加油订单结算模版 4商品消费结算
  292. * @return 成功:{"msg":"ok","ret":0,"data":"xxxxxxx_xxxxxxxx_xxxxxxxx","serverExecutedTime":5}
  293. * 失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5}
  294. */
  295. public static String print(String sn, Integer classify, TbOrder tbOrder, Integer isAppend) {
  296. try {
  297. //标签说明:
  298. //单标签:
  299. //"<BR>"为换行,"<CUT>"为切刀指令(主动切纸,仅限切刀打印机使用才有效果)
  300. //"<LOGO>"为打印LOGO指令(前提是预先在机器内置LOGO图片),"<PLUGIN>"为钱箱或者外置音响指令
  301. //成对标签:
  302. //"<CB></CB>"为居中放大一倍,"<B></B>"为放大一倍,"<C></C>"为居中,<L></L>字体变高一倍
  303. //<W></W>字体变宽一倍,"<QR></QR>"为二维码,"<BOLD></BOLD>"为字体加粗,""为右对齐
  304. //拼凑订单内容时可参考如下格式
  305. //根据打印纸张的宽度,自行调整内容的格式,可参考下面的样例格式
  306. //region 以前的代码
  307. /*content = "<CB>测试打印</CB><BR>";
  308. content += "名称      单价 数量 金额<BR>";
  309. content += "--------------------------------<BR>";
  310. content += "饭       1.0 1 1.0<BR>";
  311. content += "炒饭      10.0 10 10.0<BR>";
  312. content += "蛋炒饭     10.0 10 100.0<BR>";
  313. content += "鸡蛋炒饭    100.0 1 100.0<BR>";
  314. content += "番茄蛋炒饭   1000.0 1 100.0<BR>";
  315. content += "西红柿蛋炒饭  1000.0 1 100.0<BR>";
  316. content += "西红柿鸡蛋炒饭 100.0 10 100.0<BR>";
  317. content += "备注:加辣<BR>";
  318. content += "--------------------------------<BR>";
  319. content += "合计:xx.0元<BR>";
  320. content += "送货地点:广州市南沙区xx路xx号<BR>";
  321. content += "联系电话:13888888888888<BR>";
  322. content += "订餐时间:2016-08-08 08:08:08<BR>";
  323. content += "<QR>http://www.dzist.com</QR>";*/
  324. //endregion
  325. //region 获取配置的打印模板信息 没设置的就正常不加粗
  326. GoodsShop shopData = goodsShopService.selectGoodDatas(tbOrder.getShopId());
  327. UserEntity parentUser = userService.selectUserById(tbOrder.getParentUserId());
  328. TbCoupon tbCoupon = tbCouponService.selectCoupon(tbOrder.getCouponId());
  329. ActivityOrderVO activity = tbOrder.getOrderId() == null ? null : activityService.selectByOrder(tbOrder.getOrderId());
  330. UserEntity user = userService.selectUserById(tbOrder.getUserId());//用户
  331. List<PrintModelResult> resultData = new ArrayList<>();
  332. List<PrintInfo> infos = printInfoService.printInfos();
  333. List<Integer> typeIds = infos.stream().map(PrintInfo::getTypeId).distinct().collect(Collectors.toList());
  334. PrintInfoShop pis = printInfoShopService.selectPrintInfoShopById(tbOrder.getShopId().intValue());
  335. if (pis == null) {
  336. for (Integer typeId : typeIds) {
  337. List<PrintInfo> nowInfos = infos.stream().filter(e -> e.getTypeId().intValue() == typeId.intValue()).collect(Collectors.toList());
  338. PrintModelResult data = new PrintModelResult();
  339. List<PrintModelDetailResult> details = new ArrayList<>();
  340. List<PrintModelTypeResult> types = new ArrayList<>();
  341. for (PrintInfo nowInfo : nowInfos) {
  342. PrintModelDetailResult detailData = new PrintModelDetailResult();
  343. detailData.setId(nowInfo.getId());
  344. detailData.setPrintField(nowInfo.getPrintField());
  345. detailData.setPrintName(nowInfo.getPrintName());
  346. detailData.setIsCheck(0);
  347. details.add(detailData);
  348. PrintModelTypeResult typeData = new PrintModelTypeResult();
  349. typeData.setId(nowInfo.getId());
  350. typeData.setIsBlod(0);
  351. typeData.setWordSize(0);
  352. typeData.setPrintField(nowInfo.getPrintField());
  353. typeData.setPrintName(nowInfo.getPrintName());
  354. types.add(typeData);
  355. }
  356. if (nowInfos != null && nowInfos.size() > 0) {
  357. data.setId(typeId);
  358. data.setName(nowInfos.get(0).getTypeName());
  359. }
  360. data.setDetails(details);
  361. data.setTypes(types);
  362. resultData.add(data);
  363. }
  364. } else {
  365. //要修改获取逻辑
  366. if (pis.getBaseInfo().isEmpty()) {
  367. PrintModelResult data = new PrintModelResult();
  368. List<PrintInfo> nowInfos = infos.stream().filter(e -> e.getTypeId().intValue() == ePrintStatu.Base.getValue()).collect(Collectors.toList());
  369. List<PrintModelDetailResult> details = new ArrayList<>();
  370. List<PrintModelTypeResult> types = new ArrayList<>();
  371. for (PrintInfo nowInfo : nowInfos) {
  372. PrintModelDetailResult detailData = new PrintModelDetailResult();
  373. detailData.setId(nowInfo.getId());
  374. detailData.setPrintField(nowInfo.getPrintField());
  375. detailData.setPrintName(nowInfo.getPrintName());
  376. detailData.setIsCheck(0);
  377. details.add(detailData);
  378. PrintModelTypeResult typeData = new PrintModelTypeResult();
  379. typeData.setId(nowInfo.getId());
  380. typeData.setIsBlod(0);
  381. typeData.setWordSize(0);
  382. typeData.setPrintField(nowInfo.getPrintField());
  383. typeData.setPrintName(nowInfo.getPrintName());
  384. types.add(typeData);
  385. }
  386. data.setId(ePrintStatu.Base.getValue());
  387. data.setName(nowInfos.get(0).getTypeName());
  388. data.setDetails(details);
  389. data.setTypes(types);
  390. resultData.add(data);
  391. } else {
  392. ObjectMapper objectMapper = new ObjectMapper();
  393. PrintModelResult data = objectMapper.readValue(pis.getBaseInfo(), PrintModelResult.class);
  394. resultData.add(data);
  395. }
  396. if (pis.getGoodInfo().isEmpty()) {
  397. PrintModelResult data = new PrintModelResult();
  398. List<PrintInfo> nowInfos = infos.stream().filter(e -> e.getTypeId().intValue() == ePrintStatu.Good.getValue()).collect(Collectors.toList());
  399. List<PrintModelDetailResult> details = new ArrayList<>();
  400. List<PrintModelTypeResult> types = new ArrayList<>();
  401. for (PrintInfo nowInfo : nowInfos) {
  402. PrintModelDetailResult detailData = new PrintModelDetailResult();
  403. detailData.setId(nowInfo.getId());
  404. detailData.setPrintField(nowInfo.getPrintField());
  405. detailData.setPrintName(nowInfo.getPrintName());
  406. detailData.setIsCheck(0);
  407. details.add(detailData);
  408. PrintModelTypeResult typeData = new PrintModelTypeResult();
  409. typeData.setId(nowInfo.getId());
  410. typeData.setIsBlod(0);
  411. typeData.setWordSize(0);
  412. typeData.setPrintField(nowInfo.getPrintField());
  413. typeData.setPrintName(nowInfo.getPrintName());
  414. types.add(typeData);
  415. }
  416. data.setId(ePrintStatu.Good.getValue());
  417. data.setName(nowInfos.get(0).getTypeName());
  418. data.setDetails(details);
  419. data.setTypes(types);
  420. resultData.add(data);
  421. } else {
  422. ObjectMapper objectMapper = new ObjectMapper();
  423. PrintModelResult data = objectMapper.readValue(pis.getGoodInfo(), PrintModelResult.class);
  424. resultData.add(data);
  425. }
  426. if (pis.getPayInfo().isEmpty()) {
  427. PrintModelResult data = new PrintModelResult();
  428. List<PrintInfo> nowInfos = infos.stream().filter(e -> e.getTypeId().intValue() == ePrintStatu.Pay.getValue()).collect(Collectors.toList());
  429. List<PrintModelDetailResult> details = new ArrayList<>();
  430. List<PrintModelTypeResult> types = new ArrayList<>();
  431. for (PrintInfo nowInfo : nowInfos) {
  432. PrintModelDetailResult detailData = new PrintModelDetailResult();
  433. detailData.setId(nowInfo.getId());
  434. detailData.setPrintField(nowInfo.getPrintField());
  435. detailData.setPrintName(nowInfo.getPrintName());
  436. detailData.setIsCheck(0);
  437. details.add(detailData);
  438. PrintModelTypeResult typeData = new PrintModelTypeResult();
  439. typeData.setId(nowInfo.getId());
  440. typeData.setIsBlod(0);
  441. typeData.setWordSize(0);
  442. typeData.setPrintField(nowInfo.getPrintField());
  443. typeData.setPrintName(nowInfo.getPrintName());
  444. types.add(typeData);
  445. }
  446. data.setId(ePrintStatu.Pay.getValue());
  447. data.setName(nowInfos.get(0).getTypeName());
  448. data.setDetails(details);
  449. data.setTypes(types);
  450. resultData.add(data);
  451. } else {
  452. ObjectMapper objectMapper = new ObjectMapper();
  453. PrintModelResult data = objectMapper.readValue(pis.getPayInfo(), PrintModelResult.class);
  454. resultData.add(data);
  455. }
  456. if (pis.getUserInfo().isEmpty()) {
  457. PrintModelResult data = new PrintModelResult();
  458. List<PrintInfo> nowInfos = infos.stream().filter(e -> e.getTypeId().intValue() == ePrintStatu.User.getValue()).collect(Collectors.toList());
  459. List<PrintModelDetailResult> details = new ArrayList<>();
  460. List<PrintModelTypeResult> types = new ArrayList<>();
  461. for (PrintInfo nowInfo : nowInfos) {
  462. PrintModelDetailResult detailData = new PrintModelDetailResult();
  463. detailData.setId(nowInfo.getId());
  464. detailData.setPrintField(nowInfo.getPrintField());
  465. detailData.setPrintName(nowInfo.getPrintName());
  466. detailData.setIsCheck(0);
  467. details.add(detailData);
  468. PrintModelTypeResult typeData = new PrintModelTypeResult();
  469. typeData.setId(nowInfo.getId());
  470. typeData.setIsBlod(0);
  471. typeData.setWordSize(0);
  472. typeData.setPrintField(nowInfo.getPrintField());
  473. typeData.setPrintName(nowInfo.getPrintName());
  474. types.add(typeData);
  475. }
  476. data.setId(ePrintStatu.User.getValue());
  477. data.setName(nowInfos.get(0).getTypeName());
  478. data.setDetails(details);
  479. data.setTypes(types);
  480. resultData.add(data);
  481. } else {
  482. ObjectMapper objectMapper = new ObjectMapper();
  483. PrintModelResult data = objectMapper.readValue(pis.getUserInfo(), PrintModelResult.class);
  484. resultData.add(data);
  485. }
  486. }
  487. List<OrderGoods> orderGoodsList = tbOrder.getOrderGoodsList();
  488. StringBuilder stringBuilder = new StringBuilder();
  489. int max = Integer.parseInt(commonInfoService.findOne(420).getValue());
  490. for (int i = 0; i < max; i++) {
  491. //region 基本信息:平台名称 店铺名 订单号 送达时间 订单类型
  492. Optional<PrintModelResult> oBaseInfo = resultData.stream().filter(e -> e.getId().intValue() == ePrintStatu.Base.getValue()).findFirst();
  493. List<PrintModelTypeResult> baseTypes = oBaseInfo.get().getTypes();
  494. //region 平台名称
  495. String bplatformNameType_start = null;
  496. String bplatformNameType_end = null;
  497. //endregion
  498. //region 商铺名
  499. String bshopName_start = null;
  500. String bshopName_end = null;
  501. //endregion
  502. //region 订单类型
  503. String borderTypeExtra_start = null;
  504. String borderTypeExtra_end = null;
  505. //endregion
  506. //region 订单号
  507. String borderNumber_start = null;
  508. String borderNumber_end = null;
  509. //endregion
  510. StringBuilder baseStringBuilder = new StringBuilder();
  511. for (PrintModelTypeResult baseType : baseTypes) {
  512. StringBuilder start = new StringBuilder();
  513. StringBuilder end = new StringBuilder();
  514. if (baseType.getWordSize().intValue() == eWordSize.Amplify.getValue()) {
  515. start.append("<B>");
  516. end.append("</B>");
  517. }
  518. if (baseType.getIsBlod().intValue() == eWordSize.Normal.getValue()) {//这里normal表示加粗
  519. start.append("<BOLD>");
  520. end.append("</BOLD>");
  521. }
  522. int isCheck = 0;
  523. Optional<PrintModelDetailResult> oCheck = oBaseInfo.get().getDetails().stream().filter(e -> e.getPrintField().equals(baseType.getPrintField())).findFirst();
  524. if (oCheck != null && oCheck.isPresent()) {
  525. isCheck = oCheck.get().getIsCheck().intValue();
  526. }
  527. switch (baseType.getPrintField()) {
  528. case "platform_name":
  529. bplatformNameType_start = "<C>" + start.toString();
  530. bplatformNameType_end = end.toString() + "</C>";
  531. break;
  532. case "shop_name":
  533. bshopName_start = "<C>" + start.toString();
  534. bshopName_end = end.toString() + "</C>";
  535. break;
  536. case "order_type_extra":
  537. borderTypeExtra_start = start.toString();
  538. borderTypeExtra_end = end.toString();
  539. break;
  540. case "order_number":
  541. borderNumber_start = start.toString();
  542. borderNumber_end = end.toString();
  543. break;
  544. case "expect_delivery_time":
  545. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getExpectDeliveryTime() == null ? "即时送达" : new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tbOrder.getExpectDeliveryTime())).append(end.toString()).append("<BR>");
  546. break;
  547. case "user_nick_name":
  548. if (isCheck == 1) {
  549. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getUserNickName() == null ? (user == null ? "" : user.getNickName()) : tbOrder.getUserNickName()).append(end.toString()).append("<BR>");
  550. }
  551. break;
  552. case "shop_phone":
  553. if (isCheck == 1) {
  554. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getShopPhone() == null ? (shopData == null ? "" : shopData.getPhone()) : tbOrder.getShopPhone()).append(end.toString()).append("<BR>");
  555. }
  556. break;
  557. case "distribution_distance_start":
  558. if (isCheck == 1) {
  559. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getDistributionDistance() == null ? (shopData == null ? "" : String.valueOf(shopData.getDistributionDistance())) : tbOrder.getDistributionDistance()).append(end.toString()).append("<BR>");
  560. }
  561. break;
  562. case "detailed_address":
  563. if (isCheck == 1) {
  564. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getDetailedAddress() == null ? (tbOrder == null ? "" : shopData.getDetailedAddress()) : tbOrder.getDetailedAddress()).append(end.toString()).append("<BR>");
  565. }
  566. break;
  567. case "remark":
  568. if (isCheck == 1) {
  569. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getRemark()).append(end.toString()).append("<BR>");
  570. }
  571. break;
  572. case "shop_receiving_time":
  573. if (isCheck == 1) {
  574. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getShopReceivingTime()).append(end.toString()).append("<BR>");
  575. }
  576. break;
  577. case "shop_id":
  578. if (isCheck == 1) {
  579. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(shopData != null ? shopData.getBusinessHours() + "-" + shopData.getLockHours() : "").append(end.toString()).append("<BR>");
  580. }
  581. break;
  582. case "parent_user_id":
  583. if (isCheck == 1) {
  584. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(parentUser == null ? "" : parentUser.getNickName()).append(end.toString()).append("<BR>");
  585. }
  586. break;
  587. case "pay_money":
  588. if (isCheck == 1) {
  589. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getPayMoney()).append("元").append(end.toString()).append("<BR>");
  590. }
  591. break;
  592. case "auto_send_order":
  593. if (isCheck == 1) {
  594. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getAutoSendOrder().intValue() == 0 ? "开启" : "关闭").append(end.toString()).append("<BR>");
  595. }
  596. break;
  597. case "errand_money":
  598. if (isCheck == 1) {
  599. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getErrandMoney()).append("元").append(end.toString()).append("<BR>");
  600. }
  601. break;
  602. case "pack_money":
  603. if (isCheck == 1) {
  604. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getPackMoney()).append("元").append(end.toString()).append("<BR>");
  605. }
  606. break;
  607. case "order_code":
  608. if (isCheck == 1) {
  609. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getOrderCode()).append(end.toString()).append("<BR>");
  610. }
  611. break;
  612. case "pay_type":
  613. if (isCheck == 1) {
  614. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getPayType().intValue() == 1 ? "微信支付" : (tbOrder.getPayType().intValue() == 2 ? "余额支付" : "支付宝支付")).append(end.toString()).append("<BR>");
  615. }
  616. break;
  617. case "pay_time":
  618. if (isCheck == 1) {
  619. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getPayTime()).append(end.toString()).append("<BR>");
  620. }
  621. break;
  622. case "create_time":
  623. if (isCheck == 1) {
  624. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbOrder.getCreateTime()).append(end.toString()).append("<BR>");
  625. }
  626. break;
  627. case "address":
  628. if (isCheck == 1) {
  629. if (StringUtils.isNotEmpty(tbOrder.getAddress())) {
  630. JSONObject jsonObject = JSONObject.parseObject(tbOrder.getAddress());
  631. String addressDetail = jsonObject.getString("addressDetail");
  632. String city = jsonObject.getString("city");
  633. String district = jsonObject.getString("district");
  634. String province = jsonObject.getString("province");
  635. baseStringBuilder.append(start.toString()).append(province).append(city).append(district).append(addressDetail).append(end.toString()).append("<BR>");
  636. }
  637. }
  638. break;
  639. case "phone":
  640. if (isCheck == 1) {
  641. if (StringUtils.isNotEmpty(tbOrder.getAddress())) {
  642. JSONObject jsonObject = JSONObject.parseObject(tbOrder.getAddress());
  643. String phone = jsonObject.getString("userPhone");
  644. baseStringBuilder.append(start.toString()).append(phone).append(end.toString()).append("<BR>");
  645. }
  646. }
  647. break;
  648. case "user_name":
  649. if (isCheck == 1) {
  650. if (StringUtils.isNotEmpty(tbOrder.getAddress())) {
  651. JSONObject jsonObject = JSONObject.parseObject(tbOrder.getAddress());
  652. String userName = jsonObject.getString("userName");
  653. baseStringBuilder.append(start.toString()).append(userName).append(end.toString()).append("<BR>");
  654. }
  655. }
  656. break;
  657. case "user_id"://显示isVip和vipExpirationTime
  658. if (isCheck == 1) {
  659. baseStringBuilder.append(start.toString()).append("是否会员:").append(user == null ? "" : (user.getIsVip().intValue() == 1 ? "是" : "否")).append(end.toString()).append("<BR>");
  660. baseStringBuilder.append(start.toString()).append("会员有效期:").append(user == null ? "" : user.getVipExpirationTime()).append(end.toString()).append("<BR>");
  661. }
  662. break;
  663. case "coupon_id"://拿优惠券表中的优惠券名称
  664. if (isCheck == 1) {
  665. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(tbCoupon == null ? "" : tbCoupon.getCouponName()).append(end.toString()).append("<BR>");
  666. }
  667. break;
  668. case "activity_title"://通过订单ID去activity_part_record表中查到activity_id后再去activity表中获取活动标题
  669. if (isCheck == 1) {
  670. baseStringBuilder.append(start.toString()).append(baseType.getPrintName() + ":").append(activity == null ? "" : activity.getTitle()).append(end.toString()).append("<BR>");
  671. }
  672. break;
  673. default:
  674. break;
  675. }
  676. }
  677. if (bplatformNameType_start != null) {
  678. stringBuilder.append(bplatformNameType_start).append("#").append(tbOrder.getOrderSequence()).append("-").append("墨轩云商").append(bplatformNameType_end);
  679. }
  680. if (bshopName_start != null) {
  681. stringBuilder.append(bshopName_start).append(tbOrder.getShopName()).append(bshopName_end);
  682. }
  683. if (borderTypeExtra_start != null) {
  684. stringBuilder.append(borderTypeExtra_start).append("类型:").append(eOrderTypeExtra.stringOf(tbOrder.getOrderTypeExtra())).append(borderTypeExtra_end).append("<BR>");
  685. }
  686. if (borderNumber_start != null) {
  687. stringBuilder.append(borderNumber_start).append("订单号:").append(tbOrder.getOrderNumber()).append(borderNumber_end).append("<BR>");
  688. }
  689. stringBuilder.append(baseStringBuilder.toString());
  690. //endregion
  691. stringBuilder.append("--------------------------------<BR>");
  692. //region 商品信息:商品名称 单价 数量 备注 金额
  693. //region 字号样式
  694. Optional<PrintModelResult> oGoodInfo = resultData.stream().filter(e -> e.getId().intValue() == ePrintStatu.Good.getValue()).findFirst();
  695. List<PrintModelTypeResult> goodTypes = oGoodInfo.get().getTypes();
  696. //region 商品名称
  697. String goods_name_start = null;
  698. String goods_name_end = null;
  699. //endregion
  700. //region 单价
  701. String goods_price_start = null;
  702. String goods_price_end = null;
  703. //endregion
  704. //region 数量
  705. String goods_num_start = null;
  706. String goods_num_end = null;
  707. //endregion
  708. //region 备注
  709. String remark_start = null;
  710. String remark_end = null;
  711. //endregion
  712. //region 金额
  713. String sum_money_start = null;
  714. String sum_money_end = null;
  715. //endregion
  716. StringBuilder goodStringBuilder = new StringBuilder();
  717. for (PrintModelTypeResult type : goodTypes) {
  718. StringBuilder start = new StringBuilder();
  719. StringBuilder end = new StringBuilder();
  720. if (type.getWordSize().intValue() == eWordSize.Amplify.getValue()) {
  721. start.append("<B>");
  722. end.append("</B>");
  723. }
  724. if (type.getIsBlod().intValue() == eWordSize.Normal.getValue()) {//这里normal表示加粗
  725. start.append("<BOLD>");
  726. end.append("</BOLD>");
  727. }
  728. int isCheck = 0;
  729. Optional<PrintModelDetailResult> oCheck = oGoodInfo.get().getDetails().stream().filter(e -> e.getPrintField().equals(type.getPrintField())).findFirst();
  730. if (oCheck != null && oCheck.isPresent()) {
  731. isCheck = oCheck.get().getIsCheck().intValue();
  732. }
  733. switch (type.getPrintField()) {
  734. case "goods_name":
  735. goods_name_start = start.toString();
  736. goods_name_end = end.toString();
  737. break;
  738. case "goods_price":
  739. goods_price_start = start.toString();
  740. goods_price_end = end.toString();
  741. break;
  742. case "goods_num":
  743. goods_num_start = start.toString();
  744. goods_num_end = end.toString();
  745. break;
  746. case "remark":
  747. remark_start = start.toString();
  748. remark_end = end.toString();
  749. break;
  750. case "sum_money":
  751. if (isCheck == 1) {
  752. sum_money_start = start.toString();
  753. sum_money_end = end.toString();
  754. }
  755. break;
  756. case "platform_name":
  757. if (isCheck == 1) {
  758. goodStringBuilder.append(start.toString()).append("#").append(tbOrder.getOrderSequence()).append("-").append("墨轩云商").append(end.toString());
  759. }
  760. break;
  761. case "shop_name":
  762. if (isCheck == 1) {
  763. goodStringBuilder.append(start.toString()).append(tbOrder.getShopName()).append(end.toString());
  764. }
  765. break;
  766. case "order_type_extra":
  767. if (isCheck == 1) {
  768. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(eOrderTypeExtra.stringOf(tbOrder.getOrderTypeExtra())).append(end.toString()).append("<BR>");
  769. }
  770. break;
  771. case "order_number":
  772. if (isCheck == 1) {
  773. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getOrderNumber()).append(end.toString()).append("<BR>");
  774. }
  775. break;
  776. case "user_nick_name":
  777. if (isCheck == 1) {
  778. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getUserNickName() == null ? (user == null ? "" : user.getNickName()) : tbOrder.getUserNickName()).append(end.toString()).append("<BR>");
  779. }
  780. break;
  781. case "shop_phone":
  782. if (isCheck == 1) {
  783. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getShopPhone() == null ? (shopData == null ? "" : shopData.getPhone()) : tbOrder.getShopPhone()).append(end.toString()).append("<BR>");
  784. }
  785. break;
  786. case "distribution_distance_start":
  787. if (isCheck == 1) {
  788. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getDistributionDistance() == null ? (shopData == null ? "" : String.valueOf(shopData.getDistributionDistance())) : tbOrder.getDistributionDistance()).append(end.toString()).append("<BR>");
  789. }
  790. break;
  791. case "detailed_address":
  792. if (isCheck == 1) {
  793. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getDetailedAddress() == null ? (tbOrder == null ? "" : shopData.getDetailedAddress()) : tbOrder.getDetailedAddress()).append(end.toString()).append("<BR>");
  794. }
  795. break;
  796. case "shop_receiving_time":
  797. if (isCheck == 1) {
  798. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getShopReceivingTime()).append(end.toString()).append("<BR>");
  799. }
  800. break;
  801. case "shop_id":
  802. if (isCheck == 1) {
  803. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(shopData != null ? shopData.getBusinessHours() + "-" + shopData.getLockHours() : "").append(end.toString()).append("<BR>");
  804. }
  805. break;
  806. case "parent_user_id":
  807. if (isCheck == 1) {
  808. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(parentUser == null ? "" : parentUser.getNickName()).append(end.toString()).append("<BR>");
  809. }
  810. break;
  811. case "pay_money":
  812. if (isCheck == 1) {
  813. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getPayMoney()).append("元").append(end.toString()).append("<BR>");
  814. }
  815. break;
  816. case "auto_send_order":
  817. if (isCheck == 1) {
  818. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getAutoSendOrder().intValue() == 0 ? "开启" : "关闭").append(end.toString()).append("<BR>");
  819. }
  820. break;
  821. case "errand_money":
  822. if (isCheck == 1) {
  823. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getErrandMoney()).append("元").append(end.toString()).append("<BR>");
  824. }
  825. break;
  826. case "pack_money":
  827. if (isCheck == 1) {
  828. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getPackMoney()).append("元").append(end.toString()).append("<BR>");
  829. }
  830. break;
  831. case "order_code":
  832. if (isCheck == 1) {
  833. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getOrderCode()).append(end.toString()).append("<BR>");
  834. }
  835. break;
  836. case "pay_type":
  837. if (isCheck == 1) {
  838. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getPayType().intValue() == 1 ? "微信支付" : (tbOrder.getPayType().intValue() == 2 ? "余额支付" : "支付宝支付")).append(end.toString()).append("<BR>");
  839. }
  840. break;
  841. case "pay_time":
  842. if (isCheck == 1) {
  843. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getPayTime()).append(end.toString()).append("<BR>");
  844. }
  845. break;
  846. case "create_time":
  847. if (isCheck == 1) {
  848. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getCreateTime()).append(end.toString()).append("<BR>");
  849. }
  850. break;
  851. case "address":
  852. if (isCheck == 1) {
  853. if (StringUtils.isNotEmpty(tbOrder.getAddress())) {
  854. JSONObject jsonObject = JSONObject.parseObject(tbOrder.getAddress());
  855. String addressDetail = jsonObject.getString("addressDetail");
  856. String city = jsonObject.getString("city");
  857. String district = jsonObject.getString("district");
  858. String province = jsonObject.getString("province");
  859. goodStringBuilder.append(start.toString()).append(province).append(city).append(district).append(addressDetail).append(end.toString()).append("<BR>");
  860. }
  861. }
  862. break;
  863. case "phone":
  864. if (isCheck == 1) {
  865. if (StringUtils.isNotEmpty(tbOrder.getAddress())) {
  866. JSONObject jsonObject = JSONObject.parseObject(tbOrder.getAddress());
  867. String phone = jsonObject.getString("userPhone");
  868. goodStringBuilder.append(start.toString()).append(phone).append(end.toString()).append("<BR>");
  869. }
  870. }
  871. break;
  872. case "user_name":
  873. if (isCheck == 1) {
  874. if (StringUtils.isNotEmpty(tbOrder.getAddress())) {
  875. JSONObject jsonObject = JSONObject.parseObject(tbOrder.getAddress());
  876. String userName = jsonObject.getString("userName");
  877. goodStringBuilder.append(start.toString()).append(userName).append(end.toString()).append("<BR>");
  878. }
  879. }
  880. break;
  881. case "user_id"://显示isVip和vipExpirationTime
  882. if (isCheck == 1) {
  883. goodStringBuilder.append(start.toString()).append("是否会员:").append(user == null ? "" : (user.getIsVip().intValue() == 1 ? "是" : "否")).append(end.toString()).append("<BR>");
  884. goodStringBuilder.append(start.toString()).append("会员有效期:").append(user == null ? "" : user.getVipExpirationTime()).append(end.toString()).append("<BR>");
  885. }
  886. break;
  887. case "coupon_id"://拿优惠券表中的优惠券名称
  888. if (isCheck == 1) {
  889. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbCoupon == null ? "" : tbCoupon.getCouponName()).append(end.toString()).append("<BR>");
  890. }
  891. break;
  892. case "expect_delivery_time":
  893. if (isCheck == 1) {
  894. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getExpectDeliveryTime() == null ? "即时送达" : new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tbOrder.getExpectDeliveryTime())).append(end.toString()).append("<BR>");
  895. }
  896. break;
  897. case "activity_title"://通过订单ID去activity_part_record表中查到activity_id后再去activity表中获取活动标题
  898. if (isCheck == 1) {
  899. goodStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(activity == null ? "" : activity.getTitle()).append(end.toString()).append("<BR>");
  900. }
  901. break;
  902. default:
  903. break;
  904. }
  905. }
  906. //endregion
  907. if (goods_name_start != null) {
  908. //长度十个字
  909. stringBuilder.append(goods_name_start).append("名称").append(goods_name_end);
  910. if (sum_money_start != null) {
  911. stringBuilder.append("      ");
  912. } else {
  913. stringBuilder.append("        ");
  914. }
  915. }
  916. if (goods_price_start != null) {
  917. stringBuilder.append(goods_price_start).append("单价").append(goods_price_end).append("  ");
  918. }
  919. if (goods_num_start != null) {
  920. stringBuilder.append(goods_num_start).append("数量").append(goods_num_end).append("  ");
  921. }
  922. if (sum_money_start != null) {
  923. stringBuilder.append(sum_money_start).append("金额").append(sum_money_end);
  924. }
  925. stringBuilder.append("<BR>");
  926. stringBuilder.append("--------------------------------<BR>");
  927. BigDecimal packMoney = BigDecimal.ZERO;
  928. BigDecimal goodsMoney = BigDecimal.ZERO;
  929. for (OrderGoods orderGoods : orderGoodsList) {
  930. BigDecimal sumMoney = orderGoods.getGoodsPrice().multiply(BigDecimal.valueOf(orderGoods.getGoodsNum()));
  931. BigDecimal sumPack = orderGoods.getGoodsPack().multiply(BigDecimal.valueOf(orderGoods.getGoodsNum()));
  932. packMoney = packMoney.add(sumPack);
  933. goodsMoney = goodsMoney.add(sumMoney);
  934. String name;
  935. if (StringUtils.isNotEmpty(orderGoods.getSkuMessage())) {
  936. name = orderGoods.getGoodsName() + "(" + orderGoods.getSkuMessage() + ")";
  937. } else {
  938. name = orderGoods.getGoodsName();
  939. }
  940. stringBuilder.append(goods_name_start).append(name).append(goods_name_end);
  941. StringBuilder space = new StringBuilder();
  942. if (sum_money_start != null) {
  943. for (int len = name.length(); len < 8; len++) {
  944. space.append(" ");
  945. }
  946. }else{
  947. for (int len = name.length(); len < 10; len++) {
  948. space.append(" ");
  949. }
  950. }
  951. stringBuilder.append(space.toString());
  952. stringBuilder.append(goods_price_start).append(orderGoods.getGoodsPrice()).append(goods_price_end);
  953. if (orderGoods.getGoodsPrice().doubleValue() < 10) {
  954. stringBuilder.append("  ");
  955. } else if (orderGoods.getGoodsPrice().doubleValue() < 100) {
  956. stringBuilder.append("  ");
  957. } else {
  958. stringBuilder.append("  ");
  959. }
  960. stringBuilder.append(goods_num_start).append("x" + orderGoods.getGoodsNum()).append(goods_num_end);
  961. stringBuilder.append("  ");
  962. if (sum_money_start != null) {
  963. stringBuilder.append(sum_money_start).append(sumMoney).append(sum_money_end);
  964. }
  965. stringBuilder.append("<BR>");
  966. //stringBuilder.append("<BR>");
  967. }
  968. stringBuilder.append("--------------------------------<BR>");
  969. String remark = tbOrder.getRemark();
  970. if (StringUtils.isEmpty(remark)) {
  971. remark = "";
  972. }
  973. stringBuilder.append(remark_start).append("备注:").append(remark).append(remark_end).append("<BR>");
  974. stringBuilder.append(goodStringBuilder.toString());
  975. //endregion
  976. stringBuilder.append("--------------------------------<BR>");
  977. //region 支付信息:打包费 商品费 优惠券 跑腿费 优惠活动 合计
  978. //region 字号样式
  979. Optional<PrintModelResult> oPayInfo = resultData.stream().filter(e -> e.getId().intValue() == ePrintStatu.Pay.getValue()).findFirst();
  980. List<PrintModelTypeResult> payTypes = oPayInfo.get().getTypes();
  981. //region 打包费
  982. String pack_money_start = null;
  983. String pack_money_end = null;
  984. //endregion
  985. //region 商品费
  986. String goods_money_start = null;
  987. String goods_money_end = null;
  988. //endregion
  989. //region 优惠券
  990. String coupon_money_start = null;
  991. String coupon_money_end = null;
  992. //endregion
  993. //region 跑腿费
  994. String errand_money_start = null;
  995. String errand_money_end = null;
  996. //endregion
  997. //region 优惠活动
  998. String activity_title_start = null;
  999. String activity_title_end = null;
  1000. //endregion
  1001. //region 合计
  1002. String pay_money_start = null;
  1003. String pay_money_end = null;
  1004. //endregion
  1005. StringBuilder payStringBuilder = new StringBuilder();
  1006. for (PrintModelTypeResult type : payTypes) {
  1007. StringBuilder start = new StringBuilder();
  1008. StringBuilder end = new StringBuilder();
  1009. if (type.getWordSize().intValue() == eWordSize.Amplify.getValue()) {
  1010. start.append("<B>");
  1011. end.append("</B>");
  1012. }
  1013. if (type.getIsBlod().intValue() == eWordSize.Normal.getValue()) {//这里normal表示加粗
  1014. start.append("<BOLD>");
  1015. end.append("</BOLD>");
  1016. }
  1017. int isCheck = 0;
  1018. Optional<PrintModelDetailResult> oCheck = oPayInfo.get().getDetails().stream().filter(e -> e.getPrintField().equals(type.getPrintField())).findFirst();
  1019. if (oCheck != null && oCheck.isPresent()) {
  1020. isCheck = oCheck.get().getIsCheck().intValue();
  1021. }
  1022. switch (type.getPrintField()) {
  1023. case "pack_money":
  1024. pack_money_start = start.toString();
  1025. pack_money_end = end.toString();
  1026. break;
  1027. case "goods_money":
  1028. goods_money_start = start.toString();
  1029. goods_money_end = end.toString();
  1030. break;
  1031. case "coupon_money":
  1032. coupon_money_start = start.toString();
  1033. coupon_money_end = end.toString();
  1034. break;
  1035. case "errand_money":
  1036. errand_money_start = start.toString();
  1037. errand_money_end = end.toString();
  1038. break;
  1039. case "activity_title":
  1040. activity_title_start = start.toString();
  1041. activity_title_end = end.toString();
  1042. break;
  1043. case "pay_money":
  1044. pay_money_start = start.toString();
  1045. pay_money_end = end.toString();
  1046. break;
  1047. case "platform_name":
  1048. if (isCheck == 1) {
  1049. payStringBuilder.append(start.toString()).append("#").append(tbOrder.getOrderSequence()).append("-").append("墨轩云商").append(end.toString());
  1050. }
  1051. break;
  1052. case "shop_name":
  1053. if (isCheck == 1) {
  1054. payStringBuilder.append(start.toString()).append(tbOrder.getShopName()).append(end.toString());
  1055. }
  1056. break;
  1057. case "order_type_extra":
  1058. if (isCheck == 1) {
  1059. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(eOrderTypeExtra.stringOf(tbOrder.getOrderTypeExtra())).append(end.toString()).append("<BR>");
  1060. }
  1061. break;
  1062. case "order_number":
  1063. if (isCheck == 1) {
  1064. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getOrderNumber()).append(end.toString()).append("<BR>");
  1065. }
  1066. break;
  1067. case "user_nick_name":
  1068. if (isCheck == 1) {
  1069. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getUserNickName() == null ? (user == null ? "" : user.getNickName()) : tbOrder.getUserNickName()).append(end.toString()).append("<BR>");
  1070. }
  1071. break;
  1072. case "shop_phone":
  1073. if (isCheck == 1) {
  1074. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getShopPhone() == null ? (shopData == null ? "" : shopData.getPhone()) : tbOrder.getShopPhone()).append(end.toString()).append("<BR>");
  1075. }
  1076. break;
  1077. case "distribution_distance_start":
  1078. if (isCheck == 1) {
  1079. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getDistributionDistance() == null ? (shopData == null ? "" : String.valueOf(shopData.getDistributionDistance())) : tbOrder.getDistributionDistance()).append(end.toString()).append("<BR>");
  1080. }
  1081. break;
  1082. case "detailed_address":
  1083. if (isCheck == 1) {
  1084. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getDetailedAddress() == null ? (tbOrder == null ? "" : shopData.getDetailedAddress()) : tbOrder.getDetailedAddress()).append(end.toString()).append("<BR>");
  1085. }
  1086. break;
  1087. case "remark":
  1088. if (isCheck == 1) {
  1089. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getRemark()).append(end.toString()).append("<BR>");
  1090. }
  1091. break;
  1092. case "shop_receiving_time":
  1093. if (isCheck == 1) {
  1094. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getShopReceivingTime()).append(end.toString()).append("<BR>");
  1095. }
  1096. break;
  1097. case "shop_id":
  1098. if (isCheck == 1) {
  1099. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(shopData != null ? shopData.getBusinessHours() + "-" + shopData.getLockHours() : "").append(end.toString()).append("<BR>");
  1100. }
  1101. break;
  1102. case "parent_user_id":
  1103. if (isCheck == 1) {
  1104. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(parentUser == null ? "" : parentUser.getNickName()).append(end.toString()).append("<BR>");
  1105. }
  1106. break;
  1107. case "auto_send_order":
  1108. if (isCheck == 1) {
  1109. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getAutoSendOrder().intValue() == 0 ? "开启" : "关闭").append(end.toString()).append("<BR>");
  1110. }
  1111. break;
  1112. case "order_code":
  1113. if (isCheck == 1) {
  1114. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getOrderCode()).append(end.toString()).append("<BR>");
  1115. }
  1116. break;
  1117. case "pay_type":
  1118. if (isCheck == 1) {
  1119. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getPayType().intValue() == 1 ? "微信支付" : (tbOrder.getPayType().intValue() == 2 ? "余额支付" : "支付宝支付")).append(end.toString()).append("<BR>");
  1120. }
  1121. break;
  1122. case "pay_time":
  1123. if (isCheck == 1) {
  1124. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getPayTime()).append(end.toString()).append("<BR>");
  1125. }
  1126. break;
  1127. case "create_time":
  1128. if (isCheck == 1) {
  1129. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getCreateTime()).append(end.toString()).append("<BR>");
  1130. }
  1131. break;
  1132. case "address":
  1133. if (isCheck == 1) {
  1134. if (StringUtils.isNotEmpty(tbOrder.getAddress())) {
  1135. JSONObject jsonObject = JSONObject.parseObject(tbOrder.getAddress());
  1136. String addressDetail = jsonObject.getString("addressDetail");
  1137. String city = jsonObject.getString("city");
  1138. String district = jsonObject.getString("district");
  1139. String province = jsonObject.getString("province");
  1140. payStringBuilder.append(start.toString()).append(province).append(city).append(district).append(addressDetail).append(end.toString()).append("<BR>");
  1141. }
  1142. }
  1143. break;
  1144. case "phone":
  1145. if (isCheck == 1) {
  1146. if (StringUtils.isNotEmpty(tbOrder.getAddress())) {
  1147. JSONObject jsonObject = JSONObject.parseObject(tbOrder.getAddress());
  1148. String phone = jsonObject.getString("userPhone");
  1149. payStringBuilder.append(start.toString()).append(phone).append(end.toString()).append("<BR>");
  1150. }
  1151. }
  1152. break;
  1153. case "user_name":
  1154. if (isCheck == 1) {
  1155. if (StringUtils.isNotEmpty(tbOrder.getAddress())) {
  1156. JSONObject jsonObject = JSONObject.parseObject(tbOrder.getAddress());
  1157. String userName = jsonObject.getString("userName");
  1158. payStringBuilder.append(start.toString()).append(userName).append(end.toString()).append("<BR>");
  1159. }
  1160. }
  1161. break;
  1162. case "user_id"://显示isVip和vipExpirationTime
  1163. if (isCheck == 1) {
  1164. payStringBuilder.append(start.toString()).append("是否会员:").append(user == null ? "" : (user.getIsVip().intValue() == 1 ? "是" : "否")).append(end.toString()).append("<BR>");
  1165. payStringBuilder.append(start.toString()).append("会员有效期:").append(user == null ? "" : user.getVipExpirationTime()).append(end.toString()).append("<BR>");
  1166. }
  1167. break;
  1168. case "coupon_id"://拿优惠券表中的优惠券名称
  1169. if (isCheck == 1) {
  1170. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbCoupon == null ? "" : tbCoupon.getCouponName()).append(end.toString()).append("<BR>");
  1171. }
  1172. break;
  1173. case "expect_delivery_time":
  1174. if (isCheck == 1) {
  1175. payStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getExpectDeliveryTime() == null ? "即时送达" : new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tbOrder.getExpectDeliveryTime())).append(end.toString()).append("<BR>");
  1176. }
  1177. break;
  1178. default:
  1179. break;
  1180. }
  1181. }
  1182. //endregion
  1183. stringBuilder.append(pack_money_start).append("打包费:").append(packMoney).append("元").append(pack_money_end + "<BR>");
  1184. stringBuilder.append(goods_money_start).append("商品费:").append(goodsMoney).append("元").append(goods_money_end + "<BR>");
  1185. if (tbOrder.getCouponMoney() != null) {
  1186. stringBuilder.append(coupon_money_start).append("优惠券:").append("-" + tbOrder.getCouponMoney()).append("元").append(coupon_money_end + "<BR>");
  1187. } else {
  1188. stringBuilder.append(coupon_money_start).append("优惠券:").append("-0").append("元").append(coupon_money_end + "<BR>");
  1189. }
  1190. BigDecimal errandMoney = tbOrder.getErrandMoney();
  1191. if (errandMoney == null) {
  1192. errandMoney = BigDecimal.ZERO;
  1193. }
  1194. BigDecimal errandMoneyT = errandMoney.setScale(2, BigDecimal.ROUND_HALF_UP);
  1195. stringBuilder.append(errand_money_start).append("跑腿费:").append(errandMoneyT).append("元").append(errand_money_end + "<BR>");
  1196. //从这个表里拿优惠活动 activity_part_record 活动参与记录表
  1197. stringBuilder.append(activity_title_start).append("优惠活动:").append(activity == null ? "" : activity.getTitle()).append(activity_title_end + "<BR>");
  1198. BigDecimal patMoney = tbOrder.getPayMoney().setScale(2, BigDecimal.ROUND_HALF_UP);
  1199. stringBuilder.append(pay_money_start).append("合计:").append(patMoney).append("元").append(pay_money_end + "<BR>");
  1200. stringBuilder.append(payStringBuilder.toString());
  1201. //endregion
  1202. stringBuilder.append("--------------------------------<BR>");
  1203. //region 用户信息:姓名 电话号 地址 订餐时间 商家联系电话
  1204. //region 字号样式
  1205. Optional<PrintModelResult> oUserInfo = resultData.stream().filter(e -> e.getId().intValue() == ePrintStatu.User.getValue()).findFirst();
  1206. List<PrintModelTypeResult> userTypes = oUserInfo.get().getTypes();
  1207. //region 姓名
  1208. String user_name_start = null;
  1209. String user_name_end = null;
  1210. //endregion
  1211. //region 电话号
  1212. String phone_start = null;
  1213. String phone_end = null;
  1214. //endregion
  1215. //region 地址
  1216. String address_detail_start = null;
  1217. String address_detail_end = null;
  1218. //endregion
  1219. //region 订餐时间
  1220. String pay_time_start = null;
  1221. String pay_time_end = null;
  1222. //endregion
  1223. StringBuilder userStringBuilder = new StringBuilder();
  1224. for (PrintModelTypeResult type : userTypes) {
  1225. StringBuilder start = new StringBuilder();
  1226. StringBuilder end = new StringBuilder();
  1227. if (type.getWordSize().intValue() == eWordSize.Amplify.getValue()) {
  1228. start.append("<B>");
  1229. end.append("</B>");
  1230. }
  1231. if (type.getIsBlod().intValue() == eWordSize.Normal.getValue()) {//这里normal表示加粗
  1232. start.append("<BOLD>");
  1233. end.append("</BOLD>");
  1234. }
  1235. int isCheck = 0;
  1236. Optional<PrintModelDetailResult> oCheck = oUserInfo.get().getDetails().stream().filter(e -> e.getPrintField().equals(type.getPrintField())).findFirst();
  1237. if (oCheck != null && oCheck.isPresent()) {
  1238. isCheck = oCheck.get().getIsCheck().intValue();
  1239. }
  1240. switch (type.getPrintField()) {
  1241. case "user_name":
  1242. user_name_start = start.toString();
  1243. user_name_end = end.toString();
  1244. break;
  1245. case "phone":
  1246. phone_start = start.toString();
  1247. phone_end = end.toString();
  1248. break;
  1249. case "address_detail":
  1250. address_detail_start = start.toString();
  1251. address_detail_end = end.toString();
  1252. break;
  1253. case "pay_time":
  1254. pay_time_start = start.toString();
  1255. pay_time_end = end.toString();
  1256. break;
  1257. case "platform_name":
  1258. if (isCheck == 1) {
  1259. userStringBuilder.append(start.toString()).append("#").append(tbOrder.getOrderSequence()).append("-").append("墨轩云商").append(end.toString());
  1260. }
  1261. break;
  1262. case "shop_name":
  1263. if (isCheck == 1) {
  1264. userStringBuilder.append(start.toString()).append(tbOrder.getShopName()).append(end.toString());
  1265. }
  1266. break;
  1267. case "order_type_extra":
  1268. if (isCheck == 1) {
  1269. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(eOrderTypeExtra.stringOf(tbOrder.getOrderTypeExtra())).append(end.toString()).append("<BR>");
  1270. }
  1271. break;
  1272. case "order_number":
  1273. if (isCheck == 1) {
  1274. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getOrderNumber()).append(end.toString()).append("<BR>");
  1275. }
  1276. break;
  1277. case "user_nick_name":
  1278. if (isCheck == 1) {
  1279. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getUserNickName() == null ? (user == null ? "" : user.getNickName()) : tbOrder.getUserNickName()).append(end.toString()).append("<BR>");
  1280. }
  1281. break;
  1282. case "shop_phone":
  1283. if (isCheck == 1) {
  1284. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getShopPhone() == null ? (shopData == null ? "" : shopData.getPhone()) : tbOrder.getShopPhone()).append(end.toString()).append("<BR>");
  1285. }
  1286. break;
  1287. case "distribution_distance_start":
  1288. if (isCheck == 1) {
  1289. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getDistributionDistance() == null ? (shopData == null ? "" : String.valueOf(shopData.getDistributionDistance())) : tbOrder.getDistributionDistance()).append(end.toString()).append("<BR>");
  1290. }
  1291. break;
  1292. case "detailed_address":
  1293. if (isCheck == 1) {
  1294. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getDetailedAddress() == null ? (tbOrder == null ? "" : shopData.getDetailedAddress()) : tbOrder.getDetailedAddress()).append(end.toString()).append("<BR>");
  1295. }
  1296. break;
  1297. case "remark":
  1298. if (isCheck == 1) {
  1299. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getRemark()).append(end.toString()).append("<BR>");
  1300. }
  1301. break;
  1302. case "shop_receiving_time":
  1303. if (isCheck == 1) {
  1304. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getShopReceivingTime()).append(end.toString()).append("<BR>");
  1305. }
  1306. break;
  1307. case "shop_id":
  1308. if (isCheck == 1) {
  1309. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(shopData != null ? shopData.getBusinessHours() + "-" + shopData.getLockHours() : "").append(end.toString()).append("<BR>");
  1310. }
  1311. break;
  1312. case "parent_user_id":
  1313. if (isCheck == 1) {
  1314. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(parentUser == null ? "" : parentUser.getNickName()).append(end.toString()).append("<BR>");
  1315. }
  1316. break;
  1317. case "pay_money":
  1318. if (isCheck == 1) {
  1319. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getPayMoney()).append("元").append(end.toString()).append("<BR>");
  1320. }
  1321. break;
  1322. case "auto_send_order":
  1323. if (isCheck == 1) {
  1324. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getAutoSendOrder().intValue() == 0 ? "开启" : "关闭").append(end.toString()).append("<BR>");
  1325. }
  1326. break;
  1327. case "errand_money":
  1328. if (isCheck == 1) {
  1329. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getErrandMoney()).append("元").append(end.toString()).append("<BR>");
  1330. }
  1331. break;
  1332. case "pack_money":
  1333. if (isCheck == 1) {
  1334. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getPackMoney()).append("元").append(end.toString()).append("<BR>");
  1335. }
  1336. break;
  1337. case "order_code":
  1338. if (isCheck == 1) {
  1339. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getOrderCode()).append(end.toString()).append("<BR>");
  1340. }
  1341. break;
  1342. case "pay_type":
  1343. if (isCheck == 1) {
  1344. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getPayType().intValue() == 1 ? "微信支付" : (tbOrder.getPayType().intValue() == 2 ? "余额支付" : "支付宝支付")).append(end.toString()).append("<BR>");
  1345. }
  1346. break;
  1347. case "create_time":
  1348. if (isCheck == 1) {
  1349. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getCreateTime()).append(end.toString()).append("<BR>");
  1350. }
  1351. break;
  1352. case "address":
  1353. if (isCheck == 1) {
  1354. if (StringUtils.isNotEmpty(tbOrder.getAddress())) {
  1355. JSONObject jsonObject = JSONObject.parseObject(tbOrder.getAddress());
  1356. String addressDetail = jsonObject.getString("addressDetail");
  1357. String city = jsonObject.getString("city");
  1358. String district = jsonObject.getString("district");
  1359. String province = jsonObject.getString("province");
  1360. userStringBuilder.append(start.toString()).append(province).append(city).append(district).append(addressDetail).append(end.toString()).append("<BR>");
  1361. }
  1362. }
  1363. break;
  1364. case "user_id"://显示isVip和vipExpirationTime
  1365. if (isCheck == 1) {
  1366. userStringBuilder.append(start.toString()).append("是否会员:").append(user == null ? "" : (user.getIsVip().intValue() == 1 ? "是" : "否")).append(end.toString()).append("<BR>");
  1367. userStringBuilder.append(start.toString()).append("会员有效期:").append(user == null ? "" : user.getVipExpirationTime()).append(end.toString()).append("<BR>");
  1368. }
  1369. break;
  1370. case "coupon_id"://拿优惠券表中的优惠券名称
  1371. if (isCheck == 1) {
  1372. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbCoupon == null ? "" : tbCoupon.getCouponName()).append(end.toString()).append("<BR>");
  1373. }
  1374. break;
  1375. case "expect_delivery_time":
  1376. if (isCheck == 1) {
  1377. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(tbOrder.getExpectDeliveryTime() == null ? "即时送达" : new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tbOrder.getExpectDeliveryTime())).append(end.toString()).append("<BR>");
  1378. }
  1379. break;
  1380. case "activity_title"://通过订单ID去activity_part_record表中查到activity_id后再去activity表中获取活动标题
  1381. if (isCheck == 1) {
  1382. userStringBuilder.append(start.toString()).append(type.getPrintName() + ":").append(activity == null ? "" : activity.getTitle()).append(end.toString()).append("<BR>");
  1383. }
  1384. break;
  1385. default:
  1386. break;
  1387. }
  1388. }
  1389. //endregion
  1390. if (StringUtils.isNotEmpty(tbOrder.getAddress())) {
  1391. JSONObject jsonObject = JSONObject.parseObject(tbOrder.getAddress());
  1392. String addressDetail = jsonObject.getString("addressDetail");
  1393. String city = jsonObject.getString("city");
  1394. String district = jsonObject.getString("district");
  1395. String province = jsonObject.getString("province");
  1396. String userName = jsonObject.getString("userName");
  1397. String phone = jsonObject.getString("userPhone");
  1398. stringBuilder.append(user_name_start).append(userName).append(user_name_end).append("<BR>");
  1399. stringBuilder.append(phone_start).append(phone).append(phone_end).append("<BR>");
  1400. stringBuilder.append(address_detail_start).append(province).append(city).append(district).append(addressDetail).append(address_detail_end).append("<BR>");
  1401. } else {
  1402. stringBuilder.append(phone_start).append(tbOrder.getPhone()).append(phone_end).append("<BR>");
  1403. }
  1404. stringBuilder.append(pay_time_start).append("订餐时间:").append(tbOrder.getPayTime()).append(pay_time_end).append("<BR>");
  1405. stringBuilder.append(userStringBuilder);
  1406. stringBuilder.append("<BR>");
  1407. //String returnNo = getDigitBarCode();
  1408. //sb.append("<BC128_C>"+returnNo+"</BC128_C>");
  1409. stringBuilder.append("<CB><QR>").append(tbOrder.getOrderId()).append("</QR></CB>");
  1410. stringBuilder.append("<CB>收单码:").append(tbOrder.getOrderId()).append("</CB>");
  1411. stringBuilder.append("<BR>").append("<BR>").append("<BR>");
  1412. stringBuilder.append("<CUT>");
  1413. //endregion
  1414. }
  1415. String content = stringBuilder.toString();
  1416. doRequest(sn, content, tbOrder.getStatus(), isAppend, tbOrder.getOrderId());
  1417. } catch (Exception e) {
  1418. e.printStackTrace();
  1419. log.error("打印异常:" + e.getMessage(), e);
  1420. }
  1421. return null;
  1422. }
  1423. /**
  1424. * 小票机打印订单接口
  1425. *
  1426. * @param sn 打印机编号
  1427. * @return 成功:{"msg":"ok","ret":0,"data":"xxxxxxx_xxxxxxxx_xxxxxxxx","serverExecutedTime":5}
  1428. * 失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5}
  1429. */
  1430. public static String returnPrint(String sn, TbOrder tbOrder) {
  1431. try {
  1432. StringBuilder sb = new StringBuilder();
  1433. sb.append("<AUDIO-REFUND>");
  1434. sb.append("<C>墨轩云商</C>");
  1435. sb.append("<CB>");
  1436. sb.append("#").append(tbOrder.getOrderSequence()).append("<BR>");
  1437. sb.append("用户已取消,请勿继续配送<BR>");
  1438. sb.append("<BR>");
  1439. sb.append("<CUT>");
  1440. doRequest(sn, sb.toString(), 5, null, tbOrder.getOrderId());
  1441. } catch (Exception e) {
  1442. e.printStackTrace();
  1443. log.error("退款小票打印失败:{},{}" + e.getMessage(), e);
  1444. }
  1445. return null;
  1446. }
  1447. private static void doRequest(String sn, String content, Integer status, Integer isAppend, Long orderId) {
  1448. RequestConfig requestConfig = RequestConfig.custom()
  1449. .setSocketTimeout(30000)//读取超时
  1450. .setConnectTimeout(30000)//连接超时
  1451. .build();
  1452. try (CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).build()) {
  1453. String url = commonInfoService.findOne(325).getValue();
  1454. String user = commonInfoService.findOne(326).getValue();
  1455. String uKey = commonInfoService.findOne(327).getValue();
  1456. HttpPost post = new HttpPost(url);
  1457. List<NameValuePair> nameValuePairs = new ArrayList<>();
  1458. String sTime = String.valueOf(System.currentTimeMillis() / 1000);
  1459. nameValuePairs.add(new BasicNameValuePair("user", user));
  1460. nameValuePairs.add(new BasicNameValuePair("stime", sTime));
  1461. nameValuePairs.add(new BasicNameValuePair("sig", signature(user, uKey, sTime)));
  1462. nameValuePairs.add(new BasicNameValuePair("apiname", "Open_printMsg"));
  1463. nameValuePairs.add(new BasicNameValuePair("sn", sn));
  1464. nameValuePairs.add(new BasicNameValuePair("content", content));
  1465. nameValuePairs.add(new BasicNameValuePair("times", "1"));
  1466. post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));
  1467. CloseableHttpResponse response = httpClient.execute(post);
  1468. int stateCode = response.getStatusLine().getStatusCode();
  1469. if (stateCode == 200) {
  1470. HttpEntity httpentity = response.getEntity();
  1471. String result = "";
  1472. if (httpentity != null) {
  1473. result = EntityUtils.toString(httpentity);
  1474. }
  1475. //region 添加订单打印状态
  1476. int updateData = appOrderService.updateOrderPrint(orderId);
  1477. if (updateData <= 0) {
  1478. log.error("更新订单打印状态失败,订单ID为:{}", orderId);
  1479. }
  1480. PrintInfoDetail pid = new PrintInfoDetail();
  1481. pid.setOrderStatus(eOrderStatus.stringOf(status));
  1482. pid.setOrderId(orderId);
  1483. pid.setIsAppend(isAppend == null ? "否" : (isAppend.intValue() == 1 ? "是" : "否"));
  1484. Result detailResult = printInfoDetailService.insertPrintInfoDetail(pid);
  1485. if ((int) detailResult.get("code") != 0) {
  1486. log.error("记录打印数据失败,订单ID为:" + orderId + ";是否补打:" + isAppend);
  1487. }
  1488. //endregion
  1489. log.info("打印请求成功,打印机sn:{},打印内容:{},响应结果:{}", sn, content, result);
  1490. } else {
  1491. log.error("打印请求失败,响应码为:{}", stateCode);
  1492. }
  1493. } catch (Exception e) {
  1494. log.error("打印请求失败,失败原因:{}", e.getMessage());
  1495. }
  1496. }
  1497. /**
  1498. * 小票机打印订单接口
  1499. *
  1500. * @param sn 打印机编号
  1501. * @return 成功:{"msg":"ok","ret":0,"data":"xxxxxxx_xxxxxxxx_xxxxxxxx","serverExecutedTime":5}
  1502. * 失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5}
  1503. */
  1504. public static String testPrint(String sn) {
  1505. try {
  1506. //标签说明:
  1507. //单标签:
  1508. //"<BR>"为换行,"<CUT>"为切刀指令(主动切纸,仅限切刀打印机使用才有效果)
  1509. //"<LOGO>"为打印LOGO指令(前提是预先在机器内置LOGO图片),"<PLUGIN>"为钱箱或者外置音响指令
  1510. //成对标签:
  1511. //"<CB></CB>"为居中放大一倍,"<B></B>"为放大一倍,"<C></C>"为居中,<L></L>字体变高一倍
  1512. //<W></W>字体变宽一倍,"<QR></QR>"为二维码,"<BOLD></BOLD>"为字体加粗,""为右对齐
  1513. //拼凑订单内容时可参考如下格式
  1514. //根据打印纸张的宽度,自行调整内容的格式,可参考下面的样例格式
  1515. log.info("utils方法打印开始");
  1516. //region 以前的代码
  1517. String content = "<AUDIO-REFUND>";
  1518. content += "<CB>测试打印</CB><BR>";
  1519. content += "名称      单价 数量 金额<BR>";
  1520. content += "--------------------------------<BR>";
  1521. content += "<B>饭       1.0 1 1.0</B><BR>";
  1522. content += "<BOLD>炒饭      10.0 10 10.0</BOLD><BR>";
  1523. content += "<B><BOLD>蛋炒饭     10.0 10 100.0</B></BOLD><BR>";
  1524. content += "<B><BOLD>蛋炒饭     10.0 10 100.0</BOLD></B><BR>";
  1525. content += "鸡蛋炒饭    100.0 1 100.0<BR>";
  1526. content += "番茄蛋炒饭   1000.0 1 100.0<BR>";
  1527. content += "西红柿蛋炒饭  1000.0 1 100.0<BR>";
  1528. content += "西红柿鸡蛋炒饭 100.0 10 100.0<BR>";
  1529. content += "备注:加辣<BR>";
  1530. content += "--------------------------------<BR>";
  1531. content += "合计:xx.0元<BR>";
  1532. content += "送货地点:广州市南沙区xx路xx号<BR>";
  1533. content += "联系电话:13888888888888<BR>";
  1534. content += "订餐时间:2016-08-08 08:08:08<BR>";
  1535. content += "<QR>http://www.dzist.com</QR>";
  1536. //endregion
  1537. log.info("utils方法打印开始1");
  1538. StringBuilder stringBuilder = new StringBuilder();
  1539. log.info("utils方法打印开始2");
  1540. //region 以前的代码
  1541. /*stringBuilder.append("<BR>").append("<BR>").append("<BR>");
  1542. stringBuilder.append("<CB>").append(tbOrder.getShopName()).append("</CB><BR>");
  1543. if(tbOrder.getOrderType()==1){
  1544. stringBuilder.append("<BOLD>类型:").append("到店取餐</BOLD><BR>");
  1545. stringBuilder.append("<BOLD>取餐号:").append(tbOrder.getOrderCode()).append("</BOLD><BR>");
  1546. }else{
  1547. stringBuilder.append("<BOLD>类型:").append("外卖配送</BOLD><BR>");
  1548. }
  1549. stringBuilder.append("<BOLD>订单号:").append(tbOrder.getOrderNumber()).append("</BOLD><BR>");
  1550. stringBuilder.append("--------------------------------<BR>");
  1551. stringBuilder.append("名称    单价  数量  金额 <BR>");
  1552. stringBuilder.append("--------------------------------<BR>");
  1553. stringBuilder.append("<BR>");
  1554. for(OrderGoods orderGoods:orderGoodsList){
  1555. BigDecimal sumMoney = orderGoods.getGoodsPrice().multiply(BigDecimal.valueOf(orderGoods.getGoodsNum()));
  1556. String name;
  1557. if(StringUtils.isNotEmpty(orderGoods.getSkuMessage())){
  1558. name=orderGoods.getGoodsName()+"("+orderGoods.getSkuMessage()+")";
  1559. }else{
  1560. name=orderGoods.getGoodsName();
  1561. }
  1562. stringBuilder.append(name).append("<BR>");
  1563. stringBuilder.append("      ");
  1564. stringBuilder.append(orderGoods.getGoodsPrice());
  1565. if(orderGoods.getGoodsPrice().doubleValue()<10){
  1566. stringBuilder.append("  ");
  1567. }else if(orderGoods.getGoodsPrice().doubleValue()<100){
  1568. stringBuilder.append("  ");
  1569. }else{
  1570. stringBuilder.append("  ");
  1571. }
  1572. stringBuilder.append(orderGoods.getGoodsNum());
  1573. stringBuilder.append("  ");
  1574. stringBuilder.append(sumMoney).append("<BR>");
  1575. stringBuilder.append("<BR>");
  1576. }
  1577. stringBuilder.append("--------------------------------<BR>");
  1578. stringBuilder.append("<BOLD>备注:").append(remark).append("</BOLD><BR>");
  1579. stringBuilder.append("--------------------------------<BR>");
  1580. stringBuilder.append("打包费:").append(packMoney).append("元<BR>");
  1581. stringBuilder.append("商品费:").append(goodsMoney).append("元<BR>");
  1582. if(tbOrder.getCouponMoney()!=null){
  1583. stringBuilder.append("优惠券:-").append(tbOrder.getCouponMoney()).append("元<BR>");
  1584. }
  1585. stringBuilder.append("跑腿费:").append(errandMoney).append("元<BR>");
  1586. stringBuilder.append("合计:").append(tbOrder.getPayMoney()).append("元<BR>");
  1587. stringBuilder.append("--------------------------------<BR>");
  1588. if(StringUtils.isNotEmpty(tbOrder.getAddress())){
  1589. JSONObject jsonObject = JSONObject.parseObject(tbOrder.getAddress());
  1590. String addressDetail = jsonObject.getString("addressDetail");
  1591. String city = jsonObject.getString("city");
  1592. String district = jsonObject.getString("district");
  1593. String province = jsonObject.getString("province");
  1594. String userName = jsonObject.getString("userName");
  1595. String phone = jsonObject.getString("userPhone");
  1596. stringBuilder.append("姓名:").append(userName).append("<BR>");
  1597. stringBuilder.append("联系电话:").append(phone).append("<BR>");
  1598. stringBuilder.append("送货地点:").append(province).append(city).append(district).append(addressDetail).append("<BR>");
  1599. }else{
  1600. stringBuilder.append("联系电话:").append(tbOrder.getPhone()).append("<BR>");
  1601. }
  1602. stringBuilder.append("订餐时间:").append(tbOrder.getPayTime()).append("<BR>");*/
  1603. //endregion
  1604. log.info("utils方法打印开始3");
  1605. //通过POST请求,发送打印信息到服务器
  1606. RequestConfig requestConfig = RequestConfig.custom()
  1607. .setSocketTimeout(30000)//读取超时
  1608. .setConnectTimeout(30000)//连接超时
  1609. .build();
  1610. log.info("utils方法打印开始4");
  1611. CloseableHttpClient httpClient = HttpClients.custom()
  1612. .setDefaultRequestConfig(requestConfig)
  1613. .build();
  1614. log.info("utils方法打印开始5");
  1615. String URL = commonInfoService.findOne(325).getValue();
  1616. log.info("utils方法打印开始6");
  1617. String USER = commonInfoService.findOne(326).getValue();
  1618. log.info("utils方法打印开始7");
  1619. String UKEY = commonInfoService.findOne(327).getValue();
  1620. log.info("utils方法打印开始8");
  1621. HttpPost post = new HttpPost(URL);
  1622. log.info("utils方法打印开始9");
  1623. List<NameValuePair> nvps = new ArrayList<NameValuePair>();
  1624. log.info("utils方法打印开始10");
  1625. nvps.add(new BasicNameValuePair("user", USER));
  1626. log.info("utils方法打印开始11");
  1627. String STIME = String.valueOf(System.currentTimeMillis() / 1000);
  1628. log.info("utils方法打印开始12");
  1629. nvps.add(new BasicNameValuePair("stime", STIME));
  1630. nvps.add(new BasicNameValuePair("sig", signature(USER, UKEY, STIME)));
  1631. nvps.add(new BasicNameValuePair("apiname", "Open_printMsg"));//固定值,不需要修改
  1632. nvps.add(new BasicNameValuePair("sn", sn));
  1633. nvps.add(new BasicNameValuePair("content", content));
  1634. nvps.add(new BasicNameValuePair("times", "1"));//打印联数
  1635. log.info("utils方法打印开始13");
  1636. CloseableHttpResponse response = null;
  1637. String result = null;
  1638. log.info("utils方法打印开始14");
  1639. try {
  1640. log.info("utils方法打印开始15");
  1641. post.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
  1642. log.info("utils方法打印开始16");
  1643. response = httpClient.execute(post);
  1644. log.info("utils方法打印开始17");
  1645. int statecode = response.getStatusLine().getStatusCode();
  1646. log.info("utils方法打印开始18");
  1647. if (statecode == 200) {
  1648. log.info("utils方法打印开始19");
  1649. HttpEntity httpentity = response.getEntity();
  1650. log.info("utils方法打印开始20");
  1651. if (httpentity != null) {
  1652. log.info("utils方法打印开始21");
  1653. //服务器返回的JSON字符串,建议要当做日志记录起来
  1654. result = EntityUtils.toString(httpentity);
  1655. log.info("utils方法打印开始22");
  1656. }
  1657. log.info("utils方法打印开始23");
  1658. }
  1659. } catch (Exception e) {
  1660. log.info("utils方法打印开始24" + e.getMessage());
  1661. e.printStackTrace();
  1662. } finally {
  1663. try {
  1664. if (response != null) {
  1665. response.close();
  1666. }
  1667. } catch (IOException e) {
  1668. log.info("utils方法打印开始25" + e.getMessage());
  1669. e.printStackTrace();
  1670. }
  1671. try {
  1672. post.abort();
  1673. } catch (Exception e) {
  1674. log.info("utils方法打印开始26" + e.getMessage());
  1675. e.printStackTrace();
  1676. }
  1677. try {
  1678. httpClient.close();
  1679. } catch (IOException e) {
  1680. log.info("utils方法打印开始27" + e.getMessage());
  1681. e.printStackTrace();
  1682. }
  1683. }
  1684. log.info("打印返回值:" + result);
  1685. return result;
  1686. } catch (Exception e) {
  1687. e.printStackTrace();
  1688. log.error("打印异常:" + e.getMessage(), e);
  1689. }
  1690. return null;
  1691. }
  1692. /**
  1693. * 标签机专用打印订单接口
  1694. *
  1695. * @param sn 打印机编号
  1696. * @return 成功:{"msg":"ok","ret":0,"data":"xxxxxxx_xxxxxxxx_xxxxxxxx","serverExecutedTime":5}
  1697. * 失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5}
  1698. */
  1699. private static String printLabelMsg(String sn) {
  1700. String content;
  1701. content = "<DIRECTION>1</DIRECTION>";//设定打印时出纸和打印字体的方向,n 0 或 1,每次设备重启后都会初始化为 0 值设置,1:正向出纸,0:反向出纸,
  1702. content += "<TEXT x='9' y='10' font='12' w='1' h='2' r='0'>#001 五号桌 1/3</TEXT><TEXT x='80' y='80' font='12' w='2' h='2' r='0'>可乐鸡翅</TEXT><TEXT x='9' y='180' font='12' w='1' h='1' r='0'>张三先生 13800138000</TEXT>";//40mm宽度标签纸打印例子,打开注释调用标签打印接口打印
  1703. //通过POST请求,发送打印信息到服务器
  1704. RequestConfig requestConfig = RequestConfig.custom()
  1705. .setSocketTimeout(30000)//读取超时
  1706. .setConnectTimeout(30000)//连接超时
  1707. .build();
  1708. CloseableHttpClient httpClient = HttpClients.custom()
  1709. .setDefaultRequestConfig(requestConfig)
  1710. .build();
  1711. String URL = commonInfoService.findOne(325).getValue();
  1712. String USER = commonInfoService.findOne(326).getValue();
  1713. String UKEY = commonInfoService.findOne(327).getValue();
  1714. HttpPost post = new HttpPost(URL);
  1715. List<NameValuePair> nvps = new ArrayList<NameValuePair>();
  1716. nvps.add(new BasicNameValuePair("user", USER));
  1717. String STIME = String.valueOf(System.currentTimeMillis() / 1000);
  1718. nvps.add(new BasicNameValuePair("stime", STIME));
  1719. nvps.add(new BasicNameValuePair("sig", signature(USER, UKEY, STIME)));
  1720. nvps.add(new BasicNameValuePair("apiname", "Open_printLabelMsg"));//固定值,不需要修改
  1721. nvps.add(new BasicNameValuePair("sn", sn));
  1722. nvps.add(new BasicNameValuePair("content", content));
  1723. nvps.add(new BasicNameValuePair("times", "1"));//打印联数
  1724. CloseableHttpResponse response = null;
  1725. String result = null;
  1726. try {
  1727. post.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
  1728. response = httpClient.execute(post);
  1729. int statecode = response.getStatusLine().getStatusCode();
  1730. if (statecode == 200) {
  1731. HttpEntity httpentity = response.getEntity();
  1732. if (httpentity != null) {
  1733. //服务器返回的JSON字符串,建议要当做日志记录起来
  1734. result = EntityUtils.toString(httpentity);
  1735. }
  1736. }
  1737. } catch (Exception e) {
  1738. e.printStackTrace();
  1739. } finally {
  1740. try {
  1741. if (response != null) {
  1742. response.close();
  1743. }
  1744. } catch (IOException e) {
  1745. e.printStackTrace();
  1746. }
  1747. try {
  1748. post.abort();
  1749. } catch (Exception e) {
  1750. e.printStackTrace();
  1751. }
  1752. try {
  1753. httpClient.close();
  1754. } catch (IOException e) {
  1755. e.printStackTrace();
  1756. }
  1757. }
  1758. return result;
  1759. }
  1760. /**
  1761. * 查询某订单是否打印成功
  1762. *
  1763. * @param orderid 订单id
  1764. * @return 成功:{"msg":"ok","ret":0,"data":true,"serverExecutedTime":2}//data:true为已打印,false为未打印
  1765. * 失败:{"msg":"错误描述","ret":非0, "data":null,"serverExecutedTime":7}
  1766. */
  1767. private static String queryOrderState(String orderid) {
  1768. //通过POST请求,发送打印信息到服务器
  1769. RequestConfig requestConfig = RequestConfig.custom()
  1770. .setSocketTimeout(30000)//读取超时
  1771. .setConnectTimeout(30000)//连接超时
  1772. .build();
  1773. CloseableHttpClient httpClient = HttpClients.custom()
  1774. .setDefaultRequestConfig(requestConfig)
  1775. .build();
  1776. String URL = commonInfoService.findOne(325).getValue();
  1777. String USER = commonInfoService.findOne(326).getValue();
  1778. String UKEY = commonInfoService.findOne(327).getValue();
  1779. HttpPost post = new HttpPost(URL);
  1780. List<NameValuePair> nvps = new ArrayList<NameValuePair>();
  1781. nvps.add(new BasicNameValuePair("user", USER));
  1782. String STIME = String.valueOf(System.currentTimeMillis() / 1000);
  1783. nvps.add(new BasicNameValuePair("stime", STIME));
  1784. nvps.add(new BasicNameValuePair("sig", signature(USER, UKEY, STIME)));
  1785. nvps.add(new BasicNameValuePair("apiname", "Open_queryOrderState"));//固定值,不需要修改
  1786. nvps.add(new BasicNameValuePair("orderid", orderid));
  1787. CloseableHttpResponse response = null;
  1788. String result = null;
  1789. try {
  1790. post.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
  1791. response = httpClient.execute(post);
  1792. int statecode = response.getStatusLine().getStatusCode();
  1793. if (statecode == 200) {
  1794. HttpEntity httpentity = response.getEntity();
  1795. if (httpentity != null) {
  1796. //服务器返回
  1797. result = EntityUtils.toString(httpentity);
  1798. }
  1799. }
  1800. } catch (Exception e) {
  1801. e.printStackTrace();
  1802. } finally {
  1803. try {
  1804. if (response != null) {
  1805. response.close();
  1806. }
  1807. } catch (IOException e) {
  1808. e.printStackTrace();
  1809. }
  1810. try {
  1811. post.abort();
  1812. } catch (Exception e) {
  1813. e.printStackTrace();
  1814. }
  1815. try {
  1816. httpClient.close();
  1817. } catch (IOException e) {
  1818. e.printStackTrace();
  1819. }
  1820. }
  1821. return result;
  1822. }
  1823. /**
  1824. * 查询指定打印机某天的订单详情
  1825. *
  1826. * @param sn 打印机编号
  1827. * @param strdate 时间 "yyyy-MM-dd"
  1828. * @return 成功:{"msg":"ok","ret":0,"data":{"print":6,"waiting":1},"serverExecutedTime":9}//print已打印,waiting为打印
  1829. * 失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5}
  1830. */
  1831. private static String queryOrderInfoByDate(String sn, String strdate) {
  1832. //通过POST请求,发送打印信息到服务器
  1833. RequestConfig requestConfig = RequestConfig.custom()
  1834. .setSocketTimeout(30000)//读取超时
  1835. .setConnectTimeout(30000)//连接超时
  1836. .build();
  1837. CloseableHttpClient httpClient = HttpClients.custom()
  1838. .setDefaultRequestConfig(requestConfig)
  1839. .build();
  1840. String URL = commonInfoService.findOne(325).getValue();
  1841. String USER = commonInfoService.findOne(326).getValue();
  1842. String UKEY = commonInfoService.findOne(327).getValue();
  1843. HttpPost post = new HttpPost(URL);
  1844. List<NameValuePair> nvps = new ArrayList<NameValuePair>();
  1845. nvps.add(new BasicNameValuePair("user", USER));
  1846. String STIME = String.valueOf(System.currentTimeMillis() / 1000);
  1847. nvps.add(new BasicNameValuePair("stime", STIME));
  1848. nvps.add(new BasicNameValuePair("sig", signature(USER, UKEY, STIME)));
  1849. nvps.add(new BasicNameValuePair("apiname", "Open_queryOrderInfoByDate"));//固定值,不需要修改
  1850. nvps.add(new BasicNameValuePair("sn", sn));
  1851. nvps.add(new BasicNameValuePair("date", strdate));//yyyy-MM-dd格式
  1852. CloseableHttpResponse response = null;
  1853. String result = null;
  1854. try {
  1855. post.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
  1856. response = httpClient.execute(post);
  1857. int statecode = response.getStatusLine().getStatusCode();
  1858. if (statecode == 200) {
  1859. HttpEntity httpentity = response.getEntity();
  1860. if (httpentity != null) {
  1861. //服务器返回
  1862. result = EntityUtils.toString(httpentity);
  1863. }
  1864. }
  1865. } catch (Exception e) {
  1866. e.printStackTrace();
  1867. } finally {
  1868. try {
  1869. if (response != null) {
  1870. response.close();
  1871. }
  1872. } catch (IOException e) {
  1873. e.printStackTrace();
  1874. }
  1875. try {
  1876. post.abort();
  1877. } catch (Exception e) {
  1878. e.printStackTrace();
  1879. }
  1880. try {
  1881. httpClient.close();
  1882. } catch (IOException e) {
  1883. e.printStackTrace();
  1884. }
  1885. }
  1886. return result;
  1887. }
  1888. /**
  1889. * 查询打印机的状态
  1890. *
  1891. * @param sn 打印机编号
  1892. * @return 成功:{"msg":"ok","ret":0,"data":"状态","serverExecutedTime":4}
  1893. * 失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5}
  1894. */
  1895. private static String queryPrinterStatus(String sn) {
  1896. //通过POST请求,发送打印信息到服务器
  1897. RequestConfig requestConfig = RequestConfig.custom()
  1898. .setSocketTimeout(30000)//读取超时
  1899. .setConnectTimeout(30000)//连接超时
  1900. .build();
  1901. CloseableHttpClient httpClient = HttpClients.custom()
  1902. .setDefaultRequestConfig(requestConfig)
  1903. .build();
  1904. String URL = commonInfoService.findOne(325).getValue();
  1905. String USER = commonInfoService.findOne(326).getValue();
  1906. String UKEY = commonInfoService.findOne(327).getValue();
  1907. HttpPost post = new HttpPost(URL);
  1908. List<NameValuePair> nvps = new ArrayList<NameValuePair>();
  1909. nvps.add(new BasicNameValuePair("user", USER));
  1910. String STIME = String.valueOf(System.currentTimeMillis() / 1000);
  1911. nvps.add(new BasicNameValuePair("stime", STIME));
  1912. nvps.add(new BasicNameValuePair("sig", signature(USER, UKEY, STIME)));
  1913. nvps.add(new BasicNameValuePair("apiname", "Open_queryPrinterStatus"));//固定值,不需要修改
  1914. nvps.add(new BasicNameValuePair("sn", sn));
  1915. CloseableHttpResponse response = null;
  1916. String result = null;
  1917. try {
  1918. post.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
  1919. response = httpClient.execute(post);
  1920. int statecode = response.getStatusLine().getStatusCode();
  1921. if (statecode == 200) {
  1922. HttpEntity httpentity = response.getEntity();
  1923. if (httpentity != null) {
  1924. //服务器返回
  1925. result = EntityUtils.toString(httpentity);
  1926. }
  1927. }
  1928. } catch (Exception e) {
  1929. e.printStackTrace();
  1930. } finally {
  1931. try {
  1932. if (response != null) {
  1933. response.close();
  1934. }
  1935. } catch (IOException e) {
  1936. e.printStackTrace();
  1937. }
  1938. try {
  1939. post.abort();
  1940. } catch (Exception e) {
  1941. e.printStackTrace();
  1942. }
  1943. try {
  1944. httpClient.close();
  1945. } catch (IOException e) {
  1946. e.printStackTrace();
  1947. }
  1948. }
  1949. return result;
  1950. }
  1951. //生成签名字符串
  1952. private static String signature(String USER, String UKEY, String STIME) {
  1953. String s = DigestUtils.sha1Hex(USER + UKEY + STIME);
  1954. return s;
  1955. }
  1956. /**
  1957. * 飞鹅技术支持-2020-03-25
  1958. * #########################################################################################################
  1959. * 一,纯数字条件下:
  1960. * 58mm打印机最大支持28位纯数字,80mm打印机最大支持46位纯数字,超出无效
  1961. * <p>
  1962. * 26-28位数字条形码,在数字中不可以出现2个及以上连续的0存在
  1963. * 23-25位数字条形码,在数字中不可以出现3个及以上连续的0存在
  1964. * 21-22位数字条形码,在数字中不可以出现4个及以上连续的0存在
  1965. * 19-20位数字条形码,在数字中不可以出现6个及以上连续的0存在
  1966. * 17-18位数字条形码,在数字中不可以出现8个及以上连续的0存在
  1967. * 15-16位数字条形码,在数字中不可以出现10个及以上连续的0存在
  1968. * 少于或等于14位数字的条形码,0的数量没有影响
  1969. * #########################################################################################################
  1970. * 二,非纯数字混合条件下:
  1971. * 58mm打印机最大支持14位字符,80mm打印机最大支持23位字符,超出无效
  1972. * <p>
  1973. * 支持数字,大小写字母,特殊字符例如: !@#$%^&*()-=+_
  1974. * #########################################################################################################
  1975. * 把条形码函数返回值,调用飞鹅云打印接口发给打印机打印
  1976. */
  1977. private static String getDigitBarCode(String input) {
  1978. String chr = "";
  1979. String laststr = "";
  1980. byte[] codeB = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39}; // 匹配字符集B
  1981. byte[] codeC = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
  1982. 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,
  1983. 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31,
  1984. 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42,
  1985. 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53,
  1986. 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63}; // 匹配字符集C
  1987. int length = input.length();
  1988. byte[] b = new byte[100];
  1989. b[0] = 0x1b;
  1990. b[1] = 0x64;
  1991. b[2] = 0x02;
  1992. b[3] = 0x1d;
  1993. b[4] = 0x48;
  1994. b[5] = 0x32; // 0x32打印条形码下的数字, 0x30不打印条形码下的数字
  1995. b[6] = 0x1d;
  1996. b[7] = 0x68;
  1997. b[8] = 0x50; // 7F是最大的高度
  1998. b[9] = 0x1d;
  1999. b[10] = 0x77;
  2000. b[11] = 0x02; // 2-6 条码宽度
  2001. b[12] = 0x1d;
  2002. b[13] = 0x6b;
  2003. b[14] = 0x49; // code128
  2004. b[15] = (byte) (length + 2); // 得出条形码长度
  2005. b[16] = 0x7b;
  2006. b[17] = 0x42;
  2007. boolean result = input.matches("[0-9]+");//判断是否为纯数字
  2008. if (length > 14 && result == true) {
  2009. b[17] = 0x43;
  2010. int j = 0;
  2011. int key = 18;
  2012. int ss = length / 2;// 初始化数组长度
  2013. String temp = "";
  2014. int iindex = 0;
  2015. for (int i = 0; i < ss; i++) {
  2016. temp = input.substring(j, j + 2);
  2017. iindex = Integer.valueOf(temp);
  2018. j = j + 2;
  2019. if (iindex == 0) {
  2020. chr = "";
  2021. if (b[key + i - 1] == '0' && b[key + i - 2] == '0') {
  2022. b[key + i] = codeB[0];
  2023. b[key + i + 1] = codeB[0];
  2024. key += 1;
  2025. } else {
  2026. if (b[key + i - 1] == 'C' && b[key + i - 2] == '{') {//判断前面的为字符集C时转换字符集B
  2027. b[key + i - 2] = 0x7b;
  2028. b[key + i - 1] = 0x42;
  2029. b[key + i] = codeB[0];
  2030. b[key + i + 1] = codeB[0];
  2031. key += 1;
  2032. } else {
  2033. b[key + i] = 0x7b;
  2034. b[key + i + 1] = 0x42;
  2035. b[key + i + 2] = codeB[0];
  2036. b[key + i + 3] = codeB[0];
  2037. key += 3;
  2038. }
  2039. }
  2040. } else {
  2041. // 判断前面的为字符集B,此时要转换字符集C
  2042. if (b[key + i - 1] == '0' && b[key + i - 2] == '0' && chr != "chr") {
  2043. b[key + i] = 0x7b;
  2044. b[key + i + 1] = 0x43;
  2045. b[key + i + 2] = codeC[iindex];
  2046. key += 2;
  2047. } else {
  2048. chr = "";
  2049. b[key + i] = codeC[iindex];
  2050. if (iindex == 48) chr = "chr";//判断chr(48)等于0的情况
  2051. }
  2052. }
  2053. }
  2054. int lastKey = getLastIndex(b);
  2055. if (length % 2 > 0) {
  2056. int lastnum = Integer.valueOf(input.substring(input.length() - 1)); // 取得字符串的最后一个数字
  2057. if (b[lastKey] == '0' && b[lastKey - 1] == '0') {//判断前面的为字符集B,此时不需要转换字符集
  2058. b[lastKey + 1] = codeB[lastnum];
  2059. } else {
  2060. b[lastKey + 1] = 0x7b;
  2061. b[lastKey + 2] = 0x42;
  2062. b[lastKey + 3] = codeB[lastnum];
  2063. }
  2064. }
  2065. // 得出条形码长度
  2066. int blength = getLastIndex(b);
  2067. int len = (blength - 15);
  2068. b[15] = (byte) (len);
  2069. String str = "";
  2070. str = new String(b);
  2071. laststr = str;
  2072. String Last_two = input.substring(input.length() - 2, input.length());
  2073. int Last_two_int = 0;
  2074. Last_two_int = Integer.valueOf(Last_two);
  2075. if (Last_two_int > 32) {
  2076. laststr = laststr.trim().substring(1);
  2077. }
  2078. } else { // 1-14位数字的条形码进来这个区间
  2079. b[15] = (byte) (length + 2);
  2080. laststr = new String(b);
  2081. laststr = laststr.substring(0, 18);
  2082. laststr += input;
  2083. }
  2084. return laststr;
  2085. }
  2086. // 获取数组中最后一个不是0x0的元素的下标
  2087. private static int getLastIndex(byte[] b) {
  2088. if (b == null || b.length == 0) {
  2089. return 0;
  2090. }
  2091. int blength = 0;
  2092. for (int i = b.length - 1; i >= 0; i--) {
  2093. if (b[i] != 0x0) {
  2094. blength = i;
  2095. break;
  2096. }
  2097. }
  2098. return blength;
  2099. }
  2100. public static void main(String[] args) {
  2101. String result = getDigitBarCode("!@#$%^&*()-=+_");
  2102. }
  2103. }