Parcourir la source

Merge branch 'test'

Ritchie il y a 1 an
Parent
commit
bda77d4a89
92 fichiers modifiés avec 5309 ajouts et 911 suppressions
  1. 10 0
      pom.xml
  2. 4 4
      src/main/java/com/szwl/aspect/MyWebMvcConfigurer.java
  3. 8 0
      src/main/java/com/szwl/constant/ConfigConsts.java
  4. 2 0
      src/main/java/com/szwl/constant/HuifuConstant.java
  5. 4 4
      src/main/java/com/szwl/controller/AlarmRecordIndexController.java
  6. 735 413
      src/main/java/com/szwl/controller/IndexController.java
  7. 69 7
      src/main/java/com/szwl/controller/ScheduledService.java
  8. 0 12
      src/main/java/com/szwl/controller/SugarDoOrderController.java
  9. 69 0
      src/main/java/com/szwl/controller/SyncOldAdminController.java
  10. 56 5
      src/main/java/com/szwl/controller/SyncOldAllController.java
  11. 95 89
      src/main/java/com/szwl/controller/SyncOldEquipmentController.java
  12. 111 0
      src/main/java/com/szwl/controller/SyncOldJoinpayMchController.java
  13. 73 13
      src/main/java/com/szwl/controller/SyncOldProductController.java
  14. 23 1
      src/main/java/com/szwl/controller/SyncOldProportionController.java
  15. 106 17
      src/main/java/com/szwl/controller/TAdminController.java
  16. 48 2
      src/main/java/com/szwl/controller/TAlarmRecordController.java
  17. 48 8
      src/main/java/com/szwl/controller/TEquipmentApplyController.java
  18. 171 15
      src/main/java/com/szwl/controller/TEquipmentController.java
  19. 1 1
      src/main/java/com/szwl/controller/TEquipmentDescController.java
  20. 56 0
      src/main/java/com/szwl/controller/TGoodsDataController.java
  21. 575 0
      src/main/java/com/szwl/controller/THotUpdateController.java
  22. 59 0
      src/main/java/com/szwl/controller/THuifuMchController.java
  23. 1 1
      src/main/java/com/szwl/controller/TJoinpayMchController.java
  24. 48 47
      src/main/java/com/szwl/controller/TLabelController.java
  25. 199 0
      src/main/java/com/szwl/controller/TLocationCheckController.java
  26. 13 29
      src/main/java/com/szwl/controller/TLogoController.java
  27. 12 11
      src/main/java/com/szwl/controller/TNoticeController.java
  28. 3 2
      src/main/java/com/szwl/controller/TOrderController.java
  29. 76 0
      src/main/java/com/szwl/controller/TParametersController.java
  30. 2 3
      src/main/java/com/szwl/controller/TProductController.java
  31. 36 10
      src/main/java/com/szwl/controller/TPromoCodeController.java
  32. 27 44
      src/main/java/com/szwl/controller/TProportionCheckController.java
  33. 60 72
      src/main/java/com/szwl/controller/TProportionController.java
  34. 31 19
      src/main/java/com/szwl/controller/TSugarDoController.java
  35. 46 0
      src/main/java/com/szwl/controller/TestController.java
  36. 9 4
      src/main/java/com/szwl/feign/bean/SyncOldFeign.java
  37. 1 1
      src/main/java/com/szwl/mapper/TEquipmentDescMapper.java
  38. 1 0
      src/main/java/com/szwl/mapper/TEquipmentMapper.java
  39. 16 0
      src/main/java/com/szwl/mapper/TGoodsDataMapper.java
  40. 16 0
      src/main/java/com/szwl/mapper/THotUpdateMapper.java
  41. 19 0
      src/main/java/com/szwl/mapper/TLocationCheckMapper.java
  42. 16 0
      src/main/java/com/szwl/mapper/TNameDictionaryMapper.java
  43. 3 1
      src/main/java/com/szwl/mapper/xml/TEquipmentDescMapper.xml
  44. 7 0
      src/main/java/com/szwl/mapper/xml/TEquipmentMapper.xml
  45. 21 0
      src/main/java/com/szwl/mapper/xml/TGoodsDataMapper.xml
  46. 26 0
      src/main/java/com/szwl/mapper/xml/THotUpdateMapper.xml
  47. 3 1
      src/main/java/com/szwl/mapper/xml/THuifuMchCheckMapper.xml
  48. 47 0
      src/main/java/com/szwl/mapper/xml/TLocationCheckMapper.xml
  49. 20 0
      src/main/java/com/szwl/mapper/xml/TNameDictionaryMapper.xml
  50. 5 1
      src/main/java/com/szwl/mapper/xml/TProportionMapper.xml
  51. 34 21
      src/main/java/com/szwl/model/dto/PromoCodeTarget.java
  52. 17 25
      src/main/java/com/szwl/model/entity/TAd.java
  53. 1 1
      src/main/java/com/szwl/model/entity/TEquipment.java
  54. 7 1
      src/main/java/com/szwl/model/entity/TEquipmentDesc.java
  55. 49 0
      src/main/java/com/szwl/model/entity/TGoodsData.java
  56. 62 0
      src/main/java/com/szwl/model/entity/THotUpdate.java
  57. 6 0
      src/main/java/com/szwl/model/entity/THuifuMchCheck.java
  58. 110 0
      src/main/java/com/szwl/model/entity/TLocationCheck.java
  59. 46 0
      src/main/java/com/szwl/model/entity/TNameDictionary.java
  60. 2 2
      src/main/java/com/szwl/model/entity/TProportion.java
  61. 2 2
      src/main/java/com/szwl/model/utils/MailUtil.java
  62. 18 0
      src/main/java/com/szwl/model/vo/EquipmentVO.java
  63. 3 0
      src/main/java/com/szwl/service/TAdminService.java
  64. 5 1
      src/main/java/com/szwl/service/TEquipmentDescService.java
  65. 5 0
      src/main/java/com/szwl/service/TEquipmentService.java
  66. 16 0
      src/main/java/com/szwl/service/TGoodsDataService.java
  67. 20 0
      src/main/java/com/szwl/service/THotUpdateService.java
  68. 23 0
      src/main/java/com/szwl/service/THuifuMchService.java
  69. 26 0
      src/main/java/com/szwl/service/TLocationCheckService.java
  70. 16 0
      src/main/java/com/szwl/service/TNameDictionaryService.java
  71. 4 4
      src/main/java/com/szwl/service/TProportionService.java
  72. 6 8
      src/main/java/com/szwl/service/impl/SysRoleServiceImpl.java
  73. 31 0
      src/main/java/com/szwl/service/impl/TAdminServiceImpl.java
  74. 40 1
      src/main/java/com/szwl/service/impl/TEquipmentDescServiceImpl.java
  75. 173 1
      src/main/java/com/szwl/service/impl/TEquipmentServiceImpl.java
  76. 20 0
      src/main/java/com/szwl/service/impl/TGoodsDataServiceImpl.java
  77. 67 0
      src/main/java/com/szwl/service/impl/THotUpdateServiceImpl.java
  78. 288 0
      src/main/java/com/szwl/service/impl/THuifuMchServiceImpl.java
  79. 144 0
      src/main/java/com/szwl/service/impl/TLocationCheckServiceImpl.java
  80. 3 3
      src/main/java/com/szwl/service/impl/TMessageCodeServiceImpl.java
  81. 20 0
      src/main/java/com/szwl/service/impl/TNameDictionaryServiceImpl.java
  82. 13 2
      src/main/java/com/szwl/service/impl/TPromoCodeServiceImpl.java
  83. 15 0
      src/main/java/com/szwl/util/WhoIsUtil.java
  84. 0 1
      src/test/java/com/szwl/ApplicationTests.java
  85. 1 1
      src/test/java/com/szwl/AutoGeneratorTests.java
  86. 14 0
      src/test/java/com/szwl/model/utils/MailUtilTest.java
  87. 39 0
      src/test/java/com/szwl/model/utils/usaEquipment/AClz.java
  88. 41 0
      src/test/java/com/szwl/model/utils/usaEquipment/ContainsTest.java
  89. 102 0
      src/test/java/com/szwl/model/utils/usaEquipment/CoordinateUtils.java
  90. 240 0
      src/test/java/com/szwl/model/utils/usaEquipment/RegexpTemp.java
  91. 466 0
      src/test/java/com/szwl/model/utils/usaEquipment/StringMatcher.java
  92. 27 0
      src/test/java/com/szwl/model/utils/usaEquipment/formatUtils.java

+ 10 - 0
pom.xml

@@ -269,6 +269,16 @@
 			<artifactId>elasticsearch-rest-client</artifactId>
 			<version>7.6.2</version>
 		</dependency>
+		<!-- 七牛云 -->
+		<dependency>
+			<groupId>com.qiniu</groupId>
+			<artifactId>qiniu-java-sdk</artifactId>
+			<version>7.13.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.google.code.gson</groupId>
+			<artifactId>gson</artifactId>
+		</dependency>
 	</dependencies>
 
 	<build>

Fichier diff supprimé car celui-ci est trop grand
+ 4 - 4
src/main/java/com/szwl/aspect/MyWebMvcConfigurer.java


+ 8 - 0
src/main/java/com/szwl/constant/ConfigConsts.java

@@ -17,4 +17,12 @@ public class ConfigConsts {
      * token时效性
      */
     public static final Integer TOKEN_EXPIRE_MINUTE = 120;
+
+    public static final String QINIU_CLOUD_ACCESS_KEY = "flO9jklPVdvOclCy2RoPOmuC0oQJkbtb3tc3EF8i";
+
+    public static final String QINIU_CLOUD_SECRET_KEY = "E0bvORbOLL9dLes_1qlyIaoQDA9xQSR_8ksxb44W";
+
+    public static final String QINIU_CLOUD_BUCKET = "videomanage";
+
+    public static final String DOMAIN_OF_BUCKET = "http://qiniuyun.sunzee.com.cn/";
 }

+ 2 - 0
src/main/java/com/szwl/constant/HuifuConstant.java

