Browse Source

fixed 芯烨云打印小票功能

fushengqian 10 months ago
parent
commit
e4022bab5b

+ 59 - 0
fuint-application/src/main/java/com/fuint/common/enums/PrinterSettingEnum.java

@@ -0,0 +1,59 @@
+package com.fuint.common.enums;
+
+/**
+ * 云打印设置
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+public enum PrinterSettingEnum {
+
+    USER_NAME("userName", "用户名"),
+    USER_KEY("userKey", "开发者密钥"),
+    ENABLE("enable", "是否启用");
+
+    private String key;
+
+    private String value;
+
+    PrinterSettingEnum(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    // 普通方法,通过key获取value
+    public static String getValue(String k) {
+        for (PrinterSettingEnum c : PrinterSettingEnum.values()) {
+            if (c.getKey().equals(k)) {
+                return c.getValue();
+            }
+        }
+        return null;
+    }
+
+    // 普通方法,通过Value获取key
+    public static String getKey(String v) {
+        for (PrinterSettingEnum c : PrinterSettingEnum.values()) {
+            if (c.getValue() == v) {
+                return c.getKey();
+            }
+        }
+        return null;
+    }
+}

+ 1 - 0
fuint-application/src/main/java/com/fuint/common/enums/SettingTypeEnum.java

@@ -12,6 +12,7 @@ public enum SettingTypeEnum {
     USER("user", "会员配置"),
     ORDER("order", "交易配置"),
     SUB_MESSAGE("sub_message", "订阅消息"),
+    PRINTER("printer", "打印设置"),
     SMS_CONFIG("sms_config", "短信配置");
 
     private String key;

+ 2 - 1
fuint-application/src/main/java/com/fuint/common/service/SettingService.java

@@ -35,8 +35,9 @@ public interface SettingService extends IService<MtSetting> {
     /**
      * 获取配置列表
      *
-     * @param  type
+     * @param  type 类型
      * @throws BusinessCheckException
+     * @return
      */
     List<MtSetting> getSettingList(Integer merchantId, String type) throws BusinessCheckException;
 

+ 51 - 8
fuint-application/src/main/java/com/fuint/common/service/impl/PrinterServiceImpl.java

@@ -3,11 +3,15 @@ package com.fuint.common.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fuint.common.util.PrintUtil;
-import com.fuint.common.util.PrinterConfig;
+import com.fuint.common.enums.PrinterSettingEnum;
+import com.fuint.common.enums.SettingTypeEnum;
+import com.fuint.common.service.SettingService;
+import com.fuint.common.util.HashSignUtil;
+import com.fuint.common.util.PrinterUtil;
 import com.fuint.common.vo.printer.AddPrinterRequest;
 import com.fuint.common.vo.printer.AddPrinterRequestItem;
 import com.fuint.common.vo.printer.DelPrinterRequest;
+import com.fuint.common.vo.printer.RestRequest;
 import com.fuint.framework.annoation.OperationServiceLog;
 import com.fuint.framework.exception.BusinessCheckException;
 import com.fuint.framework.pagination.PaginationRequest;
@@ -16,6 +20,7 @@ import com.fuint.repository.model.MtPrinter;
 import com.fuint.common.service.PrinterService;
 import com.fuint.common.enums.StatusEnum;
 import com.fuint.repository.mapper.MtPrinterMapper;
+import com.fuint.repository.model.MtSetting;
 import com.fuint.utils.StringUtil;
 import com.github.pagehelper.PageHelper;
 import lombok.AllArgsConstructor;
@@ -44,6 +49,11 @@ public class PrinterServiceImpl extends ServiceImpl<MtPrinterMapper, MtPrinter>
 
     private MtPrinterMapper mtPrinterMapper;
 
