Explorar o código

提现账户的注册和审核

李天标 %!s(int64=3) %!d(string=hai) anos
pai
achega
dc328d61f7
Modificáronse 69 ficheiros con 4800 adicións e 27 borrados
  1. 10 0
      pom.xml
  2. 65 2
      src/main/java/com/szwl/controller/IndexController.java
  3. 101 0
      src/main/java/com/szwl/controller/RabbitMqController.java
  4. 21 0
      src/main/java/com/szwl/controller/TAlarmRecordController.java
  5. 21 0
      src/main/java/com/szwl/controller/TAreaController.java
  6. 997 13
      src/main/java/com/szwl/controller/TEquipmentController.java
  7. 147 0
      src/main/java/com/szwl/controller/TJoinpayMchCheckController.java
  8. 183 0
      src/main/java/com/szwl/controller/TJoinpayMchController.java
  9. 139 0
      src/main/java/com/szwl/controller/TShandeMchCheckController.java
  10. 146 0
      src/main/java/com/szwl/controller/TShandeMchController.java
  11. 21 0
      src/main/java/com/szwl/mapper/TAlarmRecordMapper.java
  12. 19 0
      src/main/java/com/szwl/mapper/TAreaMapper.java
  13. 4 0
      src/main/java/com/szwl/mapper/TEquipmentMapper.java
  14. 16 0
      src/main/java/com/szwl/mapper/TJoinpayMchCheckMapper.java
  15. 16 0
      src/main/java/com/szwl/mapper/TJoinpayMchMapper.java
  16. 3 0
      src/main/java/com/szwl/mapper/TOrderMapper.java
  17. 16 0
      src/main/java/com/szwl/mapper/TShandeMchCheckMapper.java
  18. 16 0
      src/main/java/com/szwl/mapper/TShandeMchMapper.java
  19. 57 0
      src/main/java/com/szwl/mapper/xml/TAlarmRecordMapper.xml
  20. 37 0
      src/main/java/com/szwl/mapper/xml/TAreaMapper.xml
  21. 19 0
      src/main/java/com/szwl/mapper/xml/TEquipmentMapper.xml
  22. 52 0
      src/main/java/com/szwl/mapper/xml/TJoinpayMchCheckMapper.xml
  23. 52 0
      src/main/java/com/szwl/mapper/xml/TJoinpayMchMapper.xml
  24. 22 1
      src/main/java/com/szwl/mapper/xml/TOrderMapper.xml
  25. 26 0
      src/main/java/com/szwl/mapper/xml/TShandeMchCheckMapper.xml
  26. 28 0
      src/main/java/com/szwl/mapper/xml/TShandeMchMapper.xml
  27. 48 0
      src/main/java/com/szwl/model/bean/Child.java
  28. 36 0
      src/main/java/com/szwl/model/bean/Childlast.java
  29. 29 0
      src/main/java/com/szwl/model/bean/Children2.java
  30. 29 0
      src/main/java/com/szwl/model/bean/Children3.java
  31. 22 0
      src/main/java/com/szwl/model/bean/TAdminDTO.java
  32. 68 0
      src/main/java/com/szwl/model/bean/TEquipmentDTO.java
  33. 269 0
      src/main/java/com/szwl/model/bo/JoinpayConstant.java
  34. 10 10
      src/main/java/com/szwl/model/bo/JsonUtils.java
  35. 74 0
      src/main/java/com/szwl/model/entity/TAlarmRecord.java
  36. 48 0
      src/main/java/com/szwl/model/entity/TArea.java
  37. 140 0
      src/main/java/com/szwl/model/entity/TJoinpayMch.java
  38. 108 0
      src/main/java/com/szwl/model/entity/TJoinpayMchCheck.java
  39. 69 0
      src/main/java/com/szwl/model/entity/TShandeMch.java
  40. 58 0
      src/main/java/com/szwl/model/entity/TShandeMchCheck.java
  41. 80 0
      src/main/java/com/szwl/model/utils/AESUtil.java
  42. 117 0
      src/main/java/com/szwl/model/utils/Base64Util.java
  43. 17 0
      src/main/java/com/szwl/model/utils/CodeUtil.java
  44. 74 0
      src/main/java/com/szwl/model/utils/Constant.java
  45. 85 0
      src/main/java/com/szwl/model/utils/HEXUtil.java
  46. 333 0
      src/main/java/com/szwl/model/utils/HttpClientUtils.java
  47. 15 0
      src/main/java/com/szwl/model/utils/PushUtils.java
  48. 187 0
      src/main/java/com/szwl/model/utils/RSAUtil.java
  49. 14 0
      src/main/java/com/szwl/model/utils/constants/Algorithm.java
  50. 12 0
      src/main/java/com/szwl/model/utils/constants/CommonConst.java
  51. 12 0
      src/main/java/com/szwl/model/utils/exceptions/JPException.java
  52. 3 0
      src/main/java/com/szwl/service/TAdminService.java
  53. 21 0
      src/main/java/com/szwl/service/TAlarmRecordService.java
  54. 19 0
      src/main/java/com/szwl/service/TAreaService.java
  55. 5 0
      src/main/java/com/szwl/service/TEquipmentService.java
  56. 16 0
      src/main/java/com/szwl/service/TJoinpayMchCheckService.java
  57. 20 0
      src/main/java/com/szwl/service/TJoinpayMchService.java
  58. 3 0
      src/main/java/com/szwl/service/TOrderService.java
  59. 16 0
      src/main/java/com/szwl/service/TShandeMchCheckService.java
  60. 16 0
      src/main/java/com/szwl/service/TShandeMchService.java
  61. 3 0
      src/main/java/com/szwl/service/impl/TAdminServiceImpl.java
  62. 34 0
      src/main/java/com/szwl/service/impl/TAlarmRecordServiceImpl.java
  63. 28 0
      src/main/java/com/szwl/service/impl/TAreaServiceImpl.java
  64. 11 0
      src/main/java/com/szwl/service/impl/TEquipmentServiceImpl.java
  65. 20 0
      src/main/java/com/szwl/service/impl/TJoinpayMchCheckServiceImpl.java
  66. 348 0
      src/main/java/com/szwl/service/impl/TJoinpayMchServiceImpl.java
  67. 9 1
      src/main/java/com/szwl/service/impl/TOrderServiceImpl.java
  68. 20 0
      src/main/java/com/szwl/service/impl/TShandeMchCheckServiceImpl.java
  69. 20 0
      src/main/java/com/szwl/service/impl/TShandeMchServiceImpl.java

+ 10 - 0
pom.xml

@@ -184,6 +184,16 @@
 			<artifactId>spring-cloud-starter-bus-amqp</artifactId>
 		</dependency>
 		<dependency>
+			<groupId>org.springframework.amqp</groupId>
+			<artifactId>spring-rabbit</artifactId>
+			<version>2.3.6</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.amqp</groupId>
+			<artifactId>spring-amqp</artifactId>
+			<version>2.3.6</version>
+		</dependency>
+		<dependency>
 			<groupId>cn.com.crbank.ommo</groupId>
 			<artifactId>EsBaseServer</artifactId>
 			<version>1.2.10</version>

+ 65 - 2
src/main/java/com/szwl/controller/IndexController.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.szwl.model.bean.CommonParamVo;
 import com.szwl.model.bean.EquipmentDTO;
+import com.szwl.model.bean.EquipmentVo;
 import com.szwl.model.bean.ProductVo;
 import com.szwl.model.bo.JsonMessage;
 import com.szwl.model.bo.JsonUtils;
