浏览代码

feat:"增加税费开关和税率,采用MQTT协议"

soobin 4 月之前
父节点
当前提交
a13d145221
共有 26 个文件被更改,包括 738 次插入105 次删除
  1. 4 2
      src/main/java/com/szwl/config/MqttConfig.java
  2. 15 1
      src/main/java/com/szwl/constant/JoinpayConstant.java
  3. 47 0
      src/main/java/com/szwl/constant/OperationType.java
  4. 8 0
      src/main/java/com/szwl/controller/CallbackController.java
  5. 21 0
      src/main/java/com/szwl/controller/MessageLogController.java
  6. 1 1
      src/main/java/com/szwl/controller/MqttController.java
  7. 27 0
      src/main/java/com/szwl/controller/TEquipmentController.java
  8. 38 83
      src/main/java/com/szwl/controller/TJoinpayMchController.java
  9. 1 1
      src/main/java/com/szwl/controller/TSugarDoController.java
  10. 84 0
      src/main/java/com/szwl/handle/ResponseMessageHandler.java
  11. 17 0
      src/main/java/com/szwl/handle/response/ResponseProcessor.java
  12. 54 0
      src/main/java/com/szwl/handle/response/UpdateTaxRateProcessor.java
  13. 53 0
      src/main/java/com/szwl/handle/response/UpdateTaxStatusProcessor.java
  14. 1 0
      src/main/java/com/szwl/manager/MqttHandlerManager.java
  15. 16 0
      src/main/java/com/szwl/mapper/MessageLogMapper.java
  16. 25 0
      src/main/java/com/szwl/mapper/xml/MessageLogMapper.xml
  17. 62 0
      src/main/java/com/szwl/model/entity/MessageLog.java
  18. 11 0
      src/main/java/com/szwl/model/utils/Base64Util.java
  19. 16 0
      src/main/java/com/szwl/service/MessageLogService.java
  20. 12 0
      src/main/java/com/szwl/service/MqttService.java
  21. 9 0
      src/main/java/com/szwl/service/TEquipmentService.java
  22. 8 0
      src/main/java/com/szwl/service/TJoinpayMchService.java
  23. 20 0
      src/main/java/com/szwl/service/impl/MessageLogServiceImpl.java
  24. 11 3
      src/main/java/com/szwl/service/mqtt/MqttService.java
  25. 40 8
      src/main/java/com/szwl/service/impl/TEquipmentServiceImpl.java
  26. 137 6
      src/main/java/com/szwl/service/impl/TJoinpayMchServiceImpl.java

+ 4 - 2
src/main/java/com/szwl/config/MqttConfig.java

@@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
@@ -56,6 +57,7 @@ public class MqttConfig {
     }
 
     @Bean