+    /**
+     * 系统配置服务接口
+     * */
+    private SettingService settingService;
+
     /**
      * 分页查询数据列表
      *
@@ -100,6 +110,7 @@ public class PrinterServiceImpl extends ServiceImpl<MtPrinterMapper, MtPrinter>
      * @return
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     @OperationServiceLog(description = "新增打印机")
     public MtPrinter addPrinter(MtPrinter mtPrinter) throws BusinessCheckException {
         mtPrinter.setStatus(StatusEnum.ENABLED.getKey());
@@ -114,13 +125,13 @@ public class PrinterServiceImpl extends ServiceImpl<MtPrinterMapper, MtPrinter>
             // 添加云打印机
             if (mtPrinter.getSn() != null && mtPrinter.getName() != null) {
                 AddPrinterRequest restRequest = new AddPrinterRequest();
-                PrinterConfig.createRequestHeader(restRequest);
+                createRequestHeader(0, restRequest);
                 AddPrinterRequestItem item = new AddPrinterRequestItem();
                 item.setName(mtPrinter.getName());
                 item.setSn(mtPrinter.getSn());
-                AddPrinterRequestItem[] items = {item};
+                AddPrinterRequestItem[] items = { item };
                 restRequest.setItems(items);
-                PrintUtil.addPrinters(restRequest);
+                PrinterUtil.addPrinters(restRequest);
             }
             return mtPrinter;
         } else {
@@ -150,7 +161,7 @@ public class PrinterServiceImpl extends ServiceImpl<MtPrinterMapper, MtPrinter>
     @Override
     @Transactional(rollbackFor = Exception.class)
     @OperationServiceLog(description = "删除打印机")
-    public void deletePrinter(Integer id, String operator) {
+    public void deletePrinter(Integer id, String operator) throws BusinessCheckException {
         MtPrinter mtPrinter = queryPrinterById(id);
         if (null == mtPrinter) {
             return;
@@ -158,10 +169,10 @@ public class PrinterServiceImpl extends ServiceImpl<MtPrinterMapper, MtPrinter>
         // 删除云打印机
         if (StringUtil.isNotEmpty(mtPrinter.getSn())) {
             DelPrinterRequest restRequest = new DelPrinterRequest();
-            PrinterConfig.createRequestHeader(restRequest);
+            createRequestHeader(0, restRequest);
             String[] snList = { mtPrinter.getSn() };
             restRequest.setSnlist(snList);
-            PrintUtil.delPrinters(restRequest);
+            PrinterUtil.delPrinters(restRequest);
         }
         mtPrinter.setStatus(StatusEnum.DISABLE.getKey());
         mtPrinter.setUpdateTime(new Date());
@@ -231,4 +242,36 @@ public class PrinterServiceImpl extends ServiceImpl<MtPrinterMapper, MtPrinter>
         List<MtPrinter> dataList = mtPrinterMapper.selectList(lambdaQueryWrapper);
         return dataList;
     }
+
+    /**
+     * @param merchantId 商户ID
+     * @param request RestRequest
+     * @return
+     * */
+    public void createRequestHeader(Integer merchantId, RestRequest request) throws BusinessCheckException {
+        List<MtSetting> settings = settingService.getSettingList(merchantId, SettingTypeEnum.PRINTER.getKey());
+        if (settings != null && settings.size() > 0) {
+            String userName = "";
+            String userKey = "";
+            for (MtSetting mtSetting : settings) {
+                if (mtSetting.getName().equals(PrinterSettingEnum.USER_NAME.getKey())) {
+                    userName = mtSetting.getValue();
+                }
+                if (mtSetting.getName().equals(PrinterSettingEnum.USER_KEY.getKey())) {
+                    userKey = mtSetting.getValue();
+                }
+            }
+            if (StringUtil.isNotEmpty(userName) && StringUtil.isNotEmpty(userKey)) {
+                //*必填*:芯烨云平台注册用户名(开发者ID)
+                request.setUser(userName);
+                //*必填*:当前UNIX时间戳
+                request.setTimestamp(System.currentTimeMillis() + "");
+                //*必填*:对参数 user + UserKEY + timestamp 拼接后(+号表示连接符)进行SHA1加密得到签名,值为40位小写字符串,其中 UserKEY 为用户开发者密钥
+                request.setSign(HashSignUtil.sign(request.getUser() + userKey + request.getTimestamp()));
+
+                //debug=1返回非json格式的数据,仅测试时候使用
+                request.setDebug("0");
+            }
+        }
+    }
 }

+ 0 - 51
fuint-application/src/main/java/com/fuint/common/util/PrinterConfig.java