@@ -50,9 +51,68 @@ public class IndexController { ;
     TParametersService parametersService;
     @ApiOperation(value = "心跳")
     @PostMapping("/heart")
-    public JsonMessage heart(@RequestBody TAdmin entity) {
+    public JsonMessage heart(@RequestBody EquipmentVo equipmentVo) {
 
-        return null;
+        String clientId = equipmentVo.getClientId();
+        Date lastUpdateTime = equipmentVo.getLastUpdateTime();
+        Double longitude = equipmentVo.getLongitude();
+        Double latitude = equipmentVo.getLatitude();
+        String cabinetHd = equipmentVo.getCabinetHd();
+        String cabinetTm = equipmentVo.getCabinetTm();
+        String furnaceSp = equipmentVo.getFurnaceSp();
+        String furnaceTm = equipmentVo.getFurnaceTm();
+        String gtClientId = equipmentVo.getGtClientId();
+        String volume = equipmentVo.getVolume();
+        Integer eqeStatus = equipmentVo.getEqeStatus();
+        Boolean is_sleep = equipmentVo.getIs_sleep();
+        String netWorkingMode = equipmentVo.getNetWorkingMode();
+        //有记录,则进行修改
+        LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+        query.eq(TEquipment::getClientId,clientId);
+        List<TEquipment> list = equipmentService.list(query);
+        TEquipment _new = list.get(0);
+//        Equipment _new = equipmentService.findByClientId(clientId);
+        if (_new != null) {
+            _new.setNetWorkingMode(netWorkingMode);
+            if(StringUtils.isNotEmpty(cabinetTm)){
+                _new.setCabinetTm(cabinetTm);
+            }
+            if(StringUtils.isNotEmpty(cabinetHd)){
+                _new.setCabinetHd(cabinetHd);
+            }
+            if(StringUtils.isNotEmpty(furnaceSp)){
+                _new.setFurnaceSp(furnaceSp);
+            }
+            if(StringUtils.isNotEmpty(furnaceTm)){
+                _new.setFurnaceTm(furnaceTm);
+            }
+            _new.setLastUpdateTime(lastUpdateTime);
+//            _new.setLongitude(longitude);
+            if(eqeStatus!=null){
+                _new.setEqeStatus(eqeStatus);
+            }
+            if(is_sleep!=null){
+                _new.setIsSleep(is_sleep);
+            }
+            if(!StringUtils.isEmpty(furnaceTm)){
+                int fur = Integer.parseInt(furnaceTm);
+                if(_new.getEqeStatus()==0&&fur>150){
+                    _new.setEqeStatus(1);
+                }
+                if(_new.getEqeStatus()==null&&fur>150){
+                    _new.setEqeStatus(1);
+                }
+            }
+            if(!StringUtils.isEmpty(volume)){
+                _new.setVolume(volume);
+            }
+//            _new.setLatitude(latitude);
+            _new.setGtClientId(gtClientId);
+            _new.setModifyDate(new Date());
+            equipmentService.updateById(_new);
+            return JsonMessage.success("心跳成功");
+        }
+        return JsonMessage.error("心跳失败");
     }
     /**
      * 设备申请
@@ -732,6 +792,9 @@ public class IndexController { ;
         }
         equipmentService.sentMessage(clientId,PushUtils.buildJson("tuoji", "0").toString());
 //        PushUtils.push(equipment.getGtClientId(), "", "", PushUtils.buildJson("tuoji", "0").toString());
+        if("xxx".equals(equipment.getClientId().substring(equipment.getClientId().length()-3,equipment.getClientId().length()))){
+            return JsonMessage.success("脱离成功");
+        }
         equipment.setClientId(equipment.getClientId() + "xxx");
         equipmentService.updateById(equipment);
         return JsonMessage.success("脱离成功");

+ 101 - 0
src/main/java/com/szwl/controller/RabbitMqController.java

@@ -0,0 +1,101 @@
+package com.szwl.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.model.bo.JsonMessage;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.service.TAdminService;
+import com.szwl.service.TEquipmentService;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.amqp.core.*;
+import org.springframework.amqp.rabbit.core.RabbitAdmin;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/app_mq/rabbitMq")
+public class RabbitMqController {
+    @Autowired
+    TEquipmentService tEquipmentService;
+    @Autowired
+    TAdminService tAdminService;
+//    @Autowired
+//    private RabbitAdmin rabbitAdmin;
+    @Autowired
+    private AmqpAdmin amqpAdmin;
+//    @Autowired
+//    private RabbitTemplate rabbitTemplate;
+    /**
+     *添加交换机
+     * @param
+     * @return
+     */
+    @GetMapping(value = "/addExchange")
+    @ResponseBody
+    public Object addExchange(String exchange,String type,Boolean durable){
+        if(StringUtils.isEmpty(type)){
+            return JsonMessage.success("type is null");
+        }
+        if(type.equals("Direct")){
+//            amqpAdmin.declareExchange(new DirectExchange(exchange, durable, false));
+            amqpAdmin.declareExchange(new DirectExchange(exchange, durable, false));
+
+        }
+        if(type.equals("Topic")){
+            amqpAdmin.declareExchange(new TopicExchange(exchange, durable, false));
+        }
+        if(type.equals("Fanout")){
+            amqpAdmin.declareExchange(new FanoutExchange(exchange, durable, false));
+        }
+        return JsonMessage.success("成功");
+    }
+    /**
+     *添加队列并绑定
+     * @param
+     * @return
+     */
+    @GetMapping(value = "/addQueue")
+    @ResponseBody
+    public Object addQueue(String exchange,String queue,String routingKey,Boolean durable){
+        Map<String,Object> arg = new HashMap<>();
+        arg.put("x-message-ttl",1800000);
+        amqpAdmin.declareQueue(new Queue(queue, durable,false,false,arg));
+        HashMap<String, Object> objectObjectHashMap = new HashMap<>();
+        amqpAdmin.declareBinding(new Binding(queue,
+                Binding.DestinationType.QUEUE,
+                exchange, routingKey, objectObjectHashMap));
+        LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+        query.eq(TEquipment::getClientId,routingKey);
+        List<TEquipment> list = tEquipmentService.list(query);
+        TEquipment equipment = list.get(0);
+        equipment.setEquimentType(exchange);
+        tEquipmentService.updateById(equipment);
+        return JsonMessage.success("成功");
+    }
+    /**
+     *修改信道
+     * @param
+     * @return
+     */
+    @GetMapping(value = "/updateChannel")
+    @ResponseBody
+    public Object updateChannel(String clientId,String type){
+        LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+        query.eq(TEquipment::getClientId,clientId);
+        List<TEquipment> list = tEquipmentService.list(query);
+        TEquipment equipment = list.get(0);
+        equipment.setChannel(type);
+        tEquipmentService.updateById(equipment);
+        return JsonMessage.success("成功");
+    }
+}

+ 21 - 0
src/main/java/com/szwl/controller/TAlarmRecordController.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 2022-04-27
+ */
+@RestController
+@RequestMapping("/tAlarmRecord")
+public class TAlarmRecordController {
+
+}
+

+ 21 - 0
src/main/java/com/szwl/controller/TAreaController.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 2022-04-27
+ */
+@RestController
+@RequestMapping("/tArea")
+public class TAreaController {
+
+}
+

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 997 - 13
src/main/java/com/szwl/controller/TEquipmentController.java


+ 147 - 0
src/main/java/com/szwl/controller/TJoinpayMchCheckController.java

@@ -0,0 +1,147 @@
+package com.szwl.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.netflix.discovery.util.StringUtil;
+import com.szwl.model.bo.R;
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.TAdmin;
+import com.szwl.model.entity.TJoinpayMch;
+import com.szwl.model.entity.TJoinpayMchCheck;
+import com.szwl.service.TAdminService;
+import com.szwl.service.TJoinpayMchCheckService;
+import com.szwl.service.TJoinpayMchService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 用户收款信息表变动申请表 前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+@RestController
+@RequestMapping("/tJoinpayMchCheck")
+public class TJoinpayMchCheckController {
+    @Autowired
+    TJoinpayMchService tJoinpayMchService;
+    @Autowired
+    TJoinpayMchCheckService tJoinpayMchCheckService;
+    @Autowired
+    TAdminService adminService;
+    @ApiOperation(value = "商家查找汇聚收款账户在审核信息")
+    @PostMapping("/getOne")
+    public ResponseModel<?> findById(Long id, String username) {
+        TAdmin admin = adminService.getById(id);
+        if(!admin.getUsername().equals(username)){
+            return R.fail("username不符合!");
+        }
+        LambdaQueryWrapper<TJoinpayMchCheck> query = Wrappers.lambdaQuery();
+        query.eq(TJoinpayMchCheck::getAdminId,id);
+        query.eq(TJoinpayMchCheck::getType,"0");
+        List<TJoinpayMchCheck> list = tJoinpayMchCheckService.list(query);
+        if(list.size()>0){
+            return R.ok(list.get(list.size()-1));
+        }else {
+            return R.fail("没有审核信息");
+        }
+    }
+    @ApiOperation(value = "撤销申请")
+    @PostMapping("/update")
+    public ResponseModel<?> update(Long id) {
+        LambdaQueryWrapper<TJoinpayMchCheck> query = Wrappers.lambdaQuery();
+        query.eq(TJoinpayMchCheck::getId,id);
+        List<TJoinpayMchCheck> list = tJoinpayMchCheckService.list(query);
+        if(list.size()>0){
+            TJoinpayMchCheck tJoinpayMchCheck = list.get(0);
+            tJoinpayMchCheck.setType("2");
+            tJoinpayMchCheck.setModifyDate(new Date());
+            tJoinpayMchCheckService.updateById(tJoinpayMchCheck);
+            return R.ok();
+        }else {
+            return R.fail("撤销失败");
+        }
+    }
+    @ApiOperation(value = "平台查找汇聚收款账户在审核信息")
+    @PostMapping("/getList")
+    public ResponseModel<?> getList(String username, String type) {
+        LambdaQueryWrapper<TJoinpayMchCheck> query = Wrappers.lambdaQuery();
+        if(StringUtils.isNotEmpty(username)){
+            LambdaQueryWrapper<TAdmin> query1 = Wrappers.lambdaQuery();
+            query1.eq(TAdmin::getUsername,username);
+            List<TAdmin> list1 = adminService.list(query1);
+            if(list1.size()>0){
+                query.eq(TJoinpayMchCheck::getAdminId,list1.get(0).getId());
+            }
+        }
+        if(StringUtils.isNotEmpty(type)){
+            query.eq(TJoinpayMchCheck::getType,type);
+        }
+        List<TJoinpayMchCheck> list = tJoinpayMchCheckService.list(query);
+        if(list.size()>0){
+            return R.ok(list);
+        }else {
+            return R.fail("没有审核信息");
+        }
+    }
+
+    @ApiOperation(value = "平台审核是否通过")
+    @PostMapping("/shenhe")
+    public ResponseModel<?> shenhe(Long id,String type) {
+        if(type.equals("0")){
+            //通过
+            TJoinpayMchCheck joinpayMchCheck = tJoinpayMchCheckService.getById(id);
+            joinpayMchCheck.setType("1");
+            LambdaQueryWrapper<TJoinpayMch> query1 = Wrappers.lambdaQuery();
+            query1.eq(TJoinpayMch::getAdminId,joinpayMchCheck.getAdminId());
+            List<TJoinpayMch> list1 = tJoinpayMchService.list(query1);
+            if(list1.size()>0){
+                TJoinpayMch mch = list1.get(0);
+                mch.setModifyDate(new Date());
+                mch.setAltMerchantType(joinpayMchCheck.getAltMerchantType());
+                mch.setBusiContactMobileNo(joinpayMchCheck.getBusiContactMobileNo());
+                mch.setBusiContactName(joinpayMchCheck.getBusiContactName());
+                mch.setPhoneNo(joinpayMchCheck.getPhoneNo());
+                mch.setLegalPerson(joinpayMchCheck.getLegalPerson());
+                mch.setIdCardNo(joinpayMchCheck.getIdCardNo());
+                mch.setLicenseNo(joinpayMchCheck.getLicenseNo());
+                mch.setAltMerchantType(joinpayMchCheck.getAltMerchantType());
+                mch.setBankAccountName(joinpayMchCheck.getBankAccountName());
+                mch.setBankAccountNo(joinpayMchCheck.getBankAccountNo());
+                mch.setBankChannelNo(joinpayMchCheck.getBankChannelNo());
+                mch.setSettMode(joinpayMchCheck.getSettMode());
+                mch.setRiskDay(joinpayMchCheck.getRiskDay());
+                //修改的数据发送到汇聚
+                String result = tJoinpayMchService.updateMch(mch);
+                if(result.equals("ok")){
+                    tJoinpayMchService.updateById(mch);
+                    joinpayMchCheck.setModifyDate(new Date());
+                    tJoinpayMchCheckService.updateById(joinpayMchCheck);
+                }else{
+                    return R.fail(result);
+                }
+            }
+        }else {
+            //拒绝
+            TJoinpayMchCheck tJoinpayMchCheck = tJoinpayMchCheckService.getById(id);
+            tJoinpayMchCheck.setModifyDate(new Date());
+            tJoinpayMchCheck.setType("3");
+            tJoinpayMchCheckService.updateById(tJoinpayMchCheck);
+        }
+        return R.ok();
+    }
+}
+

+ 183 - 0
src/main/java/com/szwl/controller/TJoinpayMchController.java

@@ -0,0 +1,183 @@
+package com.szwl.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.model.bo.R;
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.TAdmin;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.entity.TJoinpayMch;
+import com.szwl.model.entity.TJoinpayMchCheck;
+import com.szwl.service.TAdminService;
+import com.szwl.service.TJoinpayMchCheckService;
+import com.szwl.service.TJoinpayMchService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.xml.crypto.Data;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 汇聚支付用户收款信息表 前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+@RestController
+@RequestMapping("/tJoinpayMch")
+public class TJoinpayMchController {
+    @Autowired
+    TJoinpayMchService tJoinpayMchService;
+    @Autowired
+    TJoinpayMchCheckService tJoinpayMchCheckService;
+    @Autowired
+    TAdminService adminService;
+    @ApiOperation(value = "查找汇聚收款账户信息")
+    @PostMapping("/getOne")
+    public ResponseModel<?> findById(Long id,String username) {
+        TAdmin admin = adminService.getById(id);
+        if(!admin.getUsername().equals(username)){
+            return R.fail("username不符合!");
+        }
+        LambdaQueryWrapper<TJoinpayMch> query = Wrappers.lambdaQuery();
+        query.eq(TJoinpayMch::getAdminId,id);
+        List<TJoinpayMch> list = tJoinpayMchService.list(query);
+        if(list.size()>0){
+            //已经注册,就要查看是否有提交审核的
+            LambdaQueryWrapper<TJoinpayMchCheck> query1 = Wrappers.lambdaQuery();
+            query1.eq(TJoinpayMchCheck::getAdminId,id);
+            List<TJoinpayMchCheck> list1 = tJoinpayMchCheckService.list(query1);
+            if(list1.size()>0){
+                int i = 0;
+                for(TJoinpayMchCheck tJoinpayMchCheck:list1){
+                    if(tJoinpayMchCheck.getType().equals("0")||tJoinpayMchCheck.getType().equals("3")){
+                        i++;
+                    }
+                }
+                if(i==0){
+                    return R.ok(list.get(0));
+                }else {
+                    for(int j=list1.size()-1;j>=0;j--){
+                        if(!list1.get(j).getType().equals("2")&!list1.get(j).getType().equals("1")){
+                            if(list1.get(j).getType().equals("3")){
+                                Date data = new Date();
+                                long time = data.getTime();
+                                long updateTime = list1.get(j).getModifyDate().getTime();
+                                if(3*24*60*60*1000l>time-updateTime){
+                                    //拒绝的审核,超过3天后不显示
+                                    return R.ok(list.get(0));
+                                }else {
+                                    return R.ok(list.get(j));
+                                }
+                            }
+                            return R.ok(list.get(j));
+                        }
+                    }
+                }
+            }else {
+                return R.ok(list.get(0));
+            }
+            return R.ok(list.get(0));
+        }else {
+            return R.fail("尚未注册!");
+        }
+    }
+    @ApiOperation(value = "保存或提交审核")
+    @PostMapping("/save")
+    public ResponseModel<?> save(@RequestBody TJoinpayMch tJoinpayMch) {
+        TAdmin admin = adminService.getById(tJoinpayMch.getAdminId());
+        LambdaQueryWrapper<TJoinpayMch> query = Wrappers.lambdaQuery();
+        query.eq(TJoinpayMch::getAdminId,tJoinpayMch.getAdminId());
+        List<TJoinpayMch> list = tJoinpayMchService.list(query);
+        if(list.size()>0){
+            //已有,属于第二次提交信息,需要审核
+            TJoinpayMch mch = list.get(0);
+            createCheckMch(mch,tJoinpayMch);
+            return R.ok(list.get(0));
+        }else {
+            //没有,直接保存
+            String result = tJoinpayMchService.createMch(tJoinpayMch);
+            return R.fail("尚未注册!");
+        }
+    }
+
+    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");
+            List<TJoinpayMchCheck> list = tJoinpayMchCheckService.list(query);
+            if(list.size()>0){
+                return R.fail("重复提交!");
+            }
+            TJoinpayMchCheck joinpayMchCheck = new TJoinpayMchCheck();
+            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();
+        }
+    }
+}
+

+ 139 - 0
src/main/java/com/szwl/controller/TShandeMchCheckController.java

@@ -0,0 +1,139 @@
+package com.szwl.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.model.bo.R;
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.TAdmin;
+import com.szwl.model.entity.TJoinpayMchCheck;
+import com.szwl.model.entity.TShandeMch;
+import com.szwl.model.entity.TShandeMchCheck;
+import com.szwl.service.TAdminService;
+import com.szwl.service.TShandeMchCheckService;
+import com.szwl.service.TShandeMchService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 杉德支付收款信息变动审核表 前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+@RestController
+@RequestMapping("/tShandeMchCheck")
+public class TShandeMchCheckController {
+    @Autowired
+    TShandeMchCheckService tShandeMchCheckService;
+    @Autowired
+    TShandeMchService tShandeMchService;
+    @Autowired
+    TAdminService adminService;
+    @ApiOperation(value = "商家查找杉德收款账户在审核信息")
+    @PostMapping("/getOne")
+    public ResponseModel<?> findById(Long id, String username) {
+        TAdmin admin = adminService.getById(id);
+        if(!admin.getUsername().equals(username)){
+            return R.fail("username不符合!");
+        }
+        LambdaQueryWrapper<TShandeMchCheck> query = Wrappers.lambdaQuery();
+        query.eq(TShandeMchCheck::getAdminId,id);
+        query.eq(TShandeMchCheck::getCheckType,"0");
+        List<TShandeMchCheck> list = tShandeMchCheckService.list(query);
+        if(list.size()>0){
+            return R.ok(list.get(list.size()-1));
+        }else {
+            return R.fail("没有审核信息");
+        }
+    }
+    @ApiOperation(value = "撤销申请")
+    @PostMapping("/update")
+    public ResponseModel<?> update(Long id) {
+        LambdaQueryWrapper<TShandeMchCheck> query = Wrappers.lambdaQuery();
+        query.eq(TShandeMchCheck::getId,id);
+        List<TShandeMchCheck> list = tShandeMchCheckService.list(query);
+        if(list.size()>0){
+            TShandeMchCheck tShandeMchCheck = list.get(0);
+            tShandeMchCheck.setType("2");
+            tShandeMchCheck.setModifyDate(new Date());
+            tShandeMchCheckService.updateById(tShandeMchCheck);
+            return R.ok();
+        }else {
+            return R.fail("撤销失败");
+        }
+    }
+    @ApiOperation(value = "平台查找杉德收款账户在审核信息")
+    @PostMapping("/getList")
+    public ResponseModel<?> getList(String username, String type) {
+        LambdaQueryWrapper<TShandeMchCheck> query = Wrappers.lambdaQuery();
+        if(StringUtils.isNotEmpty(username)){
+            LambdaQueryWrapper<TAdmin> query1 = Wrappers.lambdaQuery();
+            query1.eq(TAdmin::getUsername,username);
+            List<TAdmin> list1 = adminService.list(query1);
+            if(list1.size()>0){
+                query.eq(TShandeMchCheck::getAdminId,list1.get(0).getId());
+            }
+        }
+        if(StringUtils.isNotEmpty(type)){
+            query.eq(TShandeMchCheck::getType,type);
+        }
+        List<TShandeMchCheck> list = tShandeMchCheckService.list(query);
+        if(list.size()>0){
+            return R.ok(list);
+        }else {
+            return R.fail("没有审核信息");
+        }
+    }
+
+    @ApiOperation(value = "平台审核是否通过")
+    @PostMapping("/shenhe")
+    public ResponseModel<?> shenhe(Long id,String type) {
+        if(type.equals("0")){
+            //通过
+            TShandeMchCheck shandeMchCheck = tShandeMchCheckService.getById(id);
+            LambdaQueryWrapper<TShandeMch> query = Wrappers.lambdaQuery();
+            query.eq(TShandeMch::getAdminId,shandeMchCheck.getAdminId());
+            List<TShandeMch> list = tShandeMchService.list(query);
+            if(list.size()>0){
+                TShandeMch mch = list.get(0);
+                mch.setModifyDate(new Date());
+                mch.setBankName(shandeMchCheck.getBankName());
+                mch.setType(shandeMchCheck.getType());
+                mch.setBankNo(shandeMchCheck.getBankNo());
+                //企业
+                if(shandeMchCheck.getType().equals("0")){
+                    mch.setBankChannelNo(shandeMchCheck.getBankChannelNo());
+                    mch.setBankChannelName(shandeMchCheck.getBankChannelName());
+                }
+                //个人
+                if(shandeMchCheck.getType().equals("1")){
+                    mch.setBankChannelNo(null);
+                    mch.setBankChannelName(null);
+                }
+                tShandeMchService.updateById(mch);
+                shandeMchCheck.setCheckType("1");
+                shandeMchCheck.setModifyDate(new Date());
+                tShandeMchCheckService.updateById(shandeMchCheck);
+            }
+        }else {
+            //拒绝
+            TShandeMchCheck tShandeMchCheck = tShandeMchCheckService.getById(id);
+            tShandeMchCheck.setModifyDate(new Date());
+            tShandeMchCheck.setCheckType("3");
+            tShandeMchCheckService.updateById(tShandeMchCheck);
+        }
+        return R.ok();
+    }
+}
+