+    @Lazy
     public MqttClient mqttClient() throws MqttException, UnknownHostException {
         serverAddress = InetAddress.getLocalHost().getHostAddress();
         MemoryPersistence persistence = new MemoryPersistence();
@@ -115,7 +117,7 @@ public class MqttConfig {
             // 建立连接
             mqttClient.connect(options);
             // 订阅主题
-            if (serverAddress.equals("10.0.0.153")) {
+//            if (serverAddress.equals("10.0.0.153")) {
                 mqttTopicsService.list().forEach(topic -> {
                     try {
                         mqttClient.subscribe(topic.getTopic(), topic.getQos());
@@ -123,7 +125,7 @@ public class MqttConfig {
                         throw new RuntimeException(e);
                     }
                 });
-            }
+//            }
             log.info("MQTT客户端已连接,客户端ID:{}", clientId);
         } catch (MqttException e) {
             log.info("MQTT客户端连接失败");

+ 15 - 1
src/main/java/com/szwl/constant/JoinpayConstant.java

@@ -65,6 +65,11 @@ public class JoinpayConstant {
     public final static String OLD_Notify_Refund_Url = "https://sz.sunzee.com.cn/PAY-SERVER/tOrder/oldNotifyRefund";
 //    public final static String OLD_Notify_Refund_Url = "http://szwltest.sunzee.com.cn:49002/PAY-SERVER/tOrder/oldNotifyRefund";
 
+    /**
+     * 入网回调接口
+     */
+    public final static String MERCHANT_URL = "https://sz.sunzee.com.cn/SZWL-SERVER/callback/joinPayMerchant";
+
 
     /**
      * 支付回调支付状态代码
@@ -87,6 +92,8 @@ public class JoinpayConstant {
     public final static Integer alt_merchant_type1 = 10;
     public final static Integer alt_merchant_type2 = 11;
     public final static Integer alt_merchant_type3 = 12;
+    public final static Integer ALT_MERCHANT_TYPE_PERSON = 10;
+    public final static Integer ALT_MERCHANT_TYPE_ENTERPRISE= 12;
 
     /**
      * >>>>>>>>>>>>> 分账方结算方式 >>>>>>>>>>>>>
@@ -96,6 +103,8 @@ public class JoinpayConstant {
     public final static Integer sett_mode1 = 1;
     public final static Integer sett_mode2 = 2;
 
+    public final static Integer SETT_MODE_ONE = 1;
+    public final static Integer SETT_MODE_TWO = 2;
 
     /**
      * >>>>>>>>>>>>> 结算周期类型 >>>>>>>>>>>>>
@@ -105,7 +114,9 @@ public class JoinpayConstant {
     public final static Integer sett_date_type2 = 2;
     public final static Integer sett_date_type3 = 3;
 
-
+    public final static Integer SETT_DATE_WORK = 1;
+    public final static Integer SETT_DATE_DAY = 2;
+    public final static Integer SETT_DATE_MONTH = 3;
     /**
      * >>>>>>>>>>>>> 账户类型 >>>>>>>>>>>>>
      * 1 借记卡,4 对公账户
@@ -113,6 +124,8 @@ public class JoinpayConstant {
     public final static Integer bank_account_type1 = 1;
     public final static Integer bank_account_type4 = 4;
 
+    public final static Integer BANK_ACCOUNT_TYPE_ONE = 1;
+    public final static Integer BANK_ACCOUNT_TYPE_FOUR = 4;
 
     /**
      *
@@ -147,6 +160,7 @@ public class JoinpayConstant {
     public static final String order_status5 = "P3001";
     public static final String order_status6 = "P3002";
     public static final String order_status7 = "P3003";
+    public static final String ORDER_STATSUS_P3004 = "P3004";
 
     static {
         order_status.put(order_status1, "待处理中(受理中)");

+ 47 - 0
src/main/java/com/szwl/constant/OperationType.java

@@ -0,0 +1,47 @@
+package com.szwl.constant;
+
+import com.baomidou.mybatisplus.annotation.IEnum;
+
+/**
+ * 远程操作枚举类
+ */
+public enum OperationType implements IEnum<String> {
+
+    UPDATE_TAX_STATUS("updateTaxStatus","修改税费开关"),
+    UPDATE_TAX_RATE("updateTaxRate","修改税率"),
+    UPDATE("UPDATE","修改"),
+    DELETE("DELETE","删除"),
+    LOGIN("LOGIN","登录"),
+    OFFLINE("OFFLINE","脱机"),
+    PAY_ORDER("PAY_ORDER", "支付订单");
+
+    private String code;
+
+    private String desc;
+
+    OperationType(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    @Override
+    public String getValue() {
+        return this.code;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+}

+ 8 - 0
src/main/java/com/szwl/controller/CallbackController.java

@@ -91,6 +91,7 @@ public class CallbackController {
                 // 业务处理成功
                 if (HuifuConstant.TRANS_STAT_S.equals(transStatus)) {
                     withdrawalRecord.setStatus(1);
+                    withdrawalRecord.setArrivalDate(new Date());
                 } else if (HuifuConstant.TRANS_STAT_F.equals(transStatus)){
                     withdrawalRecord.setStatus(2);
                     withdrawalRecord.setResultMsg(data.getString("sub_resp_desc"));
@@ -109,4 +110,11 @@ public class CallbackController {
         }
         return "";
     }
+
+    @ApiOperation("汇聚商户入网回调")
+    @PostMapping("/joinPayMerchant")
+    public Object joinPayMerchant(@RequestBody Map<String, Object> rawData) {
+        return "";
+    }
+
 }

+ 21 - 0
src/main/java/com/szwl/controller/MessageLogController.java

@@ -0,0 +1,21 @@
+package com.szwl.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 消息记录表 前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2025-04-16
+ */
+@RestController
+@RequestMapping("/messageLog")
+public class MessageLogController {
+
+}
+

+ 1 - 1
src/main/java/com/szwl/controller/MqttController.java

@@ -13,8 +13,8 @@ import com.szwl.model.entity.MqttMsg;
 import com.szwl.model.entity.MqttTopics;
 import com.szwl.model.param.MqttMsgParam;
 import com.szwl.service.MqttMsgService;
+import com.szwl.service.MqttService;
 import com.szwl.service.MqttTopicsService;
-import com.szwl.service.mqtt.MqttService;
 import com.szwl.util.MqttUtils;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang.StringUtils;

+ 27 - 0
src/main/java/com/szwl/controller/TEquipmentController.java

@@ -22,6 +22,7 @@ import com.qiniu.util.Auth;
 import com.szwl.annotation.Audit;
 import com.szwl.constant.AuditEnum;
 import com.szwl.constant.ConfigConsts;
+import com.szwl.constant.OperationType;
 import com.szwl.constant.ResponseCodesEnum;
 import com.szwl.exception.BizException;
 import com.szwl.manager.TokenManager;
@@ -1876,6 +1877,32 @@ public class TEquipmentController {
         }
     }
 
+    @ApiOperation("修改税费开关状态")
+    @PostMapping("/updateTaxSwitch")
+    public ResponseModel<?> updateTaxSwitch(@RequestBody TEquipmentDesc equipmentDesc) {
+        TEquipmentDesc desc = equipmentDescService.getById(equipmentDesc.getEquipmentId());
+        if (desc != null) {
+            TEquipment equipment = tEquipmentService.getById(equipmentDesc.getEquipmentId());
+            String status = equipmentDesc.getTaxStatus() ? "1" : "0";
+            String message = PushUtils.buildJson(OperationType.UPDATE_TAX_STATUS.getCode(), status).toString();
+            tEquipmentService.sendRemoteMessage(equipment.getClientId(), OperationType.UPDATE_TAX_STATUS, message);
+        }
+        return R.ok();
+    }
+
+    @ApiOperation("修改税率")
+    @PostMapping("/updateTaxRate")
+    public ResponseModel<?> updateTaxRate(@RequestBody TEquipmentDesc equipmentDesc) {
+        TEquipmentDesc desc = equipmentDescService.getById(equipmentDesc.getEquipmentId());
+        if (desc != null) {
+            TEquipment equipment = tEquipmentService.getById(equipmentDesc.getEquipmentId());
+            String message = PushUtils.buildJson(OperationType.UPDATE_TAX_RATE.getCode(), equipmentDesc.getTaxRate().toString()).toString();
+            tEquipmentService.sendRemoteMessage(equipment.getClientId(), OperationType.UPDATE_TAX_RATE, message);
+        }
+        return R.ok();
+    }
+
+
     @ApiOperation("导出设备列表")
     @GetMapping("/exportEquipment")
     public void exportEquipment(HttpServletResponse response) {

+ 38 - 83
src/main/java/com/szwl/controller/TJoinpayMchController.java

@@ -3,6 +3,7 @@ package com.szwl.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.constant.JoinpayConstant;
 import com.szwl.constant.ResponseCodesEnum;
 import com.szwl.exception.BizException;
 import com.szwl.manager.TokenManager;
@@ -12,10 +13,13 @@ import com.szwl.model.bo.UserDetailBO;
 import com.szwl.model.entity.TAdmin;
 import com.szwl.model.entity.TJoinpayMch;
 import com.szwl.model.entity.TJoinpayMchCheck;
+import com.szwl.model.entity.UserLicense;
 import com.szwl.model.param.mchParam;
+import com.szwl.model.utils.Base64Util;
 import com.szwl.service.TAdminService;
 import com.szwl.service.TJoinpayMchCheckService;
 import com.szwl.service.TJoinpayMchService;
+import com.szwl.service.UserLicenseService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang.StringUtils;
@@ -50,6 +54,9 @@ public class TJoinpayMchController {
     @Autowired
     TokenManager tokenManager;
 
+    @Autowired
+    private UserLicenseService userLicenseService;
+
     @ApiOperation(value = "查找汇聚收款账户信息")
     @PostMapping("/getOne")
     public ResponseModel<TJoinpayMch> getOne() {
@@ -201,23 +208,32 @@ public class TJoinpayMchController {
             if (StringUtils.isEmpty(tJoinpayMch.getCardPositive()) || StringUtils.isEmpty(tJoinpayMch.getCardNegative())) {
                 return R.fail("图片不能为空");
             }
-//            String  cardNegative = replit(tJoinpayMch.getCardNegative());
-//            String cardPositive = replit(tJoinpayMch.getCardPositive());
             String str = tJoinpayMchService.sendCard(mch, tJoinpayMch.getCardPositive(), tJoinpayMch.getCardNegative(), tJoinpayMch.getStatus());
             return R.ok(str);
         }
         return R.ok();
     }
 
-    private String replit(String cardNegative) {
-        Pattern p = Pattern.compile("\\s*|\t|\r|\n");
-               /*\n 回车(\u000a)
-                \t 水平制表符(\u0009)
-             \s 空格(\u0008)
-            \r 换行(\u000d)*/
-        Matcher m = p.matcher(cardNegative);
-        cardNegative = m.replaceAll("");
-        return cardNegative;
+    @ApiOperation("上传照片审核")
+    @PostMapping("/uploadPhotos")
+    public ResponseModel<?> uploadPhotos(@RequestBody TJoinpayMch tJoinpayMch) {
+        UserLicense userLicense = userLicenseService.getById(tJoinpayMch.getAdminId());
+        TJoinpayMch mch = tJoinpayMchService.getById(tJoinpayMch.getId());
+        String cardNegative = Base64Util.imgToBase64(userLicense.getIdCardFront());
+        String cardPositive = Base64Util.imgToBase64(userLicense.getIdCardBack());
+        if (tJoinpayMch.getType().equals("0")) {
+            //对公
+            String tradeLicence = Base64Util.imgToBase64(userLicense.getBusinessLicense());
+            String openAccountLicence = Base64Util.imgToBase64(userLicense.getAccountLicense());
+            String str = tJoinpayMchService.sendCardBusiness(mch, cardPositive, cardNegative, tradeLicence, openAccountLicence, tJoinpayMch.getStatus());
+            return R.ok(str);
+        }
+        if (tJoinpayMch.getType().equals("1")) {
+            //个人
+            String str = tJoinpayMchService.sendCard(mch, cardPositive, cardNegative, tJoinpayMch.getStatus());
+            return R.ok(str);
+        }
+        return R.ok();
     }
 
     @ApiOperation(value = "获取提现信息")
@@ -245,78 +261,6 @@ public class TJoinpayMchController {
 
     }
 
-    private ResponseModel<?> createCheckMch(TJoinpayMch mch, TJoinpayMch tJoinpayMch) {
-        //检查是否有更新
-        int a = 0;
-        if (!mch.getBankAccountNo().equals(tJoinpayMch.getBankAccountNo())) {
-            a++;
-        }
-        if (!mch.getBusiContactName().equals(tJoinpayMch.getBusiContactName())) {
-            a++;
-        }
-        if (!mch.getIdCardNo().equals(tJoinpayMch.getIdCardNo())) {
-            a++;
-        }
-        if (mch.getSettMode() != null && tJoinpayMch.getSettMode() != null & mch.getSettMode() != tJoinpayMch.getSettMode()) {
-            a++;
-        }
-        if (mch.getAltMerchantType() != tJoinpayMch.getAltMerchantType()) {
-            a++;
-        }
-        if (a <= 0) {
-            return R.fail("重复提交!");
-        } else {
-            LambdaQueryWrapper<TJoinpayMchCheck> query = Wrappers.lambdaQuery();
-            query.eq(TJoinpayMchCheck::getType, "0");
-            query.eq(TJoinpayMchCheck::getAdminId, tJoinpayMch.getAdminId());
-            List<TJoinpayMchCheck> list = tJoinpayMchCheckService.list(query);
-            if (list.size() > 0) {
-                return R.fail("重复提交!");
-            }
-            TJoinpayMchCheck joinpayMchCheck = new TJoinpayMchCheck();
-            joinpayMchCheck.setCreateDate(new Date());
-            joinpayMchCheck.setModifyDate(new Date());
-            joinpayMchCheck.setAdminId(tJoinpayMch.getAdminId());
-            joinpayMchCheck.setAltMainBalance(tJoinpayMch.getAltMainBalance());
-            joinpayMchCheck.setAltGuarBalance(tJoinpayMch.getAltGuarBalance());
-            joinpayMchCheck.setAltAvilBalance(tJoinpayMch.getAltAvilBalance());
-            joinpayMchCheck.setAltMchNo(tJoinpayMch.getAltMchNo());
-            joinpayMchCheck.setAltMchName(tJoinpayMch.getAltMchName());
-            joinpayMchCheck.setSignTrxNo(tJoinpayMch.getSignTrxNo());
-            joinpayMchCheck.setBizCode(tJoinpayMch.getBizCode());
-            joinpayMchCheck.setOrderStatus(tJoinpayMch.getOrderStatus());
-            joinpayMchCheck.setLoginName(tJoinpayMch.getLoginName());
-            joinpayMchCheck.setBankAccountType(mch.getBankAccountType());
-            joinpayMchCheck.setLegalPerson(mch.getLegalPerson());
-            joinpayMchCheck.setIdCardNo(mch.getIdCardNo());
-            joinpayMchCheck.setAltMerchantType(mch.getAltMerchantType());
-            joinpayMchCheck.setBankAccountName(mch.getBankAccountName());
-            joinpayMchCheck.setBankAccountNo(mch.getBankAccountNo());
-            joinpayMchCheck.setBankChannelNo(mch.getBankChannelNo());
-            if (!StringUtils.isEmpty(mch.getBusiContactName())) {
-                joinpayMchCheck.setBusiContactName(mch.getBusiContactName());
-            }
-            if (!StringUtils.isEmpty(mch.getBusiContactMobileNo())) {
-                joinpayMchCheck.setBusiContactMobileNo(mch.getBusiContactMobileNo());
-            }
-            if (!StringUtils.isEmpty(mch.getPhoneNo())) {
-                joinpayMchCheck.setPhoneNo(mch.getPhoneNo());
-            }
-            if (!StringUtils.isEmpty(mch.getLicenseNo())) {
-                joinpayMchCheck.setLicenseNo(mch.getLicenseNo());
-            }
-            if (mch.getSettMode() != null) {
-                joinpayMchCheck.setSettMode(mch.getSettMode());
-            }
-            if (mch.getRiskDay() != null) {
-                joinpayMchCheck.setRiskDay(mch.getRiskDay());
-            }
-            joinpayMchCheck.setType("0");
-            tJoinpayMchCheckService.save(joinpayMchCheck);
-            return R.ok(joinpayMchCheck);
-        }
-    }
-
     @ApiOperation(value = "更新图片审核状态")
     @PostMapping("/updateApproveStatus")
     public ResponseModel<?> updateApproveStatus(@RequestBody TJoinpayMch mch) {
@@ -325,5 +269,16 @@ public class TJoinpayMchController {
         return R.ok(str);
     }
 
+    @ApiOperation(value = "商户入网")
+    @PostMapping("/createMch")
+    public ResponseModel<?> createMch(@RequestBody TJoinpayMch joinpayMch) {
+        String result = tJoinpayMchService.newCreateMch(joinpayMch);
+        if (JoinpayConstant.ORDER_STATSUS_P3004.equals(result)) {
+            return R.ok();
+        }
+        return R.fail(result);
+    }
+
+
 }
 

+ 1 - 1
src/main/java/com/szwl/controller/TSugarDoController.java

@@ -132,7 +132,7 @@ public class TSugarDoController {
                 kindData.put("no", sugarDo.getNo());
                 tEquipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("dosugar", kindData.toString()).toString());
             }
-            return R.ok();
+            return R.ok(sugarDo);
         }
         return R.fail(ResponseCodesEnum.A0001);
     }

+ 84 - 0
src/main/java/com/szwl/handle/ResponseMessageHandler.java

@@ -0,0 +1,84 @@
+package com.szwl.handle;
+
+import cn.hutool.core.util.RandomUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.handle.response.ResponseProcessor;
+import com.szwl.model.entity.MessageLog;
+import com.szwl.service.MessageLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Slf4j
+@Component
+public class ResponseMessageHandler implements MqttMessageHandler{
+
+    @Resource
+    private MessageLogService messageLogService;
+
+    // 策略模式处理器映射
+    private final Map<String, ResponseProcessor> processorMap = new ConcurrentHashMap<>();
+
+    // 自动注入所有处理器(Spring会收集所有ResponseProcessor的实现)
+    @Autowired
+    public void initProcessors(List<ResponseProcessor> processors) {
+        processors.forEach(processor ->
+                processorMap.put(processor.getSupportedOperationType(), processor)
+        );
+        log.info("Loaded response processors: {}", processorMap.keySet());
+    }
+
+    @Override
+    public void handle(String topic, String payload) {
+        try {
+            String operationType = "";
+            // 1. 解析基础响应
+            MessageLog messageLog = JSON.parseObject(payload, MessageLog.class);
+            // 2. 确定是否为主动上报消息
+            Integer direction = messageLog.getDirection();
+            if (direction != null && direction == 2) {
+                // 3. 主动上报消息,直接添加消息日志
+                operationType = messageLog.getOperation();
+                messageLog.setMsgId(System.currentTimeMillis() + RandomUtil.randomNumbers(10));
+                messageLog.setCreatedAt(new Date());
+                messageLogService.save(messageLog);
+            } else {
+                // 3. 响应消息,查询原始消息记录
+                String msgId = messageLog.getMsgId();
+                LambdaQueryWrapper<MessageLog> query = Wrappers.lambdaQuery();
+                query.eq(MessageLog::getMsgId, msgId);
+                MessageLog message = messageLogService.getOne(query);
+                if (message != null) {
+                    operationType = message.getOperation();
+                    // 4. 更新消息日志
+                    message.setStatusCode(messageLog.getStatusCode());
+                    message.setResponseContent(messageLog.getResponseContent());
+                    message.setErrorInfo(messageLog.getErrorInfo());
+                    messageLogService.updateById(message);
+                }
+            }
+
+            // 5. 处理业务逻辑
+            if (StringUtils.isNotEmpty(operationType)) {
+                ResponseProcessor processor = processorMap.get(operationType);
+                if (processor != null) {
+                    processor.process(messageLog);
+                } else {
+                    log.warn("未找到匹配的处理器,操作类型:{}", operationType);
+                }
+            }
+
+        } catch (Exception e) {
+            log.error("消息处理失败 topic={}, payload={}", topic, payload, e);
+        }
+    }
+}

+ 17 - 0
src/main/java/com/szwl/handle/response/ResponseProcessor.java

@@ -0,0 +1,17 @@
+package com.szwl.handle.response;
+
+import cn.com.sand.hmpay.vo.response.BaseResponse;
+import com.szwl.model.entity.MessageLog;
+
+public interface ResponseProcessor {
+
+    /**
+     * 处理响应
+     */
+    void process(MessageLog messageLog);
+
+    /**
+     * @return 支持的操作类型
+     */
+    String getSupportedOperationType();
+}

+ 54 - 0
src/main/java/com/szwl/handle/response/UpdateTaxRateProcessor.java

@@ -0,0 +1,54 @@
+package com.szwl.handle.response;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.constant.OperationType;
+import com.szwl.model.entity.MessageLog;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.entity.TEquipmentDesc;
+import com.szwl.service.TEquipmentDescService;
+import com.szwl.service.TEquipmentService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+
+@Slf4j
+@Component
+public class UpdateTaxRateProcessor implements ResponseProcessor{
+
+    @Resource
+    private TEquipmentService tEquipmentService;
+
+    @Resource
+    private TEquipmentDescService tEquipmentDescService;
+
+    @Override
+    public void process(MessageLog messageLog) {
+        Integer statusCode = messageLog.getStatusCode();
+        if (statusCode == 200) {
+            Integer direction = messageLog.getDirection();
+            String clientId = messageLog.getClientId();
+            String responseContent = messageLog.getResponseContent();
+            LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+            query.eq(TEquipment::getClientId, clientId);
+            TEquipment tEquipment = tEquipmentService.getOne(query);
+            if (tEquipment != null) {
+                TEquipmentDesc equipmentDesc = tEquipmentDescService.getById(tEquipment.getId());
+                equipmentDesc.setTaxRate(new BigDecimal(responseContent).setScale(2));
+                tEquipmentDescService.updateById(equipmentDesc);
+            }
+            if (direction != null && direction == 2) {
+                log.info("更新 taxes 状态成功");
+                // TODO 响应消息给设备
+                tEquipmentService.sendRemoteMessage(clientId, OperationType.UPDATE_TAX_RATE, "");
+            }
+        }
+    }
+
+    @Override
+    public String getSupportedOperationType() {
+        return OperationType.UPDATE_TAX_RATE.getCode();
+    }
+}

+ 53 - 0
src/main/java/com/szwl/handle/response/UpdateTaxStatusProcessor.java

@@ -0,0 +1,53 @@
+package com.szwl.handle.response;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.constant.OperationType;
+import com.szwl.model.entity.MessageLog;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.entity.TEquipmentDesc;
+import com.szwl.service.TEquipmentDescService;
+import com.szwl.service.TEquipmentService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Slf4j
+@Component
+public class UpdateTaxStatusProcessor implements ResponseProcessor{
+
+    @Resource
+    private TEquipmentService tEquipmentService;
+
+    @Resource
+    private TEquipmentDescService tEquipmentDescService;
+
+    @Override
+    public void process(MessageLog messageLog) {
+        Integer statusCode = messageLog.getStatusCode();
+        if (statusCode == 200) {
+            Integer direction = messageLog.getDirection();
+            String clientId = messageLog.getClientId();
+            String responseContent = messageLog.getResponseContent();
+            LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+            query.eq(TEquipment::getClientId, clientId);
+            TEquipment tEquipment = tEquipmentService.getOne(query);
+            if (tEquipment != null) {
+                TEquipmentDesc equipmentDesc = tEquipmentDescService.getById(tEquipment.getId());
+                equipmentDesc.setTaxStatus(responseContent.equals("1"));
+                tEquipmentDescService.updateById(equipmentDesc);
+            }
+            if (direction != null && direction == 2) {
+                log.info("更新 taxes 状态成功");
+                // TODO 响应消息给设备
+                tEquipmentService.sendRemoteMessage(clientId, OperationType.UPDATE_TAX_STATUS, "");
+            }
+        }
+    }
+
+    @Override
+    public String getSupportedOperationType() {
+        return OperationType.UPDATE_TAX_STATUS.getCode();
+    }
+}

+ 1 - 0
src/main/java/com/szwl/manager/MqttHandlerManager.java

@@ -22,6 +22,7 @@ public class MqttHandlerManager {
         handlerMap.put("disconnected", findHandler(handlers, DisconnectedMessageHandler.class));
         handlerMap.put("heart", findHandler(handlers, HeartMessageHandler.class));
         handlerMap.put("parameters", findHandler(handlers, ParametersMessageHandler.class));
+        handlerMap.put("response", findHandler(handlers, ResponseMessageHandler.class));
     }
 
     public void dispatch(String topic, String payload) {

+ 16 - 0
src/main/java/com/szwl/mapper/MessageLogMapper.java

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.MessageLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 消息记录表 Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2025-04-16
+ */
+public interface MessageLogMapper extends BaseMapper<MessageLog> {
+
+}

+ 25 - 0
src/main/java/com/szwl/mapper/xml/MessageLogMapper.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.szwl.mapper.MessageLogMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.MessageLog">
+        <id column="log_id" property="logId" />
+        <result column="msg_id" property="msgId" />
+        <result column="client_id" property="clientId" />
+        <result column="direction" property="direction" />
+        <result column="operation" property="operation" />
+        <result column="timestamp" property="timestamp" />
+        <result column="status_code" property="statusCode" />
+        <result column="data_content" property="dataContent" />
+        <result column="response_content" property="responseContent" />
+        <result column="error_info" property="errorInfo" />
+        <result column="created_at" property="createdAt" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        log_id, msg_id, client_id, direction, operation, timestamp, status_code, data_content, response_content, error_info, created_at
+    </sql>
+
+</mapper>

+ 62 - 0
src/main/java/com/szwl/model/entity/MessageLog.java

@@ -0,0 +1,62 @@
+package com.szwl.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 消息记录表
+ * </p>
+ *
+ * @author wuhs
+ * @since 2025-04-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="MessageLog对象", description="消息记录表")
+public class MessageLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "自增主键")
+    @TableId(value = "log_id", type = IdType.AUTO)
+    private Long logId;
+
+    @ApiModelProperty(value = "消息唯一标识")
+    private String msgId;
+
+    @ApiModelProperty(value = "设备编号")
+    private String clientId;
+
+    @ApiModelProperty(value = "消息方向:1=服务器下发,2=设备上报")
+    private Integer direction;
+
+    @ApiModelProperty(value = "操作类型枚举")
+    private String operation;
+
+    @ApiModelProperty(value = "消息中的时间戳(秒级UTC),用于判断时效性")
+    private Long timestamp;
+
+    @ApiModelProperty(value = "状态码:200=响应成功,400=参数错误,500=内部错误,504=超时等")
+    private Integer statusCode;
+
+    @ApiModelProperty(value = "业务数据主体(根据operation动态变化)")
+    private String dataContent;
+
+    @ApiModelProperty(value = "响应数据(如果需要设备响应)")
+    private String responseContent;
+
+    @ApiModelProperty(value = "错误时的详细描述(如设备返回的异常堆栈摘要)")
+    private String errorInfo;
+
+    @ApiModelProperty(value = "记录入库时间(用于日志轮转)")
+    private Date createdAt;
+
+
+}

+ 11 - 0
src/main/java/com/szwl/model/utils/Base64Util.java

@@ -1,6 +1,7 @@
 package com.szwl.model.utils;
 
 import java.io.ByteArrayOutputStream;
+import java.util.Base64;
 
 /**
  * base64 format encoding & decoding
@@ -114,4 +115,14 @@ public class Base64Util {
 		}
 		return buf.toByteArray();
 	}
+
+	public static String imgToBase64(byte[] data) {
+		String base64 = "data:image/jpeg;base64,";
+		try {
+			base64 += Base64.getEncoder().encodeToString(data);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return base64;
+	}
 }

+ 16 - 0
src/main/java/com/szwl/service/MessageLogService.java

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.MessageLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 消息记录表 服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2025-04-16
+ */
+public interface MessageLogService extends IService<MessageLog> {
+
+}

+ 12 - 0
src/main/java/com/szwl/service/MqttService.java

@@ -0,0 +1,12 @@
+package com.szwl.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface MqttService {
+
+    void sendMessage(String topic, String message, int qos);
+
+    void subscribe(String topic, int qos);
+
+    void unsubscribe(String topic);
+}

+ 9 - 0
src/main/java/com/szwl/service/TEquipmentService.java

@@ -1,5 +1,6 @@
 package com.szwl.service;
 
+import com.szwl.constant.OperationType;
 import com.szwl.model.entity.TEquipment;
 import com.szwl.model.query.StatisticsParam;
 import com.szwl.service.base.MyIService;
@@ -20,6 +21,14 @@ public interface TEquipmentService extends MyIService<TEquipment> {
      */
     String sentMessage(String clientId,String json);
 
+    /**
+     * 发送远程操作消息
+     * @param clientId
+     * @param operationType
+     * @param message
+     */
+    void sendRemoteMessage(String clientId, OperationType operationType, String message);
+
     String findMachineTotalNum(StatisticsParam param);
 
     String findMachineUseNum(StatisticsParam param);

+ 8 - 0
src/main/java/com/szwl/service/TJoinpayMchService.java

@@ -88,4 +88,12 @@ public interface TJoinpayMchService extends MyIService<TJoinpayMch> {
     List<SettlementRecordBo> getAutoSettlement(TJoinpayMch joinpayMch, String date);
 
     void withdrawStatus(TAdmin admin, WithdrawalRecord withdrawalRecord);
+
+
+    /**
+     * 新入网接口
+     * @param joinpayMch
+     * @return
+     */
+    String newCreateMch(TJoinpayMch joinpayMch);
 }

+ 20 - 0
src/main/java/com/szwl/service/impl/MessageLogServiceImpl.java

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.MessageLog;
+import com.szwl.mapper.MessageLogMapper;
+import com.szwl.service.MessageLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 消息记录表 服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2025-04-16
+ */
+@Service
+public class MessageLogServiceImpl extends ServiceImpl<MessageLogMapper, MessageLog> implements MessageLogService {
+
+}

+ 11 - 3
src/main/java/com/szwl/service/mqtt/MqttService.java

@@ -1,22 +1,27 @@
-package com.szwl.service.mqtt;
+package com.szwl.service.impl;
 
+import com.szwl.service.MqttService;
 import lombok.extern.slf4j.Slf4j;
 import org.eclipse.paho.client.mqttv3.MqttClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+
 @Slf4j
 @Service
-public class MqttService {
+public class MqttServiceImpl implements MqttService {
 
-    @Autowired
+    @Resource
     private MqttClient mqttClient;
 
     /**
      * 发送消息
+     *
      * @param topic
      * @param message
      */
+    @Override
     public void sendMessage(String topic, String message, int qos) {
         try {
             mqttClient.publish(topic, message.getBytes(), qos, false);
@@ -27,9 +32,11 @@ public class MqttService {
 
     /**
      * 订阅主题
+     *
      * @param topic
      * @param qos
      */
+    @Override
     public void subscribe(String topic, int qos) {
         try {
             mqttClient.subscribe(topic, qos);
@@ -41,6 +48,7 @@ public class MqttService {
     /**
      * 取消订阅主题
      */
+    @Override
     public void unsubscribe(String topic) {
         try {
             mqttClient.unsubscribe(topic);

+ 40 - 8
src/main/java/com/szwl/service/impl/TEquipmentServiceImpl.java

@@ -1,28 +1,26 @@
 package com.szwl.service.impl;
 
+import cn.hutool.core.util.RandomUtil;
+import com.alibaba.fastjson.JSONObject;
 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.szwl.constant.OperationType;
 import com.szwl.feign.bean.SyncOldFeign;
 import com.szwl.mapper.TEquipmentMapper;
 import com.szwl.model.bo.R;
-import com.szwl.model.entity.TAdmin;
-import com.szwl.model.entity.TEquipment;
-import com.szwl.model.entity.TEquipmentDesc;
-import com.szwl.model.entity.TWechat;
+import com.szwl.model.entity.*;
 import com.szwl.model.query.StatisticsParam;
 import com.szwl.model.utils.MailUtil;
 import com.szwl.model.utils.PushUtils;
 import com.szwl.model.utils.YunPianSms;
-import com.szwl.service.TAdminService;
-import com.szwl.service.TEquipmentDescService;
-import com.szwl.service.TEquipmentService;
-import com.szwl.service.TWechatService;
+import com.szwl.service.*;
 import com.szwl.util.WechatSendUtil;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.amqp.core.AmqpTemplate;
 import org.springframework.amqp.core.MessageProperties;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -64,8 +62,20 @@ public class TEquipmentServiceImpl extends ServiceImpl<TEquipmentMapper, TEquipm
     @Resource
     TWechatService wechatService;
 
+//    @Resource
+//    private MqttService mqttService;
+    private final MqttService mqttService;
+
+    @Resource
+    MessageLogService messageLogService;
+
     private static final String appid = "07784f5fedb508046c841b391005b7de";
 
+    @Autowired
+    public TEquipmentServiceImpl(@Lazy MqttService mqttService) {
+        this.mqttService = mqttService;
+    }
+
     @Override
     public String sentMessage(String clientId, String json) {
         LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
@@ -96,6 +106,28 @@ public class TEquipmentServiceImpl extends ServiceImpl<TEquipmentMapper, TEquipm
     }
 
     @Override
+    public void sendRemoteMessage(String clientId, OperationType operationType, String message) {
+        MessageLog messageLog = new MessageLog();
+        messageLog.setMsgId(System.currentTimeMillis() + RandomUtil.randomNumbers(10));
+        messageLog.setClientId(clientId);
+        messageLog.setDirection(1);
+        messageLog.setOperation(operationType.getCode());
+        messageLog.setTimestamp(System.currentTimeMillis());
+        messageLog.setDataContent(message);
+        messageLog.setCreatedAt(new Date());
+        messageLogService.save(messageLog);
+        // 参数
+        JSONObject data = new JSONObject();
+        // 请求流水号
+        data.put("msgId", messageLog.getMsgId());
+        data.put("clientId", messageLog.getClientId());
+        data.put("timestamp", messageLog.getTimestamp());
+        data.put("dataContent", messageLog.getDataContent());
+        mqttService.sendMessage(clientId, data.toJSONString(), 0);
+    }
+
+
+    @Override
     public String findMachineTotalNum(StatisticsParam param) {
         return tEquipmentMapper.findMachineTotalNum(param);
     }

+ 137 - 6
src/main/java/com/szwl/service/impl/TJoinpayMchServiceImpl.java

@@ -534,10 +534,6 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
         JSONObject requestJson = new JSONObject(new TreeMap<String, Object>());
         if (staus.equals("0")) {
             requestJson.put("method", "altMchPics.uploadPic");
-            // 格式为16 位随机字符串:16 位随机字符串
-//            String aes_key1 = getRandomString(16);
-//            String aes_key2 = getRandomString(16);
-//            requestJson.put("aes_key", RSAUtil.encrypt(aes_key1+":"+aes_key2 , JoinpayConstant.publickey ));
         } else {
             requestJson.put("method", "altMchPics.modifyPic");
         }
@@ -551,14 +547,12 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
 
         String sign = createMD5Sign(requestJson, JoinpayConstant.key);
         requestJson.put("sign", sign.toUpperCase());
-//        logger.info("请求参数:" + requestJson);
         String s = requestJson.toString();
         String back = null;
         org.json.JSONObject jsonObject;
         try {
 
             jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
-//            logger.info("响应参数:" + jsonObject);
 
             // 判断请求是否正确,受理成功
             if (jsonObject.has("resp_code")) {
@@ -925,6 +919,143 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
         }
     }
 
+    @Override
+    public String newCreateMch(TJoinpayMch joinpayMch) {
+        Integer altMerchantType = joinpayMch.getAltMerchantType();
+        String url = "https://www.joinpay.com/allocFunds";
+
+        JSONObject requestData = new JSONObject(new LinkedHashMap());
+
+        String loginName = "sunzee" + RandomUtil.randomNumbers(10) + "@mianhuatang.com";
+        joinpayMch.setLoginName(loginName);
+        String altMchName = joinpayMch.getBankAccountName();
+        joinpayMch.setAltMchName(altMchName);
+
+        // 格式为16 位随机字符串:16 位随机字符串
+//        String aeskey1 = getRandomString(16);
+//        String aeskey2 = getRandomString(16);
+
+        requestData.put("login_name", loginName);
+        requestData.put("alt_mch_name", altMchName);
+        requestData.put("alt_merchant_type", altMerchantType);
+        requestData.put("busi_contact_name", joinpayMch.getBusiContactName());
+        requestData.put("busi_contact_mobile_no", joinpayMch.getBusiContactMobileNo());
+        requestData.put("phone_no", joinpayMch.getPhoneNo());
+//        requestData.put("legal_person", AESUtil.encrypt(joinpayMch.getLegalPerson(), aeskey1, aeskey2));
+//        requestData.put("id_card_no", AESUtil.encrypt(joinpayMch.getIdCardNo(), aeskey1, aeskey2));
+        requestData.put("legal_person", joinpayMch.getLegalPerson());
+        requestData.put("id_card_no", joinpayMch.getIdCardNo());
+        requestData.put("id_card_expiry", joinpayMch.getIdCardExpiry());
+        // 企业必填:营业执照编号 / 营业执照有效期
+        if (JoinpayConstant.ALT_MERCHANT_TYPE_ENTERPRISE == altMerchantType) {
+            requestData.put("license_no", joinpayMch.getLicenseNo());
+            requestData.put("license_expiry", joinpayMch.getLicenseExpiry());
+        }
+        if (joinpayMch.getSettMode() != null) {
+            requestData.put("sett_mode", joinpayMch.getSettMode());
+        } else {
+            // 由汇聚自动结算
+            requestData.put("sett_mode", JoinpayConstant.SETT_MODE_ONE);
+        }
+
+        // 结算周期类型:自然日
+        requestData.put("sett_date_type", JoinpayConstant.SETT_DATE_DAY);
+        if (joinpayMch.getRiskDay() != null) {
+            requestData.put("risk_day", joinpayMch.getRiskDay());
+        } else {
+            // 结算周期:1
+            requestData.put("risk_day", 1);
+        }
+
+        if (JoinpayConstant.ALT_MERCHANT_TYPE_ENTERPRISE == altMerchantType) {
+            // 企业用对公账户
+            requestData.put("bank_account_type", JoinpayConstant.BANK_ACCOUNT_TYPE_FOUR);
+            requestData.put("bank_channel_no", joinpayMch.getBankChannelNo());
+        } else if (JoinpayConstant.ALT_MERCHANT_TYPE_PERSON == altMerchantType) {
+            // 个人用借记卡
+            requestData.put("bank_account_type", JoinpayConstant.BANK_ACCOUNT_TYPE_ONE);
+        }
+//        requestData.put("bank_account_name", AESUtil.encrypt(joinpayMch.getBankAccountName(), aeskey1, aeskey2));
+//        requestData.put("bank_account_no", AESUtil.encrypt(joinpayMch.getBankAccountNo(), aeskey1, aeskey2));
+        requestData.put("bank_account_name", joinpayMch.getBankAccountName());
+        requestData.put("bank_account_no", joinpayMch.getBankAccountNo());
+        requestData.put("notify_url", JoinpayConstant.MERCHANT_URL);
+
+        JSONObject requestJson = new JSONObject(new TreeMap<String, Object>());
+        requestJson.put("method", "altmch.create");
+        requestJson.put("version", "1.1");
+        requestJson.put("data", requestData);
+        // 32位随机字符串
+        String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
+        requestJson.put("rand_str", uuid);
+        requestJson.put("sign_type", JoinpayConstant.sign_type_MD5);
+        requestJson.put("mch_no", JoinpayConstant.mch_no);
+
+        String sign = createMD5Sign(requestJson, JoinpayConstant.key);
+        requestJson.put("sign", sign.toUpperCase());
+
+        String result = "";
+        try {
+            org.json.JSONObject jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
+
+            String respCode = jsonObject.getString("resp_code");
+            String respMsg = jsonObject.getString("resp_msg");
+            joinpayMch.setRespCode(respCode);
+            if (JoinpayConstant.resp_code1.equals(respCode)) {
+                // 受理成功
+                if (jsonObject.has("data")) {
+                    org.json.JSONObject data = jsonObject.getJSONObject("data");
+                    if (data.has("biz_code")) {
+                        joinpayMch.setBizCode(data.getString("biz_code"));
+                    }
+
+                    if (data.has("alt_mch_no")) {
+                        joinpayMch.setAltMchNo(data.getString("alt_mch_no"));
+                    }
+
+                    if (data.has("order_status")) {
+                        joinpayMch.setOrderStatus(data.getString("order_status"));
+                    }
+                }
+
+            }
+            return respMsg;
+
+
+
+            /**
+             * 更新一下分销商户的  各种响应码 & login_name
+             */
+//            joinpayMch.setCreateDate(new Date());
+//            joinpayMch.setModifyDate(new Date());
+//            joinpayMch.setType("1");
+//            if (StringUtils.isNotEmpty(joinpayMch.getAltMchNo())) {
+//                save(joinpayMch);
+//            }
+//
+//            if (jsonObject.has("resp_code")) {
+//                String resp_code = jsonObject.getString("resp_code");
+//                mch.setRespCode(resp_code);
+//                if (JoinpayConstant.resp_code2.equals(resp_code)) {
+//                    org.json.JSONObject data = jsonObject.getJSONObject("data");
+//                    if (data.has("biz_msg")) {
+//                        return data.getString("biz_msg");
+//                    }
+//                }
+//            }
+//
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+//        if (StringUtils.isNotEmpty(mch.getAltMchNo())) {
+//            return Constant.correct_code;
+//        } else {
+//            return "注册失败";
+//        }
+        return "";
+    }
+
 
     /**
      * 获取随机字符串