@@ -1,51 +0,0 @@
-package com.fuint.common.util;
-
-import com.fuint.common.vo.printer.RestRequest;
-
-/**
- * 云打印公共配置类
- *
- * Created by FSQ
- * CopyRight https://www.fuint.cn
- */
-public class PrinterConfig {
-
-    /**
-     * *必填*:开发者ID :芯烨云后台注册账号(即邮箱地址或开发者ID),开发者用户注册成功之后,登录芯烨云后台,在【个人中心=》账号信息】下可查看开发者ID
-     *
-     * 当前【xxxxxxxxxxxxxxx】只是样例,需修改再使用
-     */
-    public static final String USER_NAME = "xxxxxxxxxxxxxxx";
-
-    /**
-     * *必填*:开发者密钥 :芯烨云后台注册账号后自动生成的开发者密钥,开发者用户注册成功之后,登录芯烨云后台,在【个人中心=》账号信息】下可查看开发者密钥
-     *
-     * 当前【xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx】只是样例,需修改再使用
-     */
-    public static final String USER_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
-
-    /**
-     * *必填*:打印机设备编号,必须要在芯烨云管理后台的【打印管理->打印机管理】下添加打印机或调用API接口添加打印机,测试小票机和标签机的时候注意替换打印机编号
-     * 打印机设备编号获取方式:在打印机底部会有带PID或SN字样的二维码且PID或SN后面的一串字符即为打印机编号
-     *
-     * 当前【xxxxxxxxxxxxxxx】只是样例,需修改再使用,此处只是作为测试样例,所以打印机编号采用常量化,开发者可根据自己的实际需要进行变量化
-     */
-    public static final String OK_PRINTER_SN = "xxxxxxxxxxxxxxx";
-
-    /**
-     * 生成通用的请求头
-     *
-     * @param request 所有请求都必须传递的参数。
-     */
-    public static void createRequestHeader(RestRequest request) {
-        //*必填*:芯烨云平台注册用户名(开发者 ID)
-        request.setUser(USER_NAME);
-        //*必填*:当前UNIX时间戳
-        request.setTimestamp(System.currentTimeMillis() + "");
-        //*必填*:对参数 user + UserKEY + timestamp 拼接后(+号表示连接符)进行SHA1加密得到签名,值为40位小写字符串,其中 UserKEY 为用户开发者密钥
-        request.setSign(HashSignUtil.sign(request.getUser() + USER_KEY + request.getTimestamp()));
-
-        //debug=1返回非json格式的数据,仅测试时候使用
-        request.setDebug("0");
-    }
-}

+ 11 - 2
fuint-application/src/main/java/com/fuint/common/util/PrintUtil.java → fuint-application/src/main/java/com/fuint/common/util/PrinterUtil.java

@@ -3,6 +3,9 @@ package com.fuint.common.util;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.TypeReference;
 import com.fuint.common.vo.printer.*;
+import com.fuint.framework.exception.BusinessCheckException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import java.util.List;
 
 /**
@@ -11,20 +14,26 @@ import java.util.List;
  * Created by FSQ
  * CopyRight https://www.fuint.cn
  */
