PrinterServiceImpl.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. package com.fuint.common.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.fuint.common.dto.OrderGoodsDto;
  6. import com.fuint.common.dto.UserOrderDto;
  7. import com.fuint.common.enums.PrinterSettingEnum;
  8. import com.fuint.common.enums.SettingTypeEnum;
  9. import com.fuint.common.enums.YesOrNoEnum;
  10. import com.fuint.common.service.SettingService;
  11. import com.fuint.common.util.HashSignUtil;
  12. import com.fuint.common.util.NoteFormatter;
  13. import com.fuint.common.util.PrinterUtil;
  14. import com.fuint.common.vo.printer.*;
  15. import com.fuint.framework.annoation.OperationServiceLog;
  16. import com.fuint.framework.exception.BusinessCheckException;
  17. import com.fuint.framework.pagination.PaginationRequest;
  18. import com.fuint.framework.pagination.PaginationResponse;
  19. import com.fuint.repository.model.MtPrinter;
  20. import com.fuint.common.service.PrinterService;
  21. import com.fuint.common.enums.StatusEnum;
  22. import com.fuint.repository.mapper.MtPrinterMapper;
  23. import com.fuint.repository.model.MtSetting;
  24. import com.fuint.repository.model.MtStore;
  25. import com.fuint.utils.StringUtil;
  26. import com.github.pagehelper.PageHelper;
  27. import lombok.AllArgsConstructor;
  28. import org.apache.commons.lang.StringUtils;
  29. import org.slf4j.Logger;
  30. import org.slf4j.LoggerFactory;
  31. import com.github.pagehelper.Page;
  32. import org.springframework.beans.BeanUtils;
  33. import org.springframework.data.domain.PageImpl;
  34. import org.springframework.data.domain.PageRequest;
  35. import org.springframework.stereotype.Service;
  36. import org.springframework.transaction.annotation.Transactional;
  37. import java.util.*;
  38. /**
  39. * 打印机服务接口
  40. *
  41. * Created by FSQ
  42. * CopyRight https://www.fuint.cn
  43. */
  44. @Service
  45. @AllArgsConstructor
  46. public class PrinterServiceImpl extends ServiceImpl<MtPrinterMapper, MtPrinter> implements PrinterService {
  47. private static final Logger logger = LoggerFactory.getLogger(PrinterServiceImpl.class);
  48. private MtPrinterMapper mtPrinterMapper;
  49. /**
  50. * 系统配置服务接口
  51. * */
  52. private SettingService settingService;
  53. /**
  54. * 分页查询数据列表
  55. *
  56. * @param paginationRequest
  57. * @return
  58. */
  59. @Override
  60. public PaginationResponse<MtPrinter> queryPrinterListByPagination(PaginationRequest paginationRequest) {
  61. Page<MtPrinter> pageHelper = PageHelper.startPage(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
  62. LambdaQueryWrapper<MtPrinter> lambdaQueryWrapper = Wrappers.lambdaQuery();
  63. lambdaQueryWrapper.ne(MtPrinter::getStatus, StatusEnum.DISABLE.getKey());
  64. String status = paginationRequest.getSearchParams().get("status") == null ? "" : paginationRequest.getSearchParams().get("status").toString();
  65. if (StringUtils.isNotBlank(status)) {
  66. lambdaQueryWrapper.eq(MtPrinter::getStatus, status);
  67. }
  68. String merchantId = paginationRequest.getSearchParams().get("merchantId") == null ? "" : paginationRequest.getSearchParams().get("merchantId").toString();
  69. if (StringUtils.isNotBlank(merchantId)) {
  70. lambdaQueryWrapper.eq(MtPrinter::getMerchantId, merchantId);
  71. }
  72. String storeId = paginationRequest.getSearchParams().get("storeId") == null ? "" : paginationRequest.getSearchParams().get("storeId").toString();
  73. if (StringUtils.isNotBlank(storeId)) {
  74. lambdaQueryWrapper.and(wq -> wq
  75. .eq(MtPrinter::getStoreId, 0)
  76. .or()
  77. .eq(MtPrinter::getStoreId, storeId));
  78. }
  79. String sn = paginationRequest.getSearchParams().get("sn") == null ? "" : paginationRequest.getSearchParams().get("sn").toString();
  80. if (StringUtils.isNotBlank(sn)) {
  81. lambdaQueryWrapper.eq(MtPrinter::getSn, sn);
  82. }
  83. String name = paginationRequest.getSearchParams().get("name") == null ? "" : paginationRequest.getSearchParams().get("name").toString();
  84. if (StringUtils.isNotBlank(name)) {
  85. lambdaQueryWrapper.eq(MtPrinter::getName, name);
  86. }
  87. String autoPrint = paginationRequest.getSearchParams().get("autoPrint") == null ? "" : paginationRequest.getSearchParams().get("autoPrint").toString();
  88. if (StringUtils.isNotBlank(autoPrint)) {
  89. lambdaQueryWrapper.eq(MtPrinter::getAutoPrint, autoPrint);
  90. }
  91. lambdaQueryWrapper.orderByAsc(MtPrinter::getId);
  92. List<MtPrinter> dataList = mtPrinterMapper.selectList(lambdaQueryWrapper);
  93. PageRequest pageRequest = PageRequest.of(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
  94. PageImpl pageImpl = new PageImpl(dataList, pageRequest, pageHelper.getTotal());
  95. PaginationResponse<MtPrinter> paginationResponse = new PaginationResponse(pageImpl, MtPrinter.class);
  96. paginationResponse.setTotalPages(pageHelper.getPages());
  97. paginationResponse.setTotalElements(pageHelper.getTotal());
  98. paginationResponse.setContent(dataList);
  99. return paginationResponse;
  100. }
  101. /**
  102. * 添加打印机
  103. *
  104. * @param mtPrinter 打印机信息
  105. * @return
  106. */
  107. @Override
  108. @Transactional(rollbackFor = Exception.class)
  109. @OperationServiceLog(description = "新增打印机")
  110. public MtPrinter addPrinter(MtPrinter mtPrinter) throws BusinessCheckException {
  111. mtPrinter.setStatus(StatusEnum.ENABLED.getKey());
  112. mtPrinter.setUpdateTime(new Date());
  113. mtPrinter.setCreateTime(new Date());
  114. if (mtPrinter.getMerchantId() == null || mtPrinter.getMerchantId() < 1) {
  115. throw new BusinessCheckException("平台方帐号无法执行该操作,请使用商户帐号操作");
  116. }
  117. Integer printerId = mtPrinterMapper.insert(mtPrinter);
  118. if (printerId > 0) {
  119. // 添加云打印机
  120. if (mtPrinter.getSn() != null && mtPrinter.getName() != null) {
  121. AddPrinterRequest restRequest = new AddPrinterRequest();
  122. createRequestHeader(mtPrinter.getMerchantId(), restRequest);
  123. AddPrinterRequestItem item = new AddPrinterRequestItem();
  124. item.setName(mtPrinter.getName());
  125. item.setSn(mtPrinter.getSn());
  126. AddPrinterRequestItem[] items = { item };
  127. restRequest.setItems(items);
  128. PrinterUtil.addPrinters(restRequest);
  129. }
  130. return mtPrinter;
  131. } else {
  132. logger.error("新增打印机数据失败.");
  133. throw new BusinessCheckException("新增打印机数据失败");
  134. }
  135. }
  136. /**
  137. * 打印订单
  138. *
  139. * @param orderInfo 订单信息
  140. * @return
  141. * */
  142. @Override
  143. public Boolean printOrder(UserOrderDto orderInfo) throws Exception {
  144. PrintRequest printRequest = new PrintRequest();
  145. createRequestHeader(orderInfo.getMerchantId(), printRequest);
  146. if (orderInfo.getStoreInfo() == null) {
  147. return false;
  148. }
  149. // 获取打印机列表
  150. Map<String, Object> params = new HashMap<>();
  151. params.put("storeId", orderInfo.getStoreInfo().getId());
  152. params.put("status", StatusEnum.ENABLED.getKey());
  153. params.put("autoPrint", YesOrNoEnum.YES.getKey());
  154. List<MtPrinter> printers = queryPrinterListByParams(params);
  155. if (printers == null || printers.size() < 1) {
  156. return false;
  157. }
  158. MtStore storeInfo = orderInfo.getStoreInfo();
  159. for (MtPrinter mtPrinter : printers) {
  160. printRequest.setSn(mtPrinter.getSn());
  161. StringBuilder printContent = new StringBuilder();
  162. printContent.append("<C>").append("<B>" + storeInfo.getName() + "</B>").append("<BR></C>");
  163. printContent.append("<BR>");
  164. printContent.append("品名").append(org.apache.commons.lang3.StringUtils.repeat(" ", 16))
  165. .append("数量").append(org.apache.commons.lang3.StringUtils.repeat(" ", 2))
  166. .append("单价").append(org.apache.commons.lang3.StringUtils.repeat(" ", 2))
  167. .append("<BR>");
  168. // 分割线
  169. printContent.append(org.apache.commons.lang3.StringUtils.repeat("-", 32)).append("<BR>");
  170. // 商品列表
  171. if (orderInfo.getGoods() != null && orderInfo.getGoods().size() > 0) {
  172. for (OrderGoodsDto goodsDto : orderInfo.getGoods()) {
  173. printContent.append(NoteFormatter.formatPrintOrderItemForNewLine80(goodsDto.getName(), goodsDto.getNum(), Double.parseDouble(goodsDto.getPrice())));
  174. }
  175. }
  176. // 分割线
  177. printContent.append(org.apache.commons.lang3.StringUtils.repeat("-", 32)).append("<BR>");
  178. printContent.append("<R>").append("合计:").append(orderInfo.getPayAmount()).append("元").append("<BR></R>");
  179. printContent.append("<BR>");
  180. printContent.append("<L>")
  181. .append("店铺地址:").append(orderInfo.getStoreInfo().getAddress()).append("<BR>")
  182. .append("联系电话:").append(orderInfo.getStoreInfo().getPhone()).append("<BR>")
  183. .append("下单时间:").append(orderInfo.getCreateTime()).append("<BR>")
  184. .append("订单备注:").append(orderInfo.getRemark()).append("<BR>");
  185. printContent.append("<C>")
  186. .append("<QR>https://www.fuint.cn</QR>")
  187. .append("</C>");
  188. printRequest.setContent(printContent.toString());
  189. printRequest.setCopies(1);
  190. printRequest.setVoice(2);
  191. printRequest.setMode(0);
  192. PrinterUtil.print(printRequest);
  193. }
  194. return true;
  195. }
  196. /**
  197. * 根据ID获打印机取息
  198. *
  199. * @param id 打印机ID
  200. * @return
  201. */
  202. @Override
  203. public MtPrinter queryPrinterById(Integer id) {
  204. return mtPrinterMapper.selectById(id);
  205. }
  206. /**
  207. * 根据ID删除打印机
  208. *
  209. * @param id 打印机ID
  210. * @param operator 操作人
  211. * @return
  212. */
  213. @Override
  214. @Transactional(rollbackFor = Exception.class)
  215. @OperationServiceLog(description = "删除打印机")
  216. public void deletePrinter(Integer id, String operator) throws BusinessCheckException {
  217. MtPrinter mtPrinter = queryPrinterById(id);
  218. if (null == mtPrinter) {
  219. return;
  220. }
  221. // 删除云打印机
  222. if (StringUtil.isNotEmpty(mtPrinter.getSn())) {
  223. DelPrinterRequest restRequest = new DelPrinterRequest();
  224. createRequestHeader(mtPrinter.getMerchantId(), restRequest);
  225. String[] snList = { mtPrinter.getSn() };
  226. restRequest.setSnlist(snList);
  227. PrinterUtil.delPrinters(restRequest);
  228. }
  229. mtPrinter.setStatus(StatusEnum.DISABLE.getKey());
  230. mtPrinter.setUpdateTime(new Date());
  231. mtPrinterMapper.updateById(mtPrinter);
  232. }
  233. /**
  234. * 修改打印机数据
  235. *
  236. * @param mtPrinter 打印机参数
  237. * @throws BusinessCheckException
  238. * @return
  239. */
  240. @Override
  241. @Transactional(rollbackFor = Exception.class)
  242. @OperationServiceLog(description = "更新打印机")
  243. public MtPrinter updatePrinter(MtPrinter mtPrinter) throws BusinessCheckException {
  244. MtPrinter printer = queryPrinterById(mtPrinter.getId());
  245. BeanUtils.copyProperties(mtPrinter, printer);
  246. if (mtPrinter == null) {
  247. throw new BusinessCheckException("该打印机状态异常");
  248. }
  249. if (printer.getMerchantId() == null || printer.getMerchantId() < 1) {
  250. throw new BusinessCheckException("平台方帐号无法执行该操作,请使用商户帐号操作");
  251. }
  252. if (mtPrinter.getSn() != null && mtPrinter.getName() != null && !mtPrinter.getStatus().equals(StatusEnum.DISABLE.getKey())) {
  253. UpdPrinterRequest restRequest = new UpdPrinterRequest();
  254. createRequestHeader(mtPrinter.getMerchantId(), restRequest);
  255. restRequest.setName(mtPrinter.getName());
  256. restRequest.setSn(mtPrinter.getSn());
  257. PrinterUtil.updPrinter(restRequest);
  258. }
  259. if (mtPrinter.getStatus().equals(StatusEnum.DISABLE.getKey())) {
  260. deletePrinter(mtPrinter.getId(), mtPrinter.getOperator());
  261. }
  262. mtPrinter.setUpdateTime(new Date());
  263. mtPrinterMapper.updateById(printer);
  264. return printer;
  265. }
  266. /**
  267. * 根据条件搜索打印机
  268. *
  269. * @param params 查询参数
  270. * @throws BusinessCheckException
  271. * @return
  272. * */
  273. @Override
  274. public List<MtPrinter> queryPrinterListByParams(Map<String, Object> params) {
  275. String status = params.get("status") == null ? StatusEnum.ENABLED.getKey(): params.get("status").toString();
  276. String storeId = params.get("storeId") == null ? "" : params.get("storeId").toString();
  277. String merchantId = params.get("merchantId") == null ? "" : params.get("merchantId").toString();
  278. String sn = params.get("sn") == null ? "" : params.get("sn").toString();
  279. String name = params.get("name") == null ? "" : params.get("name").toString();
  280. String autoPrint = params.get("autoPrint") == null ? "" : params.get("autoPrint").toString();
  281. LambdaQueryWrapper<MtPrinter> lambdaQueryWrapper = Wrappers.lambdaQuery();
  282. if (StringUtils.isNotBlank(status)) {
  283. lambdaQueryWrapper.eq(MtPrinter::getStatus, status);
  284. }
  285. if (StringUtils.isNotBlank(merchantId)) {
  286. lambdaQueryWrapper.eq(MtPrinter::getMerchantId, merchantId);
  287. }
  288. if (StringUtils.isNotBlank(sn)) {
  289. lambdaQueryWrapper.eq(MtPrinter::getSn, sn);
  290. }
  291. if (StringUtils.isNotBlank(name)) {
  292. lambdaQueryWrapper.eq(MtPrinter::getName, name);
  293. }
  294. if (StringUtils.isNotBlank(storeId)) {
  295. lambdaQueryWrapper.eq(MtPrinter::getStoreId, storeId);
  296. }
  297. if (StringUtils.isNotBlank(autoPrint)) {
  298. lambdaQueryWrapper.eq(MtPrinter::getAutoPrint, autoPrint);
  299. }
  300. lambdaQueryWrapper.orderByAsc(MtPrinter::getId);
  301. return mtPrinterMapper.selectList(lambdaQueryWrapper);
  302. }
  303. /**
  304. * 创建接口请求header
  305. *
  306. * @param merchantId 商户ID
  307. * @param request RestRequest
  308. * @return
  309. * */
  310. public void createRequestHeader(Integer merchantId, RestRequest request) throws BusinessCheckException {
  311. List<MtSetting> settings = settingService.getSettingList(merchantId, SettingTypeEnum.PRINTER.getKey());
  312. if (settings != null && settings.size() > 0) {
  313. String userName = "";
  314. String userKey = "";
  315. for (MtSetting mtSetting : settings) {
  316. if (mtSetting.getName().equals(PrinterSettingEnum.USER_NAME.getKey())) {
  317. userName = mtSetting.getValue();
  318. }
  319. if (mtSetting.getName().equals(PrinterSettingEnum.USER_KEY.getKey())) {
  320. userKey = mtSetting.getValue();
  321. }
  322. }
  323. if (StringUtil.isNotEmpty(userName) && StringUtil.isNotEmpty(userKey)) {
  324. request.setUser(userName);
  325. request.setTimestamp(System.currentTimeMillis() + "");
  326. request.setSign(HashSignUtil.sign(request.getUser() + userKey + request.getTimestamp()));
  327. request.setDebug("0");
  328. } else {
  329. throw new BusinessCheckException("请先设置芯烨云打印账号!");
  330. }
  331. } else {
  332. throw new BusinessCheckException("请先设置芯烨云打印账号!");
  333. }
  334. }
  335. }