Explorar el Código

加盟商管理:
1、解绑子商户设备回到当前操作商户下
2、不可解绑自己的设备
3、可直接将自己的设备授权给加盟商

tanbin hace 1 año
padre
commit
13e56ed257

+ 26 - 0
device-api-service-merc-mini/src/main/java/com/xy/controller/MercMiniDeviceController.java

@@ -82,6 +82,32 @@ public class MercMiniDeviceController {
 
     private final DeviceTempSetServiceImpl deviceTempSetService;
 
+    @ApiOperation("解绑商户")
+    @PostMapping("unBindMercDevice")
+    R<Boolean> unBindMercDevice(@RequestBody @Validated DeviceInfoDto.MercDeviceUnBindDto dto) {
+        MercAuthUtils.MercAuth.Merc merc = MercAuthUtils.getMercAuth().getMerc();
+        dto.setMercId(merc.getId());
+        dto.setMercCode(merc.getMercCode());
+        dto.setMercName(merc.getName());
+        return R.ok(deviceInfoService.unBindDeviceByMerc(dto));
+    }
+
+    @ApiOperation("商户设备授权")
+    @PostMapping("deviceAuth")
+    public R mercDeviceAuth(@RequestBody @Validated DeviceInfoDto.MercDeviceAuthDto auth) {
+        String mercCode = auth.getMercCode();
+        MercDto.Vo merc = R.feignCheckData(mercFeignService.obj(new MercDto.ListDTO().setMercCode(mercCode)));
+//        MercAuthUtils.MercAuth.Merc merc = MercAuthUtils.getMercAuth().getMerc();
+        auth.setMercCode(mercCode);
+        auth.setMercId(merc.getId());
+        auth.setParentId(merc.getParentId());
+        auth.setMercName(merc.getName());
+        auth.setAlgorithmId(merc.getAlgorithmId());
+        auth.setMercOperate(true);
+        //设备服务授权处理
+        R<Boolean> r = R.feignCheck(deviceInfoService.mercDeviceAuth(auth));
+        return R.ok(r.getData());
+    }
 
     @ApiOperation("设备分页-管理员")
     @PostMapping("pageByAdminName")

+ 57 - 15
device-api-service/src/main/java/com/xy/service/DeviceInfoServiceImpl.java

@@ -756,23 +756,30 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
             }
             int refMercId = deviceInfo.getMercId().intValue();
             String refMercCode = deviceInfo.getMercCode();
-            //  只有解绑后,才能给顶级商户授权
-            if (refMercId != -1 && refMercId != mercId.intValue()) {
-                StrBuilder sb = StrBuilder.create();
-                String errMsg = sb.append("设备[")
-                        .append(deviceInfo.getDeviceId())
-                        .append("]")
-                        .append("已被商户[")
-                        .append(deviceInfo.getMercName())
-                        .append("]绑定,请先进行解绑!")
-                        .toString();
-                //非质检商户需要进行判断,质检商户跳过
-                if (!QA_MERC_CODE.equals(refMercCode)) {
-                    //已关联别商户
-                    return R.fail(errMsg, Boolean.FALSE);
-                }
 
+            if (BooleanUtil.isFalse(auth.getMercOperate())) {
+                //非商户操作
+                //  只有解绑后,才能给顶级商户授权
+                if (refMercId != -1 && refMercId != mercId.intValue()) {
+                    StrBuilder sb = StrBuilder.create();
+                    String errMsg = sb.append("设备[")
+                            .append(deviceInfo.getDeviceId())
+                            .append("]")
+                            .append("已被商户[")
+                            .append(deviceInfo.getMercName())
+                            .append("]绑定,请先进行解绑!")
+                            .toString();
+                    //非质检商户需要进行判断,质检商户跳过
+                    if (!QA_MERC_CODE.equals(refMercCode)) {
+                        //已关联别商户
+                        return R.fail(errMsg, Boolean.FALSE);
+                    }
+
+                }
+            } else {
+                //商户操作直接转移给子商户
             }
+
             //绑定关系
             deviceInfo.setMercId(mercId).setMercCode(mercCode).setAlgorithmId(algorithmId).setMercName(mercName);
             //标记机器可交易
@@ -800,6 +807,41 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
         return R.ok(removeMerRefDevicesToTopMerc(deviceInfos));
     }
 