+ 146 - 0
src/main/java/com/szwl/controller/TShandeMchController.java

@@ -0,0 +1,146 @@
+package com.szwl.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.model.bo.R;
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.*;
+import com.szwl.service.TAdminService;
+import com.szwl.service.TShandeMchCheckService;
+import com.szwl.service.TShandeMchService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 杉德支付收款信息 前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+@RestController
+@RequestMapping("/tShandeMch")
+public class TShandeMchController {
+    @Autowired
+    TShandeMchCheckService tShandeMchCheckService;
+    @Autowired
+    TShandeMchService tShandeMchService;
+    @Autowired
+    TAdminService adminService;
+    @ApiOperation(value = "查找杉德收款账户信息")
+    @PostMapping("/getOne")
+    public ResponseModel<?> findById(Long id, String username) {
+        TAdmin admin = adminService.getById(id);
+        if(!admin.getUsername().equals(username)){
+            return R.fail("username不符合!");
+        }
+        LambdaQueryWrapper<TShandeMch> query = Wrappers.lambdaQuery();
+        query.eq(TShandeMch::getAdminId,id);
+        List<TShandeMch> list = tShandeMchService.list(query);
+        if(list.size()>0){
+            //已经注册,就要查看是否有提交审核的
+            LambdaQueryWrapper<TShandeMchCheck> query1 = Wrappers.lambdaQuery();
+            query1.eq(TShandeMchCheck::getAdminId,id);
+            List<TShandeMchCheck> list1 = tShandeMchCheckService.list(query1);
+            if(list1.size()>0){
+                int i = 0;
+                for(TShandeMchCheck tShandeMchCheck:list1){
+                    if(tShandeMchCheck.getCheckType().equals("0")||tShandeMchCheck.getCheckType().equals("3")){
+                        i++;
+                    }
+                }
+                if(i==0){
+                    return R.ok(list.get(0));
+                }else {
+                    for(int j=list1.size()-1;j>=0;j--){
+                        if(!list1.get(j).getCheckType().equals("2")&!list1.get(j).getCheckType().equals("1")){
+                            if(list1.get(j).getCheckType().equals("3")){
+                                Date data = new Date();
+                                long time = data.getTime();
+                                long updateTime = list1.get(j).getModifyDate().getTime();
+                                if(3*24*60*60*1000l>time-updateTime){
+                                    //拒绝的审核,超过3天后不显示
+                                    return R.ok(list.get(0));
+                                }else {
+                                    return R.ok(list.get(j));
+                                }
+                            }
+                            return R.ok(list.get(j));
+                        }
+                    }
+                }
+            }else {
+                return R.ok(list.get(0));
+            }
+            return R.ok(list.get(0));
+        }else {
+            return R.fail("尚未注册!");
+        }
+    }
+
+    @ApiOperation(value = "保存或提交审核")
+    @PostMapping("/save")
+    public ResponseModel<?> save(@RequestBody TShandeMch tShandeMch) {
+        TAdmin admin = adminService.getById(tShandeMch.getAdminId());
+        LambdaQueryWrapper<TShandeMch> query = Wrappers.lambdaQuery();
+        query.eq(TShandeMch::getAdminId,tShandeMch.getAdminId());
+        List<TShandeMch> list = tShandeMchService.list(query);
+        if(list.size()>0){
+            //已有,属于第二次提交信息,需要审核
+            TShandeMch oldShandeMch = list.get(0);
+            int i = 0;
+            if(!oldShandeMch.getType().equals(tShandeMch.getType())){
+                i++;
+            }
+            if(!oldShandeMch.getBankName().equals(tShandeMch.getBankName())){
+                i++;
+            }
+            if(!oldShandeMch.getBankNo().equals(tShandeMch.getBankNo())){
+                i++;
+            }
+            if(i>0){
+                TShandeMchCheck shandeMchCheck = new TShandeMchCheck();
+                shandeMchCheck.setType(tShandeMch.getType());
+                shandeMchCheck.setCreateDate(new Date());
+                shandeMchCheck.setModifyDate(new Date());
+                shandeMchCheck.setAdminId(oldShandeMch.getAdminId());
+                shandeMchCheck.setCheckType("0");
+                shandeMchCheck.setBankName(tShandeMch.getBankName());
+                shandeMchCheck.setBankNo(tShandeMch.getBankNo());
+                shandeMchCheck.setSettleableBalance(oldShandeMch.getSettleableBalance());
+                shandeMchCheck.setTodayBalance(oldShandeMch.getTodayBalance());
+                if(tShandeMch.getType().equals("0")){
+                    if(StringUtils.isEmpty(tShandeMch.getBankChannelName())||StringUtils.isEmpty(tShandeMch.getBankChannelNo())){
+                        R.fail("信息有空!");
+                    }
+                    shandeMchCheck.setBankChannelNo(tShandeMch.getBankChannelNo());
+                    shandeMchCheck.setBankChannelName(tShandeMch.getBankChannelName());
+                }
+                tShandeMchCheckService.save(shandeMchCheck);
+            }
+            return R.ok(list.get(0));
+        }else {
+            //没有,直接保存
+            tShandeMch.setSettleableBalance(BigDecimal.valueOf(0.00));
+            tShandeMch.setTodayBalance(BigDecimal.valueOf(0.00));
+            tShandeMch.setTotalSettleableBalance(BigDecimal.valueOf(0.00));
+            tShandeMch.setCreateDate(new Date());
+            tShandeMch.setModifyDate(new Date());
+            tShandeMchService.save(tShandeMch);
+            return R.fail("尚未注册!");
+        }
+    }
+}
+

+ 21 - 0
src/main/java/com/szwl/mapper/TAlarmRecordMapper.java

@@ -0,0 +1,21 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TAlarmRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 报警信息 Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-27
+ */
+public interface TAlarmRecordMapper extends BaseMapper<TAlarmRecord> {
+
+    List<TAlarmRecord> getAlarmList(Long adminId);
+
+    List<TAlarmRecord>  getLastAlarmRecord(Long id);
+}

+ 19 - 0
src/main/java/com/szwl/mapper/TAreaMapper.java

@@ -0,0 +1,19 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TArea;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-27
+ */
+public interface TAreaMapper extends BaseMapper<TArea> {
+
+    List<TArea> getProvinceList();
+}

+ 4 - 0
src/main/java/com/szwl/mapper/TEquipmentMapper.java