-public class PrintUtil {
+public class PrinterUtil {
 
     private static String BASE_URL = "https://open.xpyun.net/api/openapi";
+
+    private static final Logger logger = LoggerFactory.getLogger(PrinterUtil.class);
     
     /**
      * 1.批量添加打印机
      * @param restRequest
      * @return
      */
-    public static ObjectRestResponse<PrinterResult> addPrinters(AddPrinterRequest restRequest) {
+    public static ObjectRestResponse<PrinterResult> addPrinters(AddPrinterRequest restRequest) throws BusinessCheckException {
         String url = BASE_URL + "/xprinter/addPrinters";
         String jsonRequest = JSON.toJSONString(restRequest);
         String resp = HttpClientUtil.doPostJSON(url, jsonRequest);
         ObjectRestResponse<PrinterResult> result = JSON.parseObject(resp, new TypeReference<ObjectRestResponse<PrinterResult>>(){});
+        logger.info("添加打印机接口参数:{},返回:{}", JSON.toJSONString(restRequest), JSON.toJSONString(result));
+        if (result != null && result.getData().getSuccess().size() <= 0) {
+            throw new BusinessCheckException("添加打印机失败,请检查设备编号是否正确!");
+        }
         return result;
     }
 

+ 95 - 1
fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendPrinterController.java

@@ -1,17 +1,19 @@
 package com.fuint.module.backendApi.controller;
 
 import com.fuint.common.dto.AccountInfo;
+import com.fuint.common.enums.*;
 import com.fuint.common.service.PrinterService;
+import com.fuint.common.service.SettingService;
 import com.fuint.common.service.StoreService;
 import com.fuint.common.util.TokenUtil;
 import com.fuint.framework.web.BaseController;
 import com.fuint.framework.web.ResponseObject;
 import com.fuint.common.Constants;
-import com.fuint.common.enums.StatusEnum;
 import com.fuint.framework.pagination.PaginationRequest;
 import com.fuint.framework.pagination.PaginationResponse;
 import com.fuint.framework.exception.BusinessCheckException;
 import com.fuint.repository.model.MtPrinter;
+import com.fuint.repository.model.MtSetting;
 import com.fuint.repository.model.MtStore;
 import com.fuint.utils.StringUtil;
 import io.swagger.annotations.Api;
@@ -20,6 +22,7 @@ import lombok.AllArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -46,6 +49,11 @@ public class BackendPrinterController extends BaseController {
      */
     private StoreService storeService;
 
+    /**
+     * 配置服务接口
+     * */
+    private SettingService settingService;
+
     /**
      * 打印机列表查询
      *
@@ -214,4 +222,90 @@ public class BackendPrinterController extends BaseController {
 
         return getSuccessResult(result);
     }
+
+    /**
+     * 获取打印设置
+     *
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "获取打印设置")
+    @RequestMapping(value = "/setting", method = RequestMethod.GET)
+    @CrossOrigin
+    @PreAuthorize("@pms.hasPermission('printer:setting')")
+    public ResponseObject setting(HttpServletRequest request) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+        AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
+        if (accountInfo == null) {
+            return getFailureResult(1001, "请先登录");
+        }
+
+        List<MtSetting> settingList = settingService.getSettingList(accountInfo.getMerchantId(), SettingTypeEnum.PRINTER.getKey());
+
+        String userName = "";
+        String userKey = "";
+        String enable = "";
+        for (MtSetting setting : settingList) {
+            if (StringUtil.isNotEmpty(setting.getValue())) {
+                if (setting.getName().equals(PrinterSettingEnum.USER_NAME.getKey())) {
+                    userName = setting.getValue();
+                } else if (setting.getName().equals(PrinterSettingEnum.USER_KEY.getKey())) {
+                    userKey = setting.getValue();
+                } else if (setting.getName().equals(PrinterSettingEnum.ENABLE.getKey())) {
+                    enable = setting.getValue();
+                }
+            }
+        }
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("userName", userName);
+        result.put("userKey", userKey);
+        result.put("enable", enable);
+
+        return getSuccessResult(result);
+    }
+
+    /**
+     * 保存打印设置
+     *
+     * @param request HttpServletRequest对象
+     * @return
+     */
+    @ApiOperation(value = "保存打印设置")
+    @RequestMapping(value = "/saveSetting", method = RequestMethod.POST)
+    @CrossOrigin
+    @PreAuthorize("@pms.hasPermission('printer:setting')")
+    public ResponseObject saveSetting(HttpServletRequest request, @RequestBody Map<String, Object> param) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+        String userName = param.get("userName") != null ? param.get("userName").toString() : null;
+        String userKey = param.get("userKey") != null ? param.get("userKey").toString() : null;
+        String enable = param.get("enable") != null ? param.get("enable").toString() : null;
+
+        AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
+        if (accountInfo == null) {
+            return getFailureResult(1001, "请先登录");
+        }
+
+        PrinterSettingEnum[] settingList = PrinterSettingEnum.values();
+        for (PrinterSettingEnum setting : settingList) {
+            MtSetting mtSetting = new MtSetting();
+            mtSetting.setType(SettingTypeEnum.PRINTER.getKey());
+            mtSetting.setName(setting.getKey());
+            if (setting.getKey().equals(PrinterSettingEnum.USER_NAME.getKey())) {
+                mtSetting.setValue(userName);
+            } else if (setting.getKey().equals(PrinterSettingEnum.USER_KEY.getKey())) {
+                mtSetting.setValue(userKey);
+            } else if (setting.getKey().equals(PrinterSettingEnum.ENABLE.getKey())) {
+                mtSetting.setValue(enable);
+            }
+            mtSetting.setDescription(setting.getValue());
+            mtSetting.setOperator(accountInfo.getAccountName());
+            mtSetting.setUpdateTime(new Date());
+            mtSetting.setMerchantId(accountInfo.getMerchantId());
+            mtSetting.setStoreId(0);
+            settingService.saveSetting(mtSetting);
+        }
+
+        return getSuccessResult(true);
+    }
 }