+    /**
+     * 商户解绑设备 --商家端
+     *
+     * @param dto
+     * @return {@link Boolean}
+     */
+    public Boolean unBindDeviceByMerc(DeviceInfoDto.MercDeviceUnBindDto dto) {
+        List<DeviceInfo> deviceInfos = this.listByIds(dto.getDeviceIds());
+        if (CollUtil.isNotEmpty(deviceInfos)) {
+            List<Long> mercIds = deviceInfos.stream().map(DeviceInfo::getMercId).collect(Collectors.toList());
+            mercIds.forEach(mercId -> {
+                if (mercId.longValue() == dto.getMercId().longValue()) {
+                    throw new CommRuntimeException("只能选择子商户设备进行解绑,请检查是否选择了当前商户下的设备!");
+                }
+            });
+        }
+        return removeMerDevicesByDeviceIds(dto, deviceInfos);
+    }
+
+    private Boolean removeMerDevicesByDeviceIds(DeviceInfoDto.MercDeviceUnBindDto dto, List<DeviceInfo> deviceInfos) {
+        if (CollUtil.isNotEmpty(deviceInfos)) {
+            deviceInfos.forEach(deviceInfo -> {
+                //回收 到当前操作商户
+                deviceInfo.setMercId(dto.getMercId());
+                deviceInfo.setMercDeviceCode(StrUtil.EMPTY);
+                deviceInfo.setMercName(dto.getMercName());
+                deviceInfo.setMercCode(dto.getMercCode());
+            });
+            //批量更新
+            return updateBatchById(deviceInfos);
+        }
+
+        return Boolean.FALSE;
+
+    }
 
     /**
      * 回收机器

+ 22 - 0
device-api/src/main/java/com/xy/dto/DeviceInfoDto.java

@@ -96,6 +96,9 @@ public class DeviceInfoDto {
         @ApiModelProperty(value = "管理员名称")
         private String adminName;
 
+        @ApiModelProperty(value = "adminId 对应权限用户表ID")
+        private String adminId;
+
         @ApiModelProperty(value = "设备数")
         private Integer deviceNum;
 
@@ -109,12 +112,17 @@ public class DeviceInfoDto {
         @ApiModelProperty("设备ID")
         private Long deviceId;
 
+
         @ApiModelProperty("设备名称")
         private String deviceName;
 
         @ApiModelProperty("管理员姓名")
         private String adminName;
 
+
+        @ApiModelProperty("管理员ID")
+        private String adminId;
+
         @ApiModelProperty("设备类型")
         private Integer deviceType;
 
@@ -134,6 +142,7 @@ public class DeviceInfoDto {
         private String mercCode;
     }
 
+
     @Data
     @Accessors(chain = true)
     public static class TyDeviceDTO {
@@ -843,6 +852,10 @@ public class DeviceInfoDto {
     @Data
     @Accessors(chain = true)
     public static class MercDeviceAuthDto {
+        @ApiModelProperty(value = "是否商户操作", required = false)
+        private Boolean mercOperate;
+
+
         @ApiModelProperty(value = "对应商户的全量设备ID(传空则取消商户所有机器)", required = false)
         private List<Long> deviceIds;
 
@@ -870,6 +883,15 @@ public class DeviceInfoDto {
         @ApiModelProperty(value = "设备ID", required = false)
         private List<Long> deviceIds;
 
+        @ApiModelProperty(value = "商户ID")
+        private String mercName;
+
+        @ApiModelProperty(value = "商户编码")
+        private String mercCode;
+
+        @ApiModelProperty(value = "商户ID")
+        private Long mercId;
+
     }