@@ -2,6 +2,7 @@ package com.szwl.mapper;
 
 import com.szwl.model.entity.TEquipment;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.szwl.model.query.StatisticsParam;
 
 /**
  * <p>
@@ -13,4 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface TEquipmentMapper extends BaseMapper<TEquipment> {
 
+    String findMachineTotalNum(StatisticsParam param);
+
+    String findMachineUseNum(StatisticsParam param);
 }

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

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TJoinpayMchCheck;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 用户收款信息表变动申请表 Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+public interface TJoinpayMchCheckMapper extends BaseMapper<TJoinpayMchCheck> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TJoinpayMch;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 汇聚支付用户收款信息表 Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+public interface TJoinpayMchMapper extends BaseMapper<TJoinpayMch> {
+
+}

+ 3 - 0
src/main/java/com/szwl/mapper/TOrderMapper.java

@@ -3,6 +3,8 @@ package com.szwl.mapper;
 import com.szwl.model.entity.TOrder;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.Map;
+
 /**
  * <p>
  *  Mapper 接口
@@ -13,4 +15,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface TOrderMapper extends BaseMapper<TOrder> {
 
+    Double getAreaPrice(Map<String, Object> params);
 }

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

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TShandeMchCheck;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 杉德支付收款信息变动审核表 Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+public interface TShandeMchCheckMapper extends BaseMapper<TShandeMchCheck> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TShandeMch;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 杉德支付收款信息 Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+public interface TShandeMchMapper extends BaseMapper<TShandeMch> {
+
+}

+ 57 - 0
src/main/java/com/szwl/mapper/xml/TAlarmRecordMapper.xml

@@ -0,0 +1,57 @@
+<?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.TAlarmRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.TAlarmRecord">
+        <id column="id" property="id" />
+        <result column="create_date" property="createDate" />
+        <result column="modify_date" property="modifyDate" />
+        <result column="alarm_content" property="alarmContent" />
+        <result column="client_id" property="clientId" />
+        <result column="remark" property="remark" />
+        <result column="admin_level" property="adminLevel" />
+        <result column="equipment_id" property="equipmentId" />
+        <result column="name" property="name" />
+        <result column="occurrence_time" property="occurrenceTime" />
+        <result column="admin_id" property="adminId" />
+        <result column="admin_user_name" property="adminUserName" />
+        <result column="agency_id" property="agencyId" />
+        <result column="merchant_id" property="merchantId" />
+        <result column="personage_id" property="personageId" />
+        <result column="type" property="type" />
+        <result column="is_eliminate" property="isEliminate" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_date, modify_date, alarm_content, client_id, remark, admin_level, equipment_id, name, occurrence_time, admin_id, admin_user_name, agency_id, merchant_id, personage_id, type, is_eliminate
+    </sql>
+    <!-- 获取今天所有机器全部警告-->
+    <select id="getAlarmList" parameterType="java.lang.Long" resultMap="BaseResultMap">
+        SELECT * FROM
+        t_alarm_record a
+        where 1=1
+        <!--    <if test="equipmentId != null and equipmentId !=''">-->
+        <!--      and a.equipment_id = #{equipmentId}-->
+        <!--    </if>-->
+        <if test="adminId != null and adminId !=''">
+            and a.admin_id = #{adminId}
+        </if>
+        AND date_format(a.create_date, '%Y-%m-%d') = date_format(now(), '%Y-%m-%d')
+    </select>
+    <!-- 获取最新警告-->
+    <select id="getLastAlarmRecord" parameterType="java.lang.Long" resultMap="BaseResultMap">
+        select * from t_alarm_record b where EXISTS(
+        select * from (
+        select a.client_id,max(a.create_date) as create_date
+        from t_alarm_record a
+        where 1=1
+        <if test="adminId != null and adminId !=''">
+            and a.admin_id = #{adminId}
+        </if>
+        group by a.client_id)
+        tab1 where b.client_id = tab1.client_id and b.create_date = tab1.create_date
+        )
+    </select>
+</mapper>

+ 37 - 0
src/main/java/com/szwl/mapper/xml/TAreaMapper.xml

@@ -0,0 +1,37 @@
+<?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.TAreaMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.TArea">
+        <id column="id" property="id" />
+        <result column="create_date" property="createDate" />
+        <result column="modify_date" property="modifyDate" />
+        <result column="orders" property="orders" />
+        <result column="full_name" property="fullName" />
+        <result column="name" property="name" />
+        <result column="tree_path" property="treePath" />
+        <result column="parent" property="parent" />
+        <result column="code" property="code" />
+    </resultMap>
+    <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.szwl.model.entity.TArea">
+        <result column="full_name" jdbcType="LONGVARCHAR" property="fullName"/>
+    </resultMap>
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_date, modify_date, orders, full_name, name, tree_path, parent, code
+    </sql>
+    <select id="getProvinceList" resultMap="ResultMapWithBLOBs">
+        SELECT
+        *
+        FROM
+        t_area b
+        WHERE
+        b.id in (
+        SELECT DISTINCT
+        (a.area_id)
+        FROM
+        t_equipment a
+        )
+    </select>
+</mapper>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 19 - 0
src/main/java/com/szwl/mapper/xml/TEquipmentMapper.xml


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 52 - 0
src/main/java/com/szwl/mapper/xml/TJoinpayMchCheckMapper.xml


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 52 - 0
src/main/java/com/szwl/mapper/xml/TJoinpayMchMapper.xml


+ 22 - 1
src/main/java/com/szwl/mapper/xml/TOrderMapper.xml

@@ -41,5 +41,26 @@
     <sql id="Base_Column_List">
         id, create_date, modify_date, admin_id, admin_proportion, agency_id, agency_proportion, alt_info, client_id, equipment_id, frp_code, merchant_id, merchant_proportion, pay_date, personage_id, personage_proportion, price, product_id, product_name, refund_date, sn, status, type, trx_no, refund_trx_no, es, refund_amount, note, pay_platform, is_settlement, proportion_desc
     </sql>
-
+    <!-- 统计 地区销售数据-->
+    <select id="getAreaPrice" resultType="java.lang.Double">
+        SELECT
+        sum(c.price)
+        FROM
+        t_order c
+        WHERE
+        c. STATUS = '1'
+        AND c.equipment_id IN (
+        SELECT
+        a.id
+        FROM
+        t_equipment a
+        WHERE
+        a.area_id in
+        <foreach  item="item" collection="areaIds" index="index"  open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        )
+        AND c.create_date >= STR_TO_DATE(CONCAT(#{startDate},' 00:00:00'),'%Y/%m/%d %H:%i:%s')
+        <![CDATA[ AND c.create_date <= STR_TO_DATE(CONCAT(#{endDate},' 23:59:59'),'%Y/%m/%d %H:%i:%s') ]]>
+    </select>
 </mapper>

+ 26 - 0
src/main/java/com/szwl/mapper/xml/TShandeMchCheckMapper.xml

@@ -0,0 +1,26 @@
+<?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.TShandeMchCheckMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.TShandeMchCheck">
+        <id column="id" property="id" />
+        <result column="create_date" property="createDate" />
+        <result column="modify_date" property="modifyDate" />
+        <result column="bank_name" property="bankName" />
+        <result column="bank_no" property="bankNo" />
+        <result column="type" property="type" />
+        <result column="admin_id" property="adminId" />
+        <result column="settleable_balance" property="settleableBalance" />
+        <result column="today_balance" property="todayBalance" />
+        <result column="check_type" property="checkType" />
+        <result column="bank_channel_no" property="bankChannelNo" />
+        <result column="bank_channel_name" property="bankChannelName" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_date, modify_date, bank_name, bank_no, type, admin_id, settleable_balance, today_balance, check_type, bank_channel_no, bank_channel_name
+    </sql>
+
+</mapper>

+ 28 - 0
src/main/java/com/szwl/mapper/xml/TShandeMchMapper.xml

@@ -0,0 +1,28 @@
+<?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.TShandeMchMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.TShandeMch">
+        <id column="id" property="id" />
+        <result column="create_date" property="createDate" />
+        <result column="modify_date" property="modifyDate" />
+        <result column="bank_name" property="bankName" />
+        <result column="bank_no" property="bankNo" />
+        <result column="type" property="type" />
+        <result column="admin_id" property="adminId" />
+        <result column="settleable_balance" property="settleableBalance" />
+        <result column="today_balance" property="todayBalance" />
+        <result column="total_settleable_balance" property="totalSettleableBalance" />
+        <result column="settleable_date" property="settleableDate" />
+        <result column="last_settleable_balance" property="lastSettleableBalance" />
+        <result column="bank_channel_no" property="bankChannelNo" />
+        <result column="bank_channel_name" property="bankChannelName" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_date, modify_date, bank_name, bank_no, type, admin_id, settleable_balance, today_balance, total_settleable_balance, settleable_date, last_settleable_balance, bank_channel_no, bank_channel_name
+    </sql>
+
+</mapper>

+ 48 - 0
src/main/java/com/szwl/model/bean/Child.java

@@ -0,0 +1,48 @@
+package com.szwl.model.bean;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class Child {
+    @ApiModelProperty(value="id")
+    private Long id;
+    @ApiModelProperty(value="名称")
+    private String name;
+    @ApiModelProperty(value="机器列表")
+    private List<Childlast> children;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public List<Childlast> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<Childlast> children) {
+        this.children = children;
+    }
+}

+ 36 - 0
src/main/java/com/szwl/model/bean/Childlast.java

@@ -0,0 +1,36 @@
+package com.szwl.model.bean;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class Childlast {
+    @ApiModelProperty(value="id")
+    private Long id;
+    @ApiModelProperty(value="名称")
+    private String name;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 29 - 0
src/main/java/com/szwl/model/bean/Children2.java

@@ -0,0 +1,29 @@
+package com.szwl.model.bean;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+import java.util.Set;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class Children2 {
+    @ApiModelProperty(value="id")
+    private Long id;
+    @ApiModelProperty(value="名称")
+    private String name;
+    @ApiModelProperty(value="商家列表")
+    private List<Child> children;
+    @ApiModelProperty(value="属于该市的所有id")
+    private Set<Long> city;
+    @ApiModelProperty(value="销售数据")
+    private String money;
+}

+ 29 - 0
src/main/java/com/szwl/model/bean/Children3.java

@@ -0,0 +1,29 @@
+package com.szwl.model.bean;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+import java.util.Set;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class Children3 {
+    @ApiModelProperty(value="id")
+    private Long id;
+    @ApiModelProperty(value="名称")
+    private String name;
+    @ApiModelProperty(value="市级列表")
+    private List<Children2> children;
+    @ApiModelProperty(value="属于该省的所有id")
+    private Set<Long> province;
+    @ApiModelProperty(value="销售数据")
+    private String money;
+}

+ 22 - 0
src/main/java/com/szwl/model/bean/TAdminDTO.java

@@ -0,0 +1,22 @@
+package com.szwl.model.bean;
+
+import com.szwl.model.entity.TAdmin;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class TAdminDTO extends TAdmin {
+
+	@ApiModelProperty(value="设备列表")
+	private List<TEquipmentDTO> equipmentList;
+}

+ 68 - 0
src/main/java/com/szwl/model/bean/TEquipmentDTO.java

@@ -0,0 +1,68 @@
+package com.szwl.model.bean;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.szwl.model.entity.TAlarmRecord;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.utils.DateUtils;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@ToString
+public class TEquipmentDTO extends TEquipment {
+    @ApiModelProperty(value="所以报警信息")
+    private List<TAlarmRecord> alarmList;
+    @ApiModelProperty(value="最新报警信息")
+    private String alarmContent = "暂无数据";
+
+    @ApiModelProperty(value="当天是否存在告警")
+    private boolean hasTodayAlarm= false;
+
+    public List<TAlarmRecord> getAlarmList() {
+        return alarmList;
+    }
+
+    public void setAlarmList(List<TAlarmRecord> alarmList) {
+        this.alarmList = alarmList;
+    }
+
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value="报警发生时间")
+
+    private Date occurrenceTime;
+
+    public String getAlarmContent() {
+        return alarmContent;
+    }
+
+    public void setAlarmContent(String alarmContent) {
+        this.alarmContent = alarmContent;
+    }
+
+    public boolean isHasTodayAlarm() {
+        return hasTodayAlarm;
+    }
+
+    public void setHasTodayAlarm(boolean hasTodayAlarm) {
+        this.hasTodayAlarm = hasTodayAlarm;
+    }
+
+    public Date getOccurrenceTime() {
+        return occurrenceTime;
+    }
+
+    public void setOccurrenceTime(Date occurrenceTime) {
+        if(null != occurrenceTime){
+            this.hasTodayAlarm = DateUtils.isSameDay(new Date(),occurrenceTime);
+            this.occurrenceTime = occurrenceTime;
+        }
+    }
+}

+ 269 - 0
src/main/java/com/szwl/model/bo/JoinpayConstant.java

@@ -0,0 +1,269 @@
+package com.szwl.model.bo;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 汇聚支付 常量
+ */
+public class JoinpayConstant {
+
+
+    /**
+     * 商户编码
+     */
+    public final static String mch_no = "888106600000003";
+
+
+    /**
+     * 商户密钥 : MD5
+     */
+    public final static String key = "8cb1d25eba7d4f3caecf1f0569150e04";
+
+
+    /**
+     * 汇聚公钥
+     */
+    public final static String publickey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCLgawJlQ3O8/O9YmJt6mi0pzh9JiDGp2G6IW3p8NTZXE5tIBZRbQAkHnr/zaLh0kDHMtIGAcGUtgXilRxXeUIuc0/j561YLsxAORma2XerniRCLWrXS4yM8F1/813Rv21JoNFkDZWHdTgEpKTH8GaGYOHiEytIN0LvPzEvNsimWQIDAQAB";
+
+    /**
+     * >>>>>>>>>>>>> 币种 >>>>>>>>>>>>>
+     *
+     */
+    /**
+     * 人民币
+     */
+    public final static String Cur_RMB = "1";
+
+
+    /**
+     *  支付成功回调
+     */
+    public final static String Notify_Url = "http://app.sunzee.com.cn/api/order/notify.htm";
+//    public final static String Notify_Url = "http://slb.sunzee.com.cn/api/order/notify.htm";
+
+    public final static String mg280Notify_Url = "http://app.sunzee.com.cn/api/order/mg280Notify.htm";
+//    public final static String mg280Notify_Url = "http://slb.sunzee.com.cn/api/order/mg280Notify.htm";
+
+    public final static String Notify_Url_PromoCode = "http://app.sunzee.com.cn/api/order/promoCodeNotify.htm";
+//    public final static String Notify_Url_PromoCode = "http://slb.sunzee.com.cn/api/order/promoCodeNotify.htm";
+
+    public final static String Jiesuan_Url = "http://app.sunzee.com.cn/api/order/jiesuan.htm";
+//    public final static String Jiesuan_Url = "http://slb.sunzee.com.cn/api/order/jiesuan.htm";
+
+    public final static Map<String,String> Result_status = new HashMap<>();
+    /**
+     *  退款成功回调
+     */
+    public final static String Notify_Refund_Url = "http://app.sunzee.com.cn/api/order/notifyRefund.htm";
+    public final static String Admin_Notify_Refund_Url = "http://app.sunzee.com.cn/api/order/adminNotifyRefund.htm";
+
+
+    /**
+     * 支付回调支付状态代码
+     */
+    public final static String r6_Status_100 = "100";
+    public final static String r6_Status_101 = "101";
+
+    /**
+     * >>>>>>>>>>>>> 签名类型 >>>>>>>>>>>>>
+     * 1=MD5,2=RSA
+     */
+    public final static String sign_type_MD5 = "1";
+    public final static String sign_type_RSA = "2";
+
+
+    /**
+     * >>>>>>>>>>>>> 分账方商户类型 >>>>>>>>>>>>>
+     * 10:个人,11:个体工商户,12:企业
+     */
+    public final static Integer alt_merchant_type1 = 10;
+    public final static Integer alt_merchant_type2 = 11;
+    public final static Integer alt_merchant_type3 = 12;
+
+    /**
+     * >>>>>>>>>>>>> 分账方结算方式 >>>>>>>>>>>>>
+     * 1 由汇聚自动结算
+     * 2 由商户平台手工结算(结算接口)
+     */
+    public final static Integer sett_mode1 = 1;
+    public final static Integer sett_mode2 = 2;
+
+
+    /**
+     * >>>>>>>>>>>>> 结算周期类型 >>>>>>>>>>>>>
+     * 1 工作日,2 自然日,3 月结日
+     */
+    public final static Integer sett_date_type1 = 1;
+    public final static Integer sett_date_type2 = 2;
+    public final static Integer sett_date_type3 = 3;
+
+
+    /**
+     * >>>>>>>>>>>>> 账户类型 >>>>>>>>>>>>>
+     * 1 借记卡,4 对公账户
+     */
+    public final static Integer bank_account_type1 = 1;
+    public final static Integer bank_account_type4 = 4;
+
+
+    /**
+     *
+     *
+     *  >>>>>>>>>>>>> 响应码 >>>>>>>>>>>>>
+     *
+     *
+     */
+
+    /**
+     * 受理响应码
+     */
+    public static final Map<String, String> resp_code = new HashMap<>();
+    public static final String resp_code1 = "A1000";
+    public static final String resp_code2 = "A2000";
+    public static final String resp_code3 = "A3000";
+
+    static {
+        resp_code.put(resp_code1, "受理成功");
+        resp_code.put(resp_code2, "受理失败,具体失败原因查看业务响应码");
+        resp_code.put(resp_code3, "受理未知(如:接口调用超时)");
+    }
+
+    /**
+     * 商户状态
+     */
+    public static final Map<String, String> order_status = new HashMap<>();
+    public static final String order_status1 = "P0001";
+    public static final String order_status2 = "P1000";
+    public static final String order_status3 = "P2000";
+    public static final String order_status4 = "P3000";
+    public static final String order_status5 = "P3001";
+    public static final String order_status6 = "P3002";
+    public static final String order_status7 = "P3003";
+
+    static {
+        order_status.put(order_status1, "待处理中(受理中)");
+        order_status.put(order_status2, "交易成功");
+        order_status.put(order_status3, "交易失败");
+        order_status.put(order_status4, "结果未知");
+        order_status.put(order_status5, "处理中");
+        order_status.put(order_status6, "激活");
+        order_status.put(order_status7, "冻结");
+    }
+
+    /**
+     * 业务响应码
+     */
+    public static final Map<String, String> biz_code = new HashMap<>();
+    public static final String biz_code1 = "B100000";
+    public static final String biz_code2 = "B100001";
+    public static final String biz_code3 = "B100002";
+    public static final String biz_code4 = "B100003";
+    public static final String biz_code5 = "B101001";
+    public static final String biz_code6 = "B101002";
+    public static final String biz_code7 = "B101003";
+    public static final String biz_code8 = "B101004";
+    public static final String biz_code9 = "B101005";
+    public static final String biz_code10 = "B103012";
+    public static final String biz_code11 = "B103013";
+    public static final String biz_code12 = "B102001";
+
+    static {
+        biz_code.put(biz_code1, "受理成功");
+        biz_code.put(biz_code2, "验签失败");
+        biz_code.put(biz_code3, "验参失败");
+        biz_code.put(biz_code4, "结果未知,SYS_ERROR");
+        biz_code.put(biz_code5, "登录名已存在");
+        biz_code.put(biz_code6, "找不到卡bin");
+        biz_code.put(biz_code7, "联行号有误");
+        biz_code.put(biz_code8, "查找不到银行信息");
+        biz_code.put(biz_code9, "不支持的结算卡类型");
+        biz_code.put(biz_code10, "担保账户不存在");
+        biz_code.put(biz_code11, "担保账户余额不足");
+        biz_code.put(biz_code12, "分账方不存在");
+    }
+
+
+    /**
+     * >>>>>>>>>>>>> 支付交易类型 >>>>>>>>>>>>>
+     */
+    public static final Map<String, String> frp_code = new HashMap<>();
+    public static final String frp_code_ALIPAY_NATIVE = "ALIPAY_NATIVE";
+    public static final String frp_code_ALIPAY_CARD = "ALIPAY_CARD";
+    public static final String frp_code_ALIPAY_APP = "ALIPAY_APP";
+    public static final String frp_code_ALIPAY_H5 = "ALIPAY_H5";
+    public static final String frp_code_ALIPAY_FWC = "ALIPAY_FWC";
+    public static final String frp_code_ALIPAY_SYT = "ALIPAY_SYT";
+    public static final String frp_code_WEIXIN_NATIVE = "WEIXIN_NATIVE";
+    public static final String frp_code_WEIXIN_CARD = "WEIXIN_CARD";
+    public static final String frp_code_WEIXIN_APP = "WEIXIN_APP";
+    public static final String frp_code_WEIXIN_APP2 = "WEIXIN_APP2";
+    public static final String frp_code_WEIXIN_H5 = "WEIXIN_H5";
+    public static final String frp_code_WEIXIN_GZH = "WEIXIN_GZH";
+    public static final String frp_code_WEIXIN_XCX = "WEIXIN_XCX";
+    public static final String frp_code_JD_NATIVE = "JD_NATIVE";
+    public static final String frp_code_JD_CARD = "JD_CARD";
+    public static final String frp_code_JD_APP = "JD_APP";
+    public static final String frp_code_JD_H5 = "JD_H5";
+    public static final String frp_code_QQ_NATIVE = "QQ_NATIVE";
+    public static final String frp_code_QQ_CARD = "QQ_CARD";
+    public static final String frp_code_QQ_APP = "QQ_APP";
+    public static final String frp_code_QQ_H5 = "QQ_H5";
+    public static final String frp_code_QQ_GZH = "QQ_GZH";
+    public static final String frp_code_UNIONPAY_NATIVE = "UNIONPAY_NATIVE";
+    public static final String frp_code_UNIONPAY_CARD = "UNIONPAY_CARD";
+    public static final String frp_code_UNIONPAY_APP = "UNIONPAY_APP";
+    public static final String frp_code_UNIONPAY_H5 = "UNIONPAY_H5";
+    public static final String frp_code_BAIDU_NATIVE = "BAIDU_NATIVE";
+    public static final String frp_code_SUNING_NATIVE = "SUNING_NATIVE";
+
+
+    static {
+        biz_code.put(frp_code_ALIPAY_NATIVE, "支付宝扫码(主扫)");
+        biz_code.put(frp_code_ALIPAY_CARD, "支付宝刷卡(被扫)");
+        biz_code.put(frp_code_ALIPAY_APP, "支付宝APP 支付");
+        biz_code.put(frp_code_ALIPAY_H5, "支付宝H5");
+        biz_code.put(frp_code_ALIPAY_FWC, "支付宝服务窗");
+        biz_code.put(frp_code_ALIPAY_SYT, "支付宝收银台");
+        biz_code.put(frp_code_WEIXIN_NATIVE, "微信扫码(主扫)");
+        biz_code.put(frp_code_WEIXIN_CARD, "微信刷卡(被扫)");
+        biz_code.put(frp_code_WEIXIN_APP, "微信APP 支付");
+        biz_code.put(frp_code_WEIXIN_APP2, "微信APP2 支付");
+        biz_code.put(frp_code_WEIXIN_H5, "微信H5 支付");
+        biz_code.put(frp_code_WEIXIN_GZH, "微信公众号支付");
+        biz_code.put(frp_code_WEIXIN_XCX, "微信小程序支付");
+        biz_code.put(frp_code_JD_NATIVE, "京东扫码(主扫)");
+        biz_code.put(frp_code_JD_CARD, "京东刷卡(被扫)");
+        biz_code.put(frp_code_JD_APP, "京东APP 支付");
+        biz_code.put(frp_code_JD_H5, "京东H5 支付");
+        biz_code.put(frp_code_QQ_NATIVE, "QQ 扫码(主扫)");
+        biz_code.put(frp_code_QQ_CARD, "QQ 刷卡(被扫)");
+        biz_code.put(frp_code_QQ_APP, "QQ APP 支付");
+        biz_code.put(frp_code_QQ_H5, "QQH5 支付");
+        biz_code.put(frp_code_QQ_GZH, "QQ 公众号支付");
+        biz_code.put(frp_code_UNIONPAY_NATIVE, "银联扫码(主扫)");
+        biz_code.put(frp_code_UNIONPAY_CARD, "银联刷卡(被扫)");
+        biz_code.put(frp_code_UNIONPAY_APP, "银联APP 支付");
+        biz_code.put(frp_code_UNIONPAY_H5, "银联H5");
+        biz_code.put(frp_code_BAIDU_NATIVE, "百度扫码(主扫)");
+        biz_code.put(frp_code_SUNING_NATIVE, "苏宁扫码(主扫)");
+    }
+
+
+    /**
+     *
+     *
+     *  >>>>>>>>>>>>> 汇聚支付接口 >>>>>>>>>>>>>
+     *
+     *
+     */
+
+    /**
+     * 版本
+     */
+    public static final String pay_version = "1.0";
+
+
+
+
+}