@@ -115,6 +115,8 @@ public class HuifuConstant {
     public final static String TRANS_STAT_S = "S";
     public final static String TRANS_STAT_P = "P";
     public final static String TRANS_STAT_F = "F";
+    public final static String RESP_CODE = "00000000";
+    public final static String SUCCESS = "success";
 
     /**
      * >>>>>>>>>>>>> 签名类型 >>>>>>>>>>>>>

+ 4 - 4
src/main/java/com/szwl/controller/AlarmRecordIndexController.java

@@ -110,14 +110,14 @@ public class AlarmRecordIndexController {
                     String[] split = messageReceiver.split(",");
                     for (int i = 0; i < split.length; i++) {
                         if (StringUtils.isNotEmpty(split[i])) {
-                            Long id = alarmRecord.getId();
-                            String mess = ";序号:"+String.valueOf(id);
+//                            Long id = alarmRecord.getId();
+//                            String mess = ";序号:"+String.valueOf(id);
                             if (StringUtils.isNotEmpty(companyType) && companyType.equals("1")) {
                                 // 如果是七云科技的用户
-                                result = YunPianSms.sendSms(appid, getSCMessage(alarmContent, name, clientId), split[i]);
+                                result = YunPianSms.sendSms(appid, getSCMessage(alarmContent, name, clientId.substring(clientId.length() - 6)), split[i]);
                             } else {
                                 // 如果是申泽智能的用户
-                                result = YunPianSms.sendSms(appid, getMessage(alarmContent+mess, name, clientId), split[i]);
+                                result = YunPianSms.sendSms(appid, getMessage(alarmContent, name, clientId.substring(clientId.length() - 6)), split[i]);
                             }
                         }
                     }

Fichier diff supprimé car celui-ci est trop grand
+ 735 - 413
src/main/java/com/szwl/controller/IndexController.java


+ 69 - 7
src/main/java/com/szwl/controller/ScheduledService.java

@@ -1,17 +1,31 @@
 package com.szwl.controller;
 
+import cn.hutool.http.HttpUtil;
+import com.szwl.mapper.TLocationCheckMapper;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.entity.THotUpdate;
+import com.szwl.model.entity.TLocationCheck;
 import com.szwl.service.TDepartmentService;
+import com.szwl.service.TEquipmentService;
+import com.szwl.service.THotUpdateService;
+import com.szwl.service.TLocationCheckService;
 import com.szwl.service.es.EsTCoinOrderService;
 import com.szwl.service.es.EsTOrderService;
+import com.szwl.util.WhoIsUtil;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
+import java.io.IOException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.Calendar;
+import java.util.List;
+import java.util.stream.Collectors;
 
 
 @Configuration //1.主要用于标记配置类,兼备Component的效果。
@@ -24,17 +38,65 @@ public class ScheduledService {
     EsTCoinOrderService esTCoinOrderService;
     @Autowired
     EsTOrderService esTOrderService;
+    @Autowired
+    THotUpdateService hotUpdateService;
+    @Autowired
+    TEquipmentService equipmentService;
+
+    @Resource
+    TLocationCheckMapper locationCheckMapper;
+    @Resource
+    TLocationCheckService locationCheckService;
+
+    // 每周二上午8点10分去校验设备位置
+    @Scheduled(cron = "0 10 8 ? * TUE")
+    public void equipmentLocCheck() throws IOException {
+        if (isDo()) {
+            List<TLocationCheck> locationChecks = locationCheckMapper.selectNotNullIp();
+//            String locErrorEq = null;
+            StringBuilder locErrorEq = new StringBuilder();
+            for (TLocationCheck locationChc : locationChecks) {
+                String clientId = locationChc.getClientId();
+                String ip = locationChc.getIp();
+                String addr = WhoIsUtil.getLocByIp(ip);
+                // 这里不需要更新ip,只需要校验有ip的设备位置对不对
+//                locationCheckService.locCheckMsg(locationChc, clientId, addr);
+                String check = locationCheckService.schLocCheck(locationChc, clientId, addr);
+                locErrorEq.append(check);
+            }
+            locationCheckService.schSendMsg(locErrorEq.toString());
+        }
+    }
 
+    // 每天4:30去检查多少设备进行了热更新
+//    @Scheduled(cron = "0 30 4 * * ?")
+//    public void haveUpdateNum() {
+//        // 遍历所有设备的apk_version,看多少台设备的apk_version = patch_veriosn
+//        // 获取热更新表中所有的 patch_version 信息
+//        List<String> patchVersions = hotUpdateService.list().stream().map(THotUpdate::getPatchVersion).collect(Collectors.toList());
+//        for (String patchVersion : patchVersions) {
+//            // 查询所有设备表中的的 apk_version 等于 patch_version的
+//            List<TEquipment> equipmentList = equipmentService.lambdaQuery().eq(TEquipment::getApkVersion, patchVersion).list();
+//            // 计算当前的 patch_version = apk_version 的设备数量
+//            int count = equipmentList.size();
+//
+//            THotUpdate hotUpdate = hotUpdateService.lambdaQuery().eq(THotUpdate::getPatchVersion, patchVersion).one();
+//            if (hotUpdate != null) {
+//                hotUpdate.setHaveUpdateNum(count);
+//                hotUpdateService.updateById(hotUpdate);
+//            }
+//        }
+//    }
 
     // 值日通知1
     // 每天8:20执行一次
     @Scheduled(cron = "0 20 8 * * ?")
     public void scheduled() {
-        if(isDo()){
+        if (isDo()) {
             Calendar calendar = Calendar.getInstance();
             int number = calendar.get(Calendar.DAY_OF_WEEK);
             // 如果不是周日 1
-            if(number!=1){
+            if (number != 1) {
                 tDepartmentService.onTime();
             }
         }
@@ -44,9 +106,9 @@ public class ScheduledService {
         try {
             String hostAddress = InetAddress.getLocalHost().getHostAddress();
             // 弹性112.74.63.148服务器的私网ip
-            if(hostAddress.equals("10.0.0.153")){
+            if (hostAddress.equals("10.0.0.153")) {
                 return true;
-            }else {
+            } else {
                 return false;
             }
         } catch (UnknownHostException e) {
@@ -58,11 +120,11 @@ public class ScheduledService {
     // 值日通知2
     // 每天17:55执行一次
     @Scheduled(cron = "0 55 17 * * ?")
-    public void scheduled2(){
-        if(isDo()){
+    public void scheduled2() {
+        if (isDo()) {
             Calendar calendar = Calendar.getInstance();
             int number = calendar.get(Calendar.DAY_OF_WEEK);
-            if(number!=1){
+            if (number != 1) {
                 tDepartmentService.onTime2();
             }
         }

+ 0 - 12
src/main/java/com/szwl/controller/SugarDoOrderController.java

@@ -32,14 +32,6 @@ public class SugarDoOrderController {
     @Autowired
     TEquipmentService equipmentService;
 
-//    @Autowired
-//    private TAdminService adminService;
-//
-//    @Autowired
-//    private TProductService productService;
-
-
-
     //远程做糖状态回返
     @RequestMapping(value = "/updateSugarDoStatus.htm", method = RequestMethod.GET, produces = "text/html;charset=utf-8")
     @ResponseBody
@@ -57,15 +49,11 @@ public class SugarDoOrderController {
                 }
                 sugarDoService.updateById(sugarDo);
             }else {
-//                return JsonMessage.error("error");
                 return "error";
             }
         }else {
-//            return JsonMessage.error("error");
             return "error";
         }
-
-//        return JsonMessage.success("success");
         return "success";
     }
 

+ 69 - 0
src/main/java/com/szwl/controller/SyncOldAdminController.java

@@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 @Slf4j
 @Api(value = "/syncOldAdmin", tags = {"同步旧系统的 admin 用户数据"})
@@ -41,6 +42,74 @@ public class SyncOldAdminController {
     }
 
 
+    @ApiOperation(value = "根据旧系统的层级关系来关联上级客户")
+    @PostMapping("/relevanceSuperiorCustomer")
+    public ResponseModel<?> relevanceSuperiorCustomer(String startTime, String endTime) {
+        int i = 0;
+        // 根据时间获取旧系统用户信息
+        List<TAdmin> oldAdminList = R.getDataIfSuccess(syncOldFeign.getAdminInTime(startTime, endTime));
+
+        // 先看在新系统中这些用户有没有关联上级
+        for (TAdmin admin : oldAdminList) {
+            Long id = admin.getId();
+            LambdaQueryWrapper<TAdmin> wrapper = Wrappers.lambdaQuery();
+            wrapper.eq(TAdmin::getId, id);
+            TAdmin adminNew = adminService.getOne(wrapper);
+            if (Objects.nonNull(adminNew)) {
+                String relationAdminId = adminNew.getRelationAdminId();
+                String adminId = String.valueOf(id);
+                if (StringUtils.isEmpty(relationAdminId)) { // 如果在新系统中未关联上级
+                    // 获取旧系统中对应的parentId
+                    Long parentId = R.getDataIfSuccess(syncOldFeign.getParentId(adminId));
+                    if (parentId == null) {
+                        adminNew.setRelationAdminId("");
+                    }
+                    adminNew.setRelationAdminId(String.valueOf(parentId));
+                    adminService.updateById(adminNew);
+                    i++;
+                }
+            }
+        }
+
+        return R.ok("关联成功" + i + "个客户");
+    }
+
+
+    @ApiOperation(value = "给指定时间范围内的所有旧系统用户设置新系统权限")
+    @PostMapping("/addAllRoleInTime")
+    public ResponseModel<?> addAllRoleInTime(String startTime, String endTime) {
+        if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) {
+            return R.fail("参数不能为空");
+        }
+        // 查看该时间范围内的用户
+        List<TAdmin> oldAdminList = R.getDataIfSuccess(syncOldFeign.getAdminInTime(startTime, endTime));
+        for (TAdmin admin : oldAdminList) {
+            Long adminId = admin.getId();
+            // 查询该 adminId 有没有权限
+            LambdaQueryWrapper<SysRole> lqw = Wrappers.lambdaQuery();
+            lqw.eq(SysRole::getAdminId, adminId);
+            List<SysRole> sysRoleList = sysRoleService.list(lqw);
+            if (sysRoleList.isEmpty()) {
+                LambdaQueryWrapper<SysRole> wrapper = Wrappers.lambdaQuery();
+                wrapper.eq(SysRole::getAdminId, "1");
+                wrapper.eq(SysRole::getRoleName, "商家");
+                SysRole template = sysRoleService.getOne(wrapper);
+                SysRole role = new SysRole();
+                role.setAdminId(adminId);
+                role.setMenuCodesJson(template.getMenuCodesJson());
+                role.setRoleName("商家");
+                sysRoleService.save(role);
+
+                SysUserRole sysUserRole = new SysUserRole();
+                sysUserRole.setRoleId(role.getRoleId());
+                sysUserRole.setUserId(String.valueOf(adminId));
+                sysUserRoleService.save(sysUserRole);
+            }
+        }
+        return R.ok("添加" + startTime + "至" + endTime + "的权限成功");
+    }
+
+
     @ApiOperation(value = "给用户 adminId 添加 sys_role 和 sys_user_role")
     @PostMapping("/addSysRole")
     public ResponseModel<?> addSysRole(Long adminId) {

+ 56 - 5
src/main/java/com/szwl/controller/SyncOldAllController.java

@@ -6,15 +6,16 @@ import com.szwl.model.bo.ResponseModel;
 import com.szwl.model.entity.TAdmin;
 import com.szwl.model.entity.TEquipment;
 import com.szwl.service.TAdminService;
+import com.szwl.service.TEquipmentService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-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 org.apache.commons.lang.StringUtils;
+import org.springframework.web.bind.annotation.*;
 
+import java.lang.annotation.ElementType;
 import java.util.Map;
+import java.util.Optional;
 
 @Slf4j
 @Api(value = "/syncOldAll", tags = {"根据设备&用户同步旧系统数据"})
@@ -24,12 +25,62 @@ public class SyncOldAllController {
 
     SyncOldFeign syncOldFeign;
     TAdminService adminService;
+    TEquipmentService equipmentService;
 
-    public SyncOldAllController(SyncOldFeign syncOldFeign, TAdminService adminService) {
+    public SyncOldAllController(SyncOldFeign syncOldFeign, TAdminService adminService, TEquipmentService equipmentService) {
         this.syncOldFeign = syncOldFeign;
         this.adminService = adminService;
+        this.equipmentService = equipmentService;
     }
 
+
+//    @ApiOperation(value = "")
+//    @GetMapping("/getAllDataByAdminIdClientId")
+//    public ResponseModel<?> getAllDataByAdminIdClientId(Long adminId, String clientId) {
+//        if (StringUtils.isEmpty(clientId) || adminId == null) {
+//            return R.fail("参数不能为空");
+//        }
+//
+//        // 先设置这个账户的权限
+//        String s = adminService.addSysRole(adminId);
+//        if ("success".equals(s)) {
+////            return R.ok("添加" + adminId + "的权限成功");
+//        } else {
+//            return R.fail("设备权限失败");
+//        }
+//
+//        // 同步该设备信息
+//        Optional<String> result = equipmentService.syncOneEquipmentByClientId(clientId);
+//        if (result.isPresent() && "success".equals(result.get())) {
+//            return R.ok("同步设备编号" + clientId + "的 equipment 信息成功");
+//        } else {
+//            return R.fail("同步设备数据失败");
+//        }
+//
+//
+////        if("success".equals(s1)) {
+////            return R.ok();
+////
+////        }
+////        if ("success".equals(s1)) {
+////            return R.ok("同步设备编号" + clientId + "的 equipment 信息成功");
+////        } else {
+////            return R.fail("设备权限失败");
+////        }
+//
+//
+//        // 同步花型
+//
+//        // 同步分销
+//
+//        // 同步汇聚支付
+//
+//        // 同步订单
+//
+////        return R.ok();
+//    }
+
+
     @ApiOperation(value = "根据设备同步旧系统所有数据")
     @PostMapping("/byClient")
     public ResponseModel<?> byClient(@RequestBody Map<String, String> params) {

+ 95 - 89
src/main/java/com/szwl/controller/SyncOldEquipmentController.java

@@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 @Slf4j
 @Api(value = "/syncOldEquipment", tags = {"同步旧系统的 equipment 设备数据"})
@@ -170,7 +171,7 @@ public class SyncOldEquipmentController {
             equipment.setCompanyType(companyType);
             equipment.setPaymentType(paymentType);
 
-            equipmentService.save(oldEquipment);
+            equipmentService.saveOrUpdate(equipment);
 
             return R.ok("同步设备编号" + clientId + "的 equipment 信息成功");
 
@@ -198,13 +199,12 @@ public class SyncOldEquipmentController {
         if (adminId != null) {
             List<TEquipment> oldEquipmentList = R.getDataIfSuccess(syncOldFeign.getEquipmentByAdminId(adminId));
 
+            // 先查看新系统该账户名下有无设备信息
+//            LambdaQueryWrapper<TEquipment> lqw = Wrappers.lambdaQuery();
+//            lqw.eq(TEquipment::getAdminId, adminId);
+//            List<TEquipment> newEquipmentList = equipmentService.list(lqw);
 
-            LambdaQueryWrapper<TEquipment> lqw = Wrappers.lambdaQuery();
-            lqw.eq(TEquipment::getAdminId, adminId);
-            List<TEquipment> newEquipmentList = equipmentService.list(lqw);
-
-
-            if (newEquipmentList.isEmpty()) {
+//            if (newEquipmentList.isEmpty()) {
                 // 伪批量插入
 //                equipmentService.saveBatch(oldEquipmentList);
                 // 真批量插入
@@ -219,7 +219,7 @@ public class SyncOldEquipmentController {
                     Long areaId = oldEquipment.getAreaId();
                     String cabinetHd = oldEquipment.getCabinetHd();
                     String cabinetTm = oldEquipment.getCabinetTm();
-//                    String clientId = oldEquipment.getClientId();
+                    String clientId = oldEquipment.getClientId();
                     String contactName = oldEquipment.getContactName();
                     String contactPhone = oldEquipment.getContactPhone();
                     String operationalPhone = oldEquipment.getOperationalPhone();
@@ -282,7 +282,7 @@ public class SyncOldEquipmentController {
                     equipment.setAreaId(areaId);
                     equipment.setCabinetHd(cabinetHd);
                     equipment.setCabinetTm(cabinetTm);
-//                    equipment.setClientId(clientId);
+                    equipment.setClientId(clientId);
                     equipment.setContactName(contactName);
                     equipment.setContactPhone(contactPhone);
                     equipment.setOperationalPhone(operationalPhone);
@@ -335,34 +335,33 @@ public class SyncOldEquipmentController {
                     equipment.setCompanyType(companyType);
                     equipment.setPaymentType(paymentType);
 
-                    equipmentService.save(oldEquipment);
+                    equipmentService.saveOrUpdate(equipment);
 
                 }
 
-            }
-//            else {
-//                for (TEquipment oldEquipment : oldEquipmentList) {
-//                    for (TEquipment newEquipment : newEquipmentList) {
-//                        if (newEquipment.getId().equals(oldEquipment.getId())) {
-//                            return R.fail("新系统已存在相同id的记录");
-//                        }
-//                        else {
-//                            equipmentService.save(oldEquipment);
-//                        }
-//                    }
-//                }
+//            } else {
+////                for (TEquipment oldEquipment : oldEquipmentList) {
+////                    for (TEquipment newEquipment : newEquipmentList) {
+////                        if (newEquipment.getId().equals(oldEquipment.getId())) {
+////                            return R.fail("新系统已存在相同id的记录");
+////                        }
+////                        else {
+////                            equipmentService.save(oldEquipment);
+////                        }
+////                    }
+////                }
+//                return R.fail("新系统中已存在该账户的设备信息");
 //            }
 
-
-            return R.ok("批量插入成功");
+            return R.ok("同步" + adminId + "名下所有机器设备信息成功");
         } else {
-            return R.fail("旧系统用户不存在");
+            return R.fail("旧系统中不存在该用户");
         }
     }
 
-    @ApiOperation(value = "同步旧系统某一时间段内的所有 t_equipment ") // 废弃~~~ 改用 getEquipmentByAdmin
-    @PostMapping("/syncEquipmentsInTime")
-    public ResponseModel<?> syncEquipmentsInTime(String startTime, String endTime) {
+    @ApiOperation(value = "同步旧系统某一时间段内的所有 t_equipment ")
+    @PostMapping("/syncAllEquipmentInTime")
+    public ResponseModel<?> syncAllEquipmentInTime(String startTime, String endTime) {
         if (StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) {
             List<TEquipment> oldEquipmentList = R.getDataIfSuccess(syncOldFeign.getEquipmentInTime(startTime, endTime));
 
@@ -434,70 +433,77 @@ public class SyncOldEquipmentController {
                 String paymentType = oldEquipment.getPaymentType();
                 String companyType = oldEquipment.getCompanyType();
 
-                TEquipment equipment = new TEquipment();
-                equipment.setId(id);
-                equipment.setCreateDate(createDate);
-                equipment.setModifyDate(modifyDate);
-                equipment.setAdminId(adminId);
-                equipment.setAdminLevel(adminLevel);
-                equipment.setAdminPwd(adminPwd);
-                equipment.setAreaId(areaId);
-                equipment.setCabinetHd(cabinetHd);
-                equipment.setCabinetTm(cabinetTm);
-                equipment.setClientId(clientId);
-                equipment.setContactName(contactName);
-                equipment.setContactPhone(contactPhone);
-                equipment.setOperationalPhone(operationalPhone);
-                equipment.setOperationalName(operationalName);
-                equipment.setFurnaceSp(furnaceSp);
-                equipment.setFurnaceTm(furnaceTm);
-                equipment.setGuestPwd(guestPwd);
-                equipment.setIsNetWork(isNetWork);
-                equipment.setIsUsing(isUsing);
-                equipment.setLastUpdateTime(lastUpdateTime);
-                equipment.setLatitude(latitude);
-                equipment.setLongitude(longitude);
-                equipment.setManagerId(managerId);
-                equipment.setSelfName(selfName);
-                equipment.setChannel(channel);
-                equipment.setName(name);
-                equipment.setNetWorkingMode(netWorkingMode);
-                equipment.setOperator(operator);
-                equipment.setPayType(payType);
-                equipment.setProductTotal(productTotal);
-                equipment.setSimNo(simNo);
-                equipment.setSn(sn);
-                equipment.setAdminUserName(adminUserName);
-                equipment.setAgencyId(agencyId);
-                equipment.setMerchantId(merchantId);
-                equipment.setCompanyPhone(companyPhone);
-                equipment.setPersonageId(personageId);
-                equipment.setType(type);
-                equipment.setFullName(fullName);
-                equipment.setPushUpdateTime(pushUpdateTime);
-                equipment.setTimeRuleId(timeRuleId);
-                equipment.setGtClientId(gtClientId);
-                equipment.setEqeStatus(eqeStatus);
-                equipment.setIsBlocked(isBlocked);
-                equipment.setMessageReceiver(messageReceiver);
-                equipment.setIsSleep(isSleep);
-                equipment.setAdvancedParameters(advancedParameters);
-                equipment.setVolume(volume);
-                equipment.setCommonParameters(commonParameters);
-                equipment.setNetwork(network);
-                equipment.setOffTime(offTime);
-                equipment.setBootTime(bootTime);
-                equipment.setPlcVersion(plcVersion);
-                equipment.setEquimentType(equipmentType);
-                equipment.setEndDate(endDate);
-                equipment.setFlowers(flowers);
-                equipment.setMachineType(machineType);
+                // 查看新系统有没有这台机
+                LambdaQueryWrapper<TEquipment> lqw = Wrappers.lambdaQuery();
+                lqw.eq(TEquipment::getClientId, clientId);
+                TEquipment isNewEquipment = equipmentService.getOne(lqw);
+                if (Objects.isNull(isNewEquipment)) {
+
+                    TEquipment equipment = new TEquipment();
+                    equipment.setId(id);
+                    equipment.setCreateDate(createDate);
+                    equipment.setModifyDate(modifyDate);
+                    equipment.setAdminId(adminId);
+                    equipment.setAdminLevel(adminLevel);
+                    equipment.setAdminPwd(adminPwd);
+                    equipment.setAreaId(areaId);
+                    equipment.setCabinetHd(cabinetHd);
+                    equipment.setCabinetTm(cabinetTm);
+                    equipment.setClientId(clientId);
+                    equipment.setContactName(contactName);
+                    equipment.setContactPhone(contactPhone);
+                    equipment.setOperationalPhone(operationalPhone);
+                    equipment.setOperationalName(operationalName);
+                    equipment.setFurnaceSp(furnaceSp);
+                    equipment.setFurnaceTm(furnaceTm);
+                    equipment.setGuestPwd(guestPwd);
+                    equipment.setIsNetWork(isNetWork);
+                    equipment.setIsUsing(isUsing);
+                    equipment.setLastUpdateTime(lastUpdateTime);
+                    equipment.setLatitude(latitude);
+                    equipment.setLongitude(longitude);
+                    equipment.setManagerId(managerId);
+                    equipment.setSelfName(selfName);
+                    equipment.setChannel(channel);
+                    equipment.setName(name);
+                    equipment.setNetWorkingMode(netWorkingMode);
+                    equipment.setOperator(operator);
+                    equipment.setPayType(payType);
+                    equipment.setProductTotal(productTotal);
+                    equipment.setSimNo(simNo);
+                    equipment.setSn(sn);
+                    equipment.setAdminUserName(adminUserName);
+                    equipment.setAgencyId(agencyId);
+                    equipment.setMerchantId(merchantId);
+                    equipment.setCompanyPhone(companyPhone);
+                    equipment.setPersonageId(personageId);
+                    equipment.setType(type);
+                    equipment.setFullName(fullName);
+                    equipment.setPushUpdateTime(pushUpdateTime);
+                    equipment.setTimeRuleId(timeRuleId);
+                    equipment.setGtClientId(gtClientId);
+                    equipment.setEqeStatus(eqeStatus);
+                    equipment.setIsBlocked(isBlocked);
+                    equipment.setMessageReceiver(messageReceiver);
+                    equipment.setIsSleep(isSleep);
+                    equipment.setAdvancedParameters(advancedParameters);
+                    equipment.setVolume(volume);
+                    equipment.setCommonParameters(commonParameters);
+                    equipment.setNetwork(network);
+                    equipment.setOffTime(offTime);
+                    equipment.setBootTime(bootTime);
+                    equipment.setPlcVersion(plcVersion);
+                    equipment.setEquimentType(equipmentType);
+                    equipment.setEndDate(endDate);
+                    equipment.setFlowers(flowers);
+                    equipment.setMachineType(machineType);
 //                equipment.setApkVersion();
 //                equipment.setCouponStatus();
-                equipment.setCompanyType(companyType);
-                equipment.setPaymentType(paymentType);
+                    equipment.setCompanyType(companyType);
+                    equipment.setPaymentType(paymentType);
 
-                equipmentService.save(oldEquipment);
+                    equipmentService.save(equipment);
+                }
             }
             return R.ok("同步" + startTime + "至" + endTime + "的 equipment 信息成功");
         } else {

+ 111 - 0
src/main/java/com/szwl/controller/SyncOldJoinpayMchController.java

@@ -1,17 +1,24 @@
 package com.szwl.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.szwl.feign.bean.SyncOldFeign;
 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.service.TJoinpayMchService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 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;
 import java.util.Objects;
 
 @Slf4j
@@ -28,6 +35,110 @@ public class SyncOldJoinpayMchController {
         this.syncOldFeign = syncOldFeign;
     }
 
+    @ApiOperation(value = "同步某一时间段内的所有用户的汇聚支付信息")
+    @PostMapping("/syncAllJoinpayInTime")
+    public ResponseModel<?> syncAllJoinpayInTime(String startTime, String endTime) {
+        if (StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) {
+            List<TAdmin> oldAdminList = R.getDataIfSuccess(syncOldFeign.getAdminInTime(startTime, endTime));
+            for (TAdmin oldAdmin : oldAdminList) {
+                Long adminId = oldAdmin.getId();
+                TJoinpayMch oldJoinpayMch = R.getDataIfSuccess(syncOldFeign.getJoinpayMchByAdminId(adminId));
+                if (Objects.nonNull(oldJoinpayMch)) {
+                    // 查看新系统有没有这个汇聚信息
+                    LambdaQueryWrapper<TJoinpayMch> lqw = Wrappers.lambdaQuery();
+                    lqw.eq(TJoinpayMch::getAdminId, adminId);
+                    TJoinpayMch isNewJoinpay = joinpayMchService.getOne(lqw);
+                    if (Objects.isNull(isNewJoinpay)) {
+                        // 新系统没有这个用户的汇聚信息
+                        Date createDate = oldJoinpayMch.getCreateDate();
+                        Date modifyDate = oldJoinpayMch.getModifyDate();
+//                    Long adminId1 = oldJoinpayMch.getAdminId();
+                        BigDecimal altAvilBalance = oldJoinpayMch.getAltAvilBalance();
+                        BigDecimal altGuarBalance = oldJoinpayMch.getAltGuarBalance();
+                        BigDecimal altMainBalance = oldJoinpayMch.getAltMainBalance();
+                        String altMchName = oldJoinpayMch.getAltMchName();
+                        String altMchNo = oldJoinpayMch.getAltMchNo();
+                        String altMchShortName = oldJoinpayMch.getAltMchShortName();
+                        Integer altMerchantType = oldJoinpayMch.getAltMerchantType();
+                        String bankAccountName = oldJoinpayMch.getBankAccountName();
+                        String bankAccountNo = oldJoinpayMch.getBankAccountNo();
+                        Integer bankAccountType = oldJoinpayMch.getBankAccountType();
+                        String bankChannelNo = oldJoinpayMch.getBankChannelNo();
+                        String bizCode = oldJoinpayMch.getBizCode();
+                        String busiContactMobileNo = oldJoinpayMch.getBusiContactMobileNo();
+                        String busiContactName = oldJoinpayMch.getBusiContactName();
+                        String idCardExpiry = oldJoinpayMch.getIdCardExpiry();
+                        String idCardNo = oldJoinpayMch.getIdCardNo();
+                        String legalPerson = oldJoinpayMch.getLegalPerson();
+                        String licenseExpiry = oldJoinpayMch.getLicenseExpiry();
+                        String licenseNo = oldJoinpayMch.getLicenseNo();
+                        String loginName = oldJoinpayMch.getLoginName();
+                        String manageAddr = oldJoinpayMch.getManageAddr();
+                        String manageScope = oldJoinpayMch.getManageScope();
+                        String orderStatus = oldJoinpayMch.getOrderStatus();
+                        String phoneNo = oldJoinpayMch.getPhoneNo();
+                        String respCode = oldJoinpayMch.getRespCode();
+                        Integer riskDay = oldJoinpayMch.getRiskDay();
+                        Integer settDateType = oldJoinpayMch.getSettDateType();
+                        Integer settMode = oldJoinpayMch.getSettMode();
+                        String status = oldJoinpayMch.getStatus();
+                        String signStatus = oldJoinpayMch.getSignStatus();
+                        String signTrxNo = oldJoinpayMch.getSignTrxNo();
+                        String approveNote = oldJoinpayMch.getApproveNote();
+                        String approveStatus = oldJoinpayMch.getApproveStatus();
+                        String type = oldJoinpayMch.getType();
+                        String step = oldJoinpayMch.getStep();
+
+                        TJoinpayMch newJoinPay = new TJoinpayMch();
+                        newJoinPay.setCreateDate(createDate);
+                        newJoinPay.setModifyDate(modifyDate);
+                        newJoinPay.setAdminId(adminId);
+                        newJoinPay.setAltAvilBalance(altAvilBalance);
+                        newJoinPay.setAltGuarBalance(altGuarBalance);
+                        newJoinPay.setAltMainBalance(altMainBalance);
+                        newJoinPay.setAltMchName(altMchName);
+                        newJoinPay.setAltMchNo(altMchNo);
+                        newJoinPay.setAltMchShortName(altMchShortName);
+                        newJoinPay.setAltMerchantType(altMerchantType);
+                        newJoinPay.setBankAccountName(bankAccountName);
+                        newJoinPay.setBankAccountNo(bankAccountNo);
+                        newJoinPay.setBankAccountType(bankAccountType);
+                        newJoinPay.setBankChannelNo(bankChannelNo);
+                        newJoinPay.setBizCode(bizCode);
+                        newJoinPay.setBusiContactMobileNo(busiContactMobileNo);
+                        newJoinPay.setBusiContactName(busiContactName);
+                        newJoinPay.setIdCardExpiry(idCardExpiry);
+                        newJoinPay.setIdCardNo(idCardNo);
+                        newJoinPay.setLegalPerson(legalPerson);
+                        newJoinPay.setLicenseExpiry(licenseExpiry);
+                        newJoinPay.setLicenseNo(licenseNo);
+                        newJoinPay.setLoginName(loginName);
+                        newJoinPay.setManageAddr(manageAddr);
+                        newJoinPay.setManageScope(manageScope);
+                        newJoinPay.setOrderStatus(orderStatus);
+                        newJoinPay.setPhoneNo(phoneNo);
+                        newJoinPay.setRespCode(respCode);
+                        newJoinPay.setRiskDay(riskDay);
+                        newJoinPay.setSettDateType(settDateType);
+                        newJoinPay.setSettMode(settMode);
+                        newJoinPay.setStatus(status);
+                        newJoinPay.setSignStatus(signStatus);
+                        newJoinPay.setSignTrxNo(signTrxNo);
+                        newJoinPay.setApproveNote(approveNote);
+                        newJoinPay.setApproveStatus(approveStatus);
+                        newJoinPay.setType(type);
+                        newJoinPay.setStep(step);
+                        joinpayMchService.save(newJoinPay);
+                    }
+                }
+            }
+            return R.ok("同步" + startTime + "至" + endTime + "的汇聚支付信息成功");
+        } else {
+            return R.fail("参数不能为空");
+        }
+
+    }
+
     @ApiOperation(value = "根据用户id同步汇聚支付信息")
     @PostMapping("/syncJoinpayMchByAdminId")
     public ResponseModel<?> syncJoinpayMchByAdminId(Long adminId) {

+ 73 - 13
src/main/java/com/szwl/controller/SyncOldProductController.java

@@ -14,11 +14,12 @@ import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
-import org.omg.CORBA.Object;
 import org.springframework.web.bind.annotation.PostMapping;
 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;
 import java.util.Objects;
 
@@ -40,25 +41,84 @@ public class SyncOldProductController {
         this.syncOldFeign = syncOldFeign;
     }
 
+    @ApiOperation(value = "同步旧系统所有设备的花型数据")
+    @PostMapping("/syncAllProductInTime")
+    public ResponseModel<?> syncAllProductInTime(String startTime, String endTime) {
+        if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) {
+            return R.fail("参数为空");
+        }
+        // 获取时间段内的设备
+        List<TEquipment> oldEquipmentList = R.getDataIfSuccess(syncOldFeign.getEquipmentInTime(startTime, endTime));
+
+        for (TEquipment oldEquipment : oldEquipmentList) {
+            // 看着台设备的花型数据是否存在新系统
+            Long id = oldEquipment.getId();
+            LambdaQueryWrapper<TProduct> lqw = Wrappers.lambdaQuery();
+            lqw.eq(TProduct::getEquipmentId, id);
+            List<TProduct> isNewProductList = productService.list(lqw);
+            if (isNewProductList.isEmpty()) {
+                // 根据设备获取花型数据
+                String equipmentId = String.valueOf(oldEquipment.getId());
+                List<TProduct> oldProductList = R.getDataIfSuccess(syncOldFeign.getProductByEquipmentId(equipmentId));
+                for (TProduct oldProduct : oldProductList) {
+                    Date createDate = oldProduct.getCreateDate();
+                    Date modifyDate = oldProduct.getModifyDate();
+                    BigDecimal codePrice = oldProduct.getCodePrice();
+                    Long equipmentId1 = oldProduct.getEquipmentId();
+                    String name = oldProduct.getName();
+                    String productName = oldProduct.getProductName();
+                    BigDecimal rmbPrice = oldProduct.getRmbPrice();
+                    Boolean sellStatus = oldProduct.getSellStatus();
+                    String showType = oldProduct.getShowType();
+                    String no = oldProduct.getNo();
+
+                    TProduct newProduct = new TProduct();
+                    newProduct.setCreateDate(createDate);
+                    newProduct.setModifyDate(modifyDate);
+                    newProduct.setCodePrice(codePrice);
+                    newProduct.setEquipmentId(equipmentId1);
+                    newProduct.setName(name);
+                    newProduct.setProductName(productName);
+                    newProduct.setRmbPrice(rmbPrice);
+                    newProduct.setSellStatus(sellStatus);
+                    newProduct.setShowType(showType);
+                    newProduct.setNo(no);
+
+                    productService.save(newProduct);
+
+                }
+//                productService.saveOrUpdateBatch(oldProductList);
+//                productService.saveBatch(oldProductList);
+            }
+        }
+
+        return R.ok("同步设备" + startTime + "至" + endTime + "期间所有的花型数据成功");
+    }
 
     @ApiOperation(value = "同步花型数据")
     @PostMapping("/syncProductByEquipmentId")
-    public ResponseModel<?> syncProductByEquipmentId(String equipmentId) {
-        if (StringUtils.isEmpty(equipmentId)) {
+    public ResponseModel<?> syncProductByEquipmentId(String clientId) {
+        if (StringUtils.isEmpty(clientId)) {
             return R.fail("参数不能为空");
         }
 
-        LambdaQueryWrapper<TProduct> wrapper = Wrappers.lambdaQuery();
-        wrapper.eq(TProduct::getEquipmentId, equipmentId);
-        TProduct product = productService.getOne(wrapper);
-        if (Objects.isNull(product)) {
-            List<TProduct> productList = R.getDataIfSuccess(syncOldFeign.getProductByEquipmentId(equipmentId));
+        LambdaQueryWrapper<TEquipment> lqw = Wrappers.lambdaQuery();
+        lqw.eq(TEquipment::getClientId,clientId);
+        TEquipment equipment = equipmentService.getOne(lqw);
+        String equipmentId = String.valueOf(equipment.getId());
+
+//        LambdaQueryWrapper<TProduct> wrapper = Wrappers.lambdaQuery();
+//        wrapper.eq(TProduct::getEquipmentId, equipmentId);
+//        List<TProduct> productList = productService.list(wrapper);
+//        if (Objects.isNull(productList)) {
+            List<TProduct> oldProductList = R.getDataIfSuccess(syncOldFeign.getProductByEquipmentId(equipmentId));
 //            TProduct newProduct = new TProduct();
-            productService.saveBatch(productList);
-            return R.ok("同步" + equipmentId + "的花型数据成功");
-        } else {
-            return R.fail("花型数据已存在");
-        }
+//            productService.saveBatch(oldProductList);
+            productService.saveOrUpdateBatch(oldProductList);
+            return R.ok("同步设备" + equipmentId + "的花型数据成功");
+//        } else {
+//            return R.fail("花型数据已存在");
+//        }
     }
 
 }

+ 23 - 1
src/main/java/com/szwl/controller/SyncOldProportionController.java

@@ -5,15 +5,19 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.szwl.feign.bean.SyncOldFeign;
 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.TProportion;
 import com.szwl.service.TProportionService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Objects;
 
 @Slf4j
@@ -31,6 +35,24 @@ public class SyncOldProportionController {
         this.proportionService = proportionService;
     }
 
+    @ApiOperation(value = "同步时间范围内的所有分销信息")
+    @PostMapping("/syncAllProportionInTime")
+    public ResponseModel<?> syncAllProportionInTime(String startTime, String endTime) {
+        if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) {
+            return R.fail("参数为空");
+        }
+        // 获取所有用户
+        List<TAdmin> oldAdminList = R.getDataIfSuccess(syncOldFeign.getAdminInTime(startTime, endTime));
+        for (TAdmin oldAdmin : oldAdminList) {
+            Long adminId = oldAdmin.getId();
+            // 根据用户同步分销
+            TProportion proportion = R.getDataIfSuccess(syncOldFeign.getProportionByAdminId(adminId));
+            if (Objects.nonNull(proportion)) {
+                proportionService.saveOrUpdate(proportion);
+            }
+        }
+        return R.ok("同步" + startTime + "至" + endTime + "时间范围内分销信息成功");
+    }
 
     @ApiOperation(value = "根据用户id同步分销信息")
     @PostMapping("/syncProportionByAdminId")
@@ -41,7 +63,7 @@ public class SyncOldProportionController {
 
         TProportion proportion = R.getDataIfSuccess(syncOldFeign.getProportionByAdminId(adminId));
         if (Objects.nonNull(proportion)) {
-            proportionService.save(proportion);
+            proportionService.saveOrUpdate(proportion);
         }
         return R.ok("同步用户" + adminId + "分销信息成功");
     }

+ 106 - 17
src/main/java/com/szwl/controller/TAdminController.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sun.javafx.logging.PulseLogger;
 import com.szwl.annotation.Audit;
 import com.szwl.constant.AuditEnum;
 import com.szwl.constant.ResponseCodesEnum;
@@ -84,6 +85,24 @@ public class TAdminController {
 
     private static final Logger logger = LoggerFactory.getLogger(TAdminController.class);
 
+    @ApiOperation(value = "通过username查看用户的id和ifForeign")
+    @GetMapping("/getIdIfForeign")
+    public ResponseModel<TAdmin> getIdIfForeign(@RequestParam String username) {
+        if (StringUtils.isEmpty(username)) {
+            return R.fail("username为空");
+        }
+        LambdaQueryWrapper<TAdmin> lqw = Wrappers.lambdaQuery();
+        lqw.eq(TAdmin::getUsername, username);
+        List<TAdmin> list = tAdminService.list(lqw);
+        if (list.isEmpty()) {
+            return R.fail("username有误");
+        } else if (list.size() > 1) {
+            return R.fail("username不唯一");
+        } else {
+            return R.ok(list.get(0));
+        }
+    }
+
 
     @ApiOperation(value = "获取账户类型")
     @GetMapping("/getAdminType")
@@ -102,7 +121,7 @@ public class TAdminController {
     @ApiOperation(value = "判断是否海外用户")
     @GetMapping("/getIfForeign/{adminId}")
     public ResponseModel<?> getIfForeign(@PathVariable Long adminId) {
-        if (adminId != null){
+        if (adminId != null) {
             LambdaQueryWrapper<TAdmin> wrapper = Wrappers.lambdaQuery();
             wrapper.eq(TAdmin::getId, adminId);
             TAdmin one = tAdminService.getOne(wrapper);
@@ -134,9 +153,10 @@ public class TAdminController {
         param.setAdminId(null);
         LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
         query.eq(TAdmin::getUsername, param.getUsername());
-        List<TAdmin> list = tAdminService.list(query);
-        if (list.size() > 0) {
-            return R.fail(ResponseCodesEnum.A0001);
+//        List<TAdmin> list = tAdminService.list(query);
+        TAdmin admin = tAdminService.getOne(query);
+        if (admin != null) {
+            return R.fail(ResponseCodesEnum.A0201);
         }
         TAdmin entity = BeanUtil.copyProperties(param, TAdmin.class);
         entity.setParentId(parentId);
@@ -690,9 +710,7 @@ public class TAdminController {
     @ApiOperation(value = "获取账号信息")
     @GetMapping("/getAdmin")
     public ResponseModel<TAdmin> getAdmin(@RequestParam String id) {
-//        TAdmin tAdmin = tAdminService.getById(id);
         LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
-//        query.eq(TAdmin::getUsername,username);
         query.eq(TAdmin::getId, id);
         TAdmin tAdmin = Optional.ofNullable(tAdminService.getOnly(query))
                 .orElseThrow(() -> new BizException(ResponseCodesEnum.L0002));
@@ -703,15 +721,6 @@ public class TAdminController {
         }
         UserDetailBO userDetailBO = BeanUtil.copyProperties(tAdmin, UserDetailBO.class);
 
-//        String token = IdUtil.simpleUUID();
-//        userDetailBO.setCurrentToken(token);
-//        // 获取拥有的权限菜单
-//        Set<String> menuList = sysRoleService.listAuthMenuByUserId(userDetailBO.getId());
-//        userDetailBO.setMenuCodeList(CollUtil.newArrayList(menuList));
-        // 抹除密码
-//        userDetailBO.setPassword(null);
-        // 保存到redis
-//        tokenManager.saveAuthentication(token,userDetailBO);
         return R.ok(userDetailBO);
     }
 
@@ -833,11 +842,50 @@ public class TAdminController {
         if (admin.getApplyEndTime() != null) {
             oldAdmin.setApplyEndTime(admin.getApplyEndTime());
         }
+        if (StringUtils.isNotEmpty(admin.getRelationAdminId())) {
+            oldAdmin.setRelationAdminId(admin.getRelationAdminId());
+        }
         oldAdmin.setModifyDate(new Date());
         tAdminService.updateById(oldAdmin);
         return R.ok(null, "修改成功");
     }
 
+    @ApiOperation(value = "设置关联上级")
+    @PostMapping("/setRelationAdminId")
+    public ResponseModel<?> setRelationAdminId(@RequestBody Map<String, String> params) {
+        String managerId = params.get("managerId");
+        String username = params.get("username");
+        String relationUsername = params.get("relationUsername");
+        if (StringUtils.isEmpty(managerId) || StringUtils.isEmpty(username)) {
+            return R.fail(ResponseCodesEnum.A0001, "参数不能为空");
+        }
+        LambdaQueryWrapper<TAdmin> lqw = Wrappers.lambdaQuery();
+        lqw.eq(TAdmin::getUsername, username);
+        TAdmin admin = tAdminService.getOne(lqw);
+        if (Objects.isNull(admin)) {
+            return R.fail(ResponseCodesEnum.A0206, "用户不存在");
+        }
+        String managerId1 = admin.getManagerId();
+
+        if (!managerId1.equals(managerId)) {
+            return R.fail(ResponseCodesEnum.B0001, "用户名或系统id不匹配");
+        }
+        if (username.equals(relationUsername)) {
+            return R.fail(ResponseCodesEnum.B0001, "同一账户不能构成上下级");
+        }
+        if (StringUtils.isEmpty(relationUsername) || "".equals(relationUsername)) { // 无上级,或取消上级
+            admin.setRelationAdminId("");
+        } else {
+            LambdaQueryWrapper<TAdmin> wrapper = Wrappers.lambdaQuery();
+            wrapper.eq(TAdmin::getUsername, relationUsername);
+            TAdmin relationAdmin = tAdminService.getOne(wrapper);
+            Long relationAdminId = relationAdmin.getId();
+            admin.setRelationAdminId(String.valueOf(relationAdminId));
+        }
+        tAdminService.saveOrUpdate(admin);
+        return R.ok("关联成功");
+    }
+
     @ApiOperation(value = "绑定上级账户")
     @GetMapping("/setRelationAdmin")
     @Transactional
@@ -915,6 +963,35 @@ public class TAdminController {
         return R.ok();
     }
 
+    @ApiOperation(value = "通过 adminId 获取上级账号信息")
+    @GetMapping("/getRelation")
+    public ResponseModel<TAdmin> getRelation(String adminId) {
+        LambdaQueryWrapper<TAdmin> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(TAdmin::getId, adminId);
+        TAdmin admin = tAdminService.getOne(wrapper);
+        if (Objects.nonNull(admin)) {
+            String relationAdminId = admin.getRelationAdminId();
+            if (StringUtils.isNotEmpty(relationAdminId) && !"".equals(relationAdminId)) {
+                TAdmin relationAdmin = tAdminService.getById(relationAdminId);
+                return R.ok(relationAdmin);
+            }
+        }
+        return R.ok();
+    }
+
+    @ApiOperation(value = "通过 username 获取账号的 id")
+    @GetMapping("/getRelationAdminId")
+    public ResponseModel<String> getRelationAdminId(String relationUsername) {
+        LambdaQueryWrapper<TAdmin> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(TAdmin::getUsername, relationUsername);
+        TAdmin admin = tAdminService.getOne(wrapper);
+        if (Objects.nonNull(admin)) {
+            Long adminId = admin.getId();
+            return R.ok(String.valueOf(adminId));
+        }
+        return R.ok();
+    }
+
     @ApiOperation(value = "获取上级账号名")
     @GetMapping("/getRelationAdminUsername")
     public String getRelationAdminUsername(String relationAdminId) {
@@ -981,7 +1058,7 @@ public class TAdminController {
         if (adminId == 2739) {
             updateWrapper.eq("company_type", 1);
         }
-        updateWrapper.set("pay_platform",payPlatform);
+        updateWrapper.set("pay_platform", payPlatform);
         tAdminService.update(null, updateWrapper);
         return R.ok();
     }
@@ -1006,7 +1083,19 @@ public class TAdminController {
             boolean save = sysUserRoleService.save(sysUserRole);
             return R.ok("success");
         }
-        return R.fail(ResponseCodesEnum.A0001,"fail");
+        return R.fail(ResponseCodesEnum.A0001, "fail");
+    }
+
+    @ApiOperation(value = "检验用户名是否存在")
+    @GetMapping("/checkUserName")
+    public ResponseModel<?> checkUserName(String username) {
+        LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
+        query.eq(TAdmin::getUsername, username);
+        TAdmin admin = tAdminService.getOne(query);
+        if (admin != null) {
+            return R.fail(ResponseCodesEnum.A0001);
+        }
+        return R.ok();
     }
 }
 

+ 48 - 2
src/main/java/com/szwl/controller/TAlarmRecordController.java

@@ -23,8 +23,9 @@ import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Date;
-import java.util.List;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -118,5 +119,50 @@ public class TAlarmRecordController {
         IPage<TAlarmRecord> iPage = tAlarmRecordService.page(page, query);
         return R.ok(iPage);
     }
+
+    @ApiOperation(value = "查询今天是否有报警")
+    @GetMapping("/isAlarm")
+    public ResponseModel<?> isAlarm(Long adminId, String todayDate){
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = null;
+        try {
+            date = sdf.parse(todayDate);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        Calendar calendar = new GregorianCalendar();
+        Calendar calendarEnd = new GregorianCalendar();
+        calendar.setTime(date);
+        calendarEnd.setTime(date);
+
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+
+        calendarEnd.set(Calendar.HOUR_OF_DAY, 23);
+        calendarEnd.set(Calendar.MINUTE, 59);
+        calendarEnd.set(Calendar.SECOND, 59);
+        calendarEnd.set(Calendar.MILLISECOND, 999);
+        Date dateStart = calendar.getTime();
+        Date dateEnd = calendarEnd.getTime();
+        LambdaQueryWrapper<TAlarmRecord> tAlarmRecord = new LambdaQueryWrapper<>();
+        tAlarmRecord.eq(TAlarmRecord::getAdminId, adminId);
+        tAlarmRecord.eq(TAlarmRecord::getIsEliminate, 0);
+        tAlarmRecord.gt(TAlarmRecord::getOccurrenceTime, dateStart);
+        tAlarmRecord.le(TAlarmRecord::getOccurrenceTime, dateEnd);
+        tAlarmRecord.orderByAsc(TAlarmRecord::getOccurrenceTime);
+        List<TAlarmRecord> list = tAlarmRecordService.list(tAlarmRecord);
+        if (list.size() > 0) {
+            Map<Long, TAlarmRecord> latestRecordsMap = new HashMap<>();
+            for (TAlarmRecord alarmRecord : list) {
+                latestRecordsMap.put(alarmRecord.getEquipmentId(), alarmRecord);
+            }
+            list = new ArrayList<>(latestRecordsMap.values());
+            return R.ok(list);
+        }
+        return R.ok();
+    }
+
 }
 

+ 48 - 8
src/main/java/com/szwl/controller/TEquipmentApplyController.java

@@ -202,14 +202,26 @@ public class TEquipmentApplyController {
                             equipmentService.sentMessage(clientId,PushUtils.buildJson("statusType", "agreed" + old).toString());
                             if(StringUtils.isEmpty(machineType) || machineType.equals("0")) {
                                 PushUtils.push(equipmentApply.getGtClientId(), "【棉花糖】设备初始化申请", "同意", PushUtils.buildJson("statusType", "agreed" + old).toString());
-                            } else {
+                            } else if (StringUtils.isNotEmpty(machineType) && machineType.equals("1")) {
                                 PushUtils.push(equipmentApply.getGtClientId(), "【爆米花】设备初始化申请", "同意", PushUtils.buildJson("statusType", "agreed" + old).toString());
+                            } else if (StringUtils.isNotEmpty(machineType) && machineType.equals("2")) {
+                                PushUtils.push(equipmentApply.getGtClientId(), "【冰淇淋】设备初始化申请", "同意", PushUtils.buildJson("statusType", "agreed" + old).toString());
                             }
                             equipmentApplyService.updateById(equipmentApply);
                             if(equipment.getEndDate()!=null){
                                 equipmentService.sentMessage(equipmentApply.getClientId(),PushUtils.buildJson("endDate",String.valueOf(equipment.getEndDate().getTime()) ).toString());
                                 PushUtils.push(equipmentApply.getGtClientId(), "", "", PushUtils.buildJson("endDate",String.valueOf(equipment.getEndDate().getTime()) ).toString());
                             }
+
+                            LambdaQueryWrapper<TEquipmentDesc> lqw = Wrappers.lambdaQuery();
+                            lqw.eq(TEquipmentDesc::getEquipmentId, equipment.getId());
+                            List<TEquipmentDesc> equipmentDescs = equipmentDescService.list(lqw);
+                            if (equipmentDescs.size() == 0) {
+                                TEquipmentDesc equipmentDesc = new TEquipmentDesc();
+                                equipmentDesc.setEquipmentId(equipment.getId());
+                                equipmentDescService.save(equipmentDesc);
+                            }
+
                             return R.ok(null,"审核成功");
                         }
                         TEquipment equipment = new TEquipment();
@@ -256,17 +268,21 @@ public class TEquipmentApplyController {
                         equipmentService.sentMessage(clientId,PushUtils.buildJson("statusType", "agreed" + old).toString());
                         if(StringUtils.isEmpty(machineType) || machineType.equals("0")) {
                             PushUtils.push(equipmentApply.getGtClientId(), "【棉花糖】设备初始化申请", "同意", PushUtils.buildJson("statusType", "agreed" + old).toString());
-                        } else {
+                        } else if (StringUtils.isNotEmpty(machineType) && machineType.equals("1")) {
                             PushUtils.push(equipmentApply.getGtClientId(), "【爆米花】设备初始化申请", "同意", PushUtils.buildJson("statusType", "agreed" + old).toString());
+                        } else if (StringUtils.isNotEmpty(machineType) && machineType.equals("2")) {
+                            PushUtils.push(equipmentApply.getGtClientId(), "【冰淇淋】设备初始化申请", "同意", PushUtils.buildJson("statusType", "agreed" + old).toString());
                         }
                         //获取设备的id
                         Long equipmentId = equipment.getId();
-                        if(equimentType !=null && equimentType.equals("MG280")){
+                        if(StringUtils.isNotEmpty(equimentType) && equimentType.equals("MG280")){
                             saveProductMG280(equipmentId);
-                        } else if(equimentType !=null&& equimentType.equals("MG320-1")){
+                        } else if(StringUtils.isNotEmpty(equimentType) && equimentType.equals("MG320-1")){
                             saveProductMG1(equipmentId);
-                        } else if(equimentType !=null&& equimentType.equals("POP320")){
-                            saveProductPOP320(equipmentId);
+                        } else if(StringUtils.isNotEmpty(equimentType) && equimentType.equals("P30")){
+                            saveProductP30(equipmentId);
+                        } else if(StringUtils.isNotEmpty(equimentType) && equimentType.equals("SI320")){
+                            saveProductSI320(equipmentId);
                         } else {
                             saveProduct(equipmentId);
                         }
@@ -290,8 +306,10 @@ public class TEquipmentApplyController {
                         equipmentService.sentMessage(equipmentApply.getClientId(),PushUtils.buildJson("statusType", "rejected").toString());
                         if(StringUtils.isEmpty(equipmentApply.getMachineType()) || equipmentApply.getMachineType().equals("0")) {
                             PushUtils.push(equipmentApply.getGtClientId(), "【棉花糖】设备初始化申请", "拒绝", PushUtils.buildJson("statusType", "rejected").toString());
-                        } else {
+                        } else if (StringUtils.isNotEmpty(equipmentApply.getMachineType()) && equipmentApply.getMachineType().equals("1")) {
                             PushUtils.push(equipmentApply.getGtClientId(), "【爆米花】设备初始化申请", "拒绝", PushUtils.buildJson("statusType", "rejected").toString());
+                        } else if (StringUtils.isNotEmpty(equipmentApply.getMachineType()) && equipmentApply.getMachineType().equals("2")) {
+                            PushUtils.push(equipmentApply.getGtClientId(), "【冰淇淋】设备初始化申请", "拒绝", PushUtils.buildJson("statusType", "rejected").toString());
                         }
                     }
                     equipmentApplyService.updateById(equipmentApply);
@@ -420,7 +438,7 @@ public class TEquipmentApplyController {
      * 添加爆米花产品
      * @param id
      */
-    private void saveProductPOP320(Long id) {
+    private void saveProductP30(Long id) {
         String[] str = {"活力爆米花(正常糖)-B01", "活力爆米花(无糖)-B02", "活力爆米花(巧克力)-B03", "活力爆米花(焦糖)-B04", "活力爆米花(水蜜桃)-B05", "活力爆米花(蓝莓)-B06"};
 
         for (int i = 0; i < str.length; i++) {
@@ -439,6 +457,28 @@ public class TEquipmentApplyController {
     }
 
     /**
+     * 添加冰淇淋产品
+     *
+     * @param id
+     */
+    private void saveProductSI320(Long id) {
+        String[] str = {"雪糕-I01", "果酱(1)-J01", "果酱(2)-J02", "果酱(3)-J03", "果碎(1)-C01", "果碎(2)-C02"};
+
+        for (int i = 0; i < str.length; i++) {
+            TProduct product = new TProduct();
+            product.setCreateDate(new Date());
+            product.setModifyDate(new Date());
+            product.setEquipmentId(id);
+            String[] split = str[i].split("-");
+            product.setProductName(split[0]);
+            product.setNo(split[1]);
+            product.setRmbPrice(BigDecimal.ZERO);
+            product.setCodePrice(BigDecimal.ZERO);
+            productService.save(product);
+        }
+    }
+
+    /**
      * 获取指定日期所在月份开始的时间戳
      * @param date 指定日期
      * @return

+ 171 - 15
src/main/java/com/szwl/controller/TEquipmentController.java

@@ -10,8 +10,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.gexin.fastjson.JSON;
+import com.qiniu.common.QiniuException;
+import com.qiniu.storage.BucketManager;
+import com.qiniu.storage.Configuration;
+import com.qiniu.storage.Region;
+import com.qiniu.storage.model.FileInfo;
+import com.qiniu.util.Auth;
 import com.szwl.annotation.Audit;
 import com.szwl.constant.AuditEnum;
+import com.szwl.constant.ConfigConsts;
 import com.szwl.constant.ResponseCodesEnum;
 import com.szwl.manager.TokenManager;
 import com.szwl.model.bean.*;
@@ -23,6 +30,7 @@ import com.szwl.model.param.PasswordParam;
 import com.szwl.model.query.StatisticsParam;
 import com.szwl.model.utils.DateUtils;
 import com.szwl.model.utils.PushUtils;
+import com.szwl.model.vo.EquipmentVO;
 import com.szwl.service.*;
 import com.szwl.util.DownloadUtils;
 import io.swagger.annotations.Api;
@@ -39,6 +47,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.net.URL;
 import java.net.URLConnection;
+import java.net.URLEncoder;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.text.ParseException;
@@ -54,7 +63,7 @@ import static com.szwl.constant.ResponseCodesEnum.*;
 
 /**
  * <p>
- *  前端控制器
+ * 前端控制器
  * </p>
  *
  * @author wuhs
@@ -92,6 +101,9 @@ public class TEquipmentController {
     @Autowired
     TDiyFlowerService tDiyFlowerService;
 
+    @Autowired
+    TLabelService labelService;
+
     TokenManager tokenManager;
 
     private int j;
@@ -99,6 +111,38 @@ public class TEquipmentController {
     // 超时时间为30秒
     private static final int TIMEOUT = 30000;
 
+    @ApiOperation(value = "根据经纬度获取区域内设备信息")
+    @GetMapping("/getEquipmentByLatLon")
+    public ResponseModel<List<TEquipment>> getEquipmentByLatLon(String lat1, String lat2, String lon1, String lon2) {
+
+        LambdaQueryWrapper<TEquipment> lqw = Wrappers.lambdaQuery();
+        lqw.between(TEquipment::getLatitude, lat1, lat2)
+                .between(TEquipment::getLongitude, lon1, lon2)
+                .notLike(TEquipment::getClientId, "%xxx");
+        List<TEquipment> equipmentList = tEquipmentService.list(lqw);
+
+        return R.ok(equipmentList);
+    }
+
+
+    @ApiOperation(value = "设备是否存在")
+    @GetMapping("/getEquipmentBool")
+    public ResponseModel<Boolean> getEquipmentBool(String clientId) {
+        if (StringUtils.isEmpty(clientId)) {
+            return R.fail("clientId参数不能为空");
+        }
+        LambdaQueryWrapper<TEquipment> lqw = Wrappers.lambdaQuery();
+        lqw.eq(TEquipment::getClientId, clientId);
+        List<TEquipment> equipmentList = tEquipmentService.list(lqw);
+        if (equipmentList.isEmpty()) {
+            return R.fail("设备clientId不存在");
+        } else if (equipmentList.size() > 1) {
+            return R.fail("设备clientId不唯一");
+        } else {
+            return R.ok(true);
+        }
+    }
+
     /**
      * @param adminName     商户的登录名
      * @param equipmentName 机器名称
@@ -109,7 +153,7 @@ public class TEquipmentController {
     @PostMapping("/findList")
     public ResponseModel<IPage<?>> findList(Long id, String clientId, String adminName, String equipmentName,
                                             String areaName, String eqeStatus, String machineType, String equimentType,
-                                            String channel, String companyType, String todayDate, long current, long size) {
+                                            String channel, String companyType, String labelId, String todayDate, long current, long size) {
 
         LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
         TAdmin admin = tAdminService.getById(id);
@@ -178,6 +222,14 @@ public class TEquipmentController {
                 query.eq(TEquipment::getCompanyType, companyType);
             }
         }
+        // 分组ID
+        if (StringUtils.isNotEmpty(labelId)) {
+            TLabel label = labelService.getById(labelId);
+            String equipmentIds = label.getEquipmentIds();
+            equipmentIds = equipmentIds.replace("\"", "").replace("[","").replace("]","");
+            String[] split = equipmentIds.split(",");
+            query.in(TEquipment::getId, split);
+        }
         query.orderByDesc(TEquipment::getCreateDate);
         Page<TEquipment> page = new Page<>(current, size, true);
         IPage<TEquipment> iPage = tEquipmentService.page(page, query);
@@ -388,7 +440,32 @@ public class TEquipmentController {
         }
 //        query.eq(TEquipment::getAdminId,adminId);
         List<TEquipment> list = tEquipmentService.list(query);
-        return R.ok(list);
+        List<EquipmentVO> equipmentVOs = new ArrayList<>();
+//        for (TEquipment equipment : list) {
+//            EquipmentVO equipmentVO = new EquipmentVO();
+//            equipmentVO.setId(equipment.getId());
+//            String name = StringUtils.isEmpty(equipment.getName()) ? equipment.getClientId() : equipment.getName();
+//            equipmentVO.setName(name);
+//            equipmentVO.setClientId(equipment.getClientId());
+//            equipmentVOS.add(equipmentVO);
+//        }
+        Map<String, String> duplicateNames = new HashMap<>();
+
+        for (TEquipment equipment : list) {
+            String name = StringUtils.isEmpty(equipment.getName()) ? equipment.getClientId() : equipment.getName();
+            String clientId = equipment.getClientId();
+            if (duplicateNames.containsValue(name)) {
+                name = clientId;
+            }
+            duplicateNames.put(String.valueOf(equipment.getId()), name);
+
+            EquipmentVO equipmentVO = new EquipmentVO();
+            equipmentVO.setId(equipment.getId());
+            equipmentVO.setName(name);
+            equipmentVO.setClientId(clientId);
+            equipmentVOs.add(equipmentVO);
+        }
+        return R.ok(equipmentVOs);
     }
 
     @ApiOperation(value = "查找设备")
@@ -433,7 +510,15 @@ public class TEquipmentController {
         if (StringUtils.isNotEmpty(equipment.getSn())) {
             oldEquipment.setSn(equipment.getSn());
         }
-        if (StringUtils.isNotEmpty(equipment.getName())) {
+        String name = equipment.getName();
+        if (StringUtils.isNotEmpty(name) && !name.equals(oldEquipment.getName())) {
+            LambdaQueryWrapper<TEquipment> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(TEquipment::getAdminId, oldEquipment.getAdminId());
+            queryWrapper.eq(TEquipment::getName, name);
+            TEquipment tEquipment = tEquipmentService.getOne(queryWrapper);
+            if (tEquipment != null) {
+                return R.fail(A0001);
+            }
             oldEquipment.setName(equipment.getName());
         }
         if (StringUtils.isNotEmpty(equipment.getSelfName())) {
@@ -1625,22 +1710,22 @@ public class TEquipmentController {
     public ResponseModel<?> updateDIYProductShow(@RequestBody String productList) {
         JSONObject jsonObject = JSONObject.parseObject(productList);
         List<TDiyFlower> products = JSONObject.parseArray(jsonObject.get("productList").toString(), TDiyFlower.class);
-        if(products.size()>0){
+        if (products.size() > 0) {
             TDiyFlower diyFlower = products.get(0);
-            if(diyFlower==null && diyFlower.getEquipmentId()==null){
-                return R.fail(ResponseCodesEnum.A0001,"找不到当前设备");
+            if (diyFlower == null && diyFlower.getEquipmentId() == null) {
+                return R.fail(ResponseCodesEnum.A0001, "找不到当前设备");
             }
         }
         TEquipment equipment = tEquipmentService.getById(products.get(0).getEquipmentId());
-        if(equipment==null){
-            return R.fail(ResponseCodesEnum.A0001,"请退出重试");
+        if (equipment == null) {
+            return R.fail(ResponseCodesEnum.A0001, "请退出重试");
         }
         List<TProductBean> list = new ArrayList<>();
-        for(TDiyFlower product:products){
+        for (TDiyFlower product : products) {
             TProductBean productBean = new TProductBean();
-            if(product!=null&&product.getId()!=null){
+            if (product != null && product.getId() != null) {
                 productBean.setShowType(product.getShowType());
-                if(StringUtils.isEmpty(product.getShowType())){
+                if (StringUtils.isEmpty(product.getShowType())) {
                     productBean.setShowType("1");
                 }
                 productBean.setProductName(product.getName());
@@ -1649,19 +1734,90 @@ public class TEquipmentController {
         }
         tEquipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("updateDIYProductShow", JSON.toJSONString(list)).toString());
 //        tDiyFlowerService.updateBatchById(products);
-        return R.ok(null,"修改请求发送成功");
+        return R.ok(null, "修改请求发送成功");
     }
 
     @ApiOperation(value = "查询DIY花型列表信息")
     @GetMapping("/selectDIYFlowers")
-    public ResponseModel<?> selectDIYFlowers(String equipmentId){
+    public ResponseModel<?> selectDIYFlowers(String equipmentId) {
         if (StringUtils.isEmpty(equipmentId)) {
             return R.fail(ResponseCodesEnum.A0001, "参数有空");
         }
         LambdaQueryWrapper<TDiyFlower> query = Wrappers.lambdaQuery();
-        query.eq(TDiyFlower::getEquipmentId,Long.valueOf(equipmentId));
+        query.eq(TDiyFlower::getEquipmentId, Long.valueOf(equipmentId));
         List<TDiyFlower> list = tDiyFlowerService.list(query);
         return R.ok(list);
     }
+
+    @ApiOperation(value = "远程修改锁机状态,锁机:1,解锁:0")
+    @GetMapping("/updateLockStatus")
+    public ResponseModel<?> updateLockStatus(String equipmentId, String status) {
+        if (StringUtils.isEmpty(equipmentId) || StringUtils.isEmpty(status)) {
+            return R.fail(ResponseCodesEnum.A0001, "参数有空");
+        }
+        TEquipment equipment = tEquipmentService.getById(equipmentId);
+        tEquipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("block", status).toString());
+        return R.ok();
+    }
+
+    /**
+     * 上传日志
+     *
+     * @param equipmentId
+     * @param day
+     */
+    @ApiOperation(value = "上传日志")
+    @GetMapping("/uploadLog")
+    public ResponseModel<?> uploadLog(String equipmentId, String day) {
+        if (StringUtils.isEmpty(equipmentId)) {
+            return R.fail(A0001);
+        }
+        TEquipment tEquipment = tEquipmentService.getById(equipmentId);
+        if (tEquipment == null) {
+            return R.fail(A0001, "该设备不存在");
+        }
+        String clientId = tEquipment.getClientId();
+        String kind = day + "-" + clientId;
+        String channel = tEquipment.getChannel();
+        String equimentType = tEquipment.getEquimentType();
+        if (StringUtils.isEmpty(channel) || channel.equals("1") || StringUtils.isEmpty(equimentType)) {
+            //用个推
+            PushUtils.push(tEquipment.getGtClientId(), "", "", PushUtils.buildJson("log", kind).toString());
+        }
+        if (StringUtils.isNotEmpty(channel) && channel.equals("2") && StringUtils.isNotEmpty(equimentType)) {
+            //用Mq
+            tEquipmentService.sentMessage(tEquipment.getClientId(), PushUtils.buildJson("log", kind).toString());
+        }
+        return R.ok();
+    }
+
+    @ApiOperation(value = "查询日志是否上传成功")
+    @GetMapping("/queryLog")
+    public ResponseModel<?> queryLog(String equipmentId, String day) {
+        if (StringUtils.isEmpty(equipmentId)) {
+            return R.fail(A0001);
+        }
+        TEquipment tEquipment = tEquipmentService.getById(equipmentId);
+        if (tEquipment == null) {
+            return R.fail(A0001, "该设备不存在");
+        }
+        String clientId = tEquipment.getClientId();
+        String key = "log/" + day + "-" + clientId + ".txt";
+        //构造一个带指定 Region 对象的配置类
+        Configuration cfg = new Configuration(Region.region2());
+        Auth auth = Auth.create(ConfigConsts.QINIU_CLOUD_ACCESS_KEY, ConfigConsts.QINIU_CLOUD_SECRET_KEY);
+        BucketManager bucketManager = new BucketManager(auth, cfg);
+        boolean flag = true;
+        try {
+            FileInfo fileInfo = bucketManager.stat(ConfigConsts.QINIU_CLOUD_BUCKET, key);
+        } catch (QiniuException ex) {
+            System.err.println(ex.response.error);
+            flag = false;
+        }
+        if (flag) {
+            return R.ok(key);
+        }
+        return R.fail(F0002);
+    }
 }
 

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

@@ -28,7 +28,7 @@ import java.util.List;
  * </p>
  *
  * @author wuhs
- * @since 2022-04-23
+ * @since 2024-01-18
  */
 @RestController
 @RequestMapping("/tEquipmentDesc")

+ 56 - 0
src/main/java/com/szwl/controller/TGoodsDataController.java

@@ -0,0 +1,56 @@
+package com.szwl.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.szwl.model.bo.R;
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.TGoodsData;
+import com.szwl.service.TGoodsDataService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 商品数据表 前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-01-19
+ */
+@RestController
+@RequestMapping("/tGoodsData")
+public class TGoodsDataController {
+
+    @Autowired
+    private TGoodsDataService goodsDataService;
+
+    @ApiOperation(value = "添加商品数据")
+    @PostMapping("/addGoodsData")
+    public ResponseModel<?> addGoodsData(@RequestBody TGoodsData goodsData){
+        goodsData.setCreateDate(new Date());
+        goodsData.setModifyDate(new Date());
+        goodsDataService.save(goodsData);
+        return R.ok();
+    }
+
+    @ApiOperation(value = "获取商品数目种类")
+    @GetMapping("/getGoodsNumber")
+    public ResponseModel<?> getGoodsNumber(String machineType){
+        LambdaQueryWrapper<TGoodsData> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TGoodsData::getMachineType, machineType);
+        queryWrapper.orderByAsc(TGoodsData::getNumber);
+        List<TGoodsData> list = goodsDataService.list(queryWrapper);
+        ArrayList<Integer> numberList = new ArrayList<>();
+        for (TGoodsData tGoodsData : list) {
+          numberList.add(tGoodsData.getNumber());
+        }
+        return R.ok(numberList);
+    }
+
+}
+

+ 575 - 0
src/main/java/com/szwl/controller/THotUpdateController.java

@@ -0,0 +1,575 @@
+package com.szwl.controller;
+
+
+import cn.hutool.http.HttpRequest;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.szwl.constant.ResponseCodesEnum;
+import com.szwl.model.bo.R;
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.*;
+import com.szwl.model.utils.PushUtils;
+import com.szwl.service.TAdminService;
+import com.szwl.service.TEquipmentDescService;
+import com.szwl.service.TEquipmentService;
+import com.szwl.service.THotUpdateService;
+import com.szwl.util.IDGenerator;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.math3.linear.QRDecomposition;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-01-24
+ */
+@RestController
+@RequestMapping("/tHotUpdate")
+public class THotUpdateController {
+
+    THotUpdateService hotUpdateService;
+    TEquipmentService equipmentService;
+    TEquipmentDescService equipmentDescService;
+    TAdminService adminService;
+
+    public THotUpdateController(THotUpdateService hotUpdateService, TEquipmentService equipmentService, TEquipmentDescService equipmentDescService, TAdminService adminService) {
+        this.hotUpdateService = hotUpdateService;
+        this.equipmentService = equipmentService;
+        this.equipmentDescService = equipmentDescService;
+        this.adminService = adminService;
+    }
+
+    @ApiOperation(value = "设备热更新+1")
+    @PostMapping("/upPatchNum")
+    public ResponseModel<?> upPatchNum(String patchVersion) {
+//        Long patchId = hotUpdateService.lambdaQuery().eq(THotUpdate::getPatchVersion, patchVersion).one().getId();
+//        TEquipment equipment = equipmentService.lambdaQuery().eq(TEquipment::getClientId, clientId).one();
+//        Long equipmentId = equipment.getId();
+//        TEquipmentDesc equipmentDesc = equipmentDescService.lambdaQuery().eq(TEquipmentDesc::getEquipmentId, equipmentId).one();
+//        equipmentDesc.setPatchId(patchId);
+//        equipmentDescService.saveOrUpdate(equipmentDesc);
+
+//        UpdateWrapper<THotUpdate> uw = new UpdateWrapper<>();
+//        uw.eq("patch_version", patchVersion)
+//                .setSql("have_update_num = have_update_num + 1, modify_time = NOW()");
+//        hotUpdateService.update(uw);
+
+        THotUpdate hotUpdate = hotUpdateService.lambdaQuery().eq(THotUpdate::getPatchVersion, patchVersion).one();
+        hotUpdate.setModifyTime(new Date());
+
+        Integer haveUpdateNum = Optional.ofNullable(hotUpdate.getHaveUpdateNum()).orElse(0);
+        hotUpdate.setHaveUpdateNum(haveUpdateNum + 1);
+        hotUpdateService.saveOrUpdate(hotUpdate);
+        return R.ok();
+    }
+
+    @ApiOperation(value = "获取所有热更新数据")
+    @GetMapping("/getPatchPage")
+    public ResponseModel<IPage<?>> getPatchPage(long current, long size) {
+
+        LambdaQueryWrapper<THotUpdate> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.orderByDesc(THotUpdate::getCreateTime);
+        Page<THotUpdate> page = new Page<>(current, size, true);
+        IPage<THotUpdate> iPage = hotUpdateService.page(page, queryWrapper);
+        return R.ok(iPage);
+    }
+
+    @ApiOperation(value = "获取热更新补丁信息列表")
+    @GetMapping("/getPatchList")
+    public ResponseModel<?> getPatchList(String ifForeign, String patchVersion) {
+        if (StringUtils.isNotEmpty(patchVersion)) {
+            // 获取特定补丁信息
+            THotUpdate tHotUpdate = hotUpdateService.lambdaQuery().eq(THotUpdate::getPatchVersion, patchVersion).one();
+            if (tHotUpdate == null) {
+                return R.fail(ResponseCodesEnum.A0001, "补丁版本号不存在");
+            }
+            return R.ok(tHotUpdate);
+        } else {
+            // 获取热更新补丁列表
+            String area;
+            if ("0".equals(ifForeign)) {
+                // 国内 targetAreas = 1
+                area = "1";
+            } else if ("1".equals(ifForeign)) {
+                // 海外 targetAreas = 2
+                area = "2";
+            } else {
+                // 直接获取所有的
+                area = "4";
+            }
+            List<THotUpdate> lastTen = hotUpdateService.getLastTen(area);
+            return R.ok(lastTen);
+        }
+    }
+
+    @ApiOperation(value = "获取补丁信息")
+    @GetMapping("/getPatchInfo")
+    public ResponseModel<?> getPatchInfo(String patchVersion) {
+
+        assert StringUtils.isNotEmpty(patchVersion) : R.fail(ResponseCodesEnum.A0001, "补丁版本号不能为空");
+
+        THotUpdate tHotUpdate = hotUpdateService.lambdaQuery().eq(THotUpdate::getPatchVersion, patchVersion).one();
+        return R.ok(tHotUpdate);
+
+    }
+
+    @ApiOperation(value = "设备获取热更新补丁信息")
+    @GetMapping("/getPatchList1")
+    public ResponseModel<?> getPatchList1(String clientId, String ifForeign) {
+        List<THotUpdate> lastTen = new ArrayList<THotUpdate>();
+        String area;
+//        if (StringUtils.isNotEmpty(clientId)) {
+//            // 部分设备 targetAreas = 0
+//            area = "0";
+//        } else
+        if ("0".equals(ifForeign)) {
+            // 国内 targetAreas = 1
+            area = "1";
+        } else if ("1".equals(ifForeign)) {
+            // 海外 targetAreas = 2
+            area = "2";
+        } else {
+            // 直接获取所有的
+            area = "4";
+        }
+        lastTen = hotUpdateService.getLastTen(area);
+        return R.ok(lastTen);
+    }
+
+//    @ApiOperation(value = "获取补丁下载链接")
+//    @GetMapping("/getPatchUrl")
+//    public ResponseModel<?> getPatchUrl(String clientId, String isForeign) {
+//
+//        if (StringUtils.isEmpty(clientId) || StringUtils.isEmpty(isForeign)) {
+//            return R.fail(ResponseCodesEnum.B0001, "参数不能为空");
+//        }
+//        LambdaQueryWrapper<TEquipment> wrapper = Wrappers.lambdaQuery();
+//        wrapper.eq(TEquipment::getClientId, clientId);
+//        TEquipment equipment = equipmentService.getOne(wrapper);
+//        Long adminId = equipment.getAdminId();
+//        TAdmin admin = adminService.getById(adminId);
+//        String ifForeign = admin.getIfForeign();
+//        if (!isForeign.equals(ifForeign)) {
+//            return R.fail(ResponseCodesEnum.B0001, "海外内不匹配");
+//        }
+//        Long equipmentId = equipment.getId();
+//        LambdaQueryWrapper<TEquipmentDesc> lqw = Wrappers.lambdaQuery();
+//        lqw.eq(TEquipmentDesc::getEquipmentId, equipmentId);
+//        TEquipmentDesc equipmentDesc = equipmentDescService.getOne(lqw);
+//        Long patchId = equipmentDesc.getPatchId();
+//
+//        LambdaQueryWrapper<THotUpdate> qw = Wrappers.lambdaQuery();
+//        qw.eq(THotUpdate::getId, patchId);
+//        THotUpdate hotUpdate = hotUpdateService.getOne(qw);
+//        return R.ok(hotUpdate);
+//    }
+
+//    @ApiOperation(value = "测试")
+//    @PostMapping("/test")
+//    public ResponseModel<?> test() {
+//        // 遍历所有设备的apk_version,看多少台设备的apk_version = patch_veriosn
+//        // 获取热更新表中所有的 patch_version 信息
+//        List<String> patchVersions = hotUpdateService.list().stream().map(THotUpdate::getPatchVersion).collect(Collectors.toList());
+//        for (String patchVersion : patchVersions) {
+//            // 查询所有设备表中的的 apk_version 等于 patch_version的
+//            List<TEquipment> equipmentList = equipmentService.lambdaQuery().eq(TEquipment::getApkVersion, patchVersion).list();
+//            // 计算当前的 patch_version = apk_version 的设备数量
+//            int count = equipmentList.size();
+//            System.out.println("count 》》》" + count);
+//            THotUpdate hotUpdate = hotUpdateService.lambdaQuery().eq(THotUpdate::getPatchVersion, patchVersion).one();
+//            if (hotUpdate != null) {
+//                hotUpdate.setHaveUpdateNum(count);
+//                hotUpdateService.updateById(hotUpdate);
+//            }
+//        }
+//        return R.ok();
+//    }
+
+    @ApiOperation(value = "添加热更新信息")
+    @PostMapping("/postPatchInfo")
+    public ResponseModel<?> postPatchInfo(@RequestBody THotUpdate hotUpdate) {
+        String originalVersion = hotUpdate.getOriginalVersion(); // 原版本号
+        String patchVersion = hotUpdate.getPatchVersion(); // 目标补丁版本号
+        String patchStatus = hotUpdate.getPatchStatus(); // 补丁状态,0停止,1发布
+        String targetAreas = hotUpdate.getTargetAreas(); // 目标区域,0部分设备,1国内,2海外,3全球
+        String patchLink = hotUpdate.getPatchLink(); // 补丁外链
+        String clientIds = hotUpdate.getClientId(); // 设备编号
+        String note = hotUpdate.getNote(); // 更新内容
+
+        assert StringUtils.isNotEmpty(originalVersion) : R.fail(ResponseCodesEnum.B0001, "原版本号不能为空");
+        assert StringUtils.isNotEmpty(patchVersion) : R.fail(ResponseCodesEnum.B0001, "目标补丁版本号不能为空");
+        assert StringUtils.isNotEmpty(patchStatus) : R.fail(ResponseCodesEnum.B0001, "补丁状态不能为空");
+        assert StringUtils.isNotEmpty(patchLink) : R.fail(ResponseCodesEnum.B0001, "补丁外链不能为空");
+        assert StringUtils.isNotEmpty(note) : R.fail(ResponseCodesEnum.B0001, "更新内容不能为空");
+
+        THotUpdate tHotUpdate;
+        // 目标补丁号是否已经存在
+        LambdaQueryWrapper<THotUpdate> lqw = Wrappers.lambdaQuery();
+        lqw.eq(THotUpdate::getPatchVersion, patchVersion);
+        List<THotUpdate> hotUpdates = hotUpdateService.list(lqw);
+        long hotUpdateId;
+        if (hotUpdates.size() > 0) {
+            // 目标补丁号是可以被修改的
+            tHotUpdate = hotUpdates.get(0);
+            hotUpdateId = tHotUpdate.getId();
+        } else {
+            tHotUpdate = new THotUpdate();
+            hotUpdateId = IDGenerator.commonID();
+            tHotUpdate.setId(hotUpdateId);
+            tHotUpdate.setCreateTime(new Date());
+        }
+
+        tHotUpdate.setModifyTime(new Date());
+        tHotUpdate.setOriginalVersion(originalVersion);
+        tHotUpdate.setPatchVersion(patchVersion);
+        tHotUpdate.setPatchStatus(patchStatus);
+        tHotUpdate.setPatchLink(patchLink);
+        tHotUpdate.setTargetAreas(targetAreas);
+        tHotUpdate.setClientId(clientIds);
+        tHotUpdate.setNote(note);
+        tHotUpdate.setHaveUpdateNum(0);
+
+        switch (targetAreas) {
+            case "0":
+                // 推送指定设备
+                if (StringUtils.isEmpty(clientIds)) { // 查看clientIds是否为空
+                    return R.fail(ResponseCodesEnum.B0001, "推送区域为空时,需要填写设备编号");
+                }
+                List<String> clientIdList = Arrays.asList(clientIds.split(",")).stream().map(String::trim).filter(s -> !s.isEmpty()).collect(Collectors.toList());
+                LambdaQueryWrapper<TEquipment> queryWrapper = Wrappers.lambdaQuery();
+                queryWrapper.in(TEquipment::getClientId, clientIdList);
+                List<TEquipment> equipmentList = equipmentService.list(queryWrapper);
+                int size = equipmentList.size();
+                tHotUpdate.setShouldUpdateNum(size);
+                break;
+            case "1":
+                // 推送国内
+                int count1 = equipmentService.getForeignEquipmentCount("0");
+                tHotUpdate.setShouldUpdateNum(count1);
+                break;
+            case "2":
+                // 推送海外
+                int count2 = equipmentService.getForeignEquipmentCount("1");
+                tHotUpdate.setShouldUpdateNum(count2);
+                break;
+            case "3":
+                // 推送全球
+                int count3 = equipmentService.getForeignEquipmentCount("2");
+                tHotUpdate.setShouldUpdateNum(count3);
+                break;
+            default:
+                return R.fail("不支持的推送区域参数:" + targetAreas);
+        }
+        hotUpdateService.saveOrUpdate(tHotUpdate);
+
+        return R.ok("录入成功");
+    }
+
+
+    @ApiOperation(value = "添加热更新信息1")
+    @PostMapping("/postPatchInfo1")
+    public ResponseModel<?> postPatchInfo1(@RequestBody THotUpdate hotUpdate) {
+        String originalVersion = hotUpdate.getOriginalVersion(); // 原版本号
+        String patchVersion = hotUpdate.getPatchVersion(); // 目标补丁版本号
+        String patchStatus = hotUpdate.getPatchStatus(); // 补丁状态,0停止,1发布
+        String targetAreas = hotUpdate.getTargetAreas(); // 目标区域,0部分设备,1国内,2海外,3全球
+        String patchLink = hotUpdate.getPatchLink(); // 补丁外链
+        String clientIds = hotUpdate.getClientId(); // 设备编号
+        String note = hotUpdate.getNote(); // 更新内容
+
+        assert StringUtils.isNotEmpty(originalVersion) : R.fail(ResponseCodesEnum.B0001, "原版本号不能为空");
+        assert StringUtils.isNotEmpty(patchVersion) : R.fail(ResponseCodesEnum.B0001, "目标补丁版本号不能为空");
+        assert StringUtils.isNotEmpty(patchStatus) : R.fail(ResponseCodesEnum.B0001, "补丁状态不能为空");
+        assert StringUtils.isNotEmpty(patchLink) : R.fail(ResponseCodesEnum.B0001, "补丁外链不能为空");
+        assert StringUtils.isNotEmpty(note) : R.fail(ResponseCodesEnum.B0001, "更新内容不能为空");
+
+        THotUpdate tHotUpdate;
+        // 目标补丁号是否已经存在
+        LambdaQueryWrapper<THotUpdate> lqw = Wrappers.lambdaQuery();
+        lqw.eq(THotUpdate::getPatchVersion, patchVersion);
+        List<THotUpdate> hotUpdates = hotUpdateService.list(lqw);
+        long hotUpdateId;
+        if (hotUpdates.size() > 0) {
+            // 目标补丁号是可以被修改的
+            tHotUpdate = hotUpdates.get(0);
+            hotUpdateId = tHotUpdate.getId();
+        } else {
+            tHotUpdate = new THotUpdate();
+            hotUpdateId = IDGenerator.commonID();
+            tHotUpdate.setId(hotUpdateId);
+            tHotUpdate.setCreateTime(new Date());
+        }
+
+        tHotUpdate.setModifyTime(new Date());
+        tHotUpdate.setOriginalVersion(originalVersion);
+        tHotUpdate.setPatchVersion(patchVersion);
+        tHotUpdate.setPatchStatus(patchStatus);
+        tHotUpdate.setPatchLink(patchLink);
+        tHotUpdate.setTargetAreas(targetAreas);
+        tHotUpdate.setNote(note);
+        tHotUpdate.setHaveUpdateNum(0);
+
+        switch (targetAreas) {
+            case "0":
+                // 推送指定设备
+                if (StringUtils.isEmpty(clientIds)) { // 查看clientIds是否为空
+                    return R.fail(ResponseCodesEnum.B0001, "推送区域为空时,需要填写设备编号");
+                }
+                // 查询这些设备信息
+                List<String> clientIdList = Arrays.asList(clientIds.split(","));
+                LambdaQueryWrapper<TEquipment> wrapper = Wrappers.lambdaQuery();
+                wrapper.in(TEquipment::getClientId, clientIdList);
+                List<TEquipment> equipmentList0 = equipmentService.list(wrapper);
+                if (equipmentList0.isEmpty()) {
+                    return R.fail(ResponseCodesEnum.B0001, "设备信息不存在");
+                }
+                // 查询这些设备的所有id
+                List<Long> equipmentIdList = equipmentList0.stream().map(TEquipment::getId).collect(Collectors.toList());
+                if (equipmentIdList.isEmpty()) {
+                    return R.fail(ResponseCodesEnum.B0001, "没有符合要求的设备");
+                }
+//                if (CollectionUtils.isEmpty(equipmentIdList)) {
+//                    return R.fail(ResponseCodesEnum.B0001, "没有符合要求的设备");
+//                }
+//                equipmentDescService.saveOrUpdateEquipmentDescBatch(equipmentIdList, hotUpdateId);
+                tHotUpdate.setShouldUpdateNum(equipmentIdList.size());
+                break;
+            case "1":
+                // 推送国内
+                // 查询所有的国内用户
+//                LambdaQueryWrapper<TAdmin> wrapper1 = Wrappers.lambdaQuery();
+//                wrapper1.eq(TAdmin::getIfForeign, "0");
+//                List<TAdmin> domesticAdminList = adminService.list(wrapper1);
+                List<TAdmin> domesticAdminList = adminService.lambdaQuery().eq(TAdmin::getIfForeign, "0").list();
+
+                ArrayList<Long> equipmentIdList1 = new ArrayList<>();
+
+                // 批量查询国内用户的设备信息
+                LambdaQueryWrapper<TEquipment> queryWrapper = Wrappers.lambdaQuery();
+                queryWrapper.in(TEquipment::getAdminId, domesticAdminList.stream().map(TAdmin::getId).collect(Collectors.toList()));
+                List<TEquipment> equipmentList = equipmentService.list(queryWrapper);
+
+                // 将equipmentId添加到list
+                equipmentIdList1.addAll(equipmentList.stream().map(TEquipment::getId).collect(Collectors.toList()));
+
+                if (equipmentIdList1.isEmpty()) {
+                    return R.fail(ResponseCodesEnum.B0001, "没有符合要求的设备");
+                }
+//                if (!equipmentIdList1.isEmpty()) {
+//                    equipmentDescService.saveOrUpdateEquipmentDescBatch(equipmentIdList1, hotUpdateId);
+//                }
+                tHotUpdate.setShouldUpdateNum(equipmentIdList1.size());
+
+                break;
+            case "2":
+                // 推送海外
+                // 查询所有海外用户信息
+                List<TAdmin> foreignAdminList = adminService.lambdaQuery().eq(TAdmin::getIfForeign, "1").list();
+                // 查询海外用户的所有设备的id
+                List<Long> equipmentIdList2 = foreignAdminList.stream().flatMap(admin -> equipmentService.lambdaQuery().eq(TEquipment::getAdminId, admin.getId()).list().stream()).map(TEquipment::getId).collect(Collectors.toList());
+                if (equipmentIdList2.isEmpty()) {
+                    return R.fail(ResponseCodesEnum.B0001, "没有符合要求的设备");
+                }
+//                if (!equipmentIdList2.isEmpty()) {
+//                    equipmentDescService.saveOrUpdateEquipmentDescBatch(equipmentIdList2, hotUpdateId);
+//                }
+                tHotUpdate.setShouldUpdateNum(equipmentIdList2.size());
+                break;
+            case "3":
+                // 推送全球
+                // 所有设备id
+                List<Long> equipmentIdList3 = equipmentService.list().stream().map(TEquipment::getId).collect(Collectors.toList());
+                if (equipmentIdList3.isEmpty()) {
+                    return R.fail(ResponseCodesEnum.B0001, "没有符合要求的设备");
+                }
+//                equipmentDescService.saveOrUpdateEquipmentDescBatch(equipmentIdList3, hotUpdateId);
+
+//                List<TEquipmentDesc> equipmentDescList = equipmentDescService.list();
+//                equipmentDescList.forEach(d -> d.setPatchId(hotUpdateId));
+//                equipmentDescService.saveOrUpdateBatch(equipmentDescList);
+                tHotUpdate.setShouldUpdateNum(equipmentIdList3.size());
+                break;
+            default:
+                return R.fail("不支持的推送区域参数:" + targetAreas);
+        }
+        hotUpdateService.save(tHotUpdate);
+
+        return R.ok("录入成功");
+    }
+
+
+    @ApiOperation(value = "录入热更新补丁信息0")
+    @PostMapping("/postPatchInfo0")
+    public ResponseModel<?> postPatchInfo0(@RequestBody THotUpdate hotUpdate) {
+
+        String originalVersion = hotUpdate.getOriginalVersion(); // 原版本号
+        String patchVersion = hotUpdate.getPatchVersion(); // 目标补丁版本号
+        String patchStatus = hotUpdate.getPatchStatus(); // 补丁状态,0停止,1发布
+        String targetAreas = hotUpdate.getTargetAreas(); // 目标区域,0部分设备,1国内,2海外,3全球
+        String patchLink = hotUpdate.getPatchLink(); // 补丁外链
+        String clientIdS = hotUpdate.getClientId(); // 设备编号
+        String note = hotUpdate.getNote(); // 更新内容
+
+//        if (StringUtils.isEmpty(patchVersion) || StringUtils.isEmpty(patchStatus) || StringUtils.isEmpty(patchLink) || StringUtils.isEmpty(note)) {
+//            return R.fail(ResponseCodesEnum.A0001,"参数不完整");
+//        }
+
+        assert StringUtils.isNotEmpty(patchVersion) : R.fail(ResponseCodesEnum.B0001, "补丁版本号不能为空");
+        assert StringUtils.isNotEmpty(patchStatus) : R.fail(ResponseCodesEnum.B0001, "补丁状态不能为空");
+        assert StringUtils.isNotEmpty(patchLink) : R.fail(ResponseCodesEnum.B0001, "补丁外链不能为空");
+        assert StringUtils.isNotEmpty(note) : R.fail(ResponseCodesEnum.B0001, "更新内容不能为空");
+
+        LambdaQueryWrapper<THotUpdate> lqwHot = Wrappers.lambdaQuery();
+        lqwHot.eq(THotUpdate::getPatchVersion, patchVersion);
+        List<THotUpdate> hotUpdates = hotUpdateService.list(lqwHot);
+        if (hotUpdates.size() > 0) {
+            return R.fail(ResponseCodesEnum.B0001, "该补丁版本号已存在");
+        }
+        THotUpdate tHotUpdate = new THotUpdate();
+        long hotUpdateId = IDGenerator.commonID();
+        tHotUpdate.setId(hotUpdateId);
+        tHotUpdate.setCreateTime(new Date());
+        tHotUpdate.setModifyTime(new Date());
+        tHotUpdate.setPatchVersion(patchVersion);
+        tHotUpdate.setPatchStatus(patchStatus);
+        tHotUpdate.setPatchLink(patchLink);
+        tHotUpdate.setTargetAreas(targetAreas);
+        tHotUpdate.setNote(note);
+        tHotUpdate.setOriginalVersion(originalVersion);
+        tHotUpdate.setHaveUpdateNum(0);
+//        tHotUpdate.setShouldUpdateNum(0);
+
+        switch (targetAreas) {
+            case "0":
+                if (StringUtils.isEmpty(clientIdS)) {
+                    return R.fail(ResponseCodesEnum.B0001, "推送区域为空时,需要填写设备编号");
+                }
+                // 推送指定设备
+//                tHotUpdate.setClientId(clientIdS);
+//                String[] clientIdArray = clientIdS.split(",");
+//                ArrayList<Long> equipmentIdList0 = new ArrayList<>();
+//
+//                for (String s : clientIdArray) {
+//                    String clientId = s.trim();
+//                    if (StringUtils.isNotEmpty(clientId)) {
+//                        LambdaQueryWrapper<TEquipment> wrapper = Wrappers.lambdaQuery();
+//                        wrapper.eq(TEquipment::getClientId, clientId);
+//                        TEquipment equipment = equipmentService.getOne(wrapper);
+//                        if (Objects.isNull(equipment)) {
+//                            return R.fail(ResponseCodesEnum.B0001, "设备信息不存在");
+//                        }
+//                        Long equipmentId = equipment.getId();
+//                        equipmentIdList0.add(equipmentId);
+////                        saveOrUpdateEquipmentDesc(equipmentId, hotUpdateId);
+//                    }
+//                }
+//                if (!equipmentIdList0.isEmpty()) {
+////                    saveOrUpdateEquipmentDescBatch(equipmentIdList0, hotUpdateId);
+//                    hotUpdateService.saveOrUpdateEquipmentDescBatch(equipmentIdList0, hotUpdateId);
+//                }
+
+                List<String> clientIdList = Arrays.asList(clientIdS.split(","));
+                LambdaQueryWrapper<TEquipment> wrapper1 = Wrappers.lambdaQuery();
+                wrapper1.in(TEquipment::getClientId, clientIdList);
+                List<TEquipment> equipmentList1 = equipmentService.list(wrapper1);
+                if (equipmentList1.isEmpty()) {
+                    return R.fail(ResponseCodesEnum.B0001, "设备信息不存在");
+                }
+                List<Long> equipmentIdList = equipmentList1.stream().map(TEquipment::getId).collect(Collectors.toList());
+                equipmentDescService.saveOrUpdateEquipmentDescBatch(equipmentIdList, hotUpdateId);
+                break;
+            case "1":
+                // 推送国内
+                LambdaQueryWrapper<TAdmin> wrapper = Wrappers.lambdaQuery();
+                wrapper.eq(TAdmin::getIfForeign, "0");
+                List<TAdmin> list = adminService.list(wrapper);
+                ArrayList<Long> equipmentIdList1 = new ArrayList<>();
+
+                for (TAdmin admin : list) {
+                    Long adminId = admin.getId();
+                    LambdaQueryWrapper<TEquipment> lqw = Wrappers.lambdaQuery();
+                    lqw.eq(TEquipment::getAdminId, adminId);
+                    List<TEquipment> equipmentList = equipmentService.list(lqw);
+                    for (TEquipment equipment : equipmentList) {
+                        Long equipmentId = equipment.getId();
+                        equipmentIdList1.add(equipmentId);
+                    }
+                }
+                if (!equipmentIdList1.isEmpty()) {
+//                    saveOrUpdateEquipmentDescBatch(equipmentIdList1, hotUpdateId);
+                    equipmentDescService.saveOrUpdateEquipmentDescBatch(equipmentIdList1, hotUpdateId);
+                }
+
+                break;
+            case "2":
+                // 推送海外
+//                LambdaQueryWrapper<TAdmin> lambdaQuery = Wrappers.lambdaQuery();
+//                lambdaQuery.eq(TAdmin::getIfForeign, "1");
+//                List<TAdmin> abroadList = adminService.list(lambdaQuery);
+//                ArrayList<Long> equipmentIdList2 = new ArrayList<>();
+//                for (TAdmin admin : abroadList) {
+//                    Long adminId = admin.getId();
+//                    LambdaQueryWrapper<TEquipment> lqw = Wrappers.lambdaQuery();
+//                    lqw.eq(TEquipment::getAdminId, adminId);
+//                    List<TEquipment> equipmentList = equipmentService.list(lqw);
+//                    for (TEquipment equipment : equipmentList) {
+//                        Long equipmentId = equipment.getId();
+//                        equipmentIdList2.add(equipmentId);
+////                        saveOrUpdateEquipmentDesc(equipmentId, hotUpdateId);
+//                    }
+//                }
+//                if (!equipmentIdList2.isEmpty()) {
+////                    saveOrUpdateEquipmentDescBatch(equipmentIdList2, hotUpdateId);
+//                    hotUpdateService.saveOrUpdateEquipmentDescBatch(equipmentIdList2,hotUpdateId);
+//                }
+
+                List<TAdmin> adminList = adminService.lambdaQuery().eq(TAdmin::getIfForeign, "1").list();
+                List<Long> equipmentIdList3 = adminList.stream().flatMap(admin -> equipmentService.lambdaQuery().eq(TEquipment::getAdminId, admin.getId()).list().stream()).map(TEquipment::getId).collect(Collectors.toList());
+                if (!equipmentIdList3.isEmpty()) {
+//                    saveOrUpdateEquipmentDescBatch(equipmentIdList3, hotUpdateId);
+                    equipmentDescService.saveOrUpdateEquipmentDescBatch(equipmentIdList3, hotUpdateId);
+                }
+
+                break;
+            case "3":
+                // 推送全球
+//                List<TEquipmentDesc> equipmentDescAll = equipmentDescService.list();
+//                ArrayList<TEquipmentDesc> equipmentDescArrayList = new ArrayList<>();
+//
+//                for (TEquipmentDesc equipmentDesc : equipmentDescAll) {
+//                    equipmentDesc.setPatchId(hotUpdateId);
+//                    equipmentDescArrayList.add(equipmentDesc);
+////                    equipmentDescService.saveOrUpdate(equipmentDesc);
+//                }
+//                if (!equipmentDescArrayList.isEmpty()) {
+//                    equipmentDescService.saveOrUpdateBatch(equipmentDescArrayList);
+//                }
+
+                List<TEquipmentDesc> equipmentDescList = equipmentDescService.list();
+                equipmentDescList.forEach(d -> d.setPatchId(hotUpdateId));
+                equipmentDescService.saveOrUpdateBatch(equipmentDescList);
+
+                break;
+            default:
+                return R.fail("不支持的推送区域参数:" + targetAreas);
+        }
+
+        hotUpdateService.save(tHotUpdate);
+
+        return R.ok("录入成功");
+    }
+
+}
+

+ 59 - 0
src/main/java/com/szwl/controller/THuifuMchController.java

@@ -47,6 +47,52 @@ public class THuifuMchController {
     @Autowired
     private THuifuMchCheckService tHuifuMchCheckService;
 
+    @ApiOperation(value = "商户入驻申请")
+    @PostMapping("/addApplication")
+    public ResponseModel<?> addApplication(@Valid @RequestBody THuifuMchCheck tHuifuMchCheck) {
+        if (tHuifuMchCheck.getAdminId() == null) {
+            return R.fail(ResponseCodesEnum.A0001);
+        }
+        LambdaQueryWrapper<THuifuMchCheck> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(THuifuMchCheck::getAdminId,tHuifuMchCheck.getAdminId());
+        THuifuMchCheck huifuMchCheck = tHuifuMchCheckService.getOne(queryWrapper);
+        if(huifuMchCheck != null) {
+            tHuifuMchCheck.setModifyDate(new Date());
+            tHuifuMchCheck.setStatus("0");
+            tHuifuMchCheckService.updateById(tHuifuMchCheck);
+            return R.ok();
+        }
+        tHuifuMchCheck.setCreateDate(new Date());
+        tHuifuMchCheck.setModifyDate(new Date());
+        tHuifuMchCheck.setStatus("0");
+        tHuifuMchCheckService.save(tHuifuMchCheck);
+        return R.ok();
+    }
+
+    @ApiOperation(value = "汇付用户开户或业务开通")
+    @GetMapping ("/openAccount")
+    public ResponseModel<?> openAccount(Long id) throws Exception {
+        if (id == null) {
+            return R.fail(ResponseCodesEnum.A0001);
+        }
+        // 找到用户id对应的审核信息
+        THuifuMchCheck huifuMchCheck = tHuifuMchCheckService.getById(id);
+        String data = "";
+        // 用户开户或业务开通
+        if (huifuMchCheck.getStatus().equals("0")) {
+            data = tHuifuMchService.openAccount(huifuMchCheck);
+        } else if (huifuMchCheck.getStatus().equals("1") || huifuMchCheck.getStatus().equals("4")){
+            data = tHuifuMchService.openBusiness(huifuMchCheck);
+        } else {
+            return R.fail(ResponseCodesEnum.A0001);
+        }
+        // 判断是否开户成功或业务开通成功
+        if(data.equals(HuifuConstant.SUCCESS)) {
+            return R.ok();
+        } else {
+            return R.fail(ResponseCodesEnum.A0001, data);
+        }
+    }
 
     @ApiOperation(value = "商户入驻申请")
     @PostMapping("/addMerchant")
@@ -365,5 +411,18 @@ public class THuifuMchController {
         return R.ok(str);
     }
 
+    @ApiOperation(value = "查询余额")
+    @GetMapping("/checkBalance")
+    public ResponseModel<?> checkBalance(@RequestParam Long adminId) throws Exception {
+        if(adminId == null) {
+            return R.fail(ResponseCodesEnum.A0001);
+        }
+        LambdaQueryWrapper<THuifuMch> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(THuifuMch::getAdminId,adminId);
+        THuifuMch tHuifuMch = tHuifuMchService.getOne(queryWrapper);
+        String result = tHuifuMchService.checkBalance(tHuifuMch);
+        return R.ok(result);
+    }
+
 }
 

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

@@ -243,7 +243,7 @@ public class TJoinpayMchController {
 //            TJoinpayMch tJoinpayMch = list.get(0);
             TJoinpayMch tJoinpayMch = tJoinpayMchService.getOne(query);
             if(tJoinpayMch == null) {
-                return R.fail(ResponseCodesEnum.E0001, "未注册提现账号");
+                return R.ok(null);
             }
             tJoinpayMchService.refreshMch(tJoinpayMch);
             tJoinpayMchService.refreshMyAccount(tJoinpayMch);

+ 48 - 47
src/main/java/com/szwl/controller/TLabelController.java

@@ -95,20 +95,20 @@ public class TLabelController {
             return R.fail(ResponseCodesEnum.A0001);
         }
     }
-    @ApiOperation(value = "添加标签")
-    @GetMapping("/delete")
-    public ResponseModel<?> delete(String id,String adminId) {
-        if(StringUtils.isNotEmpty(id)&&StringUtils.isNotEmpty(adminId)){
-            TLabel label = labelService.getById(id);
-            if(label!=null&&label.getAdminId()!=null){
-                if(adminId.equals(label.getAdminId().toString())){
-                    labelService.removeById(id);
-                    return R.ok();
-                }
+    @ApiOperation(value = "批量删除分组标签")
+    @PostMapping("/delete")
+    public ResponseModel<?> delete(@RequestBody Long[] ids) {
+        if(ids==null){
+            return R.fail(ResponseCodesEnum.A0001);
+        }
+        if(ids.length > 0){
+            ArrayList<Long> idList = new ArrayList<>();
+            for(int i = 0;i < ids.length; i++){
+                idList.add(ids[i]);
             }
+            labelService.removeByIds(idList);
         }
-
-        return R.fail("删除失败");
+        return R.ok();
 
     }
     @ApiOperation(value = "获取标签列表")
@@ -159,42 +159,43 @@ public class TLabelController {
     public ResponseModel<?> update(@RequestBody TLabel label) {
         if(StringUtils.isNotEmpty(label.getName())&&StringUtils.isNotEmpty(label.getType())&&label.getAdminId()!=null){
             label.setModifyDate(new Date());
-            List<String> ids = new ArrayList<>();
-            if(label.getType().equals("0")){
-                String adminNames = label.getAdminNames();
-                if(StringUtils.isNotEmpty(adminNames)){
-                    List<String> adminNamelist = JSON.parseArray(adminNames, String.class);
-                    for(String username:adminNamelist){
-                        LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
-                        query.like(TAdmin::getUsername,username);
-                        List<TAdmin> list = adminService.list(query);
-                        TAdmin tAdmin = list.get(0);
-                        ids.add(String.valueOf(tAdmin.getId()));
-                    }
-                }
-            }
-            if(label.getType().equals("1")){
-                String equipmentNames = label.getEquipmentNames();
-                if(StringUtils.isNotEmpty(equipmentNames)){
-                    List<String> equipmentNamelist = JSON.parseArray(equipmentNames, String.class);
-                    for(String name:equipmentNamelist){
-                        LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
-                        query.like(TEquipment::getName,name);
-                        List<TEquipment> list = equipmentService.list(query);
-                        TEquipment equipment = list.get(0);
-                        ids.add(String.valueOf(equipment.getId()));
-                    }
+            labelService.updateById(label);
+//            List<String> ids = new ArrayList<>();
+//            if(label.getType().equals("0")){
+//                String adminNames = label.getAdminNames();
+//                if(StringUtils.isNotEmpty(adminNames)){
+//                    List<String> adminNamelist = JSON.parseArray(adminNames, String.class);
+//                    for(String username:adminNamelist){
+//                        LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
+//                        query.like(TAdmin::getUsername,username);
+//                        List<TAdmin> list = adminService.list(query);
+//                        TAdmin tAdmin = list.get(0);
+//                        ids.add(String.valueOf(tAdmin.getId()));
+//                    }
+//                }
+//            }
+//            if(label.getType().equals("1")){
+//                String equipmentNames = label.getEquipmentNames();
+//                if(StringUtils.isNotEmpty(equipmentNames)){
+//                    List<String> equipmentNamelist = JSON.parseArray(equipmentNames, String.class);
+//                    for(String name:equipmentNamelist){
+//                        LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+//                        query.like(TEquipment::getName,name);
+//                        List<TEquipment> list = equipmentService.list(query);
+//                        TEquipment equipment = list.get(0);
+//                        ids.add(String.valueOf(equipment.getId()));
+//                    }
+//                }
 
-                }
-            }
-            if(ids.size()>0){
-                if(label.getType().equals("0")){
-                    label.setAdminIds(ids.toString());
-                }
-                if(label.getType().equals("1")){
-                    label.setEquipmentIds(ids.toString());
-                }
-            }
+//            }
+//            if(ids.size()>0){
+//                if(label.getType().equals("0")){
+//                    label.setAdminIds(ids.toString());
+//                }
+//                if(label.getType().equals("1")){
+//                    label.setEquipmentIds(ids.toString());
+//                }
+//            }
         }else {
             return R.fail(ResponseCodesEnum.A0001);
         }

+ 199 - 0
src/main/java/com/szwl/controller/TLocationCheckController.java

@@ -0,0 +1,199 @@
+package com.szwl.controller;
+
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.szwl.constant.ResponseCodesEnum;
+import com.szwl.model.bo.R;
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.TAdmin;
+import com.szwl.model.entity.TLocationCheck;
+import com.szwl.model.utils.YunPianSms;
+import com.szwl.service.TAdminService;
+import com.szwl.service.TLocationCheckService;
+import com.szwl.util.WhoIsUtil;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2023-12-11
+ */
+@RestController
+@RequestMapping("/tLocationCheck")
+public class TLocationCheckController {
+
+    TLocationCheckService locationCheckService;
+    TAdminService adminService;
+
+    public TLocationCheckController(TLocationCheckService locationCheckService, TAdminService adminService) {
+        this.locationCheckService = locationCheckService;
+        this.adminService = adminService;
+    }
+
+    @ApiOperation(value = "获取录入的位置信息")
+    @GetMapping("/getLocInfo")
+    public ResponseModel<?> getLocInfo(String clientId) {
+        if (StringUtils.isEmpty(clientId)) {
+            return R.fail("设备id不能为空");
+        }
+        // 根据设备id查询位置信息
+        LambdaQueryWrapper<TLocationCheck> lqw = Wrappers.lambdaQuery();
+        lqw.eq(TLocationCheck::getClientId, clientId);
+        TLocationCheck locationCheck = locationCheckService.getOne(lqw);
+        if (Objects.nonNull(locationCheck)) {
+            String country = locationCheck.getCountry();
+            if (country.equals("中国")) {
+                String location = locationCheck.getLocation();
+                return R.ok(country + location);
+            } else {
+                return R.ok(country);
+            }
+
+        }
+        return R.fail("地区信息未录入");
+    }
+
+    @ApiOperation(value = "根据ip校验clientId设备位置")
+    @PostMapping("/ipCheck")
+    public ResponseModel<?> ipCheck(@RequestParam String clientId, @RequestParam String ip) {
+        if (StringUtils.isBlank(clientId) || StringUtils.isBlank(ip)) {
+            return R.fail("参数不能为空");
+        }
+        // 根据 clientId 查设备的 location,country
+        LambdaQueryWrapper<TLocationCheck> lqw = Wrappers.lambdaQuery();
+        lqw.eq(TLocationCheck::getClientId, clientId);
+        TLocationCheck locationCheck = locationCheckService.getOne(lqw);
+        if (Objects.isNull(locationCheck)) {
+            return R.fail("生产部未录入改设备的位置信息");
+        }
+
+        locationCheck.setIp(ip);
+        locationCheck.setModifyTime(new Date());
+
+        String addr = WhoIsUtil.getLocByIp(ip);
+
+//        String result = locationCheckService.locCheckMsg(locationCheck, clientId, addr);
+        String result = locationCheckService.locCheckNoMsg(locationCheck, clientId, addr);
+
+        if ("fail".equals(result)) {
+            locationCheck.setErr("不匹配");
+        }
+        locationCheckService.updateById(locationCheck);
+        return R.ok(result);
+    }
+
+    @ApiOperation(value = "修改录入的位置信息")
+    @PostMapping("/updateLocInfo")
+    public ResponseModel<?> updateLocInfo(@RequestBody TLocationCheck locationCheck) {
+        if (Objects.isNull(locationCheck)) {
+            return R.fail("参数不能为空");
+        }
+
+        // 售后部同事修改的信息:姓名,电话,username,clientId,国家
+        String modUsername = locationCheck.getModUsername();
+        if (!("shouhoumi".equals(modUsername)) && !("admin".equals(modUsername))) {
+            return R.fail("该账号无权修改");
+        }
+        String modName = locationCheck.getModName();
+        String modPhone = locationCheck.getModPhone();
+        String clientId = locationCheck.getClientId();
+        String location = locationCheck.getLocation();
+        String country = locationCheck.getCountry();
+        String message = locationCheck.getMessage();
+
+        if (Objects.isNull(clientId)) {
+            return R.fail("设备唯一码不能为空");
+        }
+
+//        if (country.equals("中国")) {
+//            if (StringUtils.isEmpty(location)) {
+//                return R.fail("国内省市不能为空");
+//            }
+//        }
+
+        LambdaQueryWrapper<TLocationCheck> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(TLocationCheck::getClientId, clientId);
+        List<TLocationCheck> checks = locationCheckService.list(wrapper);
+        TLocationCheck tLocationCheck = checks.get(0);
+
+
+        tLocationCheck.setModifyTime(new Date());
+        tLocationCheck.setModName(modName);
+//        tLocationCheck.setModAdminId(modAdminId);
+        tLocationCheck.setModPhone(modPhone);
+        tLocationCheck.setModUsername(modUsername);
+        tLocationCheck.setLocation(location);
+        tLocationCheck.setClientId(clientId);
+        tLocationCheck.setCountry(country);
+        tLocationCheck.setMessage(message);
+
+        locationCheckService.updateById(tLocationCheck);
+
+
+        return R.ok("修改成功");
+    }
+
+
+    @ApiOperation(value = "录入位置信息")
+    @PostMapping("/inputLocInfo")
+    public ResponseModel<?> inputLocInfo(@RequestBody TLocationCheck locationCheck) {
+        if (Objects.isNull(locationCheck)) {
+            return R.fail("参数不能为空");
+        }
+
+        String phone = locationCheck.getPhone();
+        String username = locationCheck.getUsername();
+        String clientId = locationCheck.getClientId();
+        String name = locationCheck.getName();
+        String location = locationCheck.getLocation();
+        String country = locationCheck.getCountry();
+
+        if (Objects.isNull(clientId)) {
+            return R.fail("设备唯一码不能为空");
+        }
+        LambdaQueryWrapper<TLocationCheck> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(TLocationCheck::getClientId, clientId);
+        List<TLocationCheck> checks = locationCheckService.list(wrapper);
+        if (checks.size() > 0) {
+            return R.fail("此设备信息已录入");
+        }
+
+        Set<String> allowedUsers = new HashSet<>(Arrays.asList("admin", "sunchao", "huangkantong", "shouhou121", "shouhou369", "shouhou397", "shouhoumi"));
+        if (!allowedUsers.contains(username)) {
+            return R.fail("该账号无权操作");
+        }
+
+
+        TLocationCheck tLocationCheck = new TLocationCheck();
+        String uuid = IdUtil.simpleUUID();
+        tLocationCheck.setId(uuid);
+        tLocationCheck.setCreateTime(new Date());
+        tLocationCheck.setPhone(phone);
+        tLocationCheck.setUsername(username);
+        tLocationCheck.setClientId(clientId);
+        tLocationCheck.setName(name);
+        tLocationCheck.setLocation(location);
+        tLocationCheck.setCountry(country);
+
+        locationCheckService.save(tLocationCheck);
+
+        return R.ok("设备出厂信息录入成功");
+    }
+
+}
+

+ 13 - 29
src/main/java/com/szwl/controller/TLogoController.java

@@ -19,11 +19,7 @@ import com.szwl.service.TEquipmentService;
 import com.szwl.service.TLogoService;
 import io.swagger.annotations.ApiOperation;
 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 org.springframework.web.bind.annotation.*;
 
 import javax.jws.Oneway;
 import java.io.IOException;
@@ -55,30 +51,18 @@ public class TLogoController {
     @Autowired
     TLogoService tLogoService;
 
-//    @ApiOperation(value = "定制logo")
-//    @PostMapping("/customLogo")
-//    public ResponseModel<?> customLogo(@RequestBody TEquipment equipment) {
-//
-//        // 根据id找到当前设备
-//        TEquipment tEquipment = tEquipmentService.getById(equipment.getId());
-//        if (tEquipment == null) {
-//            return R.fail("设备为空");
-//        }
-//        // 当前设备的用户id
-//        Long adminId = tEquipment.getAdminId();
-//        // 根据用户id查看用户类型
-//        Integer userType = tAdminService.getById(adminId).getType();
-//        // 仅管理员可修改logo
-//        if (userType != null && (userType == 0 || userType == 1)) {
-//            // 获取当前logo信息
-//            TLogo tLogo = tLogoService.getById(adminId);
-//            System.out.println(tLogo);
-//            // 修改logo
-//            tLogoService.updateById(tLogo);
-//            return R.ok(null,"logo已修改");
-//        }
-//        return R.fail(P0001,"仅管理员可修改logo");
-//    }
+    @ApiOperation(value = "定制logo")
+    @GetMapping("/newCustomLogo")
+    public ResponseModel<?> customLogo(Long id, String logoNumber) {
+        // 根据id找到当前设备
+        TEquipment equipment = tEquipmentService.getById(id);
+        if (equipment == null) {
+            return R.fail("设备为空");
+        }
+        tEquipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("customLogo", logoNumber).toString());
+        return R.ok();
+    }
+
 
     @ApiOperation(value = "定制logo")
     @PostMapping("/customLogo")

+ 12 - 11
src/main/java/com/szwl/controller/TNoticeController.java

@@ -61,21 +61,22 @@ public class TNoticeController {
         }
         TAdmin admin = tAdminService.getById(adminId);
         LambdaQueryWrapper<TNotice> query = Wrappers.lambdaQuery();
-        query.eq(TNotice::getStatus,0);
+        query.eq(TNotice::getStatus,"0");
         query.orderByDesc(TNotice::getCreateDate);
         List<TNotice> notices = noticeService.list(query);
-        if(notices == null){
-            return R.fail(ResponseCodesEnum.A0700,"没有公告");
-        }
-        TNotice tNotice = notices.get(0);
-        Long noticeId = admin.getNoticeId();
-        long time = tNotice.getCreateDate().getTime();
-        if (noticeId!=null) {
-            if(noticeId > time) {
-                return R.ok(null,"公告已读");
+        if(notices.size() > 0){
+            TNotice tNotice = notices.get(0);
+            Long noticeId = admin.getNoticeId();
+            long time = tNotice.getCreateDate().getTime();
+            if (noticeId!=null) {
+                if(noticeId > time) {
+                    return R.ok(null,"公告已读");
+                }
             }
+            return R.ok(tNotice,"获取成功");
+        } else {
+            return R.fail(ResponseCodesEnum.A0700,"没有公告");
         }
-        return R.ok(tNotice,"获取成功");
     }
     @GetMapping("/updateNotice")
     public ResponseModel<?> updateNotice(String adminId) {

+ 3 - 2
src/main/java/com/szwl/controller/TOrderController.java

@@ -276,7 +276,7 @@ public class TOrderController {
                     payFeign.updateOrder(order);
                     return R.ok("申请退款已成功");
                 }else {
-                    return R.fail("申请退款失败");
+                    return R.fail(result);
                 }
 
             } catch (Exception e) {
@@ -535,7 +535,8 @@ public class TOrderController {
         double pri = money * number;
         price = BigDecimal.valueOf(pri);
 
-        String sn = orderService.initSn(equipmentId);
+        Long client6 = Long.parseLong(equipment.getClientId().substring(equipment.getClientId().length() - 6));
+        String sn = orderService.initSn(client6);
         String orderNo = sn;
         String productName = "280充值";
         BigDecimal cutPrice = price.multiply(new BigDecimal(100)).divide(new BigDecimal(100));

+ 76 - 0
src/main/java/com/szwl/controller/TParametersController.java

@@ -4,14 +4,22 @@ package com.szwl.controller;
 import cn.com.crbank.ommo.bean.ResultMessage;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage;
+import com.szwl.constant.ResponseCodesEnum;
 import com.szwl.model.bean.CommonParamVo;
+import com.szwl.model.bo.R;
+import com.szwl.model.bo.ResponseModel;
 import com.szwl.model.entity.TEquipment;
+import com.szwl.model.entity.TEquipmentDesc;
 import com.szwl.model.entity.TParameters;
 import com.szwl.model.entity.TProduct;
 import com.szwl.model.utils.PushUtils;
+import com.szwl.service.TEquipmentDescService;
 import com.szwl.service.TEquipmentService;
 import com.szwl.service.TParametersService;
 import io.swagger.annotations.Api;
+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;
@@ -21,7 +29,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.util.List;
+import java.util.Objects;
+
 
 /**
  * <p>
@@ -41,6 +52,9 @@ public class TParametersController {
     @Autowired
     private TEquipmentService tEquipmentService;
 
+    @Resource
+    private TEquipmentDescService equipmentDescService;
+
     /**
      * 获取设备参数
      *
@@ -91,5 +105,67 @@ public class TParametersController {
                         .setData("SUCCESS")
                         .setMessage("SUCCESS"));
     }
+
+
+    @ApiOperation(value = "启用物料监控")
+    @PostMapping("/enableMaterial")
+    public ResponseModel<?> enableMaterial(@RequestBody TParameters parameters) {
+        Long equipmentId = parameters.getEquipmentId();
+        if (equipmentId == null) {
+            return R.fail(ResponseCodesEnum.A0001,"设备id不能为空");
+        }
+//        TParameters tParameters = tParametersService.getById(equipmentId);
+//        if (Objects.isNull(tParameters)) {
+//            TParameters tParameters1 = new TParameters();
+//        }
+        TEquipmentDesc equipmentDesc = equipmentDescService.getById(equipmentId);
+        if (Objects.isNull(equipmentDesc)) {
+            TEquipmentDesc tEquipmentDesc = new TEquipmentDesc();
+            tEquipmentDesc.setEquipmentId(equipmentId);
+            tEquipmentDesc.setIsMaterialUse("1");
+            equipmentDescService.saveOrUpdate(tEquipmentDesc);
+        } else {
+            String isMaterialUse = equipmentDesc.getIsMaterialUse();
+            if (StringUtils.isNotEmpty(isMaterialUse) && "1".equals(isMaterialUse)) {
+                return R.ok(ResponseCodesEnum.ALL_OK,"已开启ENABLED");
+            }
+            equipmentDesc.setIsMaterialUse("1");
+            equipmentDescService.saveOrUpdate(equipmentDesc);
+        }
+
+        TEquipment equipment = tEquipmentService.getById(equipmentId);
+        tEquipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("Param", "M502" + ":" + "1").toString());
+
+        return R.ok(ResponseCodesEnum.ALL_OK,"开启物料监控功能成功SUCCESS");
+    }
+
+    @ApiOperation(value = "关闭物料监控")
+    @PostMapping("/disableMaterial")
+    public ResponseModel<?> disableMaterial(@RequestBody TParameters parameters) {
+        Long equipmentId = parameters.getEquipmentId();
+        if (equipmentId == null) {
+            return R.fail(ResponseCodesEnum.A0001,"设备id不能为空");
+        }
+        TEquipmentDesc equipmentDesc = equipmentDescService.getById(equipmentId);
+        if (Objects.isNull(equipmentDesc)) {
+            TEquipmentDesc tEquipmentDesc = new TEquipmentDesc();
+            tEquipmentDesc.setEquipmentId(equipmentId);
+            tEquipmentDesc.setIsMaterialUse("0");
+            equipmentDescService.saveOrUpdate(tEquipmentDesc);
+        } else {
+            String isMaterialUse = equipmentDesc.getIsMaterialUse();
+            if (StringUtils.isNotEmpty(isMaterialUse) && "0".equals(isMaterialUse)) {
+                return R.ok(ResponseCodesEnum.ALL_OK,"已关闭CLOSED");
+            }
+            equipmentDesc.setIsMaterialUse("0");
+            equipmentDescService.saveOrUpdate(equipmentDesc);
+        }
+
+        TEquipment equipment = tEquipmentService.getById(equipmentId);
+        tEquipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("Param", "M502" + ":" + "0").toString());
+
+        return R.ok(ResponseCodesEnum.ALL_OK,"物料监控已关闭CLOSED");
+    }
+
 }
 

+ 2 - 3
src/main/java/com/szwl/controller/TProductController.java

@@ -102,7 +102,7 @@ public class TProductController {
         return R.ok(null,"修改成功");
     }
 
-    @ApiOperation(value = "/多个花型价格")
+    @ApiOperation(value = "多个花型价格")
     @GetMapping("/updateProduct")
     public ResponseModel<?> updateProduct(String no,String price,String equipmentId,String type) {
         if(StringUtils.isEmpty(price)||StringUtils.isEmpty(equipmentId)){
@@ -154,8 +154,7 @@ public class TProductController {
         LambdaQueryWrapper<TProduct> query = Wrappers.lambdaQuery();
         query.eq(TProduct::getProductName,productName);
         query.eq(TProduct::getEquipmentId,Long.valueOf(equipmentId));
-        List<TProduct> list = tProductService.list(query);
-        TProduct tProduct = list.get(0);
+        TProduct tProduct = tProductService.getOne(query);
         return R.ok(tProduct);
     }
     @ApiOperation(value = "查询商品列表信息")

+ 36 - 10
src/main/java/com/szwl/controller/TPromoCodeController.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.szwl.constant.ResponseCodesEnum;
 import com.szwl.feign.bean.PayFeign;
 import com.szwl.constant.JoinpayConstant;
 import com.szwl.model.bo.JsonMessage;
@@ -93,8 +94,9 @@ public class TPromoCodeController {
         LambdaQueryWrapper<TPromoCode> query = Wrappers.lambdaQuery();
         query.eq(TPromoCode::getCode,code);
         query.eq(TPromoCode::getAdminId,adminId);
-        List<TPromoCode> list = promoCodeService.list(query);
-        return R.ok(list.get(0));
+//        List<TPromoCode> list = promoCodeService.list(query);
+        TPromoCode promoCode = promoCodeService.getOne(query);
+        return R.ok(promoCode);
     }
     @ApiOperation(value = "小程序获取优惠码")
     @GetMapping("/getCode")
@@ -143,7 +145,11 @@ public class TPromoCodeController {
         if(list1.size()>0){
             TPromoCode tPromoCode = list1.get(0);
             tPromoCode.setIsUse("1");
-            tPromoCode.setUseBy(equipment.getName());
+            if (StringUtils.isNotEmpty(equipment.getName())) {
+                tPromoCode.setUseBy(equipment.getName());
+            } else {
+                tPromoCode.setUseBy(clientId);
+            }
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             String time = sdf.format(new Date());
             tPromoCode.setUseDate(time);
@@ -378,8 +384,8 @@ public class TPromoCodeController {
                         money = price.getPrice();
                     }
                 }
-
-                String sn = orderService.initSn(equipmentId);
+                Long client6 = Long.parseLong(equipment.getClientId().substring(equipment.getClientId().length() - 6));
+                String sn = orderService.initSn(client6);
                 String orderNo = sn;
                 String productName = "优惠码";
                 BigDecimal price = BigDecimal.valueOf(money*number);
@@ -443,11 +449,11 @@ public class TPromoCodeController {
             }
 
         }
-        Long equipmentId = equipment.getId();
-
+//        Long equipmentId = equipment.getId();
+        Long client6 = Long.parseLong(equipment.getClientId().substring(equipment.getClientId().length() - 6));
         List<String> codes =new ArrayList<>();
         for(int i=0;i<number;i++){
-            String code = orderService.initSn(equipmentId);
+            String code = orderService.initSn(client6);
             StringBuffer str = new StringBuffer();
             str.append(code.substring(0,6));
             codes.add(str.toString());
@@ -579,7 +585,7 @@ public class TPromoCodeController {
         if (workbook != null) {
             OutputStream os = null;
             try {
-                    os = response.getOutputStream();
+                os = response.getOutputStream();
                 SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
                 response.setContentType("application/vnd.ms-excel;charset=utf-8");
                 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("优惠码数据" + format.format(new Date()) + ".xls", "UTF-8"));
@@ -613,11 +619,31 @@ public class TPromoCodeController {
                 return null;
             }
             Float discount = promoCode.getDiscount();
-            return JsonMessage.success(discount);
+            String type = promoCode.getType();
+            JSONObject kindData = new JSONObject();
+            kindData.put("type", type.equals("1") ? type : "0");
+            kindData.put("discount", discount);
+            return JsonMessage.success(kindData.toString());
         }else{
             return null;
         }
+    }
 
+    @ApiOperation(value = "批量删除优惠码")
+    @PostMapping (value = "/deletes")
+    @ResponseBody
+    public ResponseModel<?> deletes(@RequestBody Long[] ids) {
+        if(ids==null){
+            return R.fail(ResponseCodesEnum.A0001);
+        }
+        if(ids.length > 0){
+            ArrayList<Long> idList = new ArrayList<>();
+            for(int i = 0;i < ids.length; i++){
+                idList.add(ids[i]);
+            }
+            promoCodeService.removeByIds(idList);
+        }
+        return R.ok();
     }
 }
 

+ 27 - 44
src/main/java/com/szwl/controller/TProportionCheckController.java

@@ -2,6 +2,8 @@ package com.szwl.controller;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.szwl.model.bo.R;
 import com.szwl.model.bo.ResponseModel;
@@ -117,51 +119,32 @@ public class TProportionCheckController {
             LambdaQueryWrapper<TProportion> query = Wrappers.lambdaQuery();
             query.eq(TProportion::getAdminId,tProportionCheck.getAdminId());
             query.eq(TProportion::getEquipmentId,tProportionCheck.getEquipmentId());
-            List<TProportion> list = tProportionService.list(query);
-            if(list.size()>0){
-                TProportion tProportion = list.get(0);
-                tProportion.setModifyDate(new Date());
-//                tProportion.setAdminId(tProportionCheck.getAdminId());
-//                tProportion.setEquipmentId(tProportionCheck.getEquipmentId());
-//                tProportion.setClientId(tProportionCheck.getClientId());
-                tProportion.setType(tProportionCheck.getType());
-                tProportion.setProportion(tProportionCheck.getProportion());
-                tProportion.setAdminProportion(tProportionCheck.getAdminProportion());
-                tProportion.setAgencyId(tProportionCheck.getAgencyId());
-                tProportion.setMerchantId(tProportionCheck.getMerchantId());
-                tProportion.setPersonageId(tProportionCheck.getPersonageId());
-                tProportion.setAgencyProportion(tProportionCheck.getAgencyProportion());
-                tProportion.setMerchantProportion(tProportionCheck.getMerchantProportion());
-                tProportion.setPersonageProportion(tProportionCheck.getPersonageProportion());
-                tProportion.setAgencyName(tProportionCheck.getAgencyName());
-                tProportion.setMerchantName(tProportionCheck.getMerchantName());
-                tProportion.setPersonageName(tProportionCheck.getPersonageName());
-                tProportionService.updateById(tProportion);
-                tProportionCheck.setCheckType("1");
-                tProportionCheck.setModifyDate(new Date());
-                tProportionCheckService.updateById(tProportionCheck);
-                //发短信 todo
-            }else{
-                TProportion tProportion = new TProportion();
-                tProportion.setModifyDate(new Date());
-                tProportion.setCreateDate(new Date());
-                tProportion.setAdminId(tProportionCheck.getAdminId());
-                tProportion.setEquipmentId(tProportionCheck.getEquipmentId());
-                tProportion.setClientId(tProportionCheck.getClientId());
-                tProportion.setType(tProportionCheck.getType());
-                tProportion.setProportion(tProportionCheck.getProportion());
-                tProportion.setAdminProportion(tProportionCheck.getAdminProportion());
-                tProportion.setAgencyId(tProportionCheck.getAgencyId());
-                tProportion.setMerchantId(tProportionCheck.getMerchantId());
-                tProportion.setPersonageId(tProportionCheck.getPersonageId());
-                tProportion.setAgencyProportion(tProportionCheck.getAgencyProportion());
-                tProportion.setMerchantProportion(tProportionCheck.getMerchantProportion());
-                tProportion.setPersonageProportion(tProportionCheck.getPersonageProportion());
-                tProportion.setAgencyName(tProportionCheck.getAgencyName());
-                tProportion.setMerchantName(tProportionCheck.getMerchantName());
-                tProportion.setPersonageName(tProportionCheck.getPersonageName());
-                tProportionService.save(tProportion);
+            TProportion proportion = tProportionService.getOne(query);
+            if(proportion != null){
+                tProportionService.removeById(proportion.getId());
             }
+            TProportion tProportion = new TProportion();
+            tProportion.setModifyDate(new Date());
+            tProportion.setCreateDate(new Date());
+            tProportion.setAdminId(tProportionCheck.getAdminId());
+            tProportion.setEquipmentId(tProportionCheck.getEquipmentId());
+            tProportion.setClientId(tProportionCheck.getClientId());
+            tProportion.setType(tProportionCheck.getType());
+            tProportion.setProportion(tProportionCheck.getProportion());
+            tProportion.setAdminProportion(tProportionCheck.getAdminProportion());
+            tProportion.setAgencyId(tProportionCheck.getAgencyId());
+            tProportion.setMerchantId(tProportionCheck.getMerchantId());
+            tProportion.setPersonageId(tProportionCheck.getPersonageId());
+            tProportion.setAgencyProportion(tProportionCheck.getAgencyProportion());
+            tProportion.setMerchantProportion(tProportionCheck.getMerchantProportion());
+            tProportion.setPersonageProportion(tProportionCheck.getPersonageProportion());
+            tProportion.setAgencyName(tProportionCheck.getAgencyName());
+            tProportion.setMerchantName(tProportionCheck.getMerchantName());
+            tProportion.setPersonageName(tProportionCheck.getPersonageName());
+            tProportionService.save(tProportion);
+            tProportionCheck.setCheckType("1");
+            tProportionCheck.setModifyDate(new Date());
+            tProportionCheckService.updateById(tProportionCheck);
         }else {
             //拒绝
             TProportionCheck tShandeMchCheck = tProportionCheckService.getById(id);

+ 60 - 72
src/main/java/com/szwl/controller/TProportionController.java

@@ -56,8 +56,8 @@ public class TProportionController {
             LambdaQueryWrapper<TProportionCheck> query = Wrappers.lambdaQuery();
             if(admin.getType()>1){
                 query.eq(TProportionCheck::getAdminId,admin.getId());
-                query.in(TProportionCheck::getCheckType,"0","2","3");
             }
+            query.eq(TProportionCheck::getCheckType,"0");
             // 公司平台
             // 申泽平台管理员
             if (admin.getId() == 2738) {
@@ -99,10 +99,11 @@ public class TProportionController {
             return R.ok(iPage);
         }else {
             //已审核
-            LambdaQueryWrapper<TProportion> query = Wrappers.lambdaQuery();
+            LambdaQueryWrapper<TProportionCheck> query = Wrappers.lambdaQuery();
             if(admin.getType()>1){
-                query.eq(TProportion::getAdminId,admin.getId());
+                query.eq(TProportionCheck::getAdminId,admin.getId());
             }
+            query.in(TProportionCheck::getCheckType,"1","2","3");
             // 公司平台
             // 申泽平台管理员
             if (admin.getId() == 2738) {
@@ -111,7 +112,7 @@ public class TProportionController {
                         .eq(TAdmin::getCompanyType, "0");
                 List<Long> adminIds = adminService.list(adminQuery).stream()
                         .map(TAdmin::getId).collect(Collectors.toList());
-                query.in(TProportion::getAdminId,adminIds);
+                query.in(TProportionCheck::getAdminId,adminIds);
             }
             // 七云平台管理员
             if (admin.getId() == 2739) {
@@ -119,21 +120,21 @@ public class TProportionController {
                 adminQuery.eq(TAdmin::getCompanyType, "1");
                 List<Long> adminIds = adminService.list(adminQuery).stream()
                         .map(TAdmin::getId).collect(Collectors.toList());
-                query.in(TProportion::getAdminId,adminIds);
+                query.in(TProportionCheck::getAdminId,adminIds);
             }
-            query.orderByDesc(TProportion::getCreateDate);
-            Page<TProportion> page = new Page<>(current, size, true);
-            IPage<TProportion> iPage = tProportionService.page(page, query);
-            List<TProportion> records = iPage.getRecords();
+            query.orderByDesc(TProportionCheck::getCreateDate);
+            Page<TProportionCheck> page = new Page<>(current, size, true);
+            IPage<TProportionCheck> iPage = tProportionCheckService.page(page, query);
+            List<TProportionCheck> records = iPage.getRecords();
             if(records.size()>0){
-                for(TProportion proportion:records){
-                    if(proportion.getEquipmentId()!=null){
-                        TEquipment equipment = tEquipmentService.getById(proportion.getEquipmentId());
+                for(TProportionCheck proportionCheck:records){
+                    if(proportionCheck.getEquipmentId()!=null){
+                        TEquipment equipment = tEquipmentService.getById(proportionCheck.getEquipmentId());
                         if(equipment != null) {
                             if(StringUtils.isNotEmpty(equipment.getName())){
-                                proportion.setEquipmentName(equipment.getName());
+                                proportionCheck.setEquipmentName(equipment.getName());
                             }else {
-                                proportion.setEquipmentName(equipment.getClientId());
+                                proportionCheck.setEquipmentName(equipment.getClientId());
                             }
                         }
                     }
@@ -206,7 +207,12 @@ public class TProportionController {
     @ApiOperation(value = "查找机器分销信息信息")
     @PostMapping("/getOne")
     public ResponseModel<?> getOne(String adminId, String clientId) {
-        TAdmin admin = adminService.getById(adminId);
+        if (adminId.equals("1")) {
+            LambdaQueryWrapper<TEquipment> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.eq(TEquipment::getClientId, clientId);
+            TEquipment equipment = tEquipmentService.getOne(queryWrapper);
+            adminId = String.valueOf(equipment.getAdminId());
+        }
         LambdaQueryWrapper<TProportion> query = Wrappers.lambdaQuery();
         query.eq(TProportion::getAdminId,adminId);
         query.eq(TProportion::getClientId,clientId);
@@ -278,10 +284,10 @@ public class TProportionController {
         query1.eq(TEquipment::getAdminId,tProportion.getAdminId());
         query1.eq(TEquipment::getClientId,tProportion.getClientId());
         List<TEquipment> equipmentList = tEquipmentService.list(query1);
-        if(equipmentList.size()<=0){
+        TEquipment equipment = tEquipmentService.getOne(query1);
+        if(equipment == null){
             return R.fail("找不到该机器!");
         }
-        TEquipment equipment = equipmentList.get(0);
         //查看是否有审核中的
         LambdaQueryWrapper<TProportionCheck> queryCheck = Wrappers.lambdaQuery();
         queryCheck.eq(TProportionCheck::getAdminId,tProportion.getAdminId());
@@ -299,10 +305,9 @@ public class TProportionController {
             //1个
             LambdaQueryWrapper<TAdmin> queryTAdmin = Wrappers.lambdaQuery();
             queryTAdmin.eq(TAdmin::getUsername,tProportion.getAgencyName());
-            List<TAdmin> admins = adminService.list(queryTAdmin);
-            if(admins.size()>0){
-                TAdmin tAdmin = admins.get(0);
-                agencyId = tAdmin.getId();
+            TAdmin admins = adminService.getOne(queryTAdmin);
+            if(admins != null){
+                agencyId = admins.getId();
             }else {
                 return R.fail("找不到第一个分账人!");
             }
@@ -311,10 +316,9 @@ public class TProportionController {
             //2个
             LambdaQueryWrapper<TAdmin> queryTAdmin1 = Wrappers.lambdaQuery();
             queryTAdmin1.eq(TAdmin::getUsername,tProportion.getMerchantName());
-            List<TAdmin> admins1 = adminService.list(queryTAdmin1);
-            if(admins1.size()>0){
-                TAdmin tAdmin = admins1.get(0);
-                merchantId = tAdmin.getId();
+            TAdmin admins1 = adminService.getOne(queryTAdmin1);
+            if(admins1 != null){
+                merchantId = admins1.getId();
             }else {
                 return R.fail("找不到第二个分账人!");
             }
@@ -323,10 +327,9 @@ public class TProportionController {
             //3个
             LambdaQueryWrapper<TAdmin> queryTAdmin2 = Wrappers.lambdaQuery();
             queryTAdmin2.eq(TAdmin::getUsername,tProportion.getPersonageName());
-            List<TAdmin> admins2 = adminService.list(queryTAdmin2);
-            if(admins2.size()>0){
-                TAdmin tAdmin = admins2.get(0);
-                personageId = tAdmin.getId();
+            TAdmin admins2 = adminService.getOne(queryTAdmin2);
+            if(admins2 != null){
+                personageId = admins2.getId();
             }else {
                 return R.fail("找不到第三个分账人!");
             }
@@ -335,22 +338,8 @@ public class TProportionController {
         LambdaQueryWrapper<TProportion> query = Wrappers.lambdaQuery();
         query.eq(TProportion::getAdminId,tProportion.getAdminId());
         query.eq(TProportion::getClientId,tProportion.getClientId());
-        List<TProportion> list = tProportionService.list(query);
-        if(list.size()>0){
-            //已有,属于第二次提交信息,需要审核
-            TProportion oldProportion = list.get(0);
-            //已有,判断是否为99%和1%组合
-//            if(tProportion.getProportion().compareTo(new BigDecimal("99"))==0&&tProportion.getAdminProportion().compareTo(new BigDecimal("1"))==0){
-//                oldProportion.setAgencyId(agencyId);
-//                oldProportion.setMerchantId(merchantId);
-//                oldProportion.setPersonageId(personageId);
-//                oldProportion.setAgencyProportion(BigDecimal.valueOf(0.00));
-//                oldProportion.setMerchantProportion(BigDecimal.valueOf(0.00));
-//                oldProportion.setPersonageProportion(BigDecimal.valueOf(0.00));
-//                oldProportion.setModifyDate(new Date());
-//                tProportionService.updateById(tProportion);
-//                return R.ok("修改成功");
-//            }else {
+        TProportion proportion = tProportionService.getOne(query);
+        if(proportion != null){
                 //提交审核
                 TProportionCheck proportionCheck = new TProportionCheck();
                 proportionCheck.setAdminId(tProportion.getAdminId());
@@ -376,6 +365,26 @@ public class TProportionController {
                 return R.ok("已提交审核");
 //            }
         }else {
+            //提交审核
+            TProportionCheck proportionCheck = new TProportionCheck();
+            proportionCheck.setAdminId(tProportion.getAdminId());
+            proportionCheck.setEquipmentId(equipment.getId());
+            proportionCheck.setEquipmentName(equipment.getName());
+            proportionCheck.setClientId(tProportion.getClientId());
+            proportionCheck.setType(tProportion.getType());
+            proportionCheck.setProportion(tProportion.getProportion());
+            proportionCheck.setAdminProportion(tProportion.getAdminProportion());
+            proportionCheck.setAgencyId(agencyId);
+            proportionCheck.setMerchantId(merchantId);
+            proportionCheck.setPersonageId(personageId);
+            proportionCheck.setAgencyProportion(tProportion.getAgencyProportion());
+            proportionCheck.setMerchantProportion(tProportion.getMerchantProportion());
+            proportionCheck.setPersonageProportion(tProportion.getPersonageProportion());
+            proportionCheck.setAgencyName(tProportion.getAgencyName());
+            proportionCheck.setMerchantName(tProportion.getMerchantName());
+            proportionCheck.setPersonageName(tProportion.getPersonageName());
+            proportionCheck.setCreateDate(new Date());
+            proportionCheck.setModifyDate(new Date());
             //没有,判断是否为99%和1%组合
             if(tProportion.getProportion().compareTo(new BigDecimal("99"))==0&&tProportion.getAdminProportion().compareTo(new BigDecimal("1"))==0){
                 tProportion.setAgencyId(agencyId);
@@ -389,36 +398,14 @@ public class TProportionController {
                 tProportion.setCreateDate(new Date());
                 tProportion.setModifyDate(new Date());
                 tProportionService.save(tProportion);
+                proportionCheck.setCheckType("1");
+                tProportionCheckService.save(proportionCheck);
                 return R.ok("添加成功");
             }else {
-                //提交审核
-                TProportionCheck proportionCheck = new TProportionCheck();
-                proportionCheck.setAdminId(tProportion.getAdminId());
-                proportionCheck.setEquipmentId(equipment.getId());
-                proportionCheck.setEquipmentName(equipment.getName());
-                proportionCheck.setClientId(tProportion.getClientId());
-                proportionCheck.setType(tProportion.getType());
-                proportionCheck.setProportion(tProportion.getProportion());
-                proportionCheck.setAdminProportion(tProportion.getAdminProportion());
-                proportionCheck.setAgencyId(agencyId);
-                proportionCheck.setMerchantId(merchantId);
-                proportionCheck.setPersonageId(personageId);
-                proportionCheck.setAgencyProportion(tProportion.getAgencyProportion());
-                proportionCheck.setMerchantProportion(tProportion.getMerchantProportion());
-                proportionCheck.setPersonageProportion(tProportion.getPersonageProportion());
-                proportionCheck.setAgencyName(tProportion.getAgencyName());
-                proportionCheck.setMerchantName(tProportion.getMerchantName());
-                proportionCheck.setPersonageName(tProportion.getPersonageName());
-                proportionCheck.setCreateDate(new Date());
-                proportionCheck.setModifyDate(new Date());
                 proportionCheck.setCheckType("0");
                 tProportionCheckService.save(proportionCheck);
                 return R.ok("已提交审核");
             }
-//            tProportion.setSettleableBalance(BigDecimal.valueOf(0.00));
-//            tProportion.setCreateDate(new Date());
-//            tProportion.setModifyDate(new Date());
-//            tProportionService.save(tProportion);
         }
     }
     @ApiOperation(value = "")
@@ -448,9 +435,10 @@ public class TProportionController {
     public ResponseModel<TProportion> getProportion(@RequestParam String equipmentId) {
         LambdaQueryWrapper<TProportion> query = Wrappers.lambdaQuery();
         query.eq(TProportion::getEquipmentId,Long.valueOf(equipmentId));
-        List<TProportion> list = tProportionService.list(query);
-        TProportion tProportion = list.get(0);
-        return R.ok(tProportion);
+//        List<TProportion> list = tProportionService.list(query);
+//        TProportion tProportion = list.get(0);
+        TProportion proportion = tProportionService.getOne(query);
+        return R.ok(proportion);
     }
     @ApiOperation(value = "批量设置机器分销")
     @GetMapping("/setProportion")

+ 31 - 19
src/main/java/com/szwl/controller/TSugarDoController.java

@@ -6,13 +6,14 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.szwl.model.entity.TEquipment;
+import com.szwl.model.entity.TNameDictionary;
+import com.szwl.model.entity.TProduct;
 import com.szwl.model.entity.TSugarDo;
 import com.szwl.model.utils.PushUtils;
-import com.szwl.service.TAdminService;
-import com.szwl.service.TEquipmentService;
-import com.szwl.service.TSugarDoService;
+import com.szwl.service.*;
 import io.swagger.annotations.Api;
 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;
@@ -36,24 +37,29 @@ import java.util.*;
 @RestController
 @RequestMapping("/tSugarDo")
 public class TSugarDoController {
+
     @Autowired
     TEquipmentService tEquipmentService;
+
     @Autowired
     TAdminService tAdminService;
+
     @Autowired
     TSugarDoService tSugarDoService;
+
+    @Autowired
+    TNameDictionaryService nameDictionaryService;
+
+    @Autowired
+    TProductService productService;
+
     @ApiOperation(value = "远程做糖")
     @GetMapping("/doSugar")
     public ResponseEntity<?> doSugar(Long equipmentId,String productName){
-
         if(equipmentId!=null){
             TEquipment equipment = tEquipmentService.getById(equipmentId);
             Long equipmentAdminId = equipment.getAdminId();
                 //判断本日是否已做十个糖
-//                TSugarDoExample sugarDoExample = new TSugarDoExample();
-//                TSugarDoExample.Criteria criteria = sugarDoExample.createCriteria();
-//                criteria.andAdminIdEqualTo(String.valueOf(adminId));
-//                criteria.andClientIdEqualTo(equipment.getClientId());
                 LambdaQueryWrapper<TSugarDo> query = Wrappers.lambdaQuery();
                 query.eq(TSugarDo::getAdminId,Long.valueOf(equipmentAdminId));
 
@@ -63,16 +69,12 @@ public class TSugarDoController {
                 todayStart.set(Calendar.MINUTE, 0);
                 todayStart.set(Calendar.SECOND, 0);
                 query.gt(TSugarDo::getCreateDate,todayStart.getTime());
-//                criteria.andCreateDateGreaterThanOrEqualTo(todayStart.getTime());
                 Calendar todayEnd = Calendar.getInstance();
                 todayEnd.set(Calendar.HOUR_OF_DAY, 23);
                 todayEnd.set(Calendar.MINUTE, 59);
                 todayEnd.set(Calendar.SECOND, 59);
-//                criteria.andCreateDateLessThanOrEqualTo(todayEnd.getTime());
                 query.le(TSugarDo::getCreateDate,todayEnd.getTime());
                 query.eq(TSugarDo::getStatus,"1");
-//                criteria.andStatusEqualTo("1");
-//                List<TSugarDo> sugarDoList = tSugarDoService.selectByOption(sugarDoExample);
                 List<TSugarDo> sugarDoList = tSugarDoService.list(query);
                 if(sugarDoList.size()>20){
                     return ResponseEntity.status(HttpStatus.OK)
@@ -95,10 +97,20 @@ public class TSugarDoController {
                 sugarDo.setModifyDate(date);
                 tSugarDoService.save(sugarDo);
                 JSONObject kindData = new JSONObject();
+                LambdaQueryWrapper<TProduct> queryWrapper = Wrappers.lambdaQuery();
+                queryWrapper.eq(TProduct::getEquipmentId, equipmentId);
+                queryWrapper.eq(TProduct::getProductName, productName);
+                TProduct product = productService.getOne(queryWrapper);
+                if (product != null && StringUtils.isEmpty(product.getName())) {
+                    LambdaQueryWrapper<TNameDictionary> wrapper = Wrappers.lambdaQuery();
+                    wrapper.eq(TNameDictionary::getNo, product.getNo());
+                    wrapper.eq(TNameDictionary::getLanguage, "zh");
+                    TNameDictionary nameDictionary = nameDictionaryService.getOne(wrapper);
+                    productName = nameDictionary.getName();
+                }
                 kindData.put("productName" , productName);
                 kindData.put("no" , sugarDo.getNo());
                 tEquipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("dosugar", kindData.toString()).toString());
-//				PushUtils.push(equipment.getGtClientId(), "", "", PushUtils.buildJson("dosugar", kindData.toString()).toString());
                 return ResponseEntity.status(HttpStatus.OK)
                         .body(new ResultMessage().setCode(true).setData(sugarDo).setMessage("SUCCESS"));
         }
@@ -124,18 +136,18 @@ public class TSugarDoController {
             }
             if(status.equals("1")){
                 return ResponseEntity.status(HttpStatus.OK)
-                        .body(new ResultMessage().setCode(true).setData("").setMessage("机器已接收到做糖指令:"+sugarDo.getProductName()));
+                        .body(new ResultMessage().setCode(true).setData("1").setMessage("机器已接收到做糖指令:"+ sugarDo.getProductName()));
             }
             if(status.equals("2")){
                 return ResponseEntity.status(HttpStatus.OK)
-                        .body(new ResultMessage().setCode(false).setData("").setMessage("机器异常无法做糖:"+sugarDo.getNote()));
+                        .body(new ResultMessage().setCode(false).setData("2").setMessage("机器异常无法做糖:"+ sugarDo.getNote()));
             }
         }else {
             return ResponseEntity.status(HttpStatus.OK)
-                    .body(new ResultMessage().setCode(false).setData("").setMessage("网络异常"));
+                    .body(new ResultMessage().setCode(false).setData("3").setMessage("网络异常"));
         }
         return ResponseEntity.status(HttpStatus.OK)
-                .body(new ResultMessage().setCode(true).setData("").setMessage("ERROR"));
+                .body(new ResultMessage().setCode(true).setData("4").setMessage("ERROR"));
     }
     @ApiOperation(value = "今日做糖列表")
     @GetMapping("/selectSugarList")
@@ -166,12 +178,12 @@ public class TSugarDoController {
             String[] split = format.split(" ");
             String s = split[1];
             if(sugarDo.getStatus().equals("1")){
-                sugarDo.setProductName("商品:"+sugarDo.getProductName()+" 时间:"+s+" 已做糖 "+" 设备:"+sugarDo.getClientId().substring(sugarDo.getClientId().length()-6,sugarDo.getClientId().length()));
+//                sugarDo.setProductName("商品:"+sugarDo.getProductName()+" 时间:"+s+" 已做糖 "+" 设备:"+sugarDo.getClientId().substring(sugarDo.getClientId().length()-6));
                 sugarDos.add(sugarDo);
 
             }
             if(sugarDo.getStatus().equals("2")){
-                sugarDo.setProductName("商品:"+sugarDo.getProductName()+" 时间:"+s+ " 异常:"+sugarDo.getNote()+" 设备:"+sugarDo.getClientId().substring(sugarDo.getClientId().length()-6,sugarDo.getClientId().length()));
+//                sugarDo.setProductName("商品:"+sugarDo.getProductName()+" 时间:"+s+ " 异常:"+sugarDo.getNote()+" 设备:"+sugarDo.getClientId().substring(sugarDo.getClientId().length()-6));
                 sugarDos.add(sugarDo);
 
             }

+ 46 - 0
src/main/java/com/szwl/controller/TestController.java

@@ -0,0 +1,46 @@
+package com.szwl.controller;
+
+import com.szwl.mapper.TLocationCheckMapper;
+import com.szwl.model.entity.TLocationCheck;
+import com.szwl.service.TLocationCheckService;
+import com.szwl.util.WhoIsUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.List;
+
+@Slf4j
+@Api(value = "/tTest", tags = {"测试"})
+@RestController
+@RequestMapping("/tTest")
+public class TestController {
+
+    @Resource
+    TLocationCheckMapper locationCheckMapper;
+    @Resource
+    TLocationCheckService locationCheckService;
+    @ApiOperation(value = "测试定时任务")
+    @PostMapping("/testSch")
+    public void test() throws IOException {
+        List<TLocationCheck> locationChecks = locationCheckMapper.selectNotNullIp();
+//            String locErrorEq = null;
+        StringBuilder locErrorEq = new StringBuilder();
+        for (TLocationCheck locationChc : locationChecks) {
+            String clientId = locationChc.getClientId();
+            String ip = locationChc.getIp();
+            String addr = WhoIsUtil.getLocByIp(ip);
+            // 这里不需要更新ip,只需要校验有ip的设备位置对不对
+//                locationCheckService.locCheckMsg(locationChc, clientId, addr);
+            String check = locationCheckService.schLocCheck(locationChc, clientId, addr);
+            locErrorEq.append(check);
+        }
+        locationCheckService.schSendMsg(locErrorEq.toString());
+    }
+
+}

+ 9 - 4
src/main/java/com/szwl/feign/bean/SyncOldFeign.java

@@ -3,10 +3,7 @@ package com.szwl.feign.bean;
 import com.szwl.model.bo.ResponseModel;
 import com.szwl.model.entity.*;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
 import java.util.List;
@@ -24,6 +21,14 @@ public interface SyncOldFeign {
     ResponseModel<List<TProduct>> getProductByEquipmentId(@RequestParam String equipmentId);
 
     /**
+     * 获取旧系统用户的 parentId
+     * @param adminId
+     * @return
+     */
+    @GetMapping("/oldAdmin/getParentId")
+    ResponseModel<Long> getParentId(@RequestParam String adminId);
+
+    /**
      * 通过 adminId 获取用户信息
      * @param adminId
      * @return

+ 1 - 1
src/main/java/com/szwl/mapper/TEquipmentDescMapper.java

@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * </p>
  *
  * @author wuhs
- * @since 2022-04-23
+ * @since 2024-01-18
  */
 public interface TEquipmentDescMapper extends BaseMapper<TEquipmentDesc> {
 

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

@@ -22,4 +22,5 @@ public interface TEquipmentMapper extends BaseMapper<TEquipment> {
 
     int insertBatchSomeColumn(List<TEquipment> entityList);
 
+    List<TEquipment> getEquipmentByLatLon(String lat1, String lat2, String lon1, String lon2);
 }

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

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TGoodsData;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 商品数据表 Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-01-19
+ */
+public interface TGoodsDataMapper extends BaseMapper<TGoodsData> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.THotUpdate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-01-24
+ */
+public interface THotUpdateMapper extends BaseMapper<THotUpdate> {
+
+}

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

@@ -0,0 +1,19 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TLocationCheck;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2023-12-25
+ */
+public interface TLocationCheckMapper extends BaseMapper<TLocationCheck> {
+
+    List<TLocationCheck> selectNotNullIp();
+}

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

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TNameDictionary;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-01-02
+ */
+public interface TNameDictionaryMapper extends BaseMapper<TNameDictionary> {
+
+}

+ 3 - 1
src/main/java/com/szwl/mapper/xml/TEquipmentDescMapper.xml

@@ -29,11 +29,13 @@
         <result column="outside_tm" property="outsideTm" />
         <result column="outside_hd" property="outsideHd" />
         <result column="diy_flower_status" property="diyFlowerStatus" />
+        <result column="language" property="language" />
+        <result column="patch_id" property="patchId" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        equipment_id, flowers, white_sugar, red_sugar, yellow_sugar, blue_sugar, stick, water, waste_water, is_material_use, pay_type, note, status, coupon_status, out_door, in_door, sleep_desc, cup_quantity, stir_tm, corn_generator_tm, number_one, candy_generator_tm, outside_tm, outside_hd, diy_flower_status
+        equipment_id, flowers, white_sugar, red_sugar, yellow_sugar, blue_sugar, stick, water, waste_water, is_material_use, pay_type, note, status, coupon_status, out_door, in_door, sleep_desc, cup_quantity, stir_tm, corn_generator_tm, number_one, candy_generator_tm, outside_tm, outside_hd, diy_flower_status, language, patch_id
     </sql>
 
 </mapper>

Fichier diff supprimé car celui-ci est trop grand
+ 7 - 0
src/main/java/com/szwl/mapper/xml/TEquipmentMapper.xml


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

@@ -0,0 +1,21 @@
+<?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.TGoodsDataMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.TGoodsData">
+        <id column="id" property="id" />
+        <result column="create_date" property="createDate" />
+        <result column="modify_date" property="modifyDate" />
+        <result column="number" property="number" />
+        <result column="machine_type" property="machineType" />
+        <result column="goods" property="goods" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_date, modify_date, number, machine_type, goods, remark
+    </sql>
+
+</mapper>

+ 26 - 0
src/main/java/com/szwl/mapper/xml/THotUpdateMapper.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.THotUpdateMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.THotUpdate">
+        <id column="id" property="id" />
+        <result column="create_time" property="createTime" />
+        <result column="modify_time" property="modifyTime" />
+        <result column="patch_version" property="patchVersion" />
+        <result column="patch_status" property="patchStatus" />
+        <result column="client_id" property="clientId" />
+        <result column="note" property="note" />
+        <result column="target_areas" property="targetAreas" />
+        <result column="patch_link" property="patchLink" />
+        <result column="original_version" property="originalVersion" />
+        <result column="have_update_num" property="haveUpdateNum" />
+        <result column="should_update_num" property="shouldUpdateNum" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_time, modify_time, patch_version, patch_status, client_id, note, target_areas, patch_link, original_version, have_update_num, should_update_num
+    </sql>
+
+</mapper>

Fichier diff supprimé car celui-ci est trop grand
+ 3 - 1
src/main/java/com/szwl/mapper/xml/THuifuMchCheckMapper.xml


+ 47 - 0
src/main/java/com/szwl/mapper/xml/TLocationCheckMapper.xml

@@ -0,0 +1,47 @@
+<?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.TLocationCheckMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.TLocationCheck">
+        <id column="id" property="id" />
+        <result column="create_time" property="createTime" />
+        <result column="modify_time" property="modifyTime" />
+        <result column="admin_id" property="adminId" />
+        <result column="phone" property="phone" />
+        <result column="client_id" property="clientId" />
+        <result column="location" property="location" />
+        <result column="longitude" property="longitude" />
+        <result column="latitude" property="latitude" />
+        <result column="country" property="country" />
+        <result column="country_code" property="countryCode" />
+        <result column="username" property="username" />
+        <result column="ip" property="ip" />
+        <result column="pro" property="pro" />
+        <result column="pro_code" property="proCode" />
+        <result column="city" property="city" />
+        <result column="city_code" property="cityCode" />
+        <result column="region" property="region" />
+        <result column="region_code" property="regionCode" />
+        <result column="addr" property="addr" />
+        <result column="region_names" property="regionNames" />
+        <result column="err" property="err" />
+        <result column="name" property="name" />
+        <result column="mod_admin_id" property="modAdminId" />
+        <result column="mod_phone" property="modPhone" />
+        <result column="mod_username" property="modUsername" />
+        <result column="mod_name" property="modName" />
+        <result column="message" property="message" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_time, modify_time, admin_id, phone, client_id, location, longitude, latitude, country, country_code, username, ip, pro, pro_code, city, city_code, region, region_code, addr, region_names, err, name, mod_admin_id, mod_phone, mod_username, mod_name, message
+    </sql>
+
+    <select id="selectNotNullIp" resultMap="BaseResultMap">
+        select id, create_time, modify_time, admin_id, phone, client_id, location, longitude, latitude, country, country_code, username, ip, pro, pro_code, city, city_code, region, region_code, addr, region_names, err, name, mod_admin_id, mod_phone, mod_username, mod_name, message
+        from t_location_check
+        where ip is not null
+    </select>
+</mapper>

+ 20 - 0
src/main/java/com/szwl/mapper/xml/TNameDictionaryMapper.xml

@@ -0,0 +1,20 @@
+<?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.TNameDictionaryMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.TNameDictionary">
+        <id column="id" property="id" />
+        <result column="create_date" property="createDate" />
+        <result column="modify_date" property="modifyDate" />
+        <result column="name" property="name" />
+        <result column="no" property="no" />
+        <result column="language" property="language" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_date, modify_date, name, no, language
+    </sql>
+
+</mapper>

+ 5 - 1
src/main/java/com/szwl/mapper/xml/TProportionMapper.xml

@@ -19,12 +19,16 @@
         <result column="agency_id" property="agencyId" />
         <result column="merchant_id" property="merchantId" />
         <result column="personage_id" property="personageId" />
+        <result column="agency_name" property="agencyName" />
+        <result column="merchant_name" property="merchantName" />
+        <result column="personage_name" property="personageName" />
         <result column="type" property="type" />
+        <result column="equipment_name" property="equipmentName" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, create_date, modify_date, admin_id, client_id, equipment_id, admin_proportion, agency_proportion, merchant_proportion, personage_proportion, proportion, proportion_desc, agency_id, merchant_id, personage_id, type
+        id, create_date, modify_date, admin_id, client_id, equipment_id, admin_proportion, agency_proportion, merchant_proportion, personage_proportion, proportion, proportion_desc, agency_id, merchant_id, personage_id, agency_name, merchant_name, personage_name, type, equipment_name
     </sql>
 
 </mapper>

+ 34 - 21
src/main/java/com/szwl/model/dto/PromoCodeTarget.java

@@ -14,10 +14,16 @@ public class PromoCodeTarget {
     private Long code;
 
     /**
-     * 商家id
+     * 优惠码类型
      */
-    @Excel(name = "商家id", width = 20.0D)
-    private String adminId;
+    @Excel(name = "优惠码类型", width = 20.0D)
+    private String type;
+
+    /**
+     * 优惠码类型
+     */
+    @Excel(name = "优惠码折扣/抵扣", width = 20.0D)
+    private Float discount;
 
 
     /**
@@ -30,8 +36,7 @@ public class PromoCodeTarget {
      * 添加时间
      */
     @Excel(name = "添加时间", width = 20.0D)
-    private Date createDate;
-
+    private String createDate;
 
 
     /**
@@ -60,14 +65,6 @@ public class PromoCodeTarget {
         this.code = code;
     }
 
-    public String getAdminId() {
-        return adminId;
-    }
-
-    public void setAdminId(String adminId) {
-        this.adminId = adminId;
-    }
-
     public String getUserName() {
         return userName;
     }
@@ -76,14 +73,6 @@ public class PromoCodeTarget {
         this.userName = userName;
     }
 
-    public Date getCreateDate() {
-        return createDate;
-    }
-
-    public void setCreateDate(Date createDate) {
-        this.createDate = createDate;
-    }
-
     public String getIsUse() {
         return isUse;
     }
@@ -107,4 +96,28 @@ public class PromoCodeTarget {
     public void setUseBy(String useBy) {
         this.useBy = useBy;
     }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public Float getDiscount() {
+        return discount;
+    }
+
+    public void setDiscount(Float discount) {
+        this.discount = discount;
+    }
+
+    public String getCreateDate() {
+        return createDate;
+    }
+
+    public void setCreateDate(String createDate) {
+        this.createDate = createDate;
+    }
 }

+ 17 - 25
src/main/java/com/szwl/model/entity/TAd.java

@@ -30,52 +30,44 @@ public class TAd implements Serializable {
     private Date createDate;
 
     private Date modifyDate;
-    //广告类型 0:图片,1:视频
+
+    @ApiModelProperty(value = "广告类型 0:图片,1:视频")
     private Integer adType;
 
     private String adminId;
-    //位置类型 0:棉花糖宣传广告,1:外接广告
+
+    @ApiModelProperty(value = "位置类型 0:棉花糖宣传广告,1:外接广告")
     private Integer locationType;
 
     private String name;
 
     private String username;
-    /**
-     * 广告地址
-     */
+
+    @ApiModelProperty(value = "广告地址")
     private String url;
 
     private Integer orders;
-    /**
-     * 广告时长
-     */
+
+    @ApiModelProperty(value = "广告时长")
     private Long duration;
-    /**
-     * 视屏缩略图
-     */
+
+    @ApiModelProperty(value = "视屏缩略图")
     private String mediaPreview;
-    /**
-     * 播放次数
-     */
+
+    @ApiModelProperty(value = "播放次数")
     private Long plays;
-    /**
-     * 状态
-     */
+
+    @ApiModelProperty(value = "状态")
     private String status;
 
     private String timeRule;
-    /**
-     * 0代表A屏
-     * 1代表B屏
-     */
+
+    @ApiModelProperty(value = "0代表A屏,1代表B屏")
     private Integer screenType;
 
     @ApiModelProperty(value = "适用机器类型")
     private String equipmentType;
 
-    /**
-     * 0默认下载
-     * 1不默认下载
-     */
+    @ApiModelProperty(value = "0默认下载,1不默认下载")
     private String type;
 }

+ 1 - 1
src/main/java/com/szwl/model/entity/TEquipment.java

@@ -183,7 +183,7 @@ public class TEquipment implements Serializable {
     @ApiModelProperty(value = "花型数量")
     private String flowers;
 
-    @ApiModelProperty(value = "设备类型,0:棉花糖,1,爆米花")
+    @ApiModelProperty(value = "设备类型,0:棉花糖,1,爆米花,2:冰淇淋")
     private String machineType;
 
     @ApiModelProperty(value = "apk版本")

+ 7 - 1
src/main/java/com/szwl/model/entity/TEquipmentDesc.java

@@ -14,7 +14,7 @@ import lombok.EqualsAndHashCode;
  * </p>
  *
  * @author wuhs
- * @since 2023-11-06
+ * @since 2024-01-18
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -98,5 +98,11 @@ public class TEquipmentDesc implements Serializable {
     @ApiModelProperty(value = "DIY花型功能开关,0:关闭,1:开启")
     private String diyFlowerStatus;
 
+    @ApiModelProperty(value = "设备当前设置语言")
+    private String language;
+
+    @ApiModelProperty(value = "热更新补丁id")
+    private Long patchId;
+
 
 }

+ 49 - 0
src/main/java/com/szwl/model/entity/TGoodsData.java

@@ -0,0 +1,49 @@
+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 2024-01-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TGoodsData对象", description="商品数据表")
+public class TGoodsData implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createDate;
+
+    @ApiModelProperty(value = "修改时间")
+    private Date modifyDate;
+
+    @ApiModelProperty(value = "商品数")
+    private Integer number;
+
+    @ApiModelProperty(value = "设备类型,0:棉花糖,1:爆米花,2:冰淇淋")
+    private String machineType;
+
+    @ApiModelProperty(value = "商品内容")
+    private String goods;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+
+}

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

@@ -0,0 +1,62 @@
+package com.szwl.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-01-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="THotUpdate对象", description="")
+public class THotUpdate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    private Date createTime;
+
+    private Date modifyTime;
+
+    @ApiModelProperty(value = "补丁版本号")
+    private String patchVersion;
+
+    @ApiModelProperty(value = "补丁状态,0停止,1发布")
+    private String patchStatus;
+
+    @ApiModelProperty(value = "设备编号")
+    private String clientId;
+
+    @ApiModelProperty(value = "更新内容")
+    private String note;
+
+    @ApiModelProperty(value = "目标区域,0部分设备,1国内,2海外,3全球")
+    private String targetAreas;
+
+    @ApiModelProperty(value = "补丁外链")
+    private String patchLink;
+
+    @ApiModelProperty(value = "原始版本号")
+    private String originalVersion;
+
+    @ApiModelProperty(value = "已更新的设备数量")
+    private Integer haveUpdateNum;
+
+    @ApiModelProperty(value = "应该被更新的设备数量")
+    private Integer shouldUpdateNum;
+
+
+}

+ 6 - 0
src/main/java/com/szwl/model/entity/THuifuMchCheck.java

@@ -91,6 +91,9 @@ public class THuifuMchCheck implements Serializable {
     @ApiModelProperty(value = "结算账户类型,“0”为对公账户,“1”为个人账户")
     private String cardType;
 
+    @ApiModelProperty(value = "结算周期,0为工作日,1为自然日")
+    private String settleCycle;
+
     @ApiModelProperty(value = "结算账号")
     private String cardNo;
 
@@ -145,6 +148,9 @@ public class THuifuMchCheck implements Serializable {
     @ApiModelProperty(value = "核准号")
     private String openLicenceNo;
 
+    @ApiModelProperty(value = "银行号")
+    private String bankCode;
+
     @ApiModelProperty(value = "营业执照有效期类型,0:非长期有效 ,1:长期有效 ")
     private String licenseValidityType;
 

+ 110 - 0
src/main/java/com/szwl/model/entity/TLocationCheck.java

@@ -0,0 +1,110 @@
+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 2023-12-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TLocationCheck对象", description="")
+public class TLocationCheck implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private String id;
+
+    private Date createTime;
+
+    private Date modifyTime;
+
+    @ApiModelProperty(value = "生产部员工的adminId")
+    private Long adminId;
+
+    @ApiModelProperty(value = "生产部员工电话")
+    private String phone;
+
+    @ApiModelProperty(value = "设备唯一码")
+    private String clientId;
+
+    @ApiModelProperty(value = "位置信息")
+    private String location;
+
+    @ApiModelProperty(value = "经度")
+    private String longitude;
+
+    @ApiModelProperty(value = "纬度")
+    private String latitude;
+
+    @ApiModelProperty(value = "国家名称")
+    private String country;
+
+    @ApiModelProperty(value = "国家编码")
+    private String countryCode;
+
+    @ApiModelProperty(value = "生产部员工的username")
+    private String username;
+
+    @ApiModelProperty(value = "ip地址")
+    private String ip;
+
+    @ApiModelProperty(value = "省级名称")
+    private String pro;
+
+    @ApiModelProperty(value = "省级编号")
+    private String proCode;
+
+    @ApiModelProperty(value = "城市名称")
+    private String city;
+
+    @ApiModelProperty(value = "城市编号")
+    private String cityCode;
+
+    @ApiModelProperty(value = "地区")
+    private String region;
+
+    @ApiModelProperty(value = "地区编号")
+    private String regionCode;
+
+    @ApiModelProperty(value = "地址")
+    private String addr;
+
+    @ApiModelProperty(value = "地区名称")
+    private String regionNames;
+
+    @ApiModelProperty(value = "其他信息")
+    private String err;
+
+    @ApiModelProperty(value = "生产部员工姓名")
+    private String name;
+
+    @ApiModelProperty(value = "售后部员工的adminId")
+    private Long modAdminId;
+
+    @ApiModelProperty(value = "售后部员工电话")
+    private String modPhone;
+
+    @ApiModelProperty(value = "售后部员工的username")
+    private String modUsername;
+
+    @ApiModelProperty(value = "售后部员工姓名")
+    private String modName;
+
+    @ApiModelProperty(value = "修改原因")
+    private String message;
+
+
+}

+ 46 - 0
src/main/java/com/szwl/model/entity/TNameDictionary.java

@@ -0,0 +1,46 @@
+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 2024-01-02
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TNameDictionary对象", description="")
+public class TNameDictionary implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createDate;
+
+    @ApiModelProperty(value = "修改时间")
+    private Date modifyDate;
+
+    @ApiModelProperty(value = "花型名称")
+    private String name;
+
+    @ApiModelProperty(value = "商品编号")
+    private String no;
+
+    @ApiModelProperty(value = "语种")
+    private String language;
+
+
+}

+ 2 - 2
src/main/java/com/szwl/model/entity/TProportion.java

@@ -67,8 +67,6 @@ public class TProportion implements Serializable {
 
     private String agencyName;
 
-    private String equipmentName;
-
     private String merchantName;
 
     private String personageName;
@@ -76,5 +74,7 @@ public class TProportion implements Serializable {
     @ApiModelProperty(value = "0:分账方2个,1:分账方3个,2:分账方4个,3:分账方超4个;")
     private Integer type;
 
+    private String equipmentName;
+
 
 }

+ 2 - 2
src/main/java/com/szwl/model/utils/MailUtil.java

@@ -24,9 +24,9 @@ public class MailUtil {
     private String password;
 
     public MailUtil() {
-//        this("AfterSalesInfo@sunzee.net", "Sz123456");
+        this("AfterSalesInfo@sunzee.net", "Sunzee_135.-Sz246");
 //        this("magic_candy_sunzee@sunzee.net", "Sz123456");
-        this("magiccandy020@magiccandy.cn", "Sunzee020");
+//        this("magiccandy020@magiccandy.cn", "Sunzee020");
     }
 
     public MailUtil(String user, String password) {

+ 18 - 0
src/main/java/com/szwl/model/vo/EquipmentVO.java

@@ -0,0 +1,18 @@
+package com.szwl.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class EquipmentVO {
+
+    @ApiModelProperty(value = "设备唯一ID")
+    private Long id;
+
+    @ApiModelProperty(value = "设备编号")
+    private String clientId;
+
+    @ApiModelProperty(value = "机器名称")
+    private String name;
+
+}

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

@@ -1,6 +1,7 @@
 package com.szwl.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.szwl.model.bo.ResponseModel;
 import com.szwl.model.bo.UserDetailBO;
 import com.szwl.model.entity.TAdmin;
 import com.szwl.model.query.TAdminParam;
@@ -22,4 +23,6 @@ public interface TAdminService extends MyIService<TAdmin> {
     IPage<TAdmin> pageByXml(IPage page, TAdminParam param);
 
     UserDetailBO getUserDetailBO(TAdmin tAdmin);
+
+    String addSysRole(Long adminId);
 }

+ 5 - 1
src/main/java/com/szwl/service/TEquipmentDescService.java

@@ -3,14 +3,18 @@ package com.szwl.service;
 import com.szwl.model.entity.TEquipmentDesc;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  *  服务类
  * </p>
  *
  * @author wuhs
- * @since 2023-08-17
+ * @since 2024-01-18
  */
 public interface TEquipmentDescService extends IService<TEquipmentDesc> {
 
+    void saveOrUpdateEquipmentDescBatch(List<Long> equipmentIdList, Long hotUpdateId);
+
 }

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

@@ -4,6 +4,8 @@ import com.szwl.model.entity.TEquipment;
 import com.szwl.model.query.StatisticsParam;
 import com.szwl.service.base.MyIService;
 
+import java.util.Optional;
+
 /**
  * <p>
  *  服务类
@@ -22,4 +24,7 @@ public interface TEquipmentService extends MyIService<TEquipment> {
 
     public String findMachineUseNum(StatisticsParam param);
 
+    Optional<String> syncOneEquipmentByClientId(String clientId);
+
+    int getForeignEquipmentCount(String area); // 0 国内,1 海外,2 全球
 }

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

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TGoodsData;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 商品数据表 服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-01-19
+ */
+public interface TGoodsDataService extends IService<TGoodsData> {
+
+}

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

@@ -0,0 +1,20 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.THotUpdate;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-01-24
+ */
+public interface THotUpdateService extends IService<THotUpdate> {
+
+    // 根据 地区 查询最近十条记录
+   List<THotUpdate> getLastTen(String area);
+}

+ 23 - 0
src/main/java/com/szwl/service/THuifuMchService.java

@@ -21,6 +21,22 @@ import java.math.BigDecimal;
 public interface THuifuMchService extends IService<THuifuMch> {
 
     /**
+     * 汇付用户开户
+     * @param tHuifuMchCheck
+     * @return
+     * @throws Exception
+     */
+    String openAccount(THuifuMchCheck tHuifuMchCheck) throws Exception;
+
+    /**
+     * 用户业务开通
+     * @param tHuifuMchCheck
+     * @return
+     * @throws Exception
+     */
+    String openBusiness(THuifuMchCheck tHuifuMchCheck) throws Exception;
+
+    /**
      * 汇付个人商户入驻
      * @param tHuifuMchCheck
      * @return
@@ -82,4 +98,11 @@ public interface THuifuMchService extends IService<THuifuMch> {
      * @return
      */
     String updateConStat(THuifuMchCheck tHuifuMchCheck) throws BasePayException;
+
+    /**
+     * 查询账户余额
+     * @param tHuifuMch
+     * @return
+     */
+    String checkBalance(THuifuMch tHuifuMch) throws Exception;
 }

+ 26 - 0
src/main/java/com/szwl/service/TLocationCheckService.java

@@ -0,0 +1,26 @@
+package com.szwl.service;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.szwl.model.entity.TLocationCheck;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.io.IOException;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2023-12-25
+ */
+public interface TLocationCheckService extends IService<TLocationCheck> {
+
+    String locCheckNoMsg(TLocationCheck locationCheck, String clientId, String addr);
+
+    String locCheckMsg(TLocationCheck locationCheck, String clientId, String addr) throws IOException;
+
+    String schLocCheck(TLocationCheck locationCheck, String clientId, String addr);
+
+    void schSendMsg(String locErrorEq) throws IOException;
+}

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

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TNameDictionary;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-01-02
+ */
+public interface TNameDictionaryService extends IService<TNameDictionary> {
+
+}

+ 4 - 4
src/main/java/com/szwl/service/TProportionService.java

@@ -1,16 +1,16 @@
 package com.szwl.service;
 
 import com.szwl.model.entity.TProportion;
-import com.szwl.service.base.MyIService;
+import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
  * <p>
- * 分账表 服务类
+ *  服务类
  * </p>
  *
  * @author wuhs
- * @since 2022-05-10
+ * @since 2024-01-08
  */
-public interface TProportionService extends MyIService<TProportion> {
+public interface TProportionService extends IService<TProportion> {
 
 }

+ 6 - 8
src/main/java/com/szwl/service/impl/SysRoleServiceImpl.java

@@ -59,19 +59,20 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
         return menuList_final;
     }
 
-    public void checkRoleName(String roleName){
+    public void checkRoleName(String roleName, Long adminId){
         LambdaQueryWrapper<SysRole> query = Wrappers.lambdaQuery();
         query.eq(SysRole::getRoleName, roleName);
+        query.eq(SysRole::getAdminId, adminId);
         int count = this.count(query);
         if(count>0){
-            throw new BizException(ResponseCodesEnum.B0002,"角色名称已存在");
+            throw new BizException(ResponseCodesEnum.A0500);
         }
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void addSysRole(AddSysRoleParam param){
-        this.checkRoleName(param.getRoleName());
+        this.checkRoleName(param.getRoleName(), param.getAdminId());
         SysRole sysRole = new SysRole()
                 .setRoleName(param.getRoleName())
                 .setAdminId(param.getAdminId())
@@ -80,13 +81,10 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
         save(sysRole);
     }
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void updateSysRole(UpdateSysRoleParam param){
         SysRole sysRole = Optional.ofNullable(this.getById(param.getRoleId()))
                 .orElseThrow(() ->new BizException(ResponseCodesEnum.B0005,"无法根据id:"+param.getRoleId()+" 找到角色配置"));
-//        if(StrUtil.equals(param.getRoleName(),sysRole.getRoleName())){
-//            this.checkRoleName(param.getRoleName());
-//        }
         BeanUtil.copyProperties(param,sysRole);
         sysRole.setMenuCodesJson(JSON.toJSONString(param.getMenuCodeList()));
         updateById(sysRole);

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

@@ -8,7 +8,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.szwl.manager.TokenManager;
 import com.szwl.model.bo.R;
+import com.szwl.model.bo.ResponseModel;
 import com.szwl.model.bo.UserDetailBO;
+import com.szwl.model.entity.SysRole;
+import com.szwl.model.entity.SysUserRole;
 import com.szwl.model.entity.TAdmin;
 import com.szwl.mapper.TAdminMapper;
 import com.szwl.model.entity.TArea;
@@ -75,4 +78,32 @@ public class TAdminServiceImpl extends ServiceImpl<TAdminMapper, TAdmin> impleme
         return userDetailBO;
     }
 
+    @Override
+    public String addSysRole(Long adminId) {
+        if (adminId == null) {
+            return "参数为空";
+        }
+        // 查询该 adminId 有没有权限
+        LambdaQueryWrapper<SysRole> lqw = Wrappers.lambdaQuery();
+        lqw.eq(SysRole::getAdminId, adminId);
+        List<SysRole> sysRoleList = sysRoleService.list(lqw);
+        if (sysRoleList.size() == 0) {
+            LambdaQueryWrapper<SysRole> wrapper = Wrappers.lambdaQuery();
+            wrapper.eq(SysRole::getAdminId, "1");
+            wrapper.eq(SysRole::getRoleName, "商家");
+            SysRole template = sysRoleService.getOne(wrapper);
+            SysRole role = new SysRole();
+            role.setAdminId(adminId);
+            role.setMenuCodesJson(template.getMenuCodesJson());
+            role.setRoleName("商家");
+            sysRoleService.save(role);
+
+            SysUserRole sysUserRole = new SysUserRole();
+            sysUserRole.setRoleId(role.getRoleId());
+            sysUserRole.setUserId(String.valueOf(adminId));
+            sysUserRoleService.save(sysUserRole);
+        }
+        return "success";
+    }
+
 }

+ 40 - 1
src/main/java/com/szwl/service/impl/TEquipmentDescServiceImpl.java

@@ -4,17 +4,56 @@ import com.szwl.model.entity.TEquipmentDesc;
 import com.szwl.mapper.TEquipmentDescMapper;
 import com.szwl.service.TEquipmentDescService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
 /**
  * <p>
  *  服务实现类
  * </p>
  *
  * @author wuhs
- * @since 2022-04-23
+ * @since 2024-01-18
  */
 @Service
 public class TEquipmentDescServiceImpl extends ServiceImpl<TEquipmentDescMapper, TEquipmentDesc> implements TEquipmentDescService {
 
+    @Autowired
+    private TEquipmentDescService equipmentDescService;
+
+    @Override
+    public void saveOrUpdateEquipmentDescBatch(List<Long> equipmentIdList, Long hotUpdateId) {
+
+        ArrayList<TEquipmentDesc> descList = new ArrayList<>(equipmentIdList.size());
+
+        for (Long equipmentId : equipmentIdList) {
+            TEquipmentDesc equipmentDesc = equipmentDescService.getById(equipmentId);
+            if (Objects.isNull(equipmentDesc)) {
+                equipmentDesc = new TEquipmentDesc();
+            }
+            equipmentDesc.setPatchId(hotUpdateId);
+            descList.add(equipmentDesc);
+        }
+        equipmentDescService.saveOrUpdateBatch(descList);
+
+
+        //
+//        List<TEquipmentDesc> tEquipmentDescs = equipmentDescService.listByIds(equipmentIdList);
+//        List<TEquipmentDesc> updateList = new ArrayList<>(tEquipmentDescs.size());
+//        for (TEquipmentDesc desc : tEquipmentDescs) {
+//            if (Objects.isNull(desc)) {
+//                TEquipmentDesc equipmentDesc = new TEquipmentDesc();
+//                equipmentDesc.setEquipmentId(equipmentIdList);
+//            }
+//            desc.setPatchId(hotUpdateId);
+//            updateList.add(desc);
+//        }
+//        equipmentDescService.saveOrUpdateBatch(updateList);
+
+
+    }
 }

+ 173 - 1
src/main/java/com/szwl/service/impl/TEquipmentServiceImpl.java

@@ -2,10 +2,14 @@ package com.szwl.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.feign.bean.SyncOldFeign;
+import com.szwl.model.bo.R;
+import com.szwl.model.entity.TAdmin;
 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.TAdminService;
 import com.szwl.service.TEquipmentService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang.StringUtils;
@@ -14,7 +18,11 @@ import org.springframework.amqp.core.MessageProperties;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -28,8 +36,15 @@ import java.util.List;
 public class TEquipmentServiceImpl extends ServiceImpl<TEquipmentMapper, TEquipment> implements TEquipmentService {
     @Autowired
     private AmqpTemplate amqpTemplate;
-    @Autowired
+    @Resource
     TEquipmentMapper tEquipmentMapper;
+    @Autowired
+    TAdminService adminService;
+    @Resource
+    SyncOldFeign syncOldFeign;
+    @Resource
+    TEquipmentService equipmentService;
+
     @Override
     public String sentMessage(String clientId, String json) {
         LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
@@ -69,6 +84,163 @@ public class TEquipmentServiceImpl extends ServiceImpl<TEquipmentMapper, TEquipm
         return tEquipmentMapper.findMachineUseNum(param);
     }
 
+    @Override
+    public Optional<String> syncOneEquipmentByClientId(String clientId) {
+        if (StringUtils.isNotEmpty(clientId)) {
+            TEquipment oldEquipment = R.getDataIfSuccess(syncOldFeign.getEquipmentByClientId(clientId));
+
+            Long id = oldEquipment.getId();
+            Date createDate = oldEquipment.getCreateDate();
+            Date modifyDate = oldEquipment.getModifyDate();
+            Long adminId = oldEquipment.getAdminId();
+            String adminLevel = oldEquipment.getAdminLevel();
+            String adminPwd = oldEquipment.getAdminPwd();
+            Long areaId = oldEquipment.getAreaId();
+            String cabinetHd = oldEquipment.getCabinetHd();
+            String cabinetTm = oldEquipment.getCabinetTm();
+//            String clientId = oldEquipment.getClientId();
+            String contactName = oldEquipment.getContactName();
+            String contactPhone = oldEquipment.getContactPhone();
+            String operationalPhone = oldEquipment.getOperationalPhone();
+            String operationalName = oldEquipment.getOperationalName();
+            String furnaceSp = oldEquipment.getFurnaceSp();
+            String furnaceTm = oldEquipment.getFurnaceTm();
+            String guestPwd = oldEquipment.getGuestPwd();
+            Boolean isNetWork = oldEquipment.getIsNetWork();
+            Boolean isUsing = oldEquipment.getIsUsing();
+            Date lastUpdateTime = oldEquipment.getLastUpdateTime();
+            Double latitude = oldEquipment.getLatitude();
+            Double longitude = oldEquipment.getLongitude();
+            String managerId = oldEquipment.getManagerId();
+            String selfName = oldEquipment.getSelfName();
+            String channel = oldEquipment.getChannel();
+            String name = oldEquipment.getName();
+            String netWorkingMode = oldEquipment.getNetWorkingMode();
+            String operator = oldEquipment.getOperator();
+            Integer payType = oldEquipment.getPayType();
+            Integer productTotal = oldEquipment.getProductTotal();
+            String simNo = oldEquipment.getSimNo();
+            String sn = oldEquipment.getSn();
+            String adminUserName = oldEquipment.getAdminUserName();
+            Long agencyId = oldEquipment.getAgencyId();
+            Long merchantId = oldEquipment.getMerchantId();
+            String companyPhone = oldEquipment.getCompanyPhone();
+            Long personageId = oldEquipment.getPersonageId();
+            Integer type = oldEquipment.getType();
+            String fullName = oldEquipment.getFullName();
+            Date pushUpdateTime = oldEquipment.getPushUpdateTime();
+            Long timeRuleId = oldEquipment.getTimeRuleId();
+            String gtClientId = oldEquipment.getGtClientId();
+            Integer eqeStatus = oldEquipment.getEqeStatus();
+            Boolean isBlocked = oldEquipment.getIsBlocked();
+            String messageReceiver = oldEquipment.getMessageReceiver();
+            Boolean isSleep = oldEquipment.getIsSleep();
+            String advancedParameters = oldEquipment.getAdvancedParameters();
+            String volume = oldEquipment.getVolume();
+            String commonParameters = oldEquipment.getCommonParameters();
+            String network = oldEquipment.getNetwork();
+            String offTime = oldEquipment.getOffTime();
+            String bootTime = oldEquipment.getBootTime();
+            String plcVersion = oldEquipment.getPlcVersion();
+            String equipmentType = oldEquipment.getEquimentType();
+            Date endDate = oldEquipment.getEndDate();
+            String flowers = oldEquipment.getFlowers();
+            String machineType = oldEquipment.getMachineType();
+//                String apkVersion = oldEquipment.getApkVersion(); // 旧系统没有
+//                String couponStatus = oldEquipment.getCouponStatus(); // 旧系统没有
+            String paymentType = oldEquipment.getPaymentType();
+            String companyType = oldEquipment.getCompanyType();
+
+            TEquipment equipment = new TEquipment();
+            equipment.setId(id);
+            equipment.setCreateDate(createDate);
+            equipment.setModifyDate(modifyDate);
+            equipment.setAdminId(adminId);
+            equipment.setAdminLevel(adminLevel);
+            equipment.setAdminPwd(adminPwd);
+            equipment.setAreaId(areaId);
+            equipment.setCabinetHd(cabinetHd);
+            equipment.setCabinetTm(cabinetTm);
+            equipment.setClientId(clientId);
+            equipment.setContactName(contactName);
+            equipment.setContactPhone(contactPhone);
+            equipment.setOperationalPhone(operationalPhone);
+            equipment.setOperationalName(operationalName);
+            equipment.setFurnaceSp(furnaceSp);
+            equipment.setFurnaceTm(furnaceTm);
+            equipment.setGuestPwd(guestPwd);
+            equipment.setIsNetWork(isNetWork);
+            equipment.setIsUsing(isUsing);
+            equipment.setLastUpdateTime(lastUpdateTime);
+            equipment.setLatitude(latitude);
+            equipment.setLongitude(longitude);
+            equipment.setManagerId(managerId);
+            equipment.setSelfName(selfName);
+            equipment.setChannel(channel);
+            equipment.setName(name);
+            equipment.setNetWorkingMode(netWorkingMode);
+            equipment.setOperator(operator);
+            equipment.setPayType(payType);
+            equipment.setProductTotal(productTotal);
+            equipment.setSimNo(simNo);
+            equipment.setSn(sn);
+            equipment.setAdminUserName(adminUserName);
+            equipment.setAgencyId(agencyId);
+            equipment.setMerchantId(merchantId);
+            equipment.setCompanyPhone(companyPhone);
+            equipment.setPersonageId(personageId);
+            equipment.setType(type);
+            equipment.setFullName(fullName);
+            equipment.setPushUpdateTime(pushUpdateTime);
+            equipment.setTimeRuleId(timeRuleId);
+            equipment.setGtClientId(gtClientId);
+            equipment.setEqeStatus(eqeStatus);
+            equipment.setIsBlocked(isBlocked);
+            equipment.setMessageReceiver(messageReceiver);
+            equipment.setIsSleep(isSleep);
+            equipment.setAdvancedParameters(advancedParameters);
+            equipment.setVolume(volume);
+            equipment.setCommonParameters(commonParameters);
+            equipment.setNetwork(network);
+            equipment.setOffTime(offTime);
+            equipment.setBootTime(bootTime);
+            equipment.setPlcVersion(plcVersion);
+            equipment.setEquimentType(equipmentType);
+            equipment.setEndDate(endDate);
+            equipment.setFlowers(flowers);
+            equipment.setMachineType(machineType);
+//                equipment.setApkVersion();
+//                equipment.setCouponStatus();
+            equipment.setCompanyType(companyType);
+            equipment.setPaymentType(paymentType);
+
+            equipmentService.save(equipment);
+
+            return Optional.of("success");
+        } else {
+            return Optional.empty();
+        }
+    }
+
+    @Override
+    public int getForeignEquipmentCount(String area) {
+        switch (area) {
+            case "0":
+                // 统计国内
+                List<Long> domesticAdminIdList = adminService.lambdaQuery().eq(TAdmin::getIfForeign, "0").list().stream().map(TAdmin::getId).collect(Collectors.toList());
+                return equipmentService.lambdaQuery().in(TEquipment::getAdminId, domesticAdminIdList).count();
+            case "1":
+                // 统计海外
+                List<Long> overseasAdminIdList = adminService.lambdaQuery().eq(TAdmin::getIfForeign, "1").list().stream().map(TAdmin::getId).collect(Collectors.toList());
+                return equipmentService.lambdaQuery().in(TEquipment::getAdminId, overseasAdminIdList).count();
+            case "2":
+                // 统计全球
+                return equipmentService.list().size();
+            default:
+                return 0;
+        }
+    }
+
 //    @Override
 //    public Integer insertBatchSomeColumn(List<TEquipment> entityList) {
 //        return tEquipmentMapper.insertBatchSomeColumn(entityList);

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

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TGoodsData;
+import com.szwl.mapper.TGoodsDataMapper;
+import com.szwl.service.TGoodsDataService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 商品数据表 服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-01-19
+ */
+@Service
+public class TGoodsDataServiceImpl extends ServiceImpl<TGoodsDataMapper, TGoodsData> implements TGoodsDataService {
+
+}

+ 67 - 0
src/main/java/com/szwl/service/impl/THotUpdateServiceImpl.java

@@ -0,0 +1,67 @@
+package com.szwl.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.model.entity.TEquipmentDesc;
+import com.szwl.model.entity.THotUpdate;
+import com.szwl.mapper.THotUpdateMapper;
+import com.szwl.service.TEquipmentDescService;
+import com.szwl.service.THotUpdateService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-01-24
+ */
+@Service
+public class THotUpdateServiceImpl extends ServiceImpl<THotUpdateMapper, THotUpdate> implements THotUpdateService {
+
+    @Autowired
+    THotUpdateService hotUpdateService;
+    @Resource
+    THotUpdateMapper hotUpdateMapper;
+
+    @Override
+    public List<THotUpdate> getLastTen(String area) {
+        List<THotUpdate> tHotUpdates = new ArrayList<>();
+
+        switch (area) {
+            case "0": // 部分设备
+                LambdaQueryWrapper<THotUpdate> wrapper = Wrappers.lambdaQuery();
+                wrapper.eq(THotUpdate::getTargetAreas, "0");
+                wrapper.orderByDesc(THotUpdate::getModifyTime).last("LIMIT 10");
+                tHotUpdates = hotUpdateMapper.selectList(wrapper);
+                return tHotUpdates;
+            case "1": // 国内
+                LambdaQueryWrapper<THotUpdate> wrapper1 = Wrappers.lambdaQuery();
+                wrapper1.eq(THotUpdate::getTargetAreas, "1");
+                wrapper1.orderByDesc(THotUpdate::getModifyTime).last("LIMIT 10");
+                tHotUpdates = hotUpdateMapper.selectList(wrapper1);
+                return tHotUpdates;
+            case "2": // 海外
+                LambdaQueryWrapper<THotUpdate> wrapper2 = Wrappers.lambdaQuery();
+                wrapper2.eq(THotUpdate::getTargetAreas, "2");
+                wrapper2.orderByDesc(THotUpdate::getModifyTime).last("LIMIT 10");
+                tHotUpdates = hotUpdateMapper.selectList(wrapper2);
+                return tHotUpdates;
+            case "4": // 所有的
+                LambdaQueryWrapper<THotUpdate> wrapper4 = Wrappers.lambdaQuery();
+                wrapper4.orderByDesc(THotUpdate::getModifyTime).last("LIMIT 10");
+                tHotUpdates = hotUpdateMapper.selectList(wrapper4);
+        }
+        return tHotUpdates;
+    }
+}

+ 288 - 0
src/main/java/com/szwl/service/impl/THuifuMchServiceImpl.java

@@ -16,9 +16,11 @@ import com.szwl.common.myAnnotation.HuifuBaseCommon;
 import com.szwl.config.OppsMerchantConfig;
 import com.szwl.constant.HuifuConstant;
 import com.szwl.model.bo.R;
+import com.szwl.model.entity.TAdmin;
 import com.szwl.model.entity.THuifuMch;
 import com.szwl.mapper.THuifuMchMapper;
 import com.szwl.model.entity.THuifuMchCheck;
+import com.szwl.service.TAdminService;
 import com.szwl.service.THuifuMchCheckService;
 import com.szwl.service.THuifuMchService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -66,6 +68,249 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
     @Autowired
     private THuifuMchService tHuifuMchService;
 
+    @Autowired
+    private TAdminService tAdminService;
+
+    /**
+     * 汇付用户开户
+     * @param tHuifuMchCheck
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public String openAccount(THuifuMchCheck tHuifuMchCheck) throws Exception {
+        // 请求接口
+        String url = "https://api.huifu.com/v2/user/basicdata/indv";
+        HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
+        // 请求参数:Data
+        JSONObject request = new JSONObject();
+        // 请求流水号
+        request.put("req_seq_id", HuifuUtils.initReqSeqId());
+        // 请求日期
+        request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
+        // 判断商户类型,“0”为个人,“1”为企业
+        if(tHuifuMchCheck.getType().equals("0")) {
+            // 个人姓名
+            request.put("name", tHuifuMchCheck.getRegName());
+            // 个人证件类型
+            request.put("cert_type", "00");
+            // 个人证件号码
+            request.put("cert_no", tHuifuMchCheck.getCertNo());
+            // 个人证件有效期类型,1:长期有效;0:非长期有效
+            request.put("cert_validity_type", tHuifuMchCheck.getCertValidityType());
+            // 个人证件有效期开始日期
+            request.put("cert_begin_date", tHuifuMchCheck.getCertBeginDate());
+            // 个人证件有效期截止日期
+            if (StrUtil.isNotEmpty(tHuifuMchCheck.getCertEndDate())) {
+                request.put("cert_end_date", tHuifuMchCheck.getCertEndDate());
+            }
+            // 手机号
+            request.put("mobile_no", tHuifuMchCheck.getPhone());
+        } else {
+            url = "https://api.huifu.com/v2/user/basicdata/ent";
+            // 企业用户名称
+            request.put("reg_name", tHuifuMchCheck.getRegName());
+            // 营业执照编号
+            request.put("license_code", tHuifuMchCheck.getLicenseCode());
+            // 营业执照有效期类型,0:非长期有效 ,1:长期有效
+            request.put("license_validity_type", tHuifuMchCheck.getLicenseValidityType());
+            // 营业执照有效期开始日期
+            request.put("license_begin_date", tHuifuMchCheck.getLicenseBeginDate());
+            // 营业执照有效期截止日期
+            if (StrUtil.isNotEmpty(tHuifuMchCheck.getLicenseEndDate())) {
+                request.put("license_end_date", tHuifuMchCheck.getLicenseEndDate());
+            }
+            // 注册省
+            request.put("reg_prov_id", tHuifuMchCheck.getRegProvId());
+            // 注册市
+            request.put("reg_area_id", tHuifuMchCheck.getRegAreaId());
+            // 注册区
+            request.put("reg_district_id", tHuifuMchCheck.getRegDistrictId());
+            // 注册详细地址
+            request.put("reg_detail", tHuifuMchCheck.getRegDetail());
+            // 法人姓名
+            request.put("legal_name", tHuifuMchCheck.getName());
+            // 法人证件类型
+            request.put("legal_cert_type", "00");
+            // 法人证件号码
+            request.put("legal_cert_no", tHuifuMchCheck.getCertNo());
+            // 法人证件有效期类型,1:长期有效;0:非长期有效 ;
+            request.put("legal_cert_validity_type", tHuifuMchCheck.getCertValidityType());
+            // 法人证件有效期开始日期
+            request.put("legal_cert_begin_date", tHuifuMchCheck.getCertBeginDate());
+            // 法人证件有效期截止日期
+            if (StrUtil.isNotEmpty(tHuifuMchCheck.getCertEndDate())) {
+                request.put("legal_cert_end_date", tHuifuMchCheck.getCertEndDate());
+            }
+            // 联系人姓名
+            request.put("contact_name", tHuifuMchCheck.getRegName());
+            // 联系人手机号
+            request.put("contact_mobile", tHuifuMchCheck.getPhone());
+        }
+
+        // 签名:sign
+        String s = JSON.toJSONString(request);
+        String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
+        String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
+
+        // 公共参数
+        System.out.println("请求参数:"+ request);
+        JSONObject requestData = new JSONObject();
+        requestData.put("sys_id", HuifuConstant.SYS_ID);
+        requestData.put("product_id", HuifuConstant.PRODUCT_ID);
+        requestData.put("sign", sign);
+        requestData.put("data", request);
+
+        String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
+        System.out.println("返回的数据:"+ result);
+        JSONObject jsonObject = JSONObject.parseObject(result);
+        JSONObject dataObject = jsonObject.getJSONObject("data");
+        String code = dataObject.getString("resp_code");
+        if(code.equals(HuifuConstant.RESP_CODE)) {
+            String huifuId = dataObject.getString("huifu_id");
+            tHuifuMchCheck.setModifyDate(new Date());
+            tHuifuMchCheck.setStatus("1");
+            tHuifuMchCheck.setHuifuId(huifuId);
+            tHuifuMchCheckService.updateById(tHuifuMchCheck);
+            return HuifuConstant.SUCCESS;
+        }else {
+            String respDesc = dataObject.getString("resp_desc");
+            tHuifuMchCheck.setModifyDate(new Date());
+            tHuifuMchCheck.setStatus("3");
+            tHuifuMchCheck.setAuditDesc(respDesc);
+            tHuifuMchCheckService.updateById(tHuifuMchCheck);
+            return respDesc;
+        }
+    }
+
+    /**
+     * 用户业务入驻
+     * @param tHuifuMchCheck
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public String openBusiness(THuifuMchCheck tHuifuMchCheck) throws Exception {
+        // 请求接口
+        String url = "https://api.huifu.com/v2/user/busi/open";
+        HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
+        // 请求参数:Data
+        JSONObject request = new JSONObject();
+        // 请求流水号
+        request.put("req_seq_id", HuifuUtils.initReqSeqId());
+        // 请求日期
+        request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
+        // 汇付ID
+        request.put("huifu_id", tHuifuMchCheck.getHuifuId());
+        // 上级汇付Id:判断是申泽还是七云
+        TAdmin tAdmin = tAdminService.getById(tHuifuMchCheck.getAdminId());
+        if (StringUtils.isNotEmpty(tAdmin.getCompanyType()) && tAdmin.getCompanyType().equals("1")) {
+            request.put("upper_huifu_id", HuifuConstant.SC_DIV_HUIFU_ID);
+        } else {
+            request.put("upper_huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID);
+        }
+        // 结算卡信息配置
+        JSONObject cardInfo = new JSONObject();
+        // 卡类型
+        cardInfo.put("card_type", tHuifuMchCheck.getCardType());
+        // 卡户名
+        cardInfo.put("card_name", tHuifuMchCheck.getCardName());
+        // 结算账号
+        cardInfo.put("card_no", tHuifuMchCheck.getCardNo());
+        // 银行所在省
+        cardInfo.put("prov_id", tHuifuMchCheck.getCardProvId());
+        // 银行所在市
+        cardInfo.put("area_id", tHuifuMchCheck.getCardAreaId());
+        // 如果是对私
+        if (StringUtils.isNotEmpty(tHuifuMchCheck.getCardType()) && tHuifuMchCheck.getCardType().equals("1")) {
+            // 持卡人证件类型
+            cardInfo.put("cert_type", "00");
+            // 持卡人证件号码
+            cardInfo.put("cert_no", tHuifuMchCheck.getCertNo());
+            // 持卡人证件有效期类型,1:长期有效,0:非长期有效;
+            cardInfo.put("cert_validity_type", tHuifuMchCheck.getCertValidityType());
+            // 持卡人证件有效期开始
+            cardInfo.put("cert_begin_date", tHuifuMchCheck.getCertBeginDate());
+            // 持卡人证件有效期截止日期
+            if (StringUtils.isNotEmpty(tHuifuMchCheck.getCertEndDate())) {
+                cardInfo.put("cert_end_date", tHuifuMchCheck.getCertEndDate());
+            }
+        }
+        if (StringUtils.isNotEmpty(tHuifuMchCheck.getCardType()) && tHuifuMchCheck.getCardType().equals("0")) {
+            // 银行号
+            cardInfo.put("bank_code", tHuifuMchCheck.getBankCode());
+            // 支行联行号
+            cardInfo.put("branch_code", tHuifuMchCheck.getBranchCode());
+        }
+        request.put("card_info", cardInfo);
+        JSONObject settleConfig = new JSONObject();
+        // 如果是修改接口
+        if (tHuifuMchCheck.getStatus().equals("4")) {
+            url = "https://api.huifu.com/v2/user/busi/modify";
+            // 结算周期
+            settleConfig.put("settle_status", "1");
+        }
+        settleConfig.put("settle_cycle", "D1");
+        request.put("settle_config", settleConfig);
+
+        // 签名:sign
+        String s = JSON.toJSONString(request);
+        String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
+        String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
+
+        // 公共参数
+        System.out.println("请求参数:"+ request);
+        JSONObject requestData = new JSONObject();
+        requestData.put("sys_id", HuifuConstant.SYS_ID);
+        requestData.put("product_id", HuifuConstant.PRODUCT_ID);
+        requestData.put("sign", sign);
+        requestData.put("data", request);
+
+        String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
+        System.out.println("返回的数据:"+ result);
+        JSONObject jsonObject = JSONObject.parseObject(result);
+        JSONObject dataObject = jsonObject.getJSONObject("data");
+        String code = dataObject.getString("resp_code");
+        if(code.equals(HuifuConstant.RESP_CODE)) {
+            String huifuId = dataObject.getString("huifu_id");
+            tHuifuMchCheck.setModifyDate(new Date());
+            tHuifuMchCheck.setStatus("2");
+            tHuifuMchCheck.setHuifuId(huifuId);
+            LambdaQueryWrapper<THuifuMch> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(THuifuMch::getAdminId, tHuifuMchCheck.getAdminId());
+            THuifuMch huifuMch = tHuifuMchService.getOne(wrapper);
+            if (huifuMch != null) {
+                String[] ignoreProperties = {"id", "createDate","adminId"};
+                BeanUtil.copyProperties(tHuifuMchCheck, huifuMch, ignoreProperties);
+                huifuMch.setModifyDate(new Date());
+                tHuifuMchService.updateById(huifuMch);
+            } else {
+                THuifuMch tHuifuMch = new THuifuMch();
+                BeanUtil.copyProperties(tHuifuMchCheck, tHuifuMch);
+                // 判断持卡人证件有效期类型,1:长期有效,0:非长期有效
+                if(tHuifuMchCheck.getCertValidityType().equals("0")) {
+                    LocalDate date = LocalDate.parse(tHuifuMchCheck.getCertEndDate(), DateTimeFormatter.ofPattern("yyyyMMdd"));
+                    String certEndDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                    tHuifuMch.setCertDate(certEndDate);
+                } else {
+                    tHuifuMch.setCertDate("长期");
+                }
+                tHuifuMch.setCreateDate(new Date());
+                tHuifuMch.setModifyDate(new Date());
+                tHuifuMch.setHuifuId(huifuId);
+                tHuifuMchService.save(tHuifuMch);
+            }
+            tHuifuMchCheckService.updateById(tHuifuMchCheck);
+            return HuifuConstant.SUCCESS;
+        }else {
+            String respDesc = dataObject.getString("resp_desc");
+            tHuifuMchCheck.setModifyDate(new Date());
+            tHuifuMchCheck.setStatus("3");
+            tHuifuMchCheck.setAuditDesc(respDesc);
+            tHuifuMchCheckService.updateById(tHuifuMchCheck);
+            return respDesc;
+        }
+    }
 
     /**
      * 汇付个人商户入驻
@@ -755,4 +1000,47 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         }
         return null;
     }
+
+    @Override
+    public String checkBalance(THuifuMch tHuifuMch) throws Exception {
+        // 请求接口
+        String url = "https://api.huifu.com/v2/trade/acctpayment/balance/query";
+        HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
+        // 请求参数:Data
+        JSONObject request = new JSONObject();
+        // 请求流水号
+        request.put("req_seq_id", SequenceTools.getReqSeqId32());
+        // 请求日期
+        request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
+        // 汇付ID
+        request.put("huifu_id", tHuifuMch.getHuifuId());
+
+        // 签名:sign
+        String s = JSON.toJSONString(request);
+        String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
+        String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
+
+        // 公共参数
+        System.out.println("请求参数:"+ request);
+        JSONObject requestData = new JSONObject();
+        requestData.put("sys_id", HuifuConstant.SYS_ID);
+        requestData.put("product_id", HuifuConstant.PRODUCT_ID);
+        requestData.put("sign", sign);
+        requestData.put("data", request);
+
+        String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
+        System.out.println("返回的数据:"+ result);
+        JSONObject jsonObject = JSONObject.parseObject(result);
+        JSONObject dataObject = jsonObject.getJSONObject("data");
+        String acctInfoList = dataObject.getString("acctInfo_list");
+        JSONArray acctInfoArray = JSONArray.parseArray(acctInfoList);
+
+        // 如果 "acctInfo_list" 是数组,遍历数组并获取 "balance_amt" 字段的值
+        String balanceAmt = "0";
+        for (int i = 0; i < acctInfoArray.size(); i++) {
+            JSONObject acctInfoObject = acctInfoArray.getJSONObject(i);
+            balanceAmt = acctInfoObject.getString("balance_amt");
+        }
+        return balanceAmt;
+    }
 }

+ 144 - 0
src/main/java/com/szwl/service/impl/TLocationCheckServiceImpl.java

@@ -0,0 +1,144 @@
+package com.szwl.service.impl;
+
+import cn.hutool.http.HttpUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.szwl.model.bo.R;
+import com.szwl.model.entity.TLocationCheck;
+import com.szwl.mapper.TLocationCheckMapper;
+import com.szwl.model.utils.YunPianSms;
+import com.szwl.service.TLocationCheckService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.Objects;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2023-12-25
+ */
+@Service
+public class TLocationCheckServiceImpl extends ServiceImpl<TLocationCheckMapper, TLocationCheck> implements TLocationCheckService {
+
+//    TLocationCheckService locationCheckService;
+//
+//    public TLocationCheckServiceImpl(TLocationCheckService locationCheckService) {
+//        this.locationCheckService = locationCheckService;
+//    }
+
+    private static final String appid = "07784f5fedb508046c841b391005b7de";
+
+    @Override
+    public String locCheckNoMsg(TLocationCheck locationCheck, String clientId, String addr) {
+        String location = locationCheck.getLocation();
+        String country = locationCheck.getCountry();
+        if (StringUtils.isEmpty(country)) {
+            return "国家不能为空";
+        }
+        // 如果 pro,city,addr 中都不包含 country 或者 location,就是异常,发短信通知
+        boolean containsUserInput = true;
+        // location 为空 / 不为空
+        if (StringUtils.isEmpty(location)) {
+            containsUserInput = addr.contains(country);
+        } else {
+            containsUserInput = addr.contains(country) || addr.contains(location) || location.contains(addr);
+        }
+
+        if (!containsUserInput) { // 不包含,发短信通知,并拒绝审核
+            return "fail";
+        }
+        return "success";
+    }
+
+    @Override
+    public String locCheckMsg(TLocationCheck locationCheck, String clientId, String addr) throws IOException {
+
+        String location = locationCheck.getLocation();
+        String country = locationCheck.getCountry();
+
+        if (StringUtils.isEmpty(country)) {
+            return "国家不能为空";
+        }
+//        ObjectMapper objectMapper = new ObjectMapper();
+//        JsonNode jsonNode = objectMapper.readTree(s);
+//        String addr = jsonNode.get("addr").asText();
+
+        // 如果 pro,city,addr 中都不包含 country 或者 location,就是异常,发短信通知
+        boolean containsUserInput = true;
+        // location 为空 / 不为空
+        // country 是中国 / 不是中国
+        if (StringUtils.isEmpty(location)) {
+            if (country.equals("中国")) {
+                return "国内必须精确到省市";
+            } else {
+                containsUserInput = addr.contains(country);
+            }
+        } else {
+            if (country.equals("中国")) {
+                containsUserInput = addr.contains(location);
+            } else {
+                containsUserInput = addr.contains(country) || addr.contains(location) || location.contains(addr);
+            }
+        }
+
+        String phone = "18620242721";
+        String messages = "【申泽部门】设备编号:" + clientId + ",所在ip与设定位置不符,请及时查看。";
+        if (!containsUserInput) { // 不包含,发短信通知,并拒绝审核
+            YunPianSms.sendSms(appid, messages, phone);
+            return "fail";
+        }
+        return "success";
+    }
+
+    @Override
+    public String schLocCheck(TLocationCheck locationCheck, String clientId, String addr) {
+        String location = locationCheck.getLocation();
+        String country = locationCheck.getCountry();
+
+        if (StringUtils.isEmpty(country)) {
+            return "国家不能为空";
+        }
+
+        boolean containsUserInput = true;
+        // location 为空 / 不为空
+        // country 是中国 / 不是中国
+        if (StringUtils.isEmpty(location)) {
+            if (country.equals("中国")) {
+                return "国内必须精确到省";
+            } else {
+                containsUserInput = addr.contains(country);
+            }
+        } else {
+            if (country.equals("中国")) {
+                containsUserInput = addr.contains(location);
+            } else {
+                containsUserInput = addr.contains(country) || addr.contains(location) || location.contains(addr);
+            }
+        }
+
+        if (!containsUserInput) { // 不包含,返回设备编号
+            return "{" + clientId + "}";
+        }
+
+        return "";
+    }
+
+    @Override
+    public void schSendMsg(String locErrorEq) throws IOException {
+        String phone = "18620242721";
+        String messages = "【申泽部门】设备编号:" + locErrorEq + ",所在ip与设定位置不符,请及时查看。";
+        YunPianSms.sendSms(appid, messages, phone);
+    }
+
+
+}

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

@@ -106,9 +106,9 @@ public class TMessageCodeServiceImpl extends ServiceImpl<TMessageCodeMapper, TMe
 
             String str1="Dear customer<br>" +
                     "<br>" +
-                    "Hello, your verification code is:";
-            String str2=",please enter it within 3 minutes.";
-            contnet.append(str1).append(code).append(str2);
+                    "Hello, your verification code is: ";
+//            String str2=",please enter it within 3 minutes.";
+            contnet.append(str1).append(code);
         }
         return contnet.toString();
     }

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

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TNameDictionary;
+import com.szwl.mapper.TNameDictionaryMapper;
+import com.szwl.service.TNameDictionaryService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2024-01-02
+ */
+@Service
+public class TNameDictionaryServiceImpl extends ServiceImpl<TNameDictionaryMapper, TNameDictionary> implements TNameDictionaryService {
+
+}

+ 13 - 2
src/main/java/com/szwl/service/impl/TPromoCodeServiceImpl.java

@@ -3,8 +3,10 @@ package com.szwl.service.impl;
 import com.szwl.model.dto.PromoCodeTarget;
 import com.szwl.model.entity.TPromoCode;
 import com.szwl.mapper.TPromoCodeMapper;
+import com.szwl.model.utils.DateUtils;
 import com.szwl.service.TPromoCodeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -27,8 +29,17 @@ public class TPromoCodeServiceImpl extends ServiceImpl<TPromoCodeMapper, TPromoC
         for(TPromoCode promoCode : list){
             PromoCodeTarget promoCodeTarget = new PromoCodeTarget();
             promoCodeTarget.setCode(promoCode.getCode());
-            promoCodeTarget.setAdminId(promoCode.getAdminId());
-            promoCodeTarget.setCreateDate(promoCode.getCreateDate());
+            if(StringUtils.isNotEmpty(promoCode.getType()) && promoCode.getType().equals("1")){
+                promoCodeTarget.setType("抵扣券");
+            }else {
+                promoCodeTarget.setType("折扣券");
+            }
+            promoCodeTarget.setDiscount(promoCode.getDiscount());
+            // 格式化时间
+            if(promoCode.getCreateDate()!=null) {
+                String formatPayDate = DateUtils.formatDate(promoCode.getCreateDate(), DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss);
+                promoCodeTarget.setCreateDate(formatPayDate);
+            }
             if(promoCode.getIsUse().equals("0")){
                 promoCodeTarget.setIsUse("未使用");
             }else {

+ 15 - 0
src/main/java/com/szwl/util/WhoIsUtil.java

@@ -0,0 +1,15 @@
+package com.szwl.util;
+
+import cn.hutool.http.HttpUtil;
+
+public class WhoIsUtil {
+
+    public static String getLocByIp(String ip) {
+        // 根据 ip 获取位置
+//        String reqUrl = "http://whois.pconline.com.cn/ipJson.jsp?json=true&ip=" + ip;
+        String reqUrl = "http://whois.pconline.com.cn/ip.jsp?ip=" + ip;
+
+//        HttpRequest.get(reqUrl)
+        return HttpUtil.get(reqUrl);
+    }
+}

+ 0 - 1
src/test/java/com/szwl/ApplicationTests.java

@@ -7,5 +7,4 @@ import org.springframework.boot.test.context.SpringBootTest;
 @SpringBootTest
 class ApplicationTests {
 
-
 }

+ 1 - 1
src/test/java/com/szwl/AutoGeneratorTests.java

@@ -47,7 +47,7 @@ class AutoGeneratorTests {
 		strategyConfig
 //				.setCapitalMode(true)//设置全局大写命名
 				.setInclude(new String[]{
-						""
+						"t_hot_update"
 				})//只会生成该表
 				.setEntityLombokModel(true)//实体类生成之后自动添加lombok注解
 				.setNaming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策略

+ 14 - 0
src/test/java/com/szwl/model/utils/MailUtilTest.java

@@ -0,0 +1,14 @@
+package com.szwl.model.utils;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class MailUtilTest {
+    public static void main(String[] args) {
+        MailUtil mailUtil = new MailUtil();
+        mailUtil.send("l4ft134y8x@gixenmixen.com", "临时邮箱测试24", "你好,世界 Hello Mail Test");
+        mailUtil.send("prmeli57820@chacuo.net", "临时邮箱测试51", "你好,世界5 Hello Mail Test");
+        mailUtil.send("ip3g5kha@yzm.de", "临时邮箱测试52", "你好,世界24 Hello Mail Test");
+        mailUtil.send("harmonie997@wireconnected.com", "临时邮箱测试53", "你好,世界52 Hello Mail Test");
+
+    }
+}

+ 39 - 0
src/test/java/com/szwl/model/utils/usaEquipment/AClz.java

@@ -0,0 +1,39 @@
+package com.szwl.model.utils.usaEquipment;
+
+import java.util.*;
+
+public class AClz {
+    public static void main(String[] args) {
+        String a = "-80.127714,25.955181\n" +
+                "-80.333225,25.645918\n" +
+                "-80.142757,25.957812\n" +
+                "-80.322943,25.868225";
+
+        String[] aa = {"-80.127714,25.955181", "-80.333225,25.645918", "-80.142757,25.957812", "-80.322943,25.868225"};
+        for (String s : aa) {
+            System.out.println(s);
+        }
+        System.out.println("*******************");
+
+        String b = "-80.127714,25.955181\n" +
+                "-80.333225,25.645918\n" +
+                "-80.142757,25.957812\n" +
+                "-80.322943,25.868225";
+
+//        String str = "-80.127714,25.955181:Miami-Dade, Florida, United States\n" +
+//                "-80.142757,25.957812:Spring Circle Drive, Broward, Florida, United States\n" +
+//                "-80.322943,25.868225:Palmetto Expressway, Hialeah, Florida, United States\n" +
+//                "-80.333225,25.645918:Miami-Dade, Florida, United States";
+
+        String[] strings = strToArray(a);
+        for (String ss : strings) {
+            System.out.println(ss);
+        }
+//        System.out.println(a);
+    }
+
+    public static String[] strToArray(String str) {
+        String[] split = str.split("\\n");
+        return split;
+    }
+}

+ 41 - 0
src/test/java/com/szwl/model/utils/usaEquipment/ContainsTest.java

@@ -0,0 +1,41 @@
+package com.szwl.model.utils.usaEquipment;
+
+import org.apache.commons.lang.StringUtils;
+
+public class ContainsTest {
+    public static void main(String[] args) {
+        String addr = "日本";
+        String country = "美国";
+        String location = "日本,韩国";
+
+        ContainsTest containsTest = new ContainsTest();
+        String s = containsTest.cTest(addr, country, location);
+        System.out.println(s);
+
+    }
+
+    public String cTest(String addr, String country, String location) {
+        boolean containsUserInput = true;
+        // location 为空 / 不为空
+        // country 是中国 / 不是中国
+        if (StringUtils.isEmpty(location)) {
+            if (country.equals("中国")) {
+                return "国内必须精确到省";
+            } else {
+                containsUserInput = addr.contains(country);
+            }
+        } else {
+            if (country.equals("中国")) {
+                containsUserInput = addr.contains(location);
+            } else {
+                containsUserInput = addr.contains(country) || addr.contains(location) || location.contains(addr);
+            }
+        }
+
+        if (!containsUserInput) { // 不包含,返回设备编号
+            return "{" + 111 + "}";
+        }
+
+        return "nih";
+    }
+}

Fichier diff supprimé car celui-ci est trop grand
+ 102 - 0
src/test/java/com/szwl/model/utils/usaEquipment/CoordinateUtils.java


Fichier diff supprimé car celui-ci est trop grand
+ 240 - 0
src/test/java/com/szwl/model/utils/usaEquipment/RegexpTemp.java


+ 466 - 0
src/test/java/com/szwl/model/utils/usaEquipment/StringMatcher.java

@@ -0,0 +1,466 @@
+package com.szwl.model.utils.usaEquipment;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+public class StringMatcher {
+
+    public static void main(String[] args) {
+        String laStr = "-80.127714,25.955181\n" +
+                "-80.333225,25.645918\n" +
+                "-80.142757,25.957812\n" +
+                "-80.322943,25.868225\n" +
+                "-80.244328,26.244963\n" +
+                "-80.365384,25.787479\n" +
+                "-80.247484,26.240933\n" +
+                "-80.336566,26.006578\n" +
+                "-80.14672,25.947551\n" +
+                "-80.237363,25.958205\n" +
+                "-82.725138,27.791522\n" +
+                "-82.732037,27.79326\n" +
+                "-80.143727,25.958121\n" +
+                "-80.310041,25.913599\n" +
+                "-80.127714,25.955181\n" +
+                "-80.23849,25.956545\n" +
+                "-80.323004,25.865907\n" +
+                "-81.488929,28.395474\n" +
+                "-81.33871,28.804041\n" +
+                "-81.494663,28.386985\n" +
+                "-80.369312,25.780731\n" +
+                "-81.341074,28.804355\n" +
+                "-81.476665,28.452999\n" +
+                "-81.339111,28.803329\n" +
+                "-81.502327,28.36207\n" +
+                "-80.128351,25.955404\n" +
+                "-81.491729,28.386725\n" +
+                "-80.104383,26.122208\n" +
+                "-80.142671,25.958025\n" +
+                "-80.128351,25.955403\n" +
+                "-82.510796,27.540516\n" +
+                "-84.080793,33.980651\n" +
+                "-81.55391,30.184654\n" +
+                "-118.016353,34.104601\n" +
+                "-117.576026,34.110408\n" +
+                "113.392747,22.981579\n" +
+                "-119.732667,39.527135\n" +
+                "-84.287354,33.907686\n" +
+                "145.735405,15.150408\n" +
+                "113.392182,22.917437\n" +
+                "113.392224,22.917394\n" +
+                "-105.004751,39.554863\n" +
+                "-119.166897,34.163878\n" +
+                "-97.042481,32.968185\n" +
+                "-0.128544,51.525525\n" +
+                "-74.365611,40.540369\n" +
+                "113.392631,22.981589\n" +
+                "-74.554987,40.907923\n" +
+                "-73.130388,40.865565\n" +
+                "-74.17127,40.65954\n" +
+                "-74.334746,40.547832\n" +
+                "-74.002978,40.759209\n" +
+                "-117.852745,33.852574\n" +
+                "113.392721,22.981697\n" +
+                "-74.037737,40.727023\n" +
+                "111,22\n" +
+                "-77.17348,38.774803\n" +
+                "-77.174867,38.774532\n" +
+                "-77.220235,38.918008\n" +
+                "-77.219779,38.917977\n" +
+                "113.392039,22.917224\n" +
+                "-54.608215,-16.472348\n" +
+                "-61.915014,-10.893926\n" +
+                "-38.907076,-12.245805\n" +
+                "-46.811803,-23.208086\n" +
+                "-46.617272,-23.555077\n" +
+                "-43.177372,-22.512528\n" +
+                "-77.267596,38.611135\n" +
+                "-118.360533,34.229339\n" +
+                "-115.169034,36.051693\n" +
+                "-115.168847,36.056273\n" +
+                "-115.169005,36.056192\n" +
+                "113.392616,22.981579\n" +
+                "-118.011984,33.747111\n" +
+                "-81.450357,28.475563\n" +
+                "-82.39038,28.190882\n" +
+                "-81.560594,28.441274\n" +
+                "-81.392169,28.444729\n" +
+                "-80.274972,27.240639\n" +
+                "-87.206867,30.474804\n" +
+                "-80.724341,35.370627\n" +
+                "-80.275152,27.242981\n" +
+                "-80.719451,35.367911\n" +
+                "-87.207584,30.474648\n" +
+                "-82.980867,40.145788\n" +
+                "113.392422,22.917043\n" +
+                "-118.309381,34.096314\n" +
+                "-117.69474,34.087077\n" +
+                "-82.956676,42.548853\n" +
+                "-81.644474,26.208243\n" +
+                "-81.868739,26.601567\n" +
+                "-81.794257,26.169435\n" +
+                "-7.840661,37.034955\n" +
+                "-7.637642,37.130394\n" +
+                "-7.945027,37.029384\n" +
+                "-8.249007,37.087889\n" +
+                "-80.197911,25.799352\n" +
+                "-80.12096,25.943221\n" +
+                "-122.417479,37.636554\n" +
+                "120.350352,22.622136\n" +
+                "-71.613017,42.355307\n" +
+                "-71.834082,42.202213\n" +
+                "-71.201856,42.746776\n" +
+                "-71.067989,41.877483\n" +
+                "-71.584786,42.338639\n" +
+                "-71.584702,42.338476\n" +
+                "-70.940058,42.553752\n" +
+                "-71.514564,43.001086\n" +
+                "-117.614111,33.963204\n" +
+                "-80.076458,26.700722\n" +
+                "-80.175353,26.619524\n" +
+                "-80.167004,26.618373\n" +
+                "-80.167105,26.618394\n" +
+                "-80.111696,26.618608\n" +
+                "-82.444572,38.420662\n" +
+                "-93.433452,44.862823\n" +
+                "-93.126942,44.96338\n" +
+                "-93.377535,45.09619\n" +
+                "-122.079086,37.393601\n" +
+                "-121.97972,37.372081\n" +
+                "-121.306967,38.776415\n" +
+                "-112.393779,33.638479\n" +
+                "-121.260276,38.611617\n" +
+                "-121.268991,38.018874\n" +
+                "-118.133621,34.068239\n" +
+                "-81.786374,41.336373\n" +
+                "-80.659794,41.021111\n" +
+                "-119.06077,34.21602\n" +
+                "-119.060053,34.216159\n" +
+                "-111.885523,33.544822\n" +
+                "-121.949255,38.269044\n" +
+                "-122.878144,45.157105\n" +
+                "-87.55959,41.702866\n" +
+                "-117.236076,32.801025\n" +
+                "-81.361078,41.657446\n" +
+                "-80.751726,41.214624\n" +
+                "-87.641586,41.853902\n" +
+                "-117.907234,33.987544\n" +
+                "-117.911392,33.805007\n" +
+                "-118.555262,34.238457\n" +
+                "-118.027374,33.7657\n" +
+                "-88.27376,41.800911\n" +
+                "-84.379809,33.916722\n" +
+                "-86.376107,30.376896\n" +
+                "-117.065957,33.071125\n" +
+                "-117.320549,33.123089\n" +
+                "-117.065865,33.071069\n" +
+                "-117.33028,33.178116\n" +
+                "-116.967897,32.624118\n" +
+                "-116.968255,32.804879\n" +
+                "-117.085991,32.629922\n" +
+                "-117.066674,33.071759\n" +
+                "-116.704738,32.840804\n" +
+                "-116.70598,32.840407\n" +
+                "-117.321671,33.126269\n" +
+                "-85.668618,42.792107\n" +
+                "-85.671066,42.809978\n" +
+                "-71.093211,42.462135\n" +
+                "-70.990086,41.641248\n" +
+                "-70.716197,41.968933\n" +
+                "-70.716396,41.972128\n" +
+                "-80.305822,26.010673\n" +
+                "-118.076858,34.099519\n" +
+                "-118.088657,34.080204\n" +
+                "-121.928869,37.695217\n" +
+                "-121.844542,37.699135\n" +
+                "-122.878002,42.345146\n" +
+                "-93.325076,44.880759\n" +
+                "-92.478528,44.003817\n" +
+                "-111.890009,40.697807\n" +
+                "-84.650279,38.995754\n" +
+                "113.39236,22.917268\n" +
+                "-77.146967,39.02464\n" +
+                "-93.951591,44.18286\n" +
+                "-93.263914,45.1248\n" +
+                "-93.02323,45.031451\n" +
+                "-75.655317,41.458838\n" +
+                "-75.652955,41.459418\n" +
+                "-75.123565,40.140291\n" +
+                "-76.933683,40.222769\n" +
+                "-87.693884,41.950241\n" +
+                "-120.433275,34.951781\n" +
+                "-84.217202,31.617213\n" +
+                "-76.287873,36.849199\n" +
+                "-115.164289,36.141098\n" +
+                "-119.695541,36.806879\n" +
+                "-119.680127,36.736545\n" +
+                "-106.588285,35.140141\n" +
+                "-111.610898,40.16554\n" +
+                "-87.794292,41.748285\n" +
+                "-87.847435,41.619121\n" +
+                "-73.920905,40.751934\n" +
+                "-115.197256,36.127916\n" +
+                "-115.199121,36.129366\n" +
+                "-93.171609,45.013036\n" +
+                "-82.172902,29.158571\n" +
+                "-80.647937,28.081448\n" +
+                "-91.607039,41.693984\n" +
+                "-96.069192,41.266578\n" +
+                "-97.205371,32.82634\n" +
+                "-97.494424,35.232164\n" +
+                "-93.738961,32.518979\n" +
+                "-95.635791,30.394019\n" +
+                "-121.187153,38.64297\n";
+//        String[] laArr = laStr.split("\\n");
+        
+
+        String addStr = "-80.127714,25.955181:Miami-Dade, Florida, United States\n" +
+                "-80.244328,26.244963:Spring Circle Drive, Broward, Florida, United States\n" +
+                "-80.322943,25.868225:Palmetto Expressway, Hialeah, Florida, United States\n" +
+                "-80.333225,25.645918:Miami-Dade, Florida, United States\n" +
+                "-80.142757,25.957812:Miami-Dade, Florida, United States\n" +
+                "-80.365384,25.787479:Miami-Dade, Florida, United States\n" +
+                "-80.247484,26.240933:Broward, Florida, United States\n" +
+                "-80.237363,25.958205:Miami-Dade, Florida, United States\n" +
+                "-80.336566,26.006578:201 SW 145th Terrace, Broward, Florida, United States\n" +
+                "-82.725138,27.791522:22nd Avenue North, St. Petersburg, Florida, United States\n" +
+                "-80.14672,25.947551:Northeast 186th Street, Miami-Dade, Florida, United States\n" +
+                "-82.732037,27.79326:2468 Tyrone Boulevard North, St. Petersburg, Florida, United States\n" +
+                "-80.143727,25.958121:Miami-Dade, Florida, United States\n" +
+                "-80.310041,25.913599:Main Street, Miami-Dade, Florida, United States\n" +
+                "-80.127714,25.955181:Miami-Dade, Florida, United States\n" +
+                "-80.23849,25.956545:Miami-Dade, Florida, United States\n" +
+                "-80.323004,25.865907:Palmetto Expressway, Hialeah, Florida, United States\n" +
+                "-81.494663,28.386985:Orange, Florida, United States\n" +
+                "-81.488929,28.395474:Orange, Florida, United States\n" +
+                "-80.369312,25.780731:Dolphin Expressway, Miami-Dade, Florida, United States\n" +
+                "-81.33871,28.804041:Seminole, Florida, United States\n" +
+                "-81.476665,28.452999:Turkey Lake Road, Orange, Florida, United States\n" +
+                "-81.339111,28.803329:Seminole, Florida, United States\n" +
+                "-80.128351,25.955404:Miami-Dade, Florida, United States\n" +
+                "-81.341074,28.804355:Seminole, Florida, United States\n" +
+                "-81.491729,28.386725:Orange, Florida, United States\n" +
+                "-80.104383,26.122208:South Atlantic Boulevard, Fort Lauderdale, Florida, United States\n" +
+                "-81.502327,28.36207:Orange, Florida, United States\n" +
+                "-82.510796,27.540516:Manatee, Florida, United States\n" +
+                "-84.080793,33.980651:Gwinnett, Georgia, United States\n" +
+                "-81.55391,30.184654:Jacksonville, Florida, United States\n" +
+                "-118.016353,34.104601:Hempstead Avenue, Los Angeles, California, United States\n" +
+                "113.392747,22.981579:广东省广州市番禺区\n" +
+                "-80.142671,25.958025:Miami-Dade, Florida, United States\n" +
+                "-117.576026,34.110408:Haven Avenue, Rancho Cucamonga, San Bernardino, California, United States\n" +
+                "-84.287354,33.907686:DeKalb, Georgia, United States\n" +
+                "113.392182,22.917437:广东省广州市番禺区蚬涌南西街\n" +
+                "-119.732667,39.527135:East Glendale Avenue, Washoe, Nevada, United States\n" +
+                "-80.128351,25.955403:Miami-Dade, Florida, United States\n" +
+                "145.735405,15.150408:Saipan, Northern Mariana Islands\n" +
+                "-105.004751,39.554863:West Plaza Drive, Douglas, Colorado, United States\n" +
+                "-97.042481,32.968185:Tarrant, Texas, United States\n" +
+                "-74.365611,40.540369:Middlesex, New Jersey, United States\n" +
+                "113.392631,22.981589:广东省广州市番禺区\n" +
+                "-119.166897,34.163878:San Simeon Avenue, Ventura, California, United States\n" +
+                "113.392224,22.917394:广东省广州市番禺区蚬涌南西街\n" +
+                "-0.128544,51.525525:Tavistock Square, London, England\n" +
+                "-74.554987,40.907923:Morris, New Jersey, United States\n" +
+                "-74.002978,40.759209:12th Avenue, New York, United States\n" +
+                "-73.130388,40.865565:Suffolk, New York, United States\n" +
+                "113.392721,22.981697:广东省广州市番禺区\n" +
+                "111,22:广东省茂名市高州市\n" +
+                "-74.334746,40.547832:Middlesex, New Jersey, United States\n" +
+                "-117.852745,33.852574:La Palma Avenue, Anaheim, California, United States\n" +
+                "-74.17127,40.65954:Union, New Jersey, United States\n" +
+                "-74.037737,40.727023:Jersey City, New Jersey, United States\n" +
+                "-77.17348,38.774803:Fairfax, Virginia, United States\n" +
+                "113.392039,22.917224:广东省广州市番禺区蚬涌南西街\n" +
+                "-77.220235,38.918008:Fairfax, Virginia, United States\n" +
+                "-54.608215,-16.472348:Mato Grosso, Brazil\n" +
+                "-77.174867,38.774532:Fairfax, Virginia, United States\n" +
+                "-38.907076,-12.245805:Rua Artêmia Pires de Freitas, Bahia, Brazil\n" +
+                "-46.811803,-23.208086:Sao Paulo, Brazil\n" +
+                "-46.617272,-23.555077:Rua Barão de Jaguara, Sao Paulo, Brazil\n" +
+                "-61.915014,-10.893926:Avenida das Seringueiras, Rondonia, Brazil\n" +
+                "-77.219779,38.917977:Tysons Corner Center, Fairfax, Virginia, United States\n" +
+                "-43.177372,-22.512528:Rua Aureliano Coutinho, Rio de Janeiro, Brazil\n" +
+                "-118.360533,34.229339:Los Angeles, California, United States\n" +
+                "-115.168847,36.056273:East Warm Springs Road, Clark, Nevada, United States\n" +
+                "-115.169034,36.051693:Clark, Nevada, United States\n" +
+                "-77.267596,38.611135:Prince William, Virginia, United States\n" +
+                "-115.169005,36.056192:East Warm Springs Road, Clark, Nevada, United States\n" +
+                "-118.011984,33.747111:Orange, California, United States\n" +
+                "-81.560594,28.441274:Iron Mountain Trail, Orange, Florida, United States\n" +
+                "-82.39038,28.190882:Pasco, Florida, United States\n" +
+                "-81.392169,28.444729:Orange, Florida, United States\n" +
+                "-81.450357,28.475563:Orlando, Florida, United States\n" +
+                "-80.274972,27.240639:Martin, Florida, United States\n" +
+                "113.392616,22.981579:广东省广州市番禺区\n" +
+                "-87.206867,30.474804:Grande Drive, Escambia, Florida, United States\n" +
+                "-80.724341,35.370627:Cabarrus, North Carolina, United States\n" +
+                "-80.275152,27.242981:Martin, Florida, United States\n" +
+                "-80.719451,35.367911:Cabarrus, North Carolina, United States\n" +
+                "-87.207584,30.474648:Escambia, Florida, United States\n" +
+                "-82.980867,40.145788:Polaris Pkwy, Delaware, Ohio, United States\n" +
+                "-117.69474,34.087077:San Bernardino, California, United States\n" +
+                "-118.309381,34.096314:Los Angeles, California, United States\n" +
+                "-82.956676,42.548853:Macomb, Michigan, United States\n" +
+                "-81.644474,26.208243:19th Street Southwest, Collier, Florida, United States\n" +
+                "113.392422,22.917043:广东省广州市番禺区蚬涌南东街\n" +
+                "-81.868739,26.601567:4125 Cleveland Avenue, Lee, Florida, United States\n" +
+                "-81.794257,26.169435:Collier, Florida, United States\n" +
+                "-7.840661,37.034955:Faro, Portugal\n" +
+                "-8.249007,37.087889:Faro, Portugal\n" +
+                "-80.197911,25.799352:Northwest 23rd Street, Miami, Florida, United States\n" +
+                "-80.12096,25.943221:Collins Avenue, Miami-Dade, Florida, United States\n" +
+                "-7.637642,37.130394:Faro, Portugal\n" +
+                "-71.613017,42.355307:601 Donald Lynch Boulevard, Middlesex, Massachusetts, United States\n" +
+                "-7.945027,37.029384:Faro, Portugal\n" +
+                "-71.834082,42.202213:Worcester, Massachusetts, United States\n" +
+                "120.350352,22.622136:台湾省高雄市苓雅区\n" +
+                "-122.417479,37.636554:San Mateo, California, United States\n" +
+                "-71.067989,41.877483:Bristol, Massachusetts, United States\n" +
+                "-71.584786,42.338639:Middlesex, Massachusetts, United States\n" +
+                "-70.940058,42.553752:Essex, Massachusetts, United States\n" +
+                "-71.584702,42.338476:Middlesex, Massachusetts, United States\n" +
+                "-71.201856,42.746776:Rockingham, New Hampshire, United States\n" +
+                "-80.175353,26.619524:Palm Beach, Florida, United States\n" +
+                "-71.514564,43.001086:Hillsborough, New Hampshire, United States\n" +
+                "-117.614111,33.963204:San Bernardino, California, United States\n" +
+                "-80.167004,26.618373:Palm Beach, Florida, United States\n" +
+                "-80.167105,26.618394:Palm Beach, Florida, United States\n" +
+                "-80.076458,26.700722:Palm Beach, Florida, United States\n" +
+                "-82.444572,38.420662:4th Avenue, Cabell, West Virginia, United States\n" +
+                "-93.433452,44.862823:Hennepin, Minnesota, United States\n" +
+                "-93.377535,45.09619:Brooklyn Boulevard, Hennepin, Minnesota, United States\n" +
+                "-93.126942,44.96338:Dale Street, Saint Paul, Minnesota, United States\n" +
+                "-80.111696,26.618608:Lake Worth Road, Palm Beach, Florida, United States\n" +
+                "-121.97972,37.372081:Mead Avenue, Santa Clara, California, United States\n" +
+                "-112.393779,33.638479:West Bell Road, Maricopa, Arizona, United States\n" +
+                "-118.133621,34.068239:N Atlantic Boulevard, Los Angeles, California, United States\n" +
+                "-122.079086,37.393601:Castro Street, Mountain View, California, United States\n" +
+                "-121.306967,38.776415:Galilee Road, Placer, California, United States\n" +
+                "-121.260276,38.611617:Sacramento, California, United States\n" +
+                "-121.268991,38.018874:Stockton, California, United States\n" +
+                "-81.786374,41.336373:Cuyahoga, Ohio, United States\n" +
+                "-80.659794,41.021111:Mahoning, Ohio, United States\n" +
+                "-119.06077,34.21602:Ventura, California, United States\n" +
+                "-119.060053,34.216159:Ventura, California, United States\n" +
+                "-111.885523,33.544822:Maricopa, Arizona, United States\n" +
+                "-122.878144,45.157105:Marion, Oregon, United States\n" +
+                "-87.55959,41.702866:Chicago, Illinois, United States\n" +
+                "-117.236076,32.801025:1886 Garnet Avenue, San Diego, California, United States\n" +
+                "-121.949255,38.269044:Solano, California, United States\n" +
+                "-80.751726,41.214624:Trumbull, Ohio, United States\n" +
+                "-87.641586,41.853902:South Jefferson Street, Chicago, Illinois, United States\n" +
+                "-81.361078,41.657446:Lake, Ohio, United States\n" +
+                "-118.555262,34.238457:Los Angeles, California, United States\n" +
+                "-117.911392,33.805007:South Clementine Street, Anaheim, California, United States\n" +
+                "-88.27376,41.800911:Kane, Illinois, United States\n" +
+                "-84.379809,33.916722:Fulton, Georgia, United States\n" +
+                "-117.907234,33.987544:East Via Amorosa, Los Angeles, California, United States\n" +
+                "-117.065957,33.071125:San Diego, California, United States\n" +
+                "-118.027374,33.7657:Allison Circle, Orange, California, United States\n" +
+                "-117.320549,33.123089:800 Palomar Airport Rd, Carlsbad, California, United States\n" +
+                "-86.376107,30.376896:Old Highway 98, Walton, Florida, United States\n" +
+                "-117.33028,33.178116:2525 El Camino Real, Carlsbad, California, United States\n" +
+                "-117.065865,33.071069:San Diego, California, United States\n" +
+                "-116.967897,32.624118:Chula Vista, California, United States\n" +
+                "-116.968255,32.804879:San Diego, California, United States\n" +
+                "-117.085991,32.629922:Chula Vista, California, United States\n" +
+                "-116.704738,32.840804:Willows Road, San Diego, California, United States\n" +
+                "-116.70598,32.840407:Willows Road, San Diego, California, United States\n" +
+                "-117.066674,33.071759:San Diego, California, United States\n" +
+                "-85.668618,42.792107:Kent, Michigan, United States\n" +
+                "-85.671066,42.809978:Kent, Michigan, United States\n" +
+                "-71.093211,42.462135:Middlesex, Massachusetts, United States\n" +
+                "-70.990086,41.641248:Bristol, Massachusetts, United States\n" +
+                "-70.716197,41.968933:Plymouth, Massachusetts, United States\n" +
+                "-117.321671,33.126269:Paseo Del Norte, Carlsbad, California, United States\n" +
+                "-70.716396,41.972128:Plymouth, Massachusetts, United States\n" +
+                "-118.076858,34.099519:Los Angeles, California, United States\n" +
+                "-121.928869,37.695217:Alameda, California, United States\n" +
+                "-118.088657,34.080204:East Valley Boulevard, Los Angeles, California, United States\n" +
+                "-121.844542,37.699135:Alameda, California, United States\n" +
+                "-80.305822,26.010673:Broward, Florida, United States\n" +
+                "-122.878002,42.345146:Jackson, Oregon, United States\n" +
+                "-93.325076,44.880759:Hennepin, Minnesota, United States\n" +
+                "113.39236,22.917268:广东省广州市番禺区蚬涌南东街\n" +
+                "-92.478528,44.003817:Olmsted, Minnesota, United States\n" +
+                "-111.890009,40.697807:Salt Lake, Utah, United States\n" +
+                "-84.650279,38.995754:Boone, Kentucky, United States\n" +
+                "-93.02323,45.031451:Ramsey, Minnesota, United States\n" +
+                "-77.146967,39.02464:Montgomery, Maryland, United States\n" +
+                "-93.951591,44.18286:Premiere Drive, Blue Earth, Minnesota, United States\n" +
+                "-75.652955,41.459418:Lackawanna, Pennsylvania, United States\n" +
+                "-75.123565,40.140291:Montgomery, Pennsylvania, United States\n" +
+                "-75.655317,41.458838:Lackawanna, Pennsylvania, United States\n" +
+                "-76.933683,40.222769:Cumberland, Pennsylvania, United States\n" +
+                "-93.263914,45.1248:Anoka, Minnesota, United States\n" +
+                "-87.693884,41.950241:Chicago, Illinois, United States\n" +
+                "-120.433275,34.951781:Town Center East, Santa Barbara, California, United States\n" +
+                "-76.287873,36.849199:Norfolk, Virginia, United States\n" +
+                "-84.217202,31.617213:Dougherty, Georgia, United States\n" +
+                "-119.695541,36.806879:Fresno, California, United States\n" +
+                "-115.164289,36.141098:Clark, Nevada, United States\n" +
+                "-119.680127,36.736545:Fresno, California, United States\n" +
+                "-106.588285,35.140141:Albuquerque, New Mexico, United States\n" +
+                "-87.794292,41.748285:79th Street, Cook, Illinois, United States\n" +
+                "-111.610898,40.16554:South Main Street, Utah, United States\n" +
+                "-73.920905,40.751934:42 Place, New York, United States\n" +
+                "-87.847435,41.619121:Cook, Illinois, United States\n" +
+                "-115.197256,36.127916:Pioneer Avenue, Paradise, Nevada, United States\n" +
+                "-115.199121,36.129366:Arville Street, Paradise, Nevada, United States\n" +
+                "-91.607039,41.693984:Johnson, Iowa, United States\n" +
+                "-96.069192,41.266578:Omaha, Nebraska, United States\n" +
+                "-80.647937,28.081448:1700 West New Haven Avenue, Brevard, Florida, United States\n" +
+                "-82.172902,29.158571:Marion, Florida, United States\n" +
+                "-97.205371,32.82634:Northeast Loop, Tarrant, Texas, United States\n" +
+                "-93.171609,45.013036:Ramsey, Minnesota, United States\n" +
+                "-97.494424,35.232164:36th Avenue Northwest, Cleveland, Oklahoma, United States\n" +
+                "-93.738961,32.518979:Bossier, Louisiana, United States\n" +
+                "-95.635791,30.394019:Montgomery, Texas, United States\n" +
+                "-121.187153,38.64297:Sacramento, California, United States";
+//        String[] addArr = addStr.split("\\n");
+
+        Pattern pattern = Pattern.compile("\\n");
+        String[] laArr = pattern.split(laStr, 0);
+        String[] addArr = pattern.split(addStr, 0);
+
+
+        // 例子数据
+//        String[] la = {"-80.127714,25.955181", "-80.333225,25.645918", "-80.142757,25.957812", "-80.322943,25.868225", "-80.244328,26.244963"};
+//        String[] addr = {"-80.127714,25.955181:Miami-Dade, Florida, United States",
+//                "-80.244328,26.244963:Spring Circle Drive, Broward, Florida, United States",
+//                "-80.322943,25.868225:Palmetto Expressway, Hialeah, Florida, United States",
+//                "-80.333225,25.645918:Miami-Dade, Florida, United States",
+//                "-80.142757,25.957812:Miami-Dade, Florida, United States"};
+
+        // 调用方法进行顺序匹配
+        String[] strings = matchStrings(laArr, addArr);
+
+        // 打印匹配后的结果
+        for (String s : strings) {
+            System.out.println(s);
+        }
+    }
+
+    // 方法实现
+    public static String[] matchStrings(String[] laArr, String[] addArr) {
+        Map<String, String> map = new HashMap<>();
+
+        // 构建经纬度到地址的映射关系
+        for (String s : addArr) {
+            String[] parts = s.split(":");
+            if (parts.length == 2) {
+                map.put(parts[0], parts[1]);
+            }
+        }
+
+        // 将地址信息按照a的顺序重新排列
+        for (int i = 0; i < laArr.length; i++) {
+            String address = map.get(laArr[i]);
+            if (address != null) {
+                addArr[i] = laArr[i] + ":" + address;
+            }
+        }
+        return addArr;
+    }
+}

Fichier diff supprimé car celui-ci est trop grand
+ 27 - 0
src/test/java/com/szwl/model/utils/usaEquipment/formatUtils.java