+ 10 - 10
src/main/java/com/szwl/model/bo/JsonUtils.java

@@ -85,16 +85,16 @@ public final class JsonUtils {
      * @param typeReference 对象类型
      * @return 对象
      */
-    public static <T> T toObject(String json, TypeReference<?> typeReference) {
-        Assert.hasText(json);
-        Assert.notNull(typeReference);
-        try {
-            return mapper.readValue(json, typeReference);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
+//    public static <T> T toObject(String json, TypeReference<?> typeReference) {
+//        Assert.hasText(json);
+//        Assert.notNull(typeReference);
+//        try {
+//            return mapper.readValue(json, typeReference);
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        return null;
+//    }
 
     /**
      * 将JSON字符串转换为对象

+ 74 - 0
src/main/java/com/szwl/model/entity/TAlarmRecord.java

@@ -0,0 +1,74 @@
+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 2022-04-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TAlarmRecord对象", description="报警信息")
+public class TAlarmRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Date createDate;
+
+    private Date modifyDate;
+
+    @ApiModelProperty(value = "报警内容;")
+    private String alarmContent;
+
+    @ApiModelProperty(value = "设备编号;")
+    private String clientId;
+
+    @ApiModelProperty(value = "标记;")
+    private String remark;
+
+    @ApiModelProperty(value = "用户级别;")
+    private String adminLevel;
+
+    @ApiModelProperty(value = "设备id;")
+    private Long equipmentId;
+
+    @ApiModelProperty(value = "名称;")
+    private String name;
+
+    @ApiModelProperty(value = "发生时间;")
+    private Date occurrenceTime;
+
+    @ApiModelProperty(value = "用户id;")
+    private Long adminId;
+
+    @ApiModelProperty(value = "用户名;")
+    private String adminUserName;
+
+    private Long agencyId;
+
+    private Long merchantId;
+
+    private Long personageId;
+
+    @ApiModelProperty(value = "级别(省,市,终端);")
+    private Integer type;
+
+    @ApiModelProperty(value = "报警是否消除;0:没有,1:已消除")
+    private Integer isEliminate;
+
+
+}

+ 48 - 0
src/main/java/com/szwl/model/entity/TArea.java

@@ -0,0 +1,48 @@
+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 2022-04-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TArea对象", description="")
+public class TArea implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Date createDate;
+
+    private Date modifyDate;
+
+    private Integer orders;
+
+    @ApiModelProperty(value = "地址全称;")
+    private String fullName;
+
+    private String name;
+
+    private String treePath;
+
+    private Long parent;
+
+    private String code;
+
+
+}

+ 140 - 0
src/main/java/com/szwl/model/entity/TJoinpayMch.java

@@ -0,0 +1,140 @@
+package com.szwl.model.entity;
+
+import java.math.BigDecimal;
+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 2022-04-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TJoinpayMch对象", description="汇聚支付用户收款信息表")
+public class TJoinpayMch implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Date createDate;
+
+    private Date modifyDate;
+
+    @ApiModelProperty(value = "商家id;")
+    private Long adminId;
+
+    @ApiModelProperty(value = "可取余额账户;")
+    private BigDecimal altAvilBalance;
+
+    @ApiModelProperty(value = "担保账户 : 担保账户里面得担保余额,金额以分为单位;")
+    private BigDecimal altGuarBalance;
+
+    @ApiModelProperty(value = "主账户余额;")
+    private BigDecimal altMainBalance;
+
+    @ApiModelProperty(value = "分账方名称;")
+    private String altMchName;
+
+    @ApiModelProperty(value = "分账方账号;")
+    private String altMchNo;
+
+    @ApiModelProperty(value = "分账方商户简称;")
+    private String altMchShortName;
+
+    @ApiModelProperty(value = "分账方商户类型,10:个人,11:个体工商户,12:企业;")
+    private Integer altMerchantType;
+
+    @ApiModelProperty(value = "银行账户名称,分账方结算银行账户名称;")
+    private String bankAccountName;
+
+    @ApiModelProperty(value = "银行账号;")
+    private String bankAccountNo;
+
+    @ApiModelProperty(value = "账户类型      * 1 借记卡,4 对公账户;")
+    private Integer bankAccountType;
+
+    @ApiModelProperty(value = "联行号;")
+    private String bankChannelNo;
+
+    @ApiModelProperty(value = "业务响应码;")
+    private String bizCode;
+
+    @ApiModelProperty(value = "业务联系人手机;")
+    private String busiContactMobileNo;
+
+    @ApiModelProperty(value = "业务联系人姓名;")
+    private String busiContactName;
+
+    @ApiModelProperty(value = "身份证有效期;")
+    private String idCardExpiry;
+
+    @ApiModelProperty(value = "身份证;")
+    private String idCardNo;
+
+    @ApiModelProperty(value = "法人;")
+    private String legalPerson;
+
+    @ApiModelProperty(value = "营业执照有效期;")
+    private String licenseExpiry;
+
+    @ApiModelProperty(value = "营业执照编号;")
+    private String licenseNo;
+
+    @ApiModelProperty(value = "分账方登录名,即邮箱;")
+    private String loginName;
+
+    @ApiModelProperty(value = "经营地址;")
+    private String manageAddr;
+
+    @ApiModelProperty(value = "经营范围;")
+    private String manageScope;
+
+    @ApiModelProperty(value = "商户状态;")
+    private String orderStatus;
+
+    @ApiModelProperty(value = "电话;")
+    private String phoneNo;
+
+    @ApiModelProperty(value = "受理响应码;")
+    private String respCode;
+
+    @ApiModelProperty(value = "结算周期;")
+    private Integer riskDay;
+
+    @ApiModelProperty(value = "结算周期类型      * 1 工作日,2 自然日,3 月结日;")
+    private Integer settDateType;
+
+    @ApiModelProperty(value = "结算方式      * 1 由汇聚自动结算      * 2 由商户平台手工结算(结算接口);")
+    private Integer settMode;
+
+    @ApiModelProperty(value = "开通状态;")
+    private String status;
+
+    @ApiModelProperty(value = "签约状态;")
+    private String signStatus;
+
+    @ApiModelProperty(value = "签约流水号;")
+    private String signTrxNo;
+
+    @ApiModelProperty(value = "图片审核备注;")
+    private String approveNote;
+
+    @ApiModelProperty(value = "图片审核状态;")
+    private String approveStatus;
+
+    private String type;
+
+
+}

+ 108 - 0
src/main/java/com/szwl/model/entity/TJoinpayMchCheck.java

@@ -0,0 +1,108 @@
+package com.szwl.model.entity;
+
+import java.math.BigDecimal;
+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 2022-04-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TJoinpayMchCheck对象", description="用户收款信息表变动申请表")
+public class TJoinpayMchCheck implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Date createDate;
+
+    private Date modifyDate;
+
+    private Long adminId;
+
+    private BigDecimal altAvilBalance;
+
+    private BigDecimal altGuarBalance;
+
+    private BigDecimal altMainBalance;
+
+    private String altMchName;
+
+    private String altMchNo;
+
+    private String altMchShortName;
+
+    private Integer altMerchantType;
+
+    private String bankAccountName;
+
+    private String bankAccountNo;
+
+    private Integer bankAccountType;
+
+    private String bankChannelNo;
+
+    private String bizCode;
+
+    private String busiContactMobileNo;
+
+    private String busiContactName;
+
+    private String idCardExpiry;
+
+    private String idCardNo;
+
+    private String legalPerson;
+
+    private String licenseExpiry;
+
+    private String licenseNo;
+
+    private String loginName;
+
+    private String manageAddr;
+
+    private String manageScope;
+
+    private String orderStatus;
+
+    private String phoneNo;
+
+    private String respCode;
+
+    private Integer riskDay;
+
+    private Integer settDateType;
+
+    private Integer settMode;
+
+    private String status;
+
+    private String signStatus;
+
+    private String signTrxNo;
+
+    private String approveNote;
+
+    private String approveStatus;
+    /**
+     * 审核状态  0:未审核  1:通过  2:取消  3:不通过
+     */
+    private String type;
+
+
+}

+ 69 - 0
src/main/java/com/szwl/model/entity/TShandeMch.java

@@ -0,0 +1,69 @@
+package com.szwl.model.entity;
+
+import java.math.BigDecimal;
+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 2022-04-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TShandeMch对象", description="杉德支付收款信息")
+public class TShandeMch implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Date createDate;
+
+    private Date modifyDate;
+
+    @ApiModelProperty(value = "收款人名称;")
+    private String bankName;
+
+    @ApiModelProperty(value = "收款人账号;")
+    private String bankNo;
+
+    @ApiModelProperty(value = "0:企业杉德宝;1:个人杉德宝")
+    private String type;
+
+    @ApiModelProperty(value = "商家id;")
+    private Long adminId;
+
+    @ApiModelProperty(value = "待清算余额;")
+    private BigDecimal settleableBalance;
+
+    @ApiModelProperty(value = "今日收款余额;")
+    private BigDecimal todayBalance;
+
+    @ApiModelProperty(value = "已清算余额;")
+    private BigDecimal totalSettleableBalance;
+
+    @ApiModelProperty(value = "上一次结算时间;")
+    private Date settleableDate;
+
+    @ApiModelProperty(value = "上一次清算余额;")
+    private BigDecimal lastSettleableBalance;
+
+    @ApiModelProperty(value = "联行号")
+    private String bankChannelNo;
+
+    @ApiModelProperty(value = "开户行名称")
+    private String bankChannelName;
+
+
+}

+ 58 - 0
src/main/java/com/szwl/model/entity/TShandeMchCheck.java

@@ -0,0 +1,58 @@
+package com.szwl.model.entity;
+
+import java.math.BigDecimal;
+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 2022-04-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TShandeMchCheck对象", description="杉德支付收款信息变动审核表")
+public class TShandeMchCheck implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Date createDate;
+
+    private Date modifyDate;
+
+    private String bankName;
+
+    private String bankNo;
+
+    @ApiModelProperty(value = "0:企业杉德宝;1:个人杉德宝")
+    private String type;
+
+    private Long adminId;
+
+    private BigDecimal settleableBalance;
+
+    private BigDecimal todayBalance;
+
+    /**
+     * 审核状态  0:未审核  1:通过  2:取消  3:不通过
+     */
+    private String checkType;
+
+    private String bankChannelNo;
+
+    private String bankChannelName;
+
+
+}

+ 80 - 0
src/main/java/com/szwl/model/utils/AESUtil.java

@@ -0,0 +1,80 @@
+package com.szwl.model.utils;
+
+
+
+import com.szwl.model.utils.constants.Algorithm;
+import com.szwl.model.utils.constants.CommonConst;
+import com.szwl.model.utils.exceptions.JPException;
+
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.SecureRandom;
+
+/**
+ * AES加解密工具类
+ * @author chenyf
+ * @date 2018-12-15
+ */
+public class AESUtil {
+    private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding";//算法/模式/补码方式
+
+    public static String encrypt(String content, String password, String ivParam){
+        try {
+            SecretKeySpec secSpec = genSecretKeySpec(password);
+            Cipher cipher = Cipher.getInstance(TRANSFORMATION);
+            IvParameterSpec ivp = new IvParameterSpec(ivParam.getBytes(CommonConst.ENCODING_UTF_8));
+            cipher.init(Cipher.ENCRYPT_MODE, secSpec, ivp);
+            byte[] encrypted = cipher.doFinal(content.getBytes(CommonConst.ENCODING_UTF_8));
+            return HEXUtil.encode(CodeUtil.base64Encode(encrypted));
+        }catch(Throwable e){
+            throw new JPException("AES加密异常", e);
+        }
+    }
+
+    public static String decrypt(String content, String password, String ivParam){
+        try {
+            SecretKeySpec secSpec = genSecretKeySpec(password);
+            Cipher cipher = Cipher.getInstance(TRANSFORMATION);
+            IvParameterSpec ivp = new IvParameterSpec(ivParam.getBytes(CommonConst.ENCODING_UTF_8));
+            cipher.init(Cipher.DECRYPT_MODE, secSpec, ivp);
+            byte[] encrypted1 = CodeUtil.base64Decode(HEXUtil.decode(content));
+            byte[] original = cipher.doFinal(encrypted1);
+            return new String(original, CommonConst.ENCODING_UTF_8);
+        }catch(Throwable e){
+            throw new JPException("AES解密异常", e);
+        }
+    }
+
+    /**
+     * 生成密钥对象 密钥可支持16位或32位(32位是否支持取决于JDK)
+     * @param password
+     * @return
+     * @throws Exception
+     */
+    public static SecretKeySpec genSecretKeySpec(String password) throws Exception{
+        if (password == null || (password.length() != 16 && password.length() != 32)) {
+            throw new JPException("password长度须为16或32位");
+        }
+        KeyGenerator kGen = KeyGenerator.getInstance(Algorithm.AES);
+        SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
+        secureRandom.setSeed(password.getBytes());
+        kGen.init(password.length()==16 ? 128 : 256, secureRandom);
+        SecretKey secretKey = kGen.generateKey();
+        byte[] enCodeFormat = secretKey.getEncoded();
+        return new SecretKeySpec(enCodeFormat, Algorithm.AES);
+    }
+
+    public static void main(String[] args){
+        String key = "28E9B48CBCC4E5DB";
+        String iv = "B1177108BAB2BAB3";
+
+        String content1 = "31454E38597073356A6B7778564A54656B374B734B513D3D";
+        String content2 = "626E4B7049662F435A697164766E4D4E5577374C6B773D3D";
+
+        System.out.println("content1 = " + decrypt(content1, key, iv));
+        System.out.println("content2 = " + decrypt(content2, key, iv));
+    }
+}

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

@@ -0,0 +1,117 @@
+package com.szwl.model.utils;
+
+import java.io.ByteArrayOutputStream;
+
+/**
+ * base64 format encoding & decoding
+ */
+public class Base64Util {
+	private static char[] base64EncodeChars = new char[] { 'A', 'B', 'C', 'D',
+			'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
+			'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
+			'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
+			'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3',
+			'4', '5', '6', '7', '8', '9', '+', '/' };
+
+	private static byte[] base64DecodeChars = new byte[] { -1, -1, -1, -1, -1,
+			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+			-1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59,
+			60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+			10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1,
+			-1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+			38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1,
+			-1, -1 };
+
+	private Base64Util(){
+	}
+
+	public static String encode(byte[] data){
+		StringBuffer sb = new StringBuffer();
+		int len = data.length;
+		int i = 0;
+		int b1, b2, b3;
+
+		while (i < len) {
+			b1 = data[i++] & 0xff;
+			if (i == len) {
+				sb.append(base64EncodeChars[b1 >>> 2]);
+				sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
+				sb.append("==");
+				break;
+			}
+			b2 = data[i++] & 0xff;
+			if (i == len) {
+				sb.append(base64EncodeChars[b1 >>> 2]);
+				sb.append(base64EncodeChars[((b1 & 0x03) << 4)
+						| ((b2 & 0xf0) >>> 4)]);
+				sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
+				sb.append("=");
+				break;
+			}
+			b3 = data[i++] & 0xff;
+			sb.append(base64EncodeChars[b1 >>> 2]);
+			sb.append(base64EncodeChars[((b1 & 0x03) << 4)
+					| ((b2 & 0xf0) >>> 4)]);
+			sb.append(base64EncodeChars[((b2 & 0x0f) << 2)
+					| ((b3 & 0xc0) >>> 6)]);
+			sb.append(base64EncodeChars[b3 & 0x3f]);
+		}
+		return sb.toString();
+	}
+
+	public static byte[] decode(String str){
+		byte[] data = str.getBytes();
+		int len = data.length;
+		ByteArrayOutputStream buf = new ByteArrayOutputStream(len);
+		int i = 0;
+		int b1, b2, b3, b4;
+
+		while (i < len) {
+
+			/* b1 */
+			do {
+				b1 = base64DecodeChars[data[i++]];
+			} while (i < len && b1 == -1);
+			if (b1 == -1) {
+				break;
+			}
+
+			/* b2 */
+			do {
+				b2 = base64DecodeChars[data[i++]];
+			} while (i < len && b2 == -1);
+			if (b2 == -1) {
+				break;
+			}
+			buf.write(((b1 << 2) | ((b2 & 0x30) >>> 4)));
+
+			/* b3 */
+			do {
+				b3 = data[i++];
+				if (b3 == 61) {
+					return buf.toByteArray();
+				}
+				b3 = base64DecodeChars[b3];
+			} while (i < len && b3 == -1);
+			if (b3 == -1) {
+				break;
+			}
+			buf.write((((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
+
+			/* b4 */
+			do {
+				b4 = data[i++];
+				if (b4 == 61) {
+					return buf.toByteArray();
+				}
+				b4 = base64DecodeChars[b4];
+			} while (i < len && b4 == -1);
+			if (b4 == -1) {
+				break;
+			}
+			buf.write((((b3 & 0x03) << 6) | b4));
+		}
+		return buf.toByteArray();
+	}
+}

+ 17 - 0
src/main/java/com/szwl/model/utils/CodeUtil.java

@@ -0,0 +1,17 @@
+package com.szwl.model.utils;
+
+/**
+ * 编解码工具类
+ * @author chenyf
+ * @date 2018-12-15
+ */
+public class CodeUtil {
+
+    public static String base64Encode(byte[] value) {
+        return Base64Util.encode(value);
+    }
+
+    public static byte[] base64Decode(String value) {
+        return Base64Util.decode(value);
+    }
+}

+ 74 - 0
src/main/java/com/szwl/model/utils/Constant.java

@@ -0,0 +1,74 @@
+package com.szwl.model.utils;
+
+/**
+ * Created by dinfeng 
+ */
+public class Constant {
+
+    private static double EARTH_RADIUS = 6371.393;
+    private static double rad(double d)
+    {
+        return d * Math.PI / 180.0;
+    }
+
+    /**
+     * 计算两个经纬度之间的距离
+     * @param lat1
+     * @param lng1
+     * @param lat2
+     * @param lng2
+     * @return
+     */
+    public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
+    {
+        double radLat1 = rad(lat1);
+        double radLat2 = rad(lat2);
+        double a = radLat1 - radLat2;
+        double b = rad(lng1) - rad(lng2);
+        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
+                Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
+        s = s * EARTH_RADIUS;
+        s = Math.round(s * 1000);
+        return s;
+    }
+
+    /**
+     * admin 默认role id 1
+     */
+    public final static Long ROLE_ID_ADMIN = 1l;
+
+    /**
+     * 代理商 默认role id 2
+     */
+    public final static Long ROLE_ID_AGENCY= 2l;
+
+    /**
+     * 经销商 默认role id 3
+     */
+    public final static Long ROLE_ID_MERCHANT= 3l;
+
+    /**
+     * 个人商家 默认role id 4
+     */
+    public final static Long ROLE_ID_PERSONAGE= 4l;
+
+    /**
+     * 正确结果
+     */
+    public final static String correct_code = "ok";
+
+    /**
+     *
+     *
+     *
+     *      GlobalConfig
+     *
+     *
+     *
+     */
+
+    /**
+     * admin 访问码
+     */
+    public final static String ACCESS_CODE = "8";
+}

+ 85 - 0
src/main/java/com/szwl/model/utils/HEXUtil.java

@@ -0,0 +1,85 @@
+package com.szwl.model.utils;
+
+import com.szwl.model.utils.constants.CommonConst;
+import com.szwl.model.utils.exceptions.JPException;
+
+/**
+ * 16进制工具类
+ * @author chenyf
+ * @date 2018-12-15
+ */
+public class HEXUtil {
+    private static final char[] DIGITS_LOWER =
+            {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+
+    private static final char[] DIGITS_UPPER =
+            {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
+
+
+    public static String encode(String str){
+        try{
+            return encode(str.getBytes(CommonConst.ENCODING_UTF_8), true);
+        }catch (Exception e){
+            throw new JPException("16进制转换失败", e);
+        }
+    }
+
+    public static String encode(byte[] data, final boolean toUpperCase){
+        return bytes2Hex(data, toUpperCase ? DIGITS_UPPER : DIGITS_LOWER);
+    }
+
+    public static String decode(String str){
+        try{
+            byte[] date = hex2Bytes(str);
+            return new String(date, CommonConst.ENCODING_UTF_8);
+        }catch (Exception e){
+            throw new JPException("16进制转换失败", e);
+        }
+    }
+
+    private static String bytes2Hex(final byte[] data, final char[] toDigits) {
+        final int l = data.length;
+        final char[] out = new char[l << 1];
+        // two characters form the hex value.
+        for (int i = 0, j = 0; i < l; i++) {
+            out[j++] = toDigits[(0xF0 & data[i]) >>> 4];
+            out[j++] = toDigits[0x0F & data[i]];
+        }
+        return new String(out);
+    }
+
+    private static byte[] hex2Bytes(final String data) throws Exception {
+        final int len = data.length();
+
+        if ((len & 0x01) != 0) {
+            throw new Exception("Odd number of characters.");
+        }
+
+        final byte[] out = new byte[len >> 1];
+
+        // two characters form the hex value.
+        for (int i = 0, j = 0; j < len; i++) {
+            int f = toDigit(data.charAt(j), j) << 4;
+            j++;
+            f = f | toDigit(data.charAt(j), j);
+            j++;
+            out[i] = (byte) (f & 0xFF);
+        }
+        return out;
+    }
+
+    /**
+     * 16转化为数字
+     * @param ch 16进制
+     * @param index 索引
+     * @return 转化结果
+     * @throws Exception 转化失败异常
+     */
+    private static int toDigit(final char ch, final int index) throws Exception {
+        final int digit = Character.digit(ch, 16);
+        if (digit == -1) {
+            throw new Exception("Illegal hexadecimal character " + ch + " at index " + index);
+        }
+        return digit;
+    }
+}

+ 333 - 0
src/main/java/com/szwl/model/utils/HttpClientUtils.java

@@ -0,0 +1,333 @@
+package com.szwl.model.utils;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.config.ConnectionConfig;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.config.SocketConfig;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLContexts;
+import org.apache.http.conn.ssl.TrustStrategy;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+//import org.apache.log4j.Logger;
+import org.dom4j.Document;
+import org.dom4j.io.SAXReader;
+import org.json.JSONObject;
+import org.json.JSONTokener;
+
+import javax.net.ssl.SSLContext;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+import java.security.KeyManagementException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+
+/**
+ * Created by study on 6/26/2015 11:30.
+ */
+public final class HttpClientUtils {
+    private static Logger logger = Logger.getLogger("HttpClientUtils");
+    public final static String Order_Url = "http://app.sunzee.com.cn/ShenzeeServer/EsApi/getOrder";
+    public final static String Update_Order_Url = "http://app.sunzee.com.cn/ShenzeeServer/EsApi/updateOrder";
+//    public final static String Es_Order_Url = "http://app.sunzee.com.cn/ShenzeeServer/EsApi/getOrder";
+    public final static String CoinOrder_Url = "http://app.sunzee.com.cn/ShenzeeServer/EsApi/getCoinOrder";
+//    public final static String Es_CoinOrder_Url = "http://app.sunzee.com.cn/ShenzeeServer/EsApi/getCoinOrder";
+public final static String Equipment_Url = "http://app.sunzee.com.cn/ShenzeeServer/EsApi/getEquipment";
+    public final static String Update_Equipment_Url = "http://app.sunzee.com.cn/ShenzeeServer/EsApi/updateEquipment";
+    private HttpClientUtils() {
+    }
+
+    /**
+     * post xml
+     *
+     * @param url
+     * @param xml
+     * @return
+     */
+    public static String postXml(String url, String xml) throws IOException {
+        HttpClient client = HttpClientBuilder.create().build();
+        client = WebClientDevWrapper.wrapClient(client);
+        HttpPost post = new HttpPost(url);
+        String response = null;
+        InputStream instream = null;
+        try {
+            StringEntity s = new StringEntity(xml, "UTF-8");
+            s.setContentEncoding("UTF-8");
+            s.setContentType("application/xml");
+            post.setEntity(s);
+            HttpResponse res = null;
+            if (client != null) {
+                res = client.execute(post);
+            }
+            if (res != null && res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
+                HttpEntity entity = res.getEntity();
+                SAXReader reader = new SAXReader();
+                instream = entity.getContent();
+                Document document = reader.read(new InputStreamReader(instream, "utf-8"));
+                response = document.asXML();
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (instream != null) {
+                instream.close();
+            }
+        }
+        return response;
+    }
+
+    /**
+     * post json
+     *
+     * @param url
+     * @param json
+     * @return
+     */
+    public static JSONObject postJson(String url, String json) throws IOException {
+        HttpClient client = HttpClientBuilder.create().build();
+        client = WebClientDevWrapper.wrapClient(client);
+        HttpPost post = new HttpPost(url);
+        JSONObject response = null;
+        InputStream instream = null;
+        try {
+            StringEntity s = new StringEntity(json, "UTF-8");
+            s.setContentEncoding("UTF-8");
+            s.setContentType("application/json");
+            post.setEntity(s);
+            HttpResponse res = null;
+            if (client != null) {
+                res = client.execute(post);
+            }
+            if (res != null && res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
+                HttpEntity entity = res.getEntity();
+                String charset = "utf-8";
+                instream = entity.getContent();
+                response = new JSONObject(new JSONTokener(new InputStreamReader(instream, charset)));
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (instream != null) {
+                instream.close();
+            }
+        }
+        return response;
+    }
+
+
+    /**
+     * java httpClient4.5 post请求
+     */
+    @SuppressWarnings("unchecked")
+    public static String sendPost(String sendMsg, String sendUrl) {
+        HttpPost httpPost = new HttpPost(sendUrl);
+        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
+        CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
+        StringEntity entity;
+        String status = "false";
+        Map<String,Object> mres = new HashMap<String, Object>();
+        try {
+            entity = new StringEntity(sendMsg, "UTF-8"); //解决参数中文乱码问题
+            entity.setContentEncoding("UTF-8");//设置编码格式
+            entity.setContentType("application/json");
+            httpPost.setEntity(entity);
+            // 发起请求
+            HttpResponse httpResponse = closeableHttpClient.execute(httpPost);
+            // 请求结束,返回结果。并解析json。
+            String resData = EntityUtils.toString(httpResponse.getEntity(),"UTF-8");
+            status = resData;
+//            Map map = JSON.parseObject(JSON.toJSONString(resData), Map.class);
+//            mres = (Map<String, Object>) JSON.parseObject(JSON.toJSONString(resData), Map.class);
+//            mres = (Map<String, Object>) JSONObject.toBean(JSONObject.fromObject(resData), Map.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (null != closeableHttpClient) {
+                try {
+                    closeableHttpClient.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return status;
+//        return mres;
+    }
+    /**
+     * post 键值对
+     *
+     * @param url
+     * @param data 键值对内容
+     * @return
+     */
+    public static String sentData(String url, String data) {
+        if(!StringUtils.isEmpty(url)&&!StringUtils.isEmpty(data)){
+            String result = sendPost(data, url);
+            return result;
+        }
+        return "400";
+    }
+
+    /**
+     * post 键值对
+     *
+     * @param url
+     * @param data 键值对内容
+     * @return
+     */
+    public static String postKeyValue(String url, List<BasicNameValuePair> data) {
+
+
+        CloseableHttpClient httpClient = getHttpClient();
+        try {
+            HttpPost post = new HttpPost(url);
+
+
+            //url格式编码
+            UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(data, "UTF-8");
+            post.setEntity(uefEntity);
+            CloseableHttpResponse httpResponse = httpClient.execute(post);
+            HttpEntity entity = httpResponse.getEntity();
+            try {
+                if (null != entity) {
+                    String result = EntityUtils.toString(entity);
+                    return result;
+                }
+            } finally {
+                httpResponse.close();
+            }
+
+
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        } catch (ClientProtocolException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                closeHttpClient(httpClient);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+        return null;
+    }
+
+
+    /**
+     * get json
+     *
+     * @param url
+     * @return
+     */
+    public static JSONObject get(String url) throws IOException {
+        HttpClient client = HttpClientBuilder.create().build();
+        client = WebClientDevWrapper.wrapClient(client);
+        HttpGet get = new HttpGet(url);
+        JSONObject response = null;
+        InputStream instream = null;
+        try {
+            HttpResponse res = null;
+            if (client != null) {
+                res = client.execute(get);
+            }
+            if (res != null && res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
+                HttpEntity entity = res.getEntity();
+                instream = entity.getContent();
+                response = new JSONObject(new JSONTokener(new InputStreamReader(instream, "utf-8")));
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (instream != null) {
+                instream.close();
+            }
+        }
+        return response;
+    }
+
+    private static class WebClientDevWrapper {
+        public static HttpClient wrapClient(HttpClient base) {
+            try {
+                RegistryBuilder<ConnectionSocketFactory> registryBuilder = RegistryBuilder.create();
+                ConnectionSocketFactory plainSF = new PlainConnectionSocketFactory();
+                registryBuilder.register("http", plainSF);
+                //指定信任密钥存储对象和连接套接字工厂
+                try {
+                    KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
+                    SSLContext sslContext = SSLContexts.custom().useTLS().loadTrustMaterial(trustStore, new AnyTrustStrategy()).build();
+                    LayeredConnectionSocketFactory sslSF = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+                    registryBuilder.register("https", sslSF);
+                } catch (KeyStoreException e) {
+                    throw new RuntimeException(e);
+                } catch (KeyManagementException e) {
+                    throw new RuntimeException(e);
+                } catch (NoSuchAlgorithmException e) {
+                    throw new RuntimeException(e);
+                }
+                Registry<ConnectionSocketFactory> registry = registryBuilder.build();
+                //设置连接管理器
+                PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(registry);
+                connManager.setDefaultConnectionConfig(ConnectionConfig.custom().setCharset(Charset.forName("UTF-8")).build());
+                connManager.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(100000).build());
+                //构建客户端
+                return HttpClientBuilder.create().setConnectionManager(connManager).build();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+            return null;
+        }
+
+        private static class AnyTrustStrategy implements TrustStrategy {
+            @Override
+            public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+                return true;
+            }
+        }
+
+
+    }
+
+
+    private static CloseableHttpClient getHttpClient() {
+        return HttpClients.createDefault();
+    }
+
+    private static void closeHttpClient(CloseableHttpClient client) throws IOException {
+        if (client != null) {
+            client.close();
+        }
+    }
+
+}

+ 15 - 0
src/main/java/com/szwl/model/utils/PushUtils.java

@@ -271,6 +271,21 @@ public class PushUtils {
         }
         return jsonObject;
     }
+    public static JSONObject buildJson(String kind, String kindData,String netTime,String webTime) {
+        JSONObject jsonObject = new JSONObject();
+        if (kind != null) {
+            jsonObject.put("kind", kind);
+            jsonObject.put("kind_data", kindData);
+            jsonObject.put("netTime", netTime);
+            jsonObject.put("webTime", webTime);
+        }else{
+            jsonObject.put("kind", "");
+            jsonObject.put("kind_data", "");
+            jsonObject.put("netTime", "");
+            jsonObject.put("webTime", "");
+        }
+        return jsonObject;
+    }
 
 //    public static void main(String[] args) {
 //        push("71963777bd63e0f0a5b6490f04bf1ae4", "niai", "123", buildJson("editNo", "123456789").toString());

+ 187 - 0
src/main/java/com/szwl/model/utils/RSAUtil.java

@@ -0,0 +1,187 @@
+package com.szwl.model.utils;
+
+
+import com.szwl.model.utils.constants.Algorithm;
+import com.szwl.model.utils.constants.CommonConst;
+import com.szwl.model.utils.exceptions.JPException;
+
+import javax.crypto.Cipher;
+import java.io.ByteArrayOutputStream;
+import java.security.*;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * RSA加解密的工具类
+ * @author chenyf
+ * @date 2018-12-15
+ */
+public class RSAUtil {
+    public static final String DEFAULT_ENCRYPT_ALGORITHM = "RSA/ECB/PKCS1Padding";
+    public static final String SIGNATURE_ALGORITHM_SHA1 = "SHA1withRSA";
+    public static final String SIGNATURE_ALGORITHM_MD5 = "MD5withRSA";
+
+    public static final int KEY_SIZE = 1024;
+    public static final String PUBLIC_KEY = "publicKey";
+    public static final String PRIVATE_KEY = "privateKey";
+
+
+    /**
+    /**
+     * RSA最大加密明文大小
+     */
+    private static final int MAX_ENCRYPT_BLOCK = 116;
+
+    /**
+    /**
+     * RSA最大解密密文大小
+     */
+    private static final int MAX_DECRYPT_BLOCK = 128;
+
+    /**
+     * 生成公私密钥对
+     * @return
+     * @throws Exception
+     */
+    public static Map<String, String> genKeyPair() throws Exception {
+        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(Algorithm.RSA);
+        keyPairGen.initialize(KEY_SIZE);
+        KeyPair keyPair = keyPairGen.generateKeyPair();
+
+        final Map<String, String> keyMap = new HashMap<String, String>(2);
+        keyMap.put(PUBLIC_KEY, CodeUtil.base64Encode(keyPair.getPublic().getEncoded()));
+        keyMap.put(PRIVATE_KEY, CodeUtil.base64Encode(keyPair.getPrivate().getEncoded()));
+        return keyMap;
+    }
+
+    /**
+     * 生成RSA签名串
+     * @param data             需要生成签名串的数据
+     * @param mchPrivateKey    商户私钥
+     * @return
+     * @throws JPException
+     */
+    public static String sign(String data, String mchPrivateKey, boolean isSha) throws JPException {
+        try {
+            byte[] dataBytes = data.getBytes(CommonConst.ENCODING_UTF_8);
+            byte[] keyBytes = CodeUtil.base64Decode(mchPrivateKey);
+            String algorithm = isSha ? SIGNATURE_ALGORITHM_SHA1 : SIGNATURE_ALGORITHM_MD5;
+
+            PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
+            PrivateKey priKey = KeyFactory.getInstance(Algorithm.RSA).generatePrivate(pkcs8KeySpec);
+            Signature signature = Signature.getInstance(algorithm);
+            signature.initSign(priKey);
+            signature.update(dataBytes);
+            return HEXUtil.encode(CodeUtil.base64Encode(signature.sign()));
+        }catch (Throwable e){
+            throw new JPException("生成RSA签名失败", e);
+        }
+    }
+
+    /**
+     * 验证RSA签名串
+     * @param data          需要验签的数据
+     * @param jpPublicKey   汇聚公钥
+     * @param sign          汇聚返回的签名串
+     * @return
+     * @throws JPException
+     */
+    public static boolean verify(String data, String jpPublicKey, String sign, boolean isSha) throws JPException {
+        try {
+            byte[] dataBytes = data.getBytes(CommonConst.ENCODING_UTF_8);
+            byte[] signBytes = CodeUtil.base64Decode(HEXUtil.decode(sign));
+            String algorithm = isSha ? SIGNATURE_ALGORITHM_SHA1 : SIGNATURE_ALGORITHM_MD5;
+            PublicKey publicK = getPublicKey(jpPublicKey);
+
+            Signature signature = Signature.getInstance(algorithm);
+            signature.initVerify(publicK);
+            signature.update(dataBytes);
+            return signature.verify(signBytes);
+        }catch (Throwable e){
+            throw new JPException("RSA验签失败", e);
+        }
+    }
+
+    /**
+     * 使用RSA进行加密
+     * @param data          需要加密的数据
+     * @param jpPublicKey   汇聚公钥
+     * @return
+     */
+    public static String encrypt(String data, String jpPublicKey) throws JPException {
+        try{
+            byte[] dataBytes = data.getBytes(CommonConst.ENCODING_UTF_8);
+            dataBytes = doCipher(dataBytes, jpPublicKey, true);
+            return HEXUtil.encode(CodeUtil.base64Encode(dataBytes));
+        }catch(Throwable e){
+            throw new JPException("RSA加密失败", e);
+        }
+    }
+
+    /**
+     * 使用RSA进行解密
+     * @param data              需要解密的数据
+     * @param mchPrivateKey     商户私钥
+     * @return
+     */
+    public static String decrypt(String data, String mchPrivateKey) throws JPException {
+        try{
+            byte[] dataBytes = CodeUtil.base64Decode(HEXUtil.decode(data));
+            dataBytes = doCipher(dataBytes, mchPrivateKey, false);
+            return new String(dataBytes, CommonConst.ENCODING_UTF_8);
+        }catch(Throwable e){
+            throw new JPException("RSA解密失败", e);
+        }
+    }
+
+    private static byte[] doCipher(byte[] dataBytes, String keyStr, boolean isEncrypt) throws Exception{
+        Key key;
+        Cipher cipher;
+        int maxBlock;
+
+        if(isEncrypt){
+            maxBlock = MAX_ENCRYPT_BLOCK;
+            key = getPublicKey(keyStr);
+            cipher = Cipher.getInstance(DEFAULT_ENCRYPT_ALGORITHM);
+            cipher.init(Cipher.ENCRYPT_MODE, key);
+        }else{
+            maxBlock = MAX_DECRYPT_BLOCK;
+            byte[] keyBytes = CodeUtil.base64Decode(keyStr);
+            PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
+            KeyFactory keyFactory = KeyFactory.getInstance(Algorithm.RSA);
+            Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);
+            cipher = Cipher.getInstance(keyFactory.getAlgorithm());
+            cipher.init(Cipher.DECRYPT_MODE, privateK);
+        }
+
+        int offSet = 0, i = 0, inputLen = dataBytes.length;
+        byte[] cache;
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+        try{
+            // 对数据分段加密/解密
+            while (inputLen - offSet > 0) {
+                if (inputLen - offSet > maxBlock) {
+                    cache = cipher.doFinal(dataBytes, offSet, maxBlock);
+                } else {
+                    cache = cipher.doFinal(dataBytes, offSet, inputLen - offSet);
+                }
+                out.write(cache, 0, cache.length);
+                i++;
+                offSet = i * maxBlock;
+            }
+            return out.toByteArray();
+        } finally {
+            out.close();
+        }
+    }
+
+    private static PublicKey getPublicKey(String publicKey) throws Exception{
+        byte[] keyBytes = CodeUtil.base64Decode(publicKey);
+        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
+        KeyFactory keyFactory = KeyFactory.getInstance(Algorithm.RSA);
+        return keyFactory.generatePublic(x509KeySpec);
+    }
+}

+ 14 - 0
src/main/java/com/szwl/model/utils/constants/Algorithm.java

@@ -0,0 +1,14 @@
+package com.szwl.model.utils.constants;
+
+/**
+ * 加解密运算时的逻辑算法名常量类
+ * @author: chenyf
+ * @Date: 2018-12-15
+ */
+public class Algorithm {
+    public final static String MD5 = "MD5";
+    public final static String AES = "AES";
+    public final static String RSA = "RSA";
+
+
+}

+ 12 - 0
src/main/java/com/szwl/model/utils/constants/CommonConst.java

@@ -0,0 +1,12 @@
+package com.szwl.model.utils.constants;
+
+/**
+ * 公共常量类
+ * @author: chenyf
+ * @Date: 2018-12-15
+ */
+public class CommonConst {
+    public static final String ENCODING_UTF_8 = "UTF-8";
+
+    public static final String AES_KEY_SEPARATOR = ":";
+}

+ 12 - 0
src/main/java/com/szwl/model/utils/exceptions/JPException.java

@@ -0,0 +1,12 @@
+package com.szwl.model.utils.exceptions;
+
+public class JPException extends RuntimeException {
+
+    public JPException(String message) {
+        super(message);
+    }
+
+    public JPException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}

+ 3 - 0
src/main/java/com/szwl/service/TAdminService.java

@@ -2,6 +2,9 @@ package com.szwl.service;
 
 import com.szwl.model.entity.TAdmin;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.szwl.model.entity.TArea;
+
+import java.util.List;
 
 /**
  * <p>

+ 21 - 0
src/main/java/com/szwl/service/TAlarmRecordService.java

@@ -0,0 +1,21 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TAlarmRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 报警信息 服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-27
+ */
+public interface TAlarmRecordService extends IService<TAlarmRecord> {
+
+    public List<TAlarmRecord> getAlarmList(Long adminId);
+
+    List<TAlarmRecord> getLastAlarmRecord(Long id);
+}

+ 19 - 0
src/main/java/com/szwl/service/TAreaService.java

@@ -0,0 +1,19 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TArea;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-27
+ */
+public interface TAreaService extends IService<TArea> {
+
+    List<TArea> getProvinceList();
+}

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

@@ -2,6 +2,7 @@ package com.szwl.service;
 
 import com.szwl.model.entity.TEquipment;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.szwl.model.query.StatisticsParam;
 
 /**
  * <p>
@@ -16,4 +17,8 @@ public interface TEquipmentService extends IService<TEquipment> {
      * 发送信息,1:个推,2:MQ
      */
     public String sentMessage(String clientId,String json);
+
+    public String findMachineTotalNum(StatisticsParam param);
+
+    public String findMachineUseNum(StatisticsParam param);
 }

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

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TJoinpayMchCheck;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 用户收款信息表变动申请表 服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+public interface TJoinpayMchCheckService extends IService<TJoinpayMchCheck> {
+
+}

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

@@ -0,0 +1,20 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TJoinpayMch;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.szwl.model.entity.TJoinpayMchCheck;
+
+/**
+ * <p>
+ * 汇聚支付用户收款信息表 服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+public interface TJoinpayMchService extends IService<TJoinpayMch> {
+
+    String createMch(TJoinpayMch tJoinpayMch);
+
+    String updateMch(TJoinpayMch mch);
+}

+ 3 - 0
src/main/java/com/szwl/service/TOrderService.java

@@ -3,6 +3,8 @@ package com.szwl.service;
 import com.szwl.model.entity.TOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.Map;
+
 /**
  * <p>
  *  服务类
@@ -13,4 +15,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface TOrderService extends IService<TOrder> {
 
+    Double getAreaPrice(Map<String, Object> params);
 }

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

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TShandeMchCheck;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 杉德支付收款信息变动审核表 服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+public interface TShandeMchCheckService extends IService<TShandeMchCheck> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TShandeMch;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 杉德支付收款信息 服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+public interface TShandeMchService extends IService<TShandeMch> {
+
+}

+ 3 - 0
src/main/java/com/szwl/service/impl/TAdminServiceImpl.java

@@ -2,10 +2,13 @@ package com.szwl.service.impl;
 
 import com.szwl.model.entity.TAdmin;
 import com.szwl.mapper.TAdminMapper;
+import com.szwl.model.entity.TArea;
 import com.szwl.service.TAdminService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类

+ 34 - 0
src/main/java/com/szwl/service/impl/TAlarmRecordServiceImpl.java

@@ -0,0 +1,34 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TAlarmRecord;
+import com.szwl.mapper.TAlarmRecordMapper;
+import com.szwl.service.TAlarmRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 报警信息 服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-27
+ */
+@Service
+public class TAlarmRecordServiceImpl extends ServiceImpl<TAlarmRecordMapper, TAlarmRecord> implements TAlarmRecordService {
+    @Autowired
+    private TAlarmRecordMapper tAlarmRecordMapper;
+
+    @Override
+    public List<TAlarmRecord> getAlarmList(Long adminId) {
+        return tAlarmRecordMapper.getAlarmList(adminId);
+    }
+
+    @Override
+    public List<TAlarmRecord> getLastAlarmRecord(Long id) {
+        return tAlarmRecordMapper.getLastAlarmRecord(id);
+    }
+}

+ 28 - 0
src/main/java/com/szwl/service/impl/TAreaServiceImpl.java

@@ -0,0 +1,28 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TArea;
+import com.szwl.mapper.TAreaMapper;
+import com.szwl.service.TAreaService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-27
+ */
+@Service
+public class TAreaServiceImpl extends ServiceImpl<TAreaMapper, TArea> implements TAreaService {
+    @Autowired
+    private TAreaMapper tAreaMapper;
+    @Override
+    public List<TArea> getProvinceList() {
+        return tAreaMapper.getProvinceList();
+    }
+}

+ 11 - 0
src/main/java/com/szwl/service/impl/TEquipmentServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.szwl.model.entity.TEquipment;
 import com.szwl.mapper.TEquipmentMapper;
+import com.szwl.model.query.StatisticsParam;
 import com.szwl.model.utils.PushUtils;
 import com.szwl.service.TEquipmentService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -57,4 +58,14 @@ public class TEquipmentServiceImpl extends ServiceImpl<TEquipmentMapper, TEquipm
         }
         return "success";
     }
+
+    @Override
+    public String findMachineTotalNum(StatisticsParam param) {
+        return tEquipmentMapper.findMachineTotalNum(param);
+    }
+
+    @Override
+    public String findMachineUseNum(StatisticsParam param) {
+        return tEquipmentMapper.findMachineUseNum(param);
+    }
 }

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

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TJoinpayMchCheck;
+import com.szwl.mapper.TJoinpayMchCheckMapper;
+import com.szwl.service.TJoinpayMchCheckService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 用户收款信息表变动申请表 服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+@Service
+public class TJoinpayMchCheckServiceImpl extends ServiceImpl<TJoinpayMchCheckMapper, TJoinpayMchCheck> implements TJoinpayMchCheckService {
+
+}

+ 348 - 0
src/main/java/com/szwl/service/impl/TJoinpayMchServiceImpl.java

@@ -0,0 +1,348 @@
+package com.szwl.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.szwl.model.bo.JoinpayConstant;
+import com.szwl.model.entity.TJoinpayMch;
+import com.szwl.mapper.TJoinpayMchMapper;
+import com.szwl.model.entity.TJoinpayMchCheck;
+import com.szwl.model.utils.AESUtil;
+import com.szwl.model.utils.Constant;
+import com.szwl.model.utils.HttpClientUtils;
+import com.szwl.model.utils.RSAUtil;
+import com.szwl.service.TJoinpayMchService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * <p>
+ * 汇聚支付用户收款信息表 服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+@Service
+public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoinpayMch> implements TJoinpayMchService {
+
+    @Override
+    public String createMch(TJoinpayMch mch) {
+
+
+        Long adminId = mch.getAdminId();
+        if(null == adminId){
+            return "找不到对应的管理员";
+        }
+
+        Integer alt_merchant_type = mch.getAltMerchantType();
+        String url = "https://www.joinpay.com/allocFunds";
+
+        JSONObject requestData = new JSONObject(new LinkedHashMap());
+
+        String login_name = "test1_" + adminId + "@mianhuatang.com";
+//        String login_name = mch.getLegal_person();
+        mch.setLoginName(login_name);
+
+//        String alt_mch_name = "test1_" + adminId  + "@mianhuatang.com";
+//        String alt_mch_name = mch.getLegal_person();
+        String alt_mch_name = mch.getBankAccountName();
+        mch.setAltMchName(alt_mch_name);
+        mch.setAltMchShortName("");
+//        mch.setAlt_mch_short_name("");
+
+        // 格式为16 位随机字符串:16 位随机字符串
+        String aes_key1 = getRandomString(16);
+        String aes_key2 = getRandomString(16);
+
+        requestData.put("login_name", login_name);
+        requestData.put("alt_mch_name", alt_mch_name);
+        requestData.put("alt_mch_short_name",  "");
+        requestData.put("alt_merchant_type",  mch.getAltMerchantType());
+        requestData.put("busi_contact_name",  mch.getBusiContactName());
+        requestData.put("busi_contact_mobile_no",  mch.getBusiContactMobileNo());
+        requestData.put("phone_no",  mch.getPhoneNo());
+        requestData.put("manage_scope",  mch.getManageScope());
+        requestData.put("manage_addr",  mch.getManageAddr());
+        requestData.put("legal_person", AESUtil.encrypt(mch.getLegalPerson() , aes_key1 ,  aes_key2 ));
+        requestData.put("id_card_no",  AESUtil.encrypt(mch.getIdCardNo(), aes_key1 , aes_key2 ));
+        requestData.put("id_card_expiry",  mch.getIdCardExpiry());
+        // 个体工商户和企业必填:营业执照编号 / 营业执照有效期
+        if(JoinpayConstant.alt_merchant_type2== alt_merchant_type || JoinpayConstant.alt_merchant_type3== alt_merchant_type){
+            requestData.put("license_no",  mch.getLicenseNo());
+            requestData.put("license_expiry",  mch.getLicenseExpiry());
+        }
+        if(mch.getSettMode()!=null){
+            requestData.put("sett_mode",  mch.getSettMode());
+        }else {
+            // 由汇聚自动结算
+            requestData.put("sett_mode",  JoinpayConstant.sett_mode1);
+        }
+
+        // 结算周期类型:自然日
+        requestData.put("sett_date_type",  JoinpayConstant.sett_date_type2);
+        if(mch.getRiskDay()!=null){
+            requestData.put("risk_day", mch.getRiskDay());
+        }else{
+            // 结算周期:1
+            requestData.put("risk_day",  1);
+        }
+
+        if(JoinpayConstant.alt_merchant_type2== alt_merchant_type || JoinpayConstant.alt_merchant_type3== alt_merchant_type){
+            // 企业用对公账户
+            requestData.put("bank_account_type",  JoinpayConstant.bank_account_type4);
+        }else if(JoinpayConstant.alt_merchant_type1== alt_merchant_type){
+            // 个人用借记卡
+            requestData.put("bank_account_type",  JoinpayConstant.bank_account_type1);
+        }
+        requestData.put("bank_account_name",  AESUtil.encrypt(mch.getBankAccountName(), aes_key1 ,  aes_key2 ));
+        requestData.put("bank_account_no",  AESUtil.encrypt(mch.getBankAccountNo(), aes_key1 ,  aes_key2 ));
+        requestData.put("bank_channel_no",  mch.getBankChannelNo());
+
+
+
+        JSONObject requestJson = new JSONObject(new TreeMap<String, Object>());
+        requestJson.put("method", "altmch.add");
+        requestJson.put("version", "2.0");
+        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());
+
+        requestJson.put("aes_key", RSAUtil.encrypt(aes_key1+":"+aes_key2 , JoinpayConstant.publickey ));
+
+//        logger.info("请求参数:" + requestJson);
+
+        org.json.JSONObject jsonObject;
+        try {
+            jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
+//            logger.info("响应参数:" + jsonObject);
+
+            if(jsonObject.has("resp_code")){
+                mch.setRespCode(jsonObject.getString("resp_code"));
+            }
+
+            if(jsonObject.has("data")){
+                org.json.JSONObject data = jsonObject.getJSONObject("data");
+                if(data.has("biz_code")){
+                    mch.setBizCode(data.getString("biz_code"));
+                }
+
+                if (data.has("alt_mch_no")){
+                    mch.setAltMchName(data.getString("alt_mch_no"));
+                }
+
+                if(data.has("order_status")){
+                    mch.setOrderStatus(data.getString("order_status"));
+                }
+
+            }
+
+
+            /**
+             * 更新一下分销商户的  各种响应码 & login_name
+             */
+            mch.setCreateDate(new Date());
+            mch.setModifyDate(new Date());
+            save(mch);
+
+            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();
+        }
+
+        return Constant.correct_code;
+    }
+
+    @Override
+    public String updateMch(TJoinpayMch mch) {
+        Long adminId = mch.getAdminId();
+        if(null == adminId){
+            return "找不到对应的管理员";
+        }
+
+        if(JoinpayConstant.alt_merchant_type1!=mch.getAltMerchantType()
+                && JoinpayConstant.alt_merchant_type2!= mch.getAltMerchantType()
+                && JoinpayConstant.alt_merchant_type3!= mch.getAltMerchantType()){
+            return "商家类型不正确";
+        }
+
+        String url = "https://www.joinpay.com/allocFunds";
+
+        JSONObject requestData = new JSONObject(new LinkedHashMap());
+
+
+        // 格式为16 位随机字符串:16 位随机字符串
+        String aes_key1 = getRandomString(16);
+        String aes_key2 = getRandomString(16);
+
+        requestData.put("alt_mch_no", mch.getAltMchNo());
+
+//        requestData.put("legal_person", AESUtil.encrypt(legal_person, aes_key1 ,  aes_key2 ));
+        requestData.put("legal_person", mch.getLegalPerson());
+//        requestData.put("id_card_no",  AESUtil.encrypt(id_card_no, aes_key1 , aes_key2 ));
+        requestData.put("id_card_no",  mch.getIdCardNo());
+
+        if(JoinpayConstant.alt_merchant_type2== mch.getAltMerchantType() || JoinpayConstant.alt_merchant_type3== mch.getAltMerchantType()){
+            // 企业用对公账户
+            requestData.put("bank_account_type",  JoinpayConstant.bank_account_type4);
+            mch.setBankAccountType(JoinpayConstant.bank_account_type4);
+            String alt_mch_name = mch.getBankAccountName();
+            requestData.put("alt_mch_name", alt_mch_name);
+            requestData.put("license_no",  mch.getLicenseNo());
+//            requestData.put("alt_mch_name", AESUtil.encrypt(alt_mch_name, aes_key1 ,  aes_key2 ));/**/
+
+        }else if(JoinpayConstant.alt_merchant_type1== mch.getAltMerchantType()){
+            // 个人用借记卡
+            requestData.put("bank_account_type",  JoinpayConstant.bank_account_type1);
+            mch.setBankAccountType(JoinpayConstant.bank_account_type1);
+        }
+
+        requestData.put("bank_account_name",  mch.getBankAccountName());
+//        requestData.put("bank_account_name",  AESUtil.encrypt(bank_account_name, aes_key1 ,  aes_key2 ));
+        requestData.put("bank_account_no",  mch.getBankAccountNo());
+//        requestData.put("bank_account_no",  AESUtil.encrypt(bank_account_no, aes_key1 ,  aes_key2 ));
+//        requestData.put("bank_channel_no",  AESUtil.encrypt(bank_channel_no, aes_key1 ,  aes_key2 ));
+        requestData.put("bank_channel_no",  mch.getBankChannelNo());
+        if(mch.getSettMode()!=null){
+            requestData.put("sett_mode",  mch.getSettMode());
+        }else {
+            // 由汇聚自动结算
+            requestData.put("sett_mode",  JoinpayConstant.sett_mode1);
+        }
+
+        // 结算周期类型:自然日
+        requestData.put("sett_date_type",  JoinpayConstant.sett_date_type2);
+        if(mch.getRiskDay()!=null){
+            requestData.put("risk_day", mch.getRiskDay());
+        }else{
+            // 结算周期:1
+            requestData.put("risk_day",  1);
+        }
+//        mch.setLegal_person(legal_person);
+//        mch.setId_card_no(id_card_no);
+//        mch.setAlt_merchant_type(alt_merchant_type);
+//        mch.setBank_account_name(bank_account_name);
+//        mch.setBank_account_no(bank_account_no);
+//        mch.setBank_channel_no(bank_channel_no);
+        if(mch.getAltMerchantType()==12){
+            String alt_mch_name = mch.getBankAccountName();
+//            mch.setAlt_mch_name(alt_mch_name);
+        }
+        JSONObject requestJson = new JSONObject(new TreeMap<String, Object>());
+        requestJson.put("method", "altmch.modify");
+        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());
+        requestJson.put("aes_key", RSAUtil.encrypt(aes_key1+":"+aes_key2 , JoinpayConstant.publickey ));
+
+//        logger.info("请求参数:" + requestJson);
+
+        org.json.JSONObject jsonObject;
+        try {
+            jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
+//            logger.info("响应参数:" + jsonObject);
+
+            if(jsonObject.has("resp_code")){
+                mch.setRespCode(jsonObject.getString("resp_code"));
+            }
+
+            if(jsonObject.has("data")){
+                org.json.JSONObject data = jsonObject.getJSONObject("data");
+                if(data.has("biz_code")){
+                    mch.setBizCode(data.getString("biz_code"));
+                }
+
+                if (data.has("alt_mch_no")){
+                    mch.setAltMchNo(data.getString("alt_mch_no"));
+                }
+
+                if(data.has("order_status")){
+                    mch.setOrderStatus(data.getString("order_status"));
+                }
+
+            }
+
+            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();
+        }
+
+
+        return Constant.correct_code;
+    }
+
+    /**
+     * 获取随机字符串
+     * @return
+     */
+    public static String getRandomString(int length){
+        String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+        Random random=new Random();
+        StringBuffer sb=new StringBuffer();
+        for(int i=0;i<length;i++){
+            int number=random.nextInt(62);
+            sb.append(str.charAt(number));
+        }
+        return sb.toString();
+    }
+    /**
+     * 签名算法sign , MD5 签名
+     * @param requestJson
+     * @return
+     */
+    public static String createMD5Sign(JSONObject requestJson , String key){
+
+        StringBuffer sb = new StringBuffer();
+        Set es = requestJson.entrySet();
+        Iterator it = es.iterator();
+        while(it.hasNext()) {
+            Map.Entry entry = (Map.Entry)it.next();
+            String k = (String)entry.getKey();
+            Object v = entry.getValue();
+            if(null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
+                sb.append(k + "=" + v + "&");
+            }
+        }
+
+        sb.append("key=" + key);
+//        logger.info("签名字符串:"+sb.toString());
+        String sign = DigestUtils.md5Hex(sb.toString());
+        return sign;
+    }
+}

+ 9 - 1
src/main/java/com/szwl/service/impl/TOrderServiceImpl.java

@@ -4,8 +4,11 @@ import com.szwl.model.entity.TOrder;
 import com.szwl.mapper.TOrderMapper;
 import com.szwl.service.TOrderService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Map;
+
 /**
  * <p>
  *  服务实现类
@@ -16,5 +19,10 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> implements TOrderService {
-
+    @Autowired
+    private TOrderMapper tOrderMapper;
+    @Override
+    public Double getAreaPrice(Map<String, Object> params) {
+        return tOrderMapper.getAreaPrice(params);
+    }
 }

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

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TShandeMchCheck;
+import com.szwl.mapper.TShandeMchCheckMapper;
+import com.szwl.service.TShandeMchCheckService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 杉德支付收款信息变动审核表 服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+@Service
+public class TShandeMchCheckServiceImpl extends ServiceImpl<TShandeMchCheckMapper, TShandeMchCheck> implements TShandeMchCheckService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TShandeMch;
+import com.szwl.mapper.TShandeMchMapper;
+import com.szwl.service.TShandeMchService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 杉德支付收款信息 服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-29
+ */
+@Service
+public class TShandeMchServiceImpl extends ServiceImpl<TShandeMchMapper, TShandeMch> implements TShandeMchService {
